mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merge V3.2 To HEAD
17834: Fix for ETHREEOH-3613. Now you can add two different pieces of content with the same name to a package. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@18230 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -70,6 +70,31 @@
|
|||||||
|
|
||||||
<types>
|
<types>
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
<!-- Workflow Package Folder Type -->
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
<type name="bpm:package">
|
||||||
|
<title>Package Folder</title>
|
||||||
|
<parent>cm:systemfolder</parent>
|
||||||
|
<archive>true</archive>
|
||||||
|
<associations>
|
||||||
|
<child-association name="bpm:packageContains">
|
||||||
|
<source>
|
||||||
|
<mandatory>false</mandatory>
|
||||||
|
<many>true</many>
|
||||||
|
</source>
|
||||||
|
<target>
|
||||||
|
<class>sys:base</class>
|
||||||
|
<mandatory>false</mandatory>
|
||||||
|
<many>true</many>
|
||||||
|
</target>
|
||||||
|
<duplicate>true</duplicate>
|
||||||
|
<propagateTimestamps>true</propagateTimestamps>
|
||||||
|
</child-association>
|
||||||
|
</associations>
|
||||||
|
</type>
|
||||||
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<!-- Base definition for all Tasks -->
|
<!-- Base definition for all Tasks -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
@@ -126,7 +126,7 @@ public class StartWorkflowActionExecuter extends ActionExecuterAbstractBase
|
|||||||
NodeRef workflowPackage = (NodeRef)ruleAction.getParameterValue(WorkflowModel.ASSOC_PACKAGE.toPrefixString(namespaceService));
|
NodeRef workflowPackage = (NodeRef)ruleAction.getParameterValue(WorkflowModel.ASSOC_PACKAGE.toPrefixString(namespaceService));
|
||||||
workflowPackage = workflowService.createPackage(workflowPackage);
|
workflowPackage = workflowService.createPackage(workflowPackage);
|
||||||
ChildAssociationRef childAssoc = nodeService.getPrimaryParent(actionedUponNodeRef);
|
ChildAssociationRef childAssoc = nodeService.getPrimaryParent(actionedUponNodeRef);
|
||||||
nodeService.addChild(workflowPackage, actionedUponNodeRef, ContentModel.ASSOC_CONTAINS, childAssoc.getQName());
|
nodeService.addChild(workflowPackage, actionedUponNodeRef, WorkflowModel.ASSOC_PACKAGE_CONTAINS, childAssoc.getQName());
|
||||||
|
|
||||||
// build map of workflow start task parameters
|
// build map of workflow start task parameters
|
||||||
Map<String, Serializable> paramValues = ruleAction.getParameterValues();
|
Map<String, Serializable> paramValues = ruleAction.getParameterValues();
|
||||||
|
@@ -38,6 +38,10 @@ public interface WorkflowModel
|
|||||||
// Base Business Process Management Definitions
|
// Base Business Process Management Definitions
|
||||||
//
|
//
|
||||||
|
|
||||||
|
// package folder constants
|
||||||
|
static final QName TYPE_PACKAGE = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package");
|
||||||
|
static final QName ASSOC_PACKAGE_CONTAINS= QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "packageContains");
|
||||||
|
|
||||||
// task constants
|
// task constants
|
||||||
static final QName TYPE_TASK = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "task");
|
static final QName TYPE_TASK = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "task");
|
||||||
static final QName PROP_TASK_ID = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "taskId");
|
static final QName PROP_TASK_ID = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "taskId");
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
* the FLOSS exception, and it is also available here:
|
* the FLOSS exception, and it is also available here:
|
||||||
* http://www.alfresco.com/legal/licensing"
|
* http://www.alfresco.com/legal/licensing"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.alfresco.repo.workflow;
|
package org.alfresco.repo.workflow;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -41,7 +42,6 @@ import org.alfresco.service.namespace.QName;
|
|||||||
import org.alfresco.util.GUID;
|
import org.alfresco.util.GUID;
|
||||||
import org.springframework.extensions.surf.util.ParameterCheck;
|
import org.springframework.extensions.surf.util.ParameterCheck;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Alfresco implementation of Workflow Package where the package is stored
|
* Alfresco implementation of Workflow Package where the package is stored
|
||||||
* within the Alfresco Repository.
|
* within the Alfresco Repository.
|
||||||
@@ -61,9 +61,9 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
private NodeRef systemWorkflowContainer = null;
|
private NodeRef systemWorkflowContainer = null;
|
||||||
private TenantService tenantService;
|
private TenantService tenantService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param bootstrap the importer bootstrap for the store to place workflow items into
|
* @param bootstrap the importer bootstrap for the store to place workflow
|
||||||
|
* items into
|
||||||
*/
|
*/
|
||||||
public void setImporterBootstrap(ImporterBootstrap bootstrap)
|
public void setImporterBootstrap(ImporterBootstrap bootstrap)
|
||||||
{
|
{
|
||||||
@@ -71,7 +71,7 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param searchService search service
|
* @param searchService search service
|
||||||
*/
|
*/
|
||||||
public void setSearchService(SearchService searchService)
|
public void setSearchService(SearchService searchService)
|
||||||
{
|
{
|
||||||
@@ -79,7 +79,7 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param nodeService node service
|
* @param nodeService node service
|
||||||
*/
|
*/
|
||||||
public void setNodeService(NodeService nodeService)
|
public void setNodeService(NodeService nodeService)
|
||||||
{
|
{
|
||||||
@@ -92,7 +92,7 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param namespaceService namespace service
|
* @param namespaceService namespace service
|
||||||
*/
|
*/
|
||||||
public void setNamespaceService(NamespaceService namespaceService)
|
public void setNamespaceService(NamespaceService namespaceService)
|
||||||
{
|
{
|
||||||
@@ -100,16 +100,18 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param tenantService tenant service
|
* @param tenantService tenant service
|
||||||
*/
|
*/
|
||||||
public void setTenantService(TenantService tenantService)
|
public void setTenantService(TenantService tenantService)
|
||||||
{
|
{
|
||||||
this.tenantService = tenantService;
|
this.tenantService = tenantService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
/* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
* @see org.alfresco.repo.workflow.WorkflowPackageComponent#createPackage(org.alfresco.service.cmr.repository.NodeRef)
|
* @see
|
||||||
|
* org.alfresco.repo.workflow.WorkflowPackageComponent#createPackage(org
|
||||||
|
* .alfresco.service.cmr.repository.NodeRef)
|
||||||
*/
|
*/
|
||||||
public NodeRef createPackage(NodeRef container)
|
public NodeRef createPackage(NodeRef container)
|
||||||
{
|
{
|
||||||
@@ -117,37 +119,13 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
boolean isSystemPackage = false;
|
boolean isSystemPackage = false;
|
||||||
if (container == null)
|
if (container == null)
|
||||||
{
|
{
|
||||||
// create simple folder in workflow system folder
|
container = makePackageContainer();
|
||||||
NodeRef system = getSystemWorkflowContainer();
|
|
||||||
|
|
||||||
// TODO: Consider structuring this folder, if number of children becomes an issue
|
|
||||||
NodeRef packages = null;
|
|
||||||
List<NodeRef> results = searchService.selectNodes(system, "./" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + PACKAGE_FOLDER, null, namespaceService, false);
|
|
||||||
if (results.size() > 0)
|
|
||||||
{
|
|
||||||
packages = results.get(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QName qname = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, PACKAGE_FOLDER);
|
|
||||||
ChildAssociationRef childRef = nodeService.createNode(system, ContentModel.ASSOC_CHILDREN, qname, ContentModel.TYPE_SYSTEM_FOLDER);
|
|
||||||
packages = childRef.getChildRef();
|
|
||||||
}
|
|
||||||
|
|
||||||
String containerName = "pkg_" + GUID.generate();
|
|
||||||
QName qname = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, containerName);
|
|
||||||
ChildAssociationRef childRef = nodeService.createNode(packages, ContentModel.ASSOC_CONTAINS, qname, ContentModel.TYPE_SYSTEM_FOLDER);
|
|
||||||
container = childRef.getChildRef();
|
|
||||||
// TODO: For now, grant full access to everyone
|
|
||||||
permissionService.setPermission(container, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true);
|
|
||||||
isSystemPackage = true;
|
isSystemPackage = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// attach workflow package
|
// attach workflow package
|
||||||
if (nodeService.hasAspect(container, WorkflowModel.ASPECT_WORKFLOW_PACKAGE))
|
if (nodeService.hasAspect(container, WorkflowModel.ASPECT_WORKFLOW_PACKAGE)) { throw new WorkflowException(
|
||||||
{
|
"Container '" + container + "' is already a workflow package."); }
|
||||||
throw new WorkflowException("Container '" + container + "' is already a workflow package.");
|
|
||||||
}
|
|
||||||
nodeService.addAspect(container, WorkflowModel.ASPECT_WORKFLOW_PACKAGE, null);
|
nodeService.addAspect(container, WorkflowModel.ASPECT_WORKFLOW_PACKAGE, null);
|
||||||
nodeService.setProperty(container, WorkflowModel.PROP_IS_SYSTEM_PACKAGE, isSystemPackage);
|
nodeService.setProperty(container, WorkflowModel.PROP_IS_SYSTEM_PACKAGE, isSystemPackage);
|
||||||
|
|
||||||
@@ -155,14 +133,62 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
private NodeRef makePackageContainer()
|
||||||
* @see org.alfresco.repo.workflow.WorkflowPackageComponent#deletePackage(org.alfresco.service.cmr.repository.NodeRef)
|
{
|
||||||
|
NodeRef packages = findOrCreatePackagesFolder();
|
||||||
|
String packageId = "pkg_" + GUID.generate();
|
||||||
|
QName packageName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, packageId);
|
||||||
|
ChildAssociationRef packageAssoc = nodeService.createNode(packages, ContentModel.ASSOC_CONTAINS, packageName,
|
||||||
|
WorkflowModel.TYPE_PACKAGE);
|
||||||
|
NodeRef packageContainer = packageAssoc.getChildRef();
|
||||||
|
// TODO: For now, grant full access to everyone
|
||||||
|
permissionService.setPermission(packageContainer, PermissionService.ALL_AUTHORITIES,
|
||||||
|
PermissionService.ALL_PERMISSIONS, true);
|
||||||
|
return packageContainer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the system folder in which all packages are stored. If this folder
|
||||||
|
* has not been created yet then this method creates a new packages folder.
|
||||||
|
*
|
||||||
|
* @return The system folder containing all workflow packages.
|
||||||
|
*/
|
||||||
|
private NodeRef findOrCreatePackagesFolder()
|
||||||
|
{
|
||||||
|
// create simple folder in workflow system folder
|
||||||
|
NodeRef system = getSystemWorkflowContainer();
|
||||||
|
|
||||||
|
// TODO: Consider structuring this folder, if number of children becomes
|
||||||
|
// an issue
|
||||||
|
List<NodeRef> packageFolders = searchService.selectNodes(system, "./" + NamespaceService.CONTENT_MODEL_PREFIX
|
||||||
|
+ ":" + PACKAGE_FOLDER, null, namespaceService, false);
|
||||||
|
if (packageFolders.size() > 0)
|
||||||
|
{
|
||||||
|
return packageFolders.get(0); // Return folder if exists.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// Create new package folder
|
||||||
|
{
|
||||||
|
QName packageFolderName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, PACKAGE_FOLDER);
|
||||||
|
ChildAssociationRef packageFolderAssoc = nodeService.createNode(system, ContentModel.ASSOC_CHILDREN,
|
||||||
|
packageFolderName, ContentModel.TYPE_SYSTEM_FOLDER);
|
||||||
|
return packageFolderAssoc.getChildRef();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.repo.workflow.WorkflowPackageComponent#deletePackage(org
|
||||||
|
* .alfresco.service.cmr.repository.NodeRef)
|
||||||
*/
|
*/
|
||||||
public void deletePackage(NodeRef container)
|
public void deletePackage(NodeRef container)
|
||||||
{
|
{
|
||||||
if (container != null && nodeService.exists(container) && nodeService.hasAspect(container, WorkflowModel.ASPECT_WORKFLOW_PACKAGE))
|
if (container != null && nodeService.exists(container)
|
||||||
|
&& nodeService.hasAspect(container, WorkflowModel.ASPECT_WORKFLOW_PACKAGE))
|
||||||
{
|
{
|
||||||
Boolean isSystemPackage = (Boolean)nodeService.getProperty(container, WorkflowModel.PROP_IS_SYSTEM_PACKAGE);
|
Boolean isSystemPackage = (Boolean) nodeService
|
||||||
|
.getProperty(container, WorkflowModel.PROP_IS_SYSTEM_PACKAGE);
|
||||||
if (isSystemPackage != null && isSystemPackage.booleanValue())
|
if (isSystemPackage != null && isSystemPackage.booleanValue())
|
||||||
{
|
{
|
||||||
nodeService.deleteNode(container);
|
nodeService.deleteNode(container);
|
||||||
@@ -174,8 +200,11 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.repo.workflow.WorkflowPackageComponent#getWorkflowIdsForContent(org.alfresco.service.cmr.repository.NodeRef, boolean)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.repo.workflow.WorkflowPackageComponent#getWorkflowIdsForContent
|
||||||
|
* (org.alfresco.service.cmr.repository.NodeRef, boolean)
|
||||||
*/
|
*/
|
||||||
public List<String> getWorkflowIdsForContent(NodeRef packageItem)
|
public List<String> getWorkflowIdsForContent(NodeRef packageItem)
|
||||||
{
|
{
|
||||||
@@ -183,14 +212,15 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
List<String> workflowIds = new ArrayList<String>();
|
List<String> workflowIds = new ArrayList<String>();
|
||||||
if (nodeService.exists(packageItem))
|
if (nodeService.exists(packageItem))
|
||||||
{
|
{
|
||||||
List<ChildAssociationRef> packageItemParents = nodeService.getParentAssocs(packageItem);
|
List<ChildAssociationRef> parentAssocs = nodeService.getParentAssocs(packageItem);
|
||||||
for (ChildAssociationRef packageItemParent : packageItemParents)
|
for (ChildAssociationRef parentAssoc : parentAssocs)
|
||||||
{
|
{
|
||||||
NodeRef parentRef = packageItemParent.getParentRef();
|
NodeRef parentRef = parentAssoc.getParentRef();
|
||||||
if (nodeService.hasAspect(parentRef, WorkflowModel.ASPECT_WORKFLOW_PACKAGE)
|
if (nodeService.hasAspect(parentRef, WorkflowModel.ASPECT_WORKFLOW_PACKAGE)
|
||||||
&& !nodeService.hasAspect(parentRef, ContentModel.ASPECT_ARCHIVED))
|
&& !nodeService.hasAspect(parentRef, ContentModel.ASPECT_ARCHIVED))
|
||||||
{
|
{
|
||||||
String workflowInstance = (String)nodeService.getProperty(parentRef, WorkflowModel.PROP_WORKFLOW_INSTANCE_ID);
|
String workflowInstance = (String) nodeService.getProperty(parentRef,
|
||||||
|
WorkflowModel.PROP_WORKFLOW_INSTANCE_ID);
|
||||||
if (workflowInstance != null && workflowInstance.length() > 0)
|
if (workflowInstance != null && workflowInstance.length() > 0)
|
||||||
{
|
{
|
||||||
workflowIds.add(workflowInstance);
|
workflowIds.add(workflowInstance);
|
||||||
@@ -204,7 +234,7 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
/**
|
/**
|
||||||
* Gets the system workflow container for storing workflow related items
|
* Gets the system workflow container for storing workflow related items
|
||||||
*
|
*
|
||||||
* @return the system workflow container
|
* @return the system workflow container
|
||||||
*/
|
*/
|
||||||
private NodeRef getSystemWorkflowContainer()
|
private NodeRef getSystemWorkflowContainer()
|
||||||
{
|
{
|
||||||
@@ -212,10 +242,8 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
{
|
{
|
||||||
NodeRef systemContainer = findSystemContainer();
|
NodeRef systemContainer = findSystemContainer();
|
||||||
NodeRef tenantSystemWorkflowContainer = findSystemWorkflowContainer(systemContainer);
|
NodeRef tenantSystemWorkflowContainer = findSystemWorkflowContainer(systemContainer);
|
||||||
if (tenantSystemWorkflowContainer == null)
|
if (tenantSystemWorkflowContainer == null) { throw new WorkflowException(
|
||||||
{
|
"Unable to find system workflow folder - does not exist."); }
|
||||||
throw new WorkflowException("Unable to find system workflow folder - does not exist.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return tenantSystemWorkflowContainer;
|
return tenantSystemWorkflowContainer;
|
||||||
}
|
}
|
||||||
@@ -225,10 +253,8 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
{
|
{
|
||||||
NodeRef systemContainer = findSystemContainer();
|
NodeRef systemContainer = findSystemContainer();
|
||||||
systemWorkflowContainer = findSystemWorkflowContainer(systemContainer);
|
systemWorkflowContainer = findSystemWorkflowContainer(systemContainer);
|
||||||
if (systemWorkflowContainer == null)
|
if (systemWorkflowContainer == null) { throw new WorkflowException(
|
||||||
{
|
"Unable to find system workflow folder - does not exist."); }
|
||||||
throw new WorkflowException("Unable to find system workflow folder - does not exist.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return systemWorkflowContainer;
|
return systemWorkflowContainer;
|
||||||
}
|
}
|
||||||
@@ -238,16 +264,14 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
/**
|
/**
|
||||||
* Finds the system workflow container
|
* Finds the system workflow container
|
||||||
*
|
*
|
||||||
* @param systemContainer the system container
|
* @param systemContainer the system container
|
||||||
* @return the system workflow container
|
* @return the system workflow container
|
||||||
*/
|
*/
|
||||||
private NodeRef findSystemWorkflowContainer(NodeRef systemContainer)
|
private NodeRef findSystemWorkflowContainer(NodeRef systemContainer)
|
||||||
{
|
{
|
||||||
String path = bootstrap.getConfiguration().getProperty("system.workflow_container.childname");
|
String path = bootstrap.getConfiguration().getProperty("system.workflow_container.childname");
|
||||||
if (path == null)
|
if (path == null) { throw new WorkflowException(
|
||||||
{
|
"Unable to locate workflow system container - path not specified"); }
|
||||||
throw new WorkflowException("Unable to locate workflow system container - path not specified");
|
|
||||||
}
|
|
||||||
List<NodeRef> nodeRefs = searchService.selectNodes(systemContainer, path, null, namespaceService, false);
|
List<NodeRef> nodeRefs = searchService.selectNodes(systemContainer, path, null, namespaceService, false);
|
||||||
|
|
||||||
if (tenantService.isEnabled())
|
if (tenantService.isEnabled())
|
||||||
@@ -272,28 +296,23 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
/**
|
/**
|
||||||
* Finds the system container
|
* Finds the system container
|
||||||
*
|
*
|
||||||
* @return the system container
|
* @return the system container
|
||||||
*/
|
*/
|
||||||
private NodeRef findSystemContainer()
|
private NodeRef findSystemContainer()
|
||||||
{
|
{
|
||||||
String path = bootstrap.getConfiguration().getProperty("system.system_container.childname");
|
String path = bootstrap.getConfiguration().getProperty("system.system_container.childname");
|
||||||
if (path == null)
|
if (path == null) { throw new WorkflowException("Unable to locate system container - path not specified"); }
|
||||||
{
|
|
||||||
throw new WorkflowException("Unable to locate system container - path not specified");
|
|
||||||
}
|
|
||||||
NodeRef root = nodeService.getRootNode(bootstrap.getStoreRef());
|
NodeRef root = nodeService.getRootNode(bootstrap.getStoreRef());
|
||||||
List<NodeRef> nodeRefs = searchService.selectNodes(root, path, null, namespaceService, false);
|
List<NodeRef> nodeRefs = searchService.selectNodes(root, path, null, namespaceService, false);
|
||||||
if (nodeRefs == null || nodeRefs.size() == 0)
|
if (nodeRefs == null || nodeRefs.size() == 0) { throw new WorkflowException(
|
||||||
{
|
"Unable to locate system container - path not found"); }
|
||||||
throw new WorkflowException("Unable to locate system container - path not found");
|
|
||||||
}
|
|
||||||
return nodeRefs.get(0);
|
return nodeRefs.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the System Workflow Container
|
* Creates the System Workflow Container
|
||||||
*
|
*
|
||||||
* @return the system workflow container
|
* @return the system workflow container
|
||||||
*/
|
*/
|
||||||
public NodeRef createSystemWorkflowContainer()
|
public NodeRef createSystemWorkflowContainer()
|
||||||
{
|
{
|
||||||
@@ -303,7 +322,8 @@ public class WorkflowPackageImpl implements WorkflowPackageComponent
|
|||||||
{
|
{
|
||||||
String name = bootstrap.getConfiguration().getProperty("system.workflow_container.childname");
|
String name = bootstrap.getConfiguration().getProperty("system.workflow_container.childname");
|
||||||
QName qname = QName.createQName(name, namespaceService);
|
QName qname = QName.createQName(name, namespaceService);
|
||||||
ChildAssociationRef childRef = nodeService.createNode(systemContainer, ContentModel.ASSOC_CHILDREN, qname, ContentModel.TYPE_CONTAINER);
|
ChildAssociationRef childRef = nodeService.createNode(systemContainer, ContentModel.ASSOC_CHILDREN, qname,
|
||||||
|
ContentModel.TYPE_CONTAINER);
|
||||||
systemWorkflowContainer = childRef.getChildRef();
|
systemWorkflowContainer = childRef.getChildRef();
|
||||||
}
|
}
|
||||||
return systemWorkflowContainer;
|
return systemWorkflowContainer;
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
* the FLOSS exception, and it is also available here:
|
* the FLOSS exception, and it is also available here:
|
||||||
* http://www.alfresco.com/legal/licensing"
|
* http://www.alfresco.com/legal/licensing"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.alfresco.repo.workflow;
|
package org.alfresco.repo.workflow;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -38,7 +39,6 @@ import org.alfresco.repo.avm.AVMNodeConverter;
|
|||||||
import org.alfresco.service.cmr.avmsync.AVMDifference;
|
import org.alfresco.service.cmr.avmsync.AVMDifference;
|
||||||
import org.alfresco.service.cmr.avmsync.AVMSyncService;
|
import org.alfresco.service.cmr.avmsync.AVMSyncService;
|
||||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||||
import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.ContentReader;
|
import org.alfresco.service.cmr.repository.ContentReader;
|
||||||
import org.alfresco.service.cmr.repository.ContentService;
|
import org.alfresco.service.cmr.repository.ContentService;
|
||||||
@@ -59,14 +59,12 @@ import org.alfresco.service.cmr.workflow.WorkflowTaskQuery;
|
|||||||
import org.alfresco.service.cmr.workflow.WorkflowTaskState;
|
import org.alfresco.service.cmr.workflow.WorkflowTaskState;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowTimer;
|
import org.alfresco.service.cmr.workflow.WorkflowTimer;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Alfresco Workflow Service whose implementation is backed by registered
|
* Default Alfresco Workflow Service whose implementation is backed by
|
||||||
* BPM Engine plug-in components.
|
* registered BPM Engine plug-in components.
|
||||||
*
|
*
|
||||||
* @author davidc
|
* @author davidc
|
||||||
*/
|
*/
|
||||||
@@ -85,7 +83,6 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
private DictionaryService dictionaryService;
|
private DictionaryService dictionaryService;
|
||||||
private NodeService protectedNodeService;
|
private NodeService protectedNodeService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the Authority Service
|
* Sets the Authority Service
|
||||||
*
|
*
|
||||||
@@ -99,7 +96,7 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
/**
|
/**
|
||||||
* Sets the BPM Engine Registry
|
* Sets the BPM Engine Registry
|
||||||
*
|
*
|
||||||
* @param registry bpm engine registry
|
* @param registry bpm engine registry
|
||||||
*/
|
*/
|
||||||
public void setBPMEngineRegistry(BPMEngineRegistry registry)
|
public void setBPMEngineRegistry(BPMEngineRegistry registry)
|
||||||
{
|
{
|
||||||
@@ -109,7 +106,7 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
/**
|
/**
|
||||||
* Sets the Workflow Package Component
|
* Sets the Workflow Package Component
|
||||||
*
|
*
|
||||||
* @param workflowPackageComponent workflow package component
|
* @param workflowPackageComponent workflow package component
|
||||||
*/
|
*/
|
||||||
public void setWorkflowPackageComponent(WorkflowPackageComponent workflowPackageComponent)
|
public void setWorkflowPackageComponent(WorkflowPackageComponent workflowPackageComponent)
|
||||||
{
|
{
|
||||||
@@ -138,6 +135,7 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the avm sync service
|
* Set the avm sync service
|
||||||
|
*
|
||||||
* @param avmSyncService
|
* @param avmSyncService
|
||||||
*/
|
*/
|
||||||
public void setAvmSyncService(AVMSyncService avmSyncService)
|
public void setAvmSyncService(AVMSyncService avmSyncService)
|
||||||
@@ -155,9 +153,9 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
this.dictionaryService = dictionaryService;
|
this.dictionaryService = dictionaryService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the node service which applies permissions
|
* Set the node service which applies permissions
|
||||||
|
*
|
||||||
* @param protectedNodeService
|
* @param protectedNodeService
|
||||||
*/
|
*/
|
||||||
public void setProtectedNodeService(NodeService protectedNodeService)
|
public void setProtectedNodeService(NodeService protectedNodeService)
|
||||||
@@ -165,8 +163,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
this.protectedNodeService = protectedNodeService;
|
this.protectedNodeService = protectedNodeService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#deployDefinition(java.lang.String, java.io.InputStream, java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#deployDefinition(java
|
||||||
|
* .lang.String, java.io.InputStream, java.lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowDeployment deployDefinition(String engineId, InputStream workflowDefinition, String mimetype)
|
public WorkflowDeployment deployDefinition(String engineId, InputStream workflowDefinition, String mimetype)
|
||||||
{
|
{
|
||||||
@@ -184,24 +185,29 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return deployment;
|
return deployment;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#isDefinitionDeployed(org.alfresco.service.cmr.repository.NodeRef)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#isDefinitionDeployed
|
||||||
|
* (org.alfresco.service.cmr.repository.NodeRef)
|
||||||
*/
|
*/
|
||||||
public boolean isDefinitionDeployed(NodeRef workflowDefinition)
|
public boolean isDefinitionDeployed(NodeRef workflowDefinition)
|
||||||
{
|
{
|
||||||
if (! nodeService.getType(workflowDefinition).equals(WorkflowModel.TYPE_WORKFLOW_DEF))
|
if (!nodeService.getType(workflowDefinition).equals(WorkflowModel.TYPE_WORKFLOW_DEF)) { throw new WorkflowException(
|
||||||
{
|
"Node " + workflowDefinition + " is not of type 'bpm:workflowDefinition'"); }
|
||||||
throw new WorkflowException("Node " + workflowDefinition + " is not of type 'bpm:workflowDefinition'");
|
|
||||||
}
|
|
||||||
|
|
||||||
String engineId = (String)nodeService.getProperty(workflowDefinition, WorkflowModel.PROP_WORKFLOW_DEF_ENGINE_ID);
|
String engineId = (String) nodeService.getProperty(workflowDefinition,
|
||||||
|
WorkflowModel.PROP_WORKFLOW_DEF_ENGINE_ID);
|
||||||
ContentReader contentReader = contentService.getReader(workflowDefinition, ContentModel.PROP_CONTENT);
|
ContentReader contentReader = contentService.getReader(workflowDefinition, ContentModel.PROP_CONTENT);
|
||||||
|
|
||||||
return isDefinitionDeployed(engineId, contentReader.getContentInputStream(), contentReader.getMimetype());
|
return isDefinitionDeployed(engineId, contentReader.getContentInputStream(), contentReader.getMimetype());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#isDefinitionDeployed(java.lang.String, java.io.InputStream, java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#isDefinitionDeployed
|
||||||
|
* (java.lang.String, java.io.InputStream, java.lang.String)
|
||||||
*/
|
*/
|
||||||
public boolean isDefinitionDeployed(String engineId, InputStream workflowDefinition, String mimetype)
|
public boolean isDefinitionDeployed(String engineId, InputStream workflowDefinition, String mimetype)
|
||||||
{
|
{
|
||||||
@@ -209,24 +215,29 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.isDefinitionDeployed(workflowDefinition, mimetype);
|
return component.isDefinitionDeployed(workflowDefinition, mimetype);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#deployDefinition(org.alfresco.service.cmr.repository.NodeRef)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#deployDefinition(org
|
||||||
|
* .alfresco.service.cmr.repository.NodeRef)
|
||||||
*/
|
*/
|
||||||
public WorkflowDeployment deployDefinition(NodeRef definitionContent)
|
public WorkflowDeployment deployDefinition(NodeRef definitionContent)
|
||||||
{
|
{
|
||||||
if (! nodeService.getType(definitionContent).equals(WorkflowModel.TYPE_WORKFLOW_DEF))
|
if (!nodeService.getType(definitionContent).equals(WorkflowModel.TYPE_WORKFLOW_DEF)) { throw new WorkflowException(
|
||||||
{
|
"Node " + definitionContent + " is not of type 'bpm:workflowDefinition'"); }
|
||||||
throw new WorkflowException("Node " + definitionContent + " is not of type 'bpm:workflowDefinition'");
|
|
||||||
}
|
|
||||||
|
|
||||||
String engineId = (String)nodeService.getProperty(definitionContent, WorkflowModel.PROP_WORKFLOW_DEF_ENGINE_ID);
|
String engineId = (String) nodeService
|
||||||
|
.getProperty(definitionContent, WorkflowModel.PROP_WORKFLOW_DEF_ENGINE_ID);
|
||||||
ContentReader contentReader = contentService.getReader(definitionContent, ContentModel.PROP_CONTENT);
|
ContentReader contentReader = contentService.getReader(definitionContent, ContentModel.PROP_CONTENT);
|
||||||
|
|
||||||
return deployDefinition(engineId, contentReader.getContentInputStream(), contentReader.getMimetype());
|
return deployDefinition(engineId, contentReader.getContentInputStream(), contentReader.getMimetype());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#undeployDefinition(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#undeployDefinition(
|
||||||
|
* java.lang.String)
|
||||||
*/
|
*/
|
||||||
public void undeployDefinition(String workflowDefinitionId)
|
public void undeployDefinition(String workflowDefinitionId)
|
||||||
{
|
{
|
||||||
@@ -235,14 +246,15 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
component.undeployDefinition(workflowDefinitionId);
|
component.undeployDefinition(workflowDefinitionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getDefinitions()
|
* @see org.alfresco.service.cmr.workflow.WorkflowService#getDefinitions()
|
||||||
*/
|
*/
|
||||||
public List<WorkflowDefinition> getDefinitions()
|
public List<WorkflowDefinition> getDefinitions()
|
||||||
{
|
{
|
||||||
List<WorkflowDefinition> definitions = new ArrayList<WorkflowDefinition>(10);
|
List<WorkflowDefinition> definitions = new ArrayList<WorkflowDefinition>(10);
|
||||||
String[] ids = registry.getWorkflowComponents();
|
String[] ids = registry.getWorkflowComponents();
|
||||||
for (String id: ids)
|
for (String id : ids)
|
||||||
{
|
{
|
||||||
WorkflowComponent component = registry.getWorkflowComponent(id);
|
WorkflowComponent component = registry.getWorkflowComponent(id);
|
||||||
definitions.addAll(component.getDefinitions());
|
definitions.addAll(component.getDefinitions());
|
||||||
@@ -250,14 +262,16 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return Collections.unmodifiableList(definitions);
|
return Collections.unmodifiableList(definitions);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getAllDefinitions()
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getAllDefinitions()
|
||||||
*/
|
*/
|
||||||
public List<WorkflowDefinition> getAllDefinitions()
|
public List<WorkflowDefinition> getAllDefinitions()
|
||||||
{
|
{
|
||||||
List<WorkflowDefinition> definitions = new ArrayList<WorkflowDefinition>(10);
|
List<WorkflowDefinition> definitions = new ArrayList<WorkflowDefinition>(10);
|
||||||
String[] ids = registry.getWorkflowComponents();
|
String[] ids = registry.getWorkflowComponents();
|
||||||
for (String id: ids)
|
for (String id : ids)
|
||||||
{
|
{
|
||||||
WorkflowComponent component = registry.getWorkflowComponent(id);
|
WorkflowComponent component = registry.getWorkflowComponent(id);
|
||||||
definitions.addAll(component.getAllDefinitions());
|
definitions.addAll(component.getAllDefinitions());
|
||||||
@@ -265,8 +279,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return Collections.unmodifiableList(definitions);
|
return Collections.unmodifiableList(definitions);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getDefinitionById(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getDefinitionById(java
|
||||||
|
* .lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowDefinition getDefinitionById(String workflowDefinitionId)
|
public WorkflowDefinition getDefinitionById(String workflowDefinitionId)
|
||||||
{
|
{
|
||||||
@@ -275,8 +292,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getDefinitionById(workflowDefinitionId);
|
return component.getDefinitionById(workflowDefinitionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getDefinitionByName(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getDefinitionByName
|
||||||
|
* (java.lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowDefinition getDefinitionByName(String workflowName)
|
public WorkflowDefinition getDefinitionByName(String workflowName)
|
||||||
{
|
{
|
||||||
@@ -285,8 +305,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getDefinitionByName(workflowName);
|
return component.getDefinitionByName(workflowName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getAllDefinitionsByName(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getAllDefinitionsByName
|
||||||
|
* (java.lang.String)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowDefinition> getAllDefinitionsByName(String workflowName)
|
public List<WorkflowDefinition> getAllDefinitionsByName(String workflowName)
|
||||||
{
|
{
|
||||||
@@ -295,8 +318,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getAllDefinitionsByName(workflowName);
|
return component.getAllDefinitionsByName(workflowName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getDefinitionImage(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getDefinitionImage(
|
||||||
|
* java.lang.String)
|
||||||
*/
|
*/
|
||||||
public byte[] getDefinitionImage(String workflowDefinitionId)
|
public byte[] getDefinitionImage(String workflowDefinitionId)
|
||||||
{
|
{
|
||||||
@@ -310,8 +336,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return definitionImage;
|
return definitionImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getAllTaskDefinitions(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getAllTaskDefinitions
|
||||||
|
* (java.lang.String)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowTaskDefinition> getTaskDefinitions(final String workflowDefinitionId)
|
public List<WorkflowTaskDefinition> getTaskDefinitions(final String workflowDefinitionId)
|
||||||
{
|
{
|
||||||
@@ -320,8 +349,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getTaskDefinitions(workflowDefinitionId);
|
return component.getTaskDefinitions(workflowDefinitionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#startWorkflow(java.lang.String, java.util.Map)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#startWorkflow(java.
|
||||||
|
* lang.String, java.util.Map)
|
||||||
*/
|
*/
|
||||||
public WorkflowPath startWorkflow(String workflowDefinitionId, Map<QName, Serializable> parameters)
|
public WorkflowPath startWorkflow(String workflowDefinitionId, Map<QName, Serializable> parameters)
|
||||||
{
|
{
|
||||||
@@ -330,8 +362,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.startWorkflow(workflowDefinitionId, parameters);
|
return component.startWorkflow(workflowDefinitionId, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#startWorkflowFromTemplate(org.alfresco.service.cmr.repository.NodeRef)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#startWorkflowFromTemplate
|
||||||
|
* (org.alfresco.service.cmr.repository.NodeRef)
|
||||||
*/
|
*/
|
||||||
public WorkflowPath startWorkflowFromTemplate(NodeRef templateDefinition)
|
public WorkflowPath startWorkflowFromTemplate(NodeRef templateDefinition)
|
||||||
{
|
{
|
||||||
@@ -339,8 +374,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getActiveWorkflows(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getActiveWorkflows(
|
||||||
|
* java.lang.String)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowInstance> getActiveWorkflows(String workflowDefinitionId)
|
public List<WorkflowInstance> getActiveWorkflows(String workflowDefinitionId)
|
||||||
{
|
{
|
||||||
@@ -349,8 +387,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getActiveWorkflows(workflowDefinitionId);
|
return component.getActiveWorkflows(workflowDefinitionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getWorkflowById(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getWorkflowById(java
|
||||||
|
* .lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowInstance getWorkflowById(String workflowId)
|
public WorkflowInstance getWorkflowById(String workflowId)
|
||||||
{
|
{
|
||||||
@@ -359,8 +400,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getWorkflowById(workflowId);
|
return component.getWorkflowById(workflowId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getWorkflowPaths(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getWorkflowPaths(java
|
||||||
|
* .lang.String)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowPath> getWorkflowPaths(String workflowId)
|
public List<WorkflowPath> getWorkflowPaths(String workflowId)
|
||||||
{
|
{
|
||||||
@@ -369,8 +413,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getWorkflowPaths(workflowId);
|
return component.getWorkflowPaths(workflowId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getPathProperties(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getPathProperties(java
|
||||||
|
* .lang.String)
|
||||||
*/
|
*/
|
||||||
public Map<QName, Serializable> getPathProperties(String pathId)
|
public Map<QName, Serializable> getPathProperties(String pathId)
|
||||||
{
|
{
|
||||||
@@ -379,36 +426,47 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getPathProperties(pathId);
|
return component.getPathProperties(pathId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#cancelWorkflow(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#cancelWorkflow(java
|
||||||
|
* .lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowInstance cancelWorkflow(String workflowId)
|
public WorkflowInstance cancelWorkflow(String workflowId)
|
||||||
{
|
{
|
||||||
String engineId = BPMEngineRegistry.getEngineId(workflowId);
|
String engineId = BPMEngineRegistry.getEngineId(workflowId);
|
||||||
WorkflowComponent component = getWorkflowComponent(engineId);
|
WorkflowComponent component = getWorkflowComponent(engineId);
|
||||||
WorkflowInstance instance = component.cancelWorkflow(workflowId);
|
WorkflowInstance instance = component.cancelWorkflow(workflowId);
|
||||||
// NOTE: Delete workflow package after cancelling workflow, so it's still available
|
// NOTE: Delete workflow package after cancelling workflow, so it's
|
||||||
// in process-end events of workflow definition
|
// still available
|
||||||
|
// in process-end events of workflow definition
|
||||||
workflowPackageComponent.deletePackage(instance.workflowPackage);
|
workflowPackageComponent.deletePackage(instance.workflowPackage);
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#deleteWorkflow(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#deleteWorkflow(java
|
||||||
|
* .lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowInstance deleteWorkflow(String workflowId)
|
public WorkflowInstance deleteWorkflow(String workflowId)
|
||||||
{
|
{
|
||||||
String engineId = BPMEngineRegistry.getEngineId(workflowId);
|
String engineId = BPMEngineRegistry.getEngineId(workflowId);
|
||||||
WorkflowComponent component = getWorkflowComponent(engineId);
|
WorkflowComponent component = getWorkflowComponent(engineId);
|
||||||
WorkflowInstance instance = component.deleteWorkflow(workflowId);
|
WorkflowInstance instance = component.deleteWorkflow(workflowId);
|
||||||
// NOTE: Delete workflow package after deleting workflow, so it's still available
|
// NOTE: Delete workflow package after deleting workflow, so it's still
|
||||||
// in process-end events of workflow definition
|
// available
|
||||||
|
// in process-end events of workflow definition
|
||||||
workflowPackageComponent.deletePackage(instance.workflowPackage);
|
workflowPackageComponent.deletePackage(instance.workflowPackage);
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#signal(java.lang.String, java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#signal(java.lang.String
|
||||||
|
* , java.lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowPath signal(String pathId, String transition)
|
public WorkflowPath signal(String pathId, String transition)
|
||||||
{
|
{
|
||||||
@@ -417,8 +475,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.signal(pathId, transition);
|
return component.signal(pathId, transition);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#fireEvent(java.lang.String, java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#fireEvent(java.lang
|
||||||
|
* .String, java.lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowPath fireEvent(String pathId, String event)
|
public WorkflowPath fireEvent(String pathId, String event)
|
||||||
{
|
{
|
||||||
@@ -427,8 +488,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.fireEvent(pathId, event);
|
return component.fireEvent(pathId, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getTimers(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getTimers(java.lang
|
||||||
|
* .String)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowTimer> getTimers(String workflowId)
|
public List<WorkflowTimer> getTimers(String workflowId)
|
||||||
{
|
{
|
||||||
@@ -437,8 +501,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getTimers(workflowId);
|
return component.getTimers(workflowId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getTasksForWorkflowPath(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getTasksForWorkflowPath
|
||||||
|
* (java.lang.String)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowTask> getTasksForWorkflowPath(String pathId)
|
public List<WorkflowTask> getTasksForWorkflowPath(String pathId)
|
||||||
{
|
{
|
||||||
@@ -447,14 +514,17 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getTasksForWorkflowPath(pathId);
|
return component.getTasksForWorkflowPath(pathId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getAssignedTasks(java.lang.String, org.alfresco.service.cmr.workflow.WorkflowTaskState)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getAssignedTasks(java
|
||||||
|
* .lang.String, org.alfresco.service.cmr.workflow.WorkflowTaskState)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowTask> getAssignedTasks(String authority, WorkflowTaskState state)
|
public List<WorkflowTask> getAssignedTasks(String authority, WorkflowTaskState state)
|
||||||
{
|
{
|
||||||
List<WorkflowTask> tasks = new ArrayList<WorkflowTask>(10);
|
List<WorkflowTask> tasks = new ArrayList<WorkflowTask>(10);
|
||||||
String[] ids = registry.getTaskComponents();
|
String[] ids = registry.getTaskComponents();
|
||||||
for (String id: ids)
|
for (String id : ids)
|
||||||
{
|
{
|
||||||
TaskComponent component = registry.getTaskComponent(id);
|
TaskComponent component = registry.getTaskComponent(id);
|
||||||
tasks.addAll(component.getAssignedTasks(authority, state));
|
tasks.addAll(component.getAssignedTasks(authority, state));
|
||||||
@@ -462,8 +532,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return Collections.unmodifiableList(tasks);
|
return Collections.unmodifiableList(tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getPooledTasks(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getPooledTasks(java
|
||||||
|
* .lang.String)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowTask> getPooledTasks(String authority)
|
public List<WorkflowTask> getPooledTasks(String authority)
|
||||||
{
|
{
|
||||||
@@ -473,10 +546,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
Set<String> parents = authorityService.getContainingAuthorities(AuthorityType.GROUP, authority, false);
|
Set<String> parents = authorityService.getContainingAuthorities(AuthorityType.GROUP, authority, false);
|
||||||
authorities.addAll(parents);
|
authorities.addAll(parents);
|
||||||
|
|
||||||
// Retrieve pooled tasks for authorities (from each of the registered task components)
|
// Retrieve pooled tasks for authorities (from each of the registered
|
||||||
|
// task components)
|
||||||
List<WorkflowTask> tasks = new ArrayList<WorkflowTask>(10);
|
List<WorkflowTask> tasks = new ArrayList<WorkflowTask>(10);
|
||||||
String[] ids = registry.getTaskComponents();
|
String[] ids = registry.getTaskComponents();
|
||||||
for (String id: ids)
|
for (String id : ids)
|
||||||
{
|
{
|
||||||
TaskComponent component = registry.getTaskComponent(id);
|
TaskComponent component = registry.getTaskComponent(id);
|
||||||
tasks.addAll(component.getPooledTasks(authorities));
|
tasks.addAll(component.getPooledTasks(authorities));
|
||||||
@@ -484,8 +558,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return Collections.unmodifiableList(tasks);
|
return Collections.unmodifiableList(tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#queryTasks(org.alfresco.service.cmr.workflow.WorkflowTaskFilter)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#queryTasks(org.alfresco
|
||||||
|
* .service.cmr.workflow.WorkflowTaskFilter)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowTask> queryTasks(WorkflowTaskQuery query)
|
public List<WorkflowTask> queryTasks(WorkflowTaskQuery query)
|
||||||
{
|
{
|
||||||
@@ -500,21 +577,20 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
if (taskId != null)
|
if (taskId != null)
|
||||||
{
|
{
|
||||||
String taskEngineId = BPMEngineRegistry.getEngineId(taskId);
|
String taskEngineId = BPMEngineRegistry.getEngineId(taskId);
|
||||||
if (engineId != null && !engineId.equals(taskEngineId))
|
if (engineId != null && !engineId.equals(taskEngineId)) { throw new WorkflowException(
|
||||||
{
|
"Cannot query for tasks across multiple task components: " + engineId + ", " + taskEngineId); }
|
||||||
throw new WorkflowException("Cannot query for tasks across multiple task components: " + engineId + ", " + taskEngineId);
|
|
||||||
}
|
|
||||||
engineId = taskEngineId;
|
engineId = taskEngineId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// perform query
|
// perform query
|
||||||
List<WorkflowTask> tasks = new ArrayList<WorkflowTask>(10);
|
List<WorkflowTask> tasks = new ArrayList<WorkflowTask>(10);
|
||||||
String[] ids = registry.getTaskComponents();
|
String[] ids = registry.getTaskComponents();
|
||||||
for (String id: ids)
|
for (String id : ids)
|
||||||
{
|
{
|
||||||
TaskComponent component = registry.getTaskComponent(id);
|
TaskComponent component = registry.getTaskComponent(id);
|
||||||
// NOTE: don't bother asking task component if specific task or process id
|
// NOTE: don't bother asking task component if specific task or
|
||||||
// are in the filter and do not correspond to the component
|
// process id
|
||||||
|
// are in the filter and do not correspond to the component
|
||||||
if (engineId != null && !engineId.equals(id))
|
if (engineId != null && !engineId.equals(id))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@@ -524,18 +600,25 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return Collections.unmodifiableList(tasks);
|
return Collections.unmodifiableList(tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#updateTask(java.lang.String, java.util.Map, java.util.Map, java.util.Map)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#updateTask(java.lang
|
||||||
|
* .String, java.util.Map, java.util.Map, java.util.Map)
|
||||||
*/
|
*/
|
||||||
public WorkflowTask updateTask(String taskId, Map<QName, Serializable> properties, Map<QName, List<NodeRef>> add, Map<QName, List<NodeRef>> remove)
|
public WorkflowTask updateTask(String taskId, Map<QName, Serializable> properties, Map<QName, List<NodeRef>> add,
|
||||||
|
Map<QName, List<NodeRef>> remove)
|
||||||
{
|
{
|
||||||
String engineId = BPMEngineRegistry.getEngineId(taskId);
|
String engineId = BPMEngineRegistry.getEngineId(taskId);
|
||||||
TaskComponent component = getTaskComponent(engineId);
|
TaskComponent component = getTaskComponent(engineId);
|
||||||
return component.updateTask(taskId, properties, add, remove);
|
return component.updateTask(taskId, properties, add, remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#endTask(java.lang.String, java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#endTask(java.lang.String
|
||||||
|
* , java.lang.String)
|
||||||
*/
|
*/
|
||||||
public WorkflowTask endTask(String taskId, String transition)
|
public WorkflowTask endTask(String taskId, String transition)
|
||||||
{
|
{
|
||||||
@@ -544,8 +627,11 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.endTask(taskId, transition);
|
return component.endTask(taskId, transition);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getTaskById(java.lang.String)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getTaskById(java.lang
|
||||||
|
* .String)
|
||||||
*/
|
*/
|
||||||
public WorkflowTask getTaskById(String taskId)
|
public WorkflowTask getTaskById(String taskId)
|
||||||
{
|
{
|
||||||
@@ -554,16 +640,22 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return component.getTaskById(taskId);
|
return component.getTaskById(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#createPackage(java.lang.String, org.alfresco.service.cmr.repository.NodeRef)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#createPackage(java.
|
||||||
|
* lang.String, org.alfresco.service.cmr.repository.NodeRef)
|
||||||
*/
|
*/
|
||||||
public NodeRef createPackage(NodeRef container)
|
public NodeRef createPackage(NodeRef container)
|
||||||
{
|
{
|
||||||
return workflowPackageComponent.createPackage(container);
|
return workflowPackageComponent.createPackage(container);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.alfresco.service.cmr.workflow.WorkflowService#getWorkflowsForContent(org.alfresco.service.cmr.repository.NodeRef, boolean)
|
* (non-Javadoc)
|
||||||
|
* @see
|
||||||
|
* org.alfresco.service.cmr.workflow.WorkflowService#getWorkflowsForContent
|
||||||
|
* (org.alfresco.service.cmr.repository.NodeRef, boolean)
|
||||||
*/
|
*/
|
||||||
public List<WorkflowInstance> getWorkflowsForContent(NodeRef packageItem, boolean active)
|
public List<WorkflowInstance> getWorkflowsForContent(NodeRef packageItem, boolean active)
|
||||||
{
|
{
|
||||||
@@ -582,113 +674,147 @@ public class WorkflowServiceImpl implements WorkflowService
|
|||||||
return workflowInstances;
|
return workflowInstances;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the Workflow Component registered against the specified BPM Engine Id
|
* Gets the Workflow Component registered against the specified BPM Engine
|
||||||
|
* Id
|
||||||
*
|
*
|
||||||
* @param engineId engine id
|
* @param engineId engine id
|
||||||
*/
|
*/
|
||||||
private WorkflowComponent getWorkflowComponent(String engineId)
|
private WorkflowComponent getWorkflowComponent(String engineId)
|
||||||
{
|
{
|
||||||
WorkflowComponent component = registry.getWorkflowComponent(engineId);
|
WorkflowComponent component = registry.getWorkflowComponent(engineId);
|
||||||
if (component == null)
|
if (component == null) { throw new WorkflowException("Workflow Component for engine id '" + engineId
|
||||||
{
|
+ "' is not registered"); }
|
||||||
throw new WorkflowException("Workflow Component for engine id '" + engineId + "' is not registered");
|
|
||||||
}
|
|
||||||
return component;
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the Task Component registered against the specified BPM Engine Id
|
* Gets the Task Component registered against the specified BPM Engine Id
|
||||||
*
|
*
|
||||||
* @param engineId engine id
|
* @param engineId engine id
|
||||||
*/
|
*/
|
||||||
private TaskComponent getTaskComponent(String engineId)
|
private TaskComponent getTaskComponent(String engineId)
|
||||||
{
|
{
|
||||||
TaskComponent component = registry.getTaskComponent(engineId);
|
TaskComponent component = registry.getTaskComponent(engineId);
|
||||||
if (component == null)
|
if (component == null) { throw new WorkflowException("Task Component for engine id '" + engineId
|
||||||
{
|
+ "' is not registered"); }
|
||||||
throw new WorkflowException("Task Component for engine id '" + engineId + "' is not registered");
|
|
||||||
}
|
|
||||||
return component;
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<NodeRef> getPackageContents(String taskId)
|
public List<NodeRef> getPackageContents(String taskId)
|
||||||
{
|
{
|
||||||
WorkflowTask workflowTask = getTaskById(taskId);
|
NodeRef workflowPackage = getWorkflowPackageIfExists(taskId);
|
||||||
List<NodeRef> contents = new ArrayList<NodeRef>();
|
if (workflowPackage == null)
|
||||||
|
|
||||||
if (workflowTask != null)
|
|
||||||
{
|
{
|
||||||
NodeRef workflowPackage = (NodeRef)workflowTask.properties.get(WorkflowModel.ASSOC_PACKAGE);
|
return Collections.emptyList();
|
||||||
if (workflowPackage != null)
|
}
|
||||||
|
else if (workflowPackage.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
|
||||||
|
{
|
||||||
|
return getAvmPackageContents(workflowPackage);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return getRepositoryPackageContents(workflowPackage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to get the workflow package node from the workflow task
|
||||||
|
* specified by the task Id. If the task Id is invalid or no workflow
|
||||||
|
* package is associated with the specified task then this method returns
|
||||||
|
* null.
|
||||||
|
*
|
||||||
|
* @param taskId
|
||||||
|
* @return The workflow package NodeRef or null.
|
||||||
|
*/
|
||||||
|
private NodeRef getWorkflowPackageIfExists(String taskId)
|
||||||
|
{
|
||||||
|
WorkflowTask workflowTask = getTaskById(taskId);
|
||||||
|
if (workflowTask != null) { return (NodeRef) workflowTask.properties.get(WorkflowModel.ASSOC_PACKAGE); }
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param contents
|
||||||
|
* @param workflowPackage
|
||||||
|
*/
|
||||||
|
private List<NodeRef> getRepositoryPackageContents(NodeRef workflowPackage)
|
||||||
|
{
|
||||||
|
List<NodeRef> contents = new ArrayList<NodeRef>();
|
||||||
|
// get existing workflow package items
|
||||||
|
List<ChildAssociationRef> packageAssocs = protectedNodeService.getChildAssocs(workflowPackage);
|
||||||
|
for (ChildAssociationRef assoc : packageAssocs)
|
||||||
|
{
|
||||||
|
// create our Node representation from the NodeRef
|
||||||
|
NodeRef nodeRef = assoc.getChildRef();
|
||||||
|
QName assocType = assoc.getTypeQName();
|
||||||
|
if (!protectedNodeService.exists(nodeRef))
|
||||||
{
|
{
|
||||||
if (workflowPackage.getStoreRef().getProtocol().equals(StoreRef.PROTOCOL_AVM))
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("Ignoring " + nodeRef + " as it has been removed from the repository");
|
||||||
|
}
|
||||||
|
else if (!ContentModel.ASSOC_CONTAINS.equals(assocType) && !WorkflowModel.ASSOC_PACKAGE_CONTAINS.equals(assocType))
|
||||||
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("Ignoring " + nodeRef + " as it has an invalid association type: "+assocType);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (checkTypeIsInDataDictionary(nodeRef))
|
||||||
{
|
{
|
||||||
if (protectedNodeService.exists(workflowPackage))
|
contents.add(nodeRef);
|
||||||
{
|
|
||||||
final NodeRef stagingNodeRef = (NodeRef)
|
|
||||||
protectedNodeService.getProperty(workflowPackage,
|
|
||||||
WCMModel.PROP_AVM_DIR_INDIRECTION);
|
|
||||||
final String stagingAvmPath = AVMNodeConverter.ToAVMVersionPath(stagingNodeRef).getSecond();
|
|
||||||
final String packageAvmPath = AVMNodeConverter.ToAVMVersionPath(workflowPackage).getSecond();
|
|
||||||
if (logger.isDebugEnabled())
|
|
||||||
logger.debug("comparing " + packageAvmPath + " with " + stagingAvmPath);
|
|
||||||
for (AVMDifference d : avmSyncService.compare(-1, packageAvmPath,
|
|
||||||
-1, stagingAvmPath,
|
|
||||||
null))
|
|
||||||
{
|
|
||||||
if (logger.isDebugEnabled())
|
|
||||||
logger.debug("got difference " + d);
|
|
||||||
if (d.getDifferenceCode() == AVMDifference.NEWER ||
|
|
||||||
d.getDifferenceCode() == AVMDifference.CONFLICT)
|
|
||||||
{
|
|
||||||
contents.add(AVMNodeConverter.ToNodeRef(d.getSourceVersion(), d.getSourcePath()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// get existing workflow package items
|
|
||||||
List<ChildAssociationRef> childRefs = protectedNodeService.getChildAssocs(
|
|
||||||
workflowPackage, ContentModel.ASSOC_CONTAINS,
|
|
||||||
RegexQNamePattern.MATCH_ALL);
|
|
||||||
|
|
||||||
for (ChildAssociationRef ref: childRefs)
|
|
||||||
{
|
|
||||||
// create our Node representation from the NodeRef
|
|
||||||
NodeRef nodeRef = ref.getChildRef();
|
|
||||||
|
|
||||||
if (!protectedNodeService.exists(nodeRef))
|
|
||||||
{
|
|
||||||
if (logger.isDebugEnabled())
|
|
||||||
logger.debug("Ignoring " + nodeRef + " as it has been removed from the repository");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// find it's type so we can see if it's a node we are interested in
|
|
||||||
QName type = protectedNodeService.getType(nodeRef);
|
|
||||||
|
|
||||||
// make sure the type is defined in the data dictionary
|
|
||||||
TypeDefinition typeDef = dictionaryService.getType(type);
|
|
||||||
|
|
||||||
if (typeDef == null)
|
|
||||||
{
|
|
||||||
if (logger.isWarnEnabled())
|
|
||||||
logger.warn("Found invalid object in database: id = " + nodeRef +
|
|
||||||
", type = " + type);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
contents.add(nodeRef);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets teh type of the nodeRef and checks that the type exists in the data
|
||||||
|
* dcitionary. If the type is not in the data dictionary then the method
|
||||||
|
* logs a warning and returns false. Otherwise it returns true.
|
||||||
|
*
|
||||||
|
* @param nodeRef
|
||||||
|
* @return True if the nodeRef type is in the data dictionary, otherwise
|
||||||
|
* false.
|
||||||
|
*/
|
||||||
|
private boolean checkTypeIsInDataDictionary(NodeRef nodeRef)
|
||||||
|
{
|
||||||
|
QName type = protectedNodeService.getType(nodeRef);
|
||||||
|
if (dictionaryService.getType(type) == null)
|
||||||
|
{
|
||||||
|
if (logger.isWarnEnabled())
|
||||||
|
logger.warn("Found invalid object in database: id = " + nodeRef + ", type = " + type);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param contents
|
||||||
|
* @param workflowPackage
|
||||||
|
*/
|
||||||
|
private List<NodeRef> getAvmPackageContents(NodeRef workflowPackage)
|
||||||
|
{
|
||||||
|
List<NodeRef> contents = new ArrayList<NodeRef>();
|
||||||
|
if (protectedNodeService.exists(workflowPackage))
|
||||||
|
{
|
||||||
|
final NodeRef stagingNodeRef = (NodeRef) protectedNodeService.getProperty(workflowPackage,
|
||||||
|
WCMModel.PROP_AVM_DIR_INDIRECTION);
|
||||||
|
final String stagingAvmPath = AVMNodeConverter.ToAVMVersionPath(stagingNodeRef).getSecond();
|
||||||
|
final String packageAvmPath = AVMNodeConverter.ToAVMVersionPath(workflowPackage).getSecond();
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("comparing " + packageAvmPath + " with " + stagingAvmPath);
|
||||||
|
for (AVMDifference d : avmSyncService.compare(-1, packageAvmPath, -1, stagingAvmPath, null))
|
||||||
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("got difference " + d);
|
||||||
|
if (d.getDifferenceCode() == AVMDifference.NEWER || d.getDifferenceCode() == AVMDifference.CONFLICT)
|
||||||
|
{
|
||||||
|
contents.add(AVMNodeConverter.ToNodeRef(d.getSourceVersion(), d.getSourcePath()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return contents;
|
return contents;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user