From 8b0ebbef8713c44e6f40c2143ee670e2cfecb6ee Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Fri, 14 Oct 2011 12:12:45 +0000 Subject: [PATCH] Fixed ALF-10811: SOLR: NPE in SOLRTrackingComponentImpl.getCategoryPaths after upgrade - Simple NPE; code was assuming that if categories could be present that they were git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31232 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/solr/SOLRTrackingComponentImpl.java | 128 +++++++++--------- 1 file changed, 63 insertions(+), 65 deletions(-) diff --git a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java b/source/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java index 224553a86b..ee4633e48b 100644 --- a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java +++ b/source/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java @@ -18,10 +18,6 @@ */ package org.alfresco.repo.solr; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.ArrayList; @@ -36,24 +32,19 @@ import java.util.Set; import java.util.zip.CRC32; import org.alfresco.model.ContentModel; -import org.alfresco.repo.dictionary.CompiledModel; import org.alfresco.repo.dictionary.DictionaryDAO; -import org.alfresco.repo.dictionary.DictionaryDAOImpl; -import org.alfresco.repo.domain.CrcHelper; import org.alfresco.repo.domain.node.Node; import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.domain.node.NodeDAO.ChildAssocRefQueryCallback; import org.alfresco.repo.domain.permissions.AclDAO; import org.alfresco.repo.domain.qname.QNameDAO; import org.alfresco.repo.domain.solr.SOLRDAO; -import org.alfresco.repo.solr.AlfrescoModelDiff.TYPE; import org.alfresco.repo.tenant.TenantService; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.ModelDefinition; import org.alfresco.service.cmr.dictionary.PropertyDefinition; -import org.alfresco.service.cmr.dictionary.ModelDefinition.XMLBindingType; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; @@ -64,7 +55,6 @@ import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; import org.alfresco.util.PropertyCheck; -import org.alfresco.util.TempFileProvider; /** * Component providing data for SOLR tracking @@ -334,74 +324,82 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent LinkedList> aspectPaths = new LinkedList>(); for (PropertyDefinition propDef : aspDef.getProperties().values()) { - if (propDef.getDataType().getName().equals(DataTypeDefinition.CATEGORY)) + if (!propDef.getDataType().getName().equals(DataTypeDefinition.CATEGORY)) { - for (NodeRef catRef : DefaultTypeConverter.INSTANCE.getCollection(NodeRef.class, properties.get(propDef.getName()))) + // The property is not a category + continue; + } + // Don't try to iterate if the property is null + Serializable propVal = properties.get(propDef.getName()); + if (propVal == null) + { + continue; + } + for (NodeRef catRef : DefaultTypeConverter.INSTANCE.getCollection(NodeRef.class, propVal)) + { + if (catRef == null) { - if (catRef == null) - { - continue; - } - // can be running in context of System user, hence use input nodeRef - catRef = tenantService.getName(nodeRef, catRef); + continue; + } + // can be running in context of System user, hence use input nodeRef + catRef = tenantService.getName(nodeRef, catRef); - try + try + { + Pair pair = nodeDAO.getNodePair(catRef); + for (Path path : nodeDAO.getPaths(pair, false)) { - Pair pair = nodeDAO.getNodePair(catRef); - for (Path path : nodeDAO.getPaths(pair, false)) + if ((path.size() > 1) && (path.get(1) instanceof Path.ChildAssocElement)) { - if ((path.size() > 1) && (path.get(1) instanceof Path.ChildAssocElement)) + Path.ChildAssocElement cae = (Path.ChildAssocElement) path.get(1); + boolean isFakeRoot = true; + + final List results = new ArrayList(10); + // We have a callback handler to filter results + ChildAssocRefQueryCallback callback = new ChildAssocRefQueryCallback() { - Path.ChildAssocElement cae = (Path.ChildAssocElement) path.get(1); - boolean isFakeRoot = true; - - final List results = new ArrayList(10); - // We have a callback handler to filter results - ChildAssocRefQueryCallback callback = new ChildAssocRefQueryCallback() + public boolean preLoadNodes() { - public boolean preLoadNodes() - { - return false; - } - - public boolean handle( - Pair childAssocPair, - Pair parentNodePair, - Pair childNodePair) - { - results.add(childAssocPair.getSecond()); - return true; - } - - public void done() - { - } - }; - - Pair caePair = nodeDAO.getNodePair(cae.getRef().getChildRef()); - nodeDAO.getParentAssocs(caePair.getFirst(), null, null, false, callback); - for (ChildAssociationRef car : results) - { - if (cae.getRef().equals(car)) - { - isFakeRoot = false; - break; - } + return false; } - if (isFakeRoot) + + public boolean handle( + Pair childAssocPair, + Pair parentNodePair, + Pair childNodePair) { - if (path.toString().indexOf(aspDef.getName().toString()) != -1) - { - aspectPaths.add(new Pair(path, aspDef.getName())); - } + results.add(childAssocPair.getSecond()); + return true; + } + + public void done() + { + } + }; + + Pair caePair = nodeDAO.getNodePair(cae.getRef().getChildRef()); + nodeDAO.getParentAssocs(caePair.getFirst(), null, null, false, callback); + for (ChildAssociationRef car : results) + { + if (cae.getRef().equals(car)) + { + isFakeRoot = false; + break; + } + } + if (isFakeRoot) + { + if (path.toString().indexOf(aspDef.getName().toString()) != -1) + { + aspectPaths.add(new Pair(path, aspDef.getName())); } } } } - catch (InvalidNodeRefException e) - { - // If the category does not exists we move on the next - } + } + catch (InvalidNodeRefException e) + { + // If the category does not exists we move on the next } } }