From c7690017a7ca86451267670e22a3891356a4f673 Mon Sep 17 00:00:00 2001 From: N Smith Date: Mon, 26 Jul 2010 14:53:37 +0000 Subject: [PATCH] Added ability to hide transitions on TaskFormProcessor. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21412 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/forms/FormServiceImplTest.java | 60 +++++++++++++++++++ .../processor/workflow/PackageManager.java | 14 +++-- .../processor/workflow/TaskFormProcessor.java | 35 +++++++++-- .../workflow/TaskFormProcessorTest.java | 7 ++- .../noop/PermissionServiceNOOPImpl.java | 25 ++++---- 5 files changed, 119 insertions(+), 22 deletions(-) diff --git a/source/java/org/alfresco/repo/forms/FormServiceImplTest.java b/source/java/org/alfresco/repo/forms/FormServiceImplTest.java index 2c3026fedc..a19f72f677 100644 --- a/source/java/org/alfresco/repo/forms/FormServiceImplTest.java +++ b/source/java/org/alfresco/repo/forms/FormServiceImplTest.java @@ -32,8 +32,10 @@ import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.forms.AssociationFieldDefinition.Direction; import org.alfresco.repo.forms.FormData.FieldData; import org.alfresco.repo.forms.PropertyFieldDefinition.FieldConstraint; +import org.alfresco.repo.forms.processor.node.FormFieldConstants; import org.alfresco.repo.forms.processor.node.TypeFormProcessor; import org.alfresco.repo.jscript.ClasspathScriptLocation; +import org.alfresco.repo.workflow.WorkflowModel; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.ContentReader; @@ -44,7 +46,9 @@ import org.alfresco.service.cmr.repository.ScriptLocation; import org.alfresco.service.cmr.repository.ScriptService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.security.PersonService; +import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowInstance; +import org.alfresco.service.cmr.workflow.WorkflowPath; import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.service.cmr.workflow.WorkflowTaskState; @@ -1241,6 +1245,62 @@ public class FormServiceImplTest extends BaseAlfrescoSpringTest assertEquals(1, assocs.size()); } + public void testGetFormForTask() throws Exception + { + WorkflowTask task = getWorkflowTask(); + Item item = new Item("task", task.id); + + Form form = formService.getForm(item); + assertNotNull(form); + assertEquals(item.getKind(), form.getItem().getKind()); + assertEquals(item.getId(), form.getItem().getId()); + List fieldDefNames = form.getFieldDefinitionNames(); + assertTrue(fieldDefNames.size() > 0); + + List expFields = getExpectedTaskFields(); + assertTrue(fieldDefNames.containsAll(expFields)); + } + + public void testSaveTask() throws Exception + { + WorkflowTask task = getWorkflowTask(); + QName descName = WorkflowModel.PROP_DESCRIPTION; + Serializable initialDesc = task.properties.get(descName); + String testDesc = "Foo-Bar-Test-String"; + assertFalse(testDesc.equals(initialDesc)); + + Item item = new Item("task", task.id); + FormData data = new FormData(); + String descFieldName = FormFieldConstants.PROP_DATA_PREFIX + + descName.toPrefixString(namespaceService).replace(":", "_"); + data.addFieldData(descFieldName, testDesc, true); + formService.saveForm(item, data); + + WorkflowTask newTask = workflowService.getTaskById(task.id); + assertEquals(testDesc, newTask.properties.get(descName)); + } + + private WorkflowTask getWorkflowTask() + { + WorkflowDefinition reviewDef = workflowService.getDefinitionByName("jbpm$wf:review"); + WorkflowPath path = workflowService.startWorkflow(reviewDef.id, null); + List tasks = workflowService.getTasksForWorkflowPath(path.id); + assertNotNull(tasks); + assertTrue(tasks.size() > 0); + WorkflowTask task = tasks.get(0); + return task; + } + + private List getExpectedTaskFields() + { + ArrayList fields = new ArrayList(4); + fields.add(WorkflowModel.PROP_DESCRIPTION.toPrefixString(namespaceService)); + fields.add(WorkflowModel.PROP_STATUS.toPrefixString(namespaceService)); + fields.add(WorkflowModel.PROP_PACKAGE_ACTION_GROUP.toPrefixString(namespaceService)); + fields.add(ContentModel.PROP_OWNER.toPrefixString(namespaceService)); + return fields; + } + public void testWorkflowForm() throws Exception { // generate a form for a well known workflow-definition supplying diff --git a/source/java/org/alfresco/repo/forms/processor/workflow/PackageManager.java b/source/java/org/alfresco/repo/forms/processor/workflow/PackageManager.java index f8b0b5f5f7..61e07b51ab 100644 --- a/source/java/org/alfresco/repo/forms/processor/workflow/PackageManager.java +++ b/source/java/org/alfresco/repo/forms/processor/workflow/PackageManager.java @@ -161,7 +161,10 @@ public class PackageManager */ public void update(final NodeRef packageRef) { - AuthenticationUtil.runAs(new RunAsWork() + if(addItems.isEmpty() && removeItems.isEmpty()) + return; + + AuthenticationUtil.runAs(new RunAsWork() { public Void doWork() throws Exception { @@ -180,9 +183,12 @@ public class PackageManager private void checkPackage(NodeRef packageRef) { - boolean isPackage = nodeService.hasAspect(packageRef, PCKG_ASPECT); - if(isPackage == false) - throw new WorkflowException("The package NodeRef must implement the aspect: " + PCKG_ASPECT); + if(packageRef == null + || nodeService.hasAspect(packageRef, PCKG_ASPECT)==false ) + { + String msg = "The package NodeRef must implement the aspect: " + PCKG_ASPECT; + throw new WorkflowException(msg); + } } private void removePackageItems(NodeRef packageRef) diff --git a/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessor.java b/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessor.java index bf38b3c9bd..2e9fa7c3cc 100644 --- a/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessor.java @@ -26,12 +26,14 @@ package org.alfresco.repo.forms.processor.workflow; import java.io.Serializable; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.alfresco.repo.forms.processor.FieldProcessorRegistry; import org.alfresco.repo.forms.processor.node.ItemData; +import org.alfresco.repo.workflow.WorkflowModel; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.TypeDefinition; import org.alfresco.service.cmr.repository.NodeRef; @@ -155,21 +157,42 @@ public class TaskFormProcessor extends AbstractWorkflowFormProcessor hiddenStr = getHiddenTransitions(item); for (WorkflowTransition transition : transitions) { - builder.append(transition.getId()); - builder.append("|"); - builder.append(transition.getTitle()); - builder.append(","); + String transId = transition.getId(); + if(hiddenStr.contains(transId) == false) + { + builder.append(transId); + builder.append("|"); + builder.append(transition.getTitle()); + builder.append(","); + } } builder.deleteCharAt(builder.length()-1); return builder.toString(); } + @SuppressWarnings("unchecked") + private List getHiddenTransitions(WorkflowTask task) + { + Serializable hiddenValues = task.getProperties().get(WorkflowModel.PROP_HIDDEN_TRANSITIONS); + if(hiddenValues!=null && hiddenValues instanceof List) + { + return (List) hiddenValues; + } + return Collections.emptyList(); + } + /* (non-Javadoc) * @see org.alfresco.repo.forms.processor.workflow.AbstractWorkflowFormProcessor#makeFormPersister(java.lang.Object) */ diff --git a/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessorTest.java b/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessorTest.java index 4933bb7c06..63d5182ff8 100644 --- a/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessorTest.java +++ b/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessorTest.java @@ -38,6 +38,7 @@ import static org.mockito.Mockito.when; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -230,8 +231,12 @@ public class TaskFormProcessorTest extends TestCase task.definition.node = new WorkflowNode(); task.definition.node.transitions = transitions; + // Hide transition with id3. + Serializable hiddenValue = (Serializable) Collections.singletonList("id3"); + task.properties.put(WorkflowModel.PROP_HIDDEN_TRANSITIONS, hiddenValue ); + form = processForm(fieldName); - transitionValues = "id1|title1,id2|title2,id3|title3"; + transitionValues = "id1|title1,id2|title2"; checkSingleProperty(form, fieldName, transitionValues); } diff --git a/source/java/org/alfresco/repo/security/permissions/noop/PermissionServiceNOOPImpl.java b/source/java/org/alfresco/repo/security/permissions/noop/PermissionServiceNOOPImpl.java index 35d42d1b93..5156ceaf4a 100644 --- a/source/java/org/alfresco/repo/security/permissions/noop/PermissionServiceNOOPImpl.java +++ b/source/java/org/alfresco/repo/security/permissions/noop/PermissionServiceNOOPImpl.java @@ -116,6 +116,7 @@ public class PermissionServiceNOOPImpl */ public void deletePermissions(NodeRef nodeRef) { + // Do Nothing. } /* (non-Javadoc) @@ -123,6 +124,7 @@ public class PermissionServiceNOOPImpl */ public void deletePermission(NodeRef nodeRef, String authority, String perm) { + // Do Nothing. } /* (non-Javadoc) @@ -130,6 +132,7 @@ public class PermissionServiceNOOPImpl */ public void setPermission(NodeRef nodeRef, String authority, String perm, boolean allow) { + // Do Nothing. } /* (non-Javadoc) @@ -137,6 +140,7 @@ public class PermissionServiceNOOPImpl */ public void setInheritParentPermissions(NodeRef nodeRef, boolean inheritParentPermissions) { + // Do Nothing. } /* (non-Javadoc) @@ -150,24 +154,24 @@ public class PermissionServiceNOOPImpl public void clearPermission(NodeRef nodeRef, String authority) { - + // Do Nothing. } // SPI public void deletePermission(PermissionEntry permissionEntry) { - + // Do Nothing. } public void deletePermissions(NodePermissionEntry nodePermissionEntry) { - + // Do Nothing. } public void deletePermissions(String recipient) { - + // Do Nothing. } public NodePermissionEntry explainPermission(NodeRef nodeRef, PermissionReference perm) @@ -226,12 +230,12 @@ public class PermissionServiceNOOPImpl public void setPermission(NodePermissionEntry nodePermissionEntry) { - + // Do Nothing. } public void setPermission(PermissionEntry permissionEntry) { - + // Do Nothing. } public Map> getAllSetPermissionsForCurrentUser() @@ -256,22 +260,22 @@ public class PermissionServiceNOOPImpl public void clearPermission(StoreRef storeRef, String authority) { - + // Do Nothing. } public void deletePermission(StoreRef storeRef, String authority, String permission) { - + // Do Nothing. } public void deletePermissions(StoreRef storeRef) { - + // Do Nothing. } public void setPermission(StoreRef storeRef, String authority, String permission, boolean allow) { - + // Do Nothing. } public Set getAllSetPermissions(StoreRef storeRef) @@ -292,7 +296,6 @@ public class PermissionServiceNOOPImpl return AccessStatus.ALLOWED; } - @Override public Set getAuthorisations() { // TODO Auto-generated method stub return new HashSet();