Fix for SLNG-1156 - exception when displaying workflow task with empty workflow package, causing tasklist data webscript to fail and list to be rendered as empty.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@10845 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2008-09-08 09:37:20 +00:00
parent e27a8561ee
commit 1936d6e5e3

View File

@@ -618,78 +618,77 @@ public class WorkflowServiceImpl implements WorkflowService
WorkflowTask workflowTask = getTaskById(taskId); WorkflowTask workflowTask = getTaskById(taskId);
List<NodeRef> contents = new ArrayList<NodeRef>(); List<NodeRef> contents = new ArrayList<NodeRef>();
if(workflowTask != null) if (workflowTask != null)
{ {
NodeRef workflowPackage = (NodeRef)workflowTask.properties.get(WorkflowModel.ASSOC_PACKAGE); NodeRef workflowPackage = (NodeRef)workflowTask.properties.get(WorkflowModel.ASSOC_PACKAGE);
if (workflowPackage.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM)) if (workflowPackage != null)
{ {
if (protectedNodeService.exists(workflowPackage)) if (workflowPackage.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
{ {
final NodeRef stagingNodeRef = (NodeRef) if (protectedNodeService.exists(workflowPackage))
protectedNodeService.getProperty(workflowPackage, {
WCMModel.PROP_AVM_DIR_INDIRECTION); final NodeRef stagingNodeRef = (NodeRef)
final String stagingAvmPath = AVMNodeConverter.ToAVMVersionPath(stagingNodeRef).getSecond(); protectedNodeService.getProperty(workflowPackage,
final String packageAvmPath = AVMNodeConverter.ToAVMVersionPath(workflowPackage).getSecond(); WCMModel.PROP_AVM_DIR_INDIRECTION);
if (logger.isDebugEnabled()) final String stagingAvmPath = AVMNodeConverter.ToAVMVersionPath(stagingNodeRef).getSecond();
logger.debug("comparing " + packageAvmPath + " with " + stagingAvmPath); final String packageAvmPath = AVMNodeConverter.ToAVMVersionPath(workflowPackage).getSecond();
for (AVMDifference d : avmSyncService.compare(-1, packageAvmPath, if (logger.isDebugEnabled())
-1, stagingAvmPath, logger.debug("comparing " + packageAvmPath + " with " + stagingAvmPath);
null)) for (AVMDifference d : avmSyncService.compare(-1, packageAvmPath,
{ -1, stagingAvmPath,
if (logger.isDebugEnabled()) null))
logger.debug("got difference " + d); {
if (d.getDifferenceCode() == AVMDifference.NEWER || if (logger.isDebugEnabled())
d.getDifferenceCode() == AVMDifference.CONFLICT) logger.debug("got difference " + d);
{ if (d.getDifferenceCode() == AVMDifference.NEWER ||
contents.add(AVMNodeConverter.ToNodeRef(d.getSourceVersion(), d.getSourcePath())); d.getDifferenceCode() == AVMDifference.CONFLICT)
} {
} contents.add(AVMNodeConverter.ToNodeRef(d.getSourceVersion(), d.getSourcePath()));
} }
} }
else }
{ }
// get existing workflow package items else
List<ChildAssociationRef> childRefs = protectedNodeService.getChildAssocs( {
workflowPackage, ContentModel.ASSOC_CONTAINS, // get existing workflow package items
RegexQNamePattern.MATCH_ALL); List<ChildAssociationRef> childRefs = protectedNodeService.getChildAssocs(
workflowPackage, ContentModel.ASSOC_CONTAINS,
for (ChildAssociationRef ref: childRefs) RegexQNamePattern.MATCH_ALL);
{
// create our Node representation from the NodeRef for (ChildAssociationRef ref: childRefs)
NodeRef nodeRef = ref.getChildRef(); {
// create our Node representation from the NodeRef
if (!protectedNodeService.exists(nodeRef)) NodeRef nodeRef = ref.getChildRef();
{
if (logger.isDebugEnabled()) if (!protectedNodeService.exists(nodeRef))
logger.debug("Ignoring " + nodeRef + " as it has been removed from the repository"); {
} if (logger.isDebugEnabled())
else logger.debug("Ignoring " + nodeRef + " as it has been removed from the repository");
{ }
// find it's type so we can see if it's a node we are interested in else
QName type = protectedNodeService.getType(nodeRef); {
// find it's type so we can see if it's a node we are interested in
// make sure the type is defined in the data dictionary QName type = protectedNodeService.getType(nodeRef);
TypeDefinition typeDef = dictionaryService.getType(type);
// make sure the type is defined in the data dictionary
if (typeDef == null) TypeDefinition typeDef = dictionaryService.getType(type);
{
if (logger.isWarnEnabled()) if (typeDef == null)
logger.warn("Found invalid object in database: id = " + nodeRef + {
", type = " + type); if (logger.isWarnEnabled())
} logger.warn("Found invalid object in database: id = " + nodeRef +
else ", type = " + type);
{ }
contents.add(nodeRef); else
} {
} contents.add(nodeRef);
} }
}
}
}
} }
} }
return contents; return contents;
} }
} }