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
This commit is contained in:
N Smith
2010-07-26 14:53:37 +00:00
parent 5791f1e7fb
commit c7690017a7
5 changed files with 119 additions and 22 deletions

View File

@@ -32,8 +32,10 @@ import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.forms.AssociationFieldDefinition.Direction; import org.alfresco.repo.forms.AssociationFieldDefinition.Direction;
import org.alfresco.repo.forms.FormData.FieldData; import org.alfresco.repo.forms.FormData.FieldData;
import org.alfresco.repo.forms.PropertyFieldDefinition.FieldConstraint; 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.forms.processor.node.TypeFormProcessor;
import org.alfresco.repo.jscript.ClasspathScriptLocation; import org.alfresco.repo.jscript.ClasspathScriptLocation;
import org.alfresco.repo.workflow.WorkflowModel;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.ContentReader; 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.ScriptService;
import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.PersonService; 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.WorkflowInstance;
import org.alfresco.service.cmr.workflow.WorkflowPath;
import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.cmr.workflow.WorkflowService;
import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.service.cmr.workflow.WorkflowTask;
import org.alfresco.service.cmr.workflow.WorkflowTaskState; import org.alfresco.service.cmr.workflow.WorkflowTaskState;
@@ -1241,6 +1245,62 @@ public class FormServiceImplTest extends BaseAlfrescoSpringTest
assertEquals(1, assocs.size()); 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<String> fieldDefNames = form.getFieldDefinitionNames();
assertTrue(fieldDefNames.size() > 0);
List<String> 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<WorkflowTask> tasks = workflowService.getTasksForWorkflowPath(path.id);
assertNotNull(tasks);
assertTrue(tasks.size() > 0);
WorkflowTask task = tasks.get(0);
return task;
}
private List<String> getExpectedTaskFields()
{
ArrayList<String> fields = new ArrayList<String>(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 public void testWorkflowForm() throws Exception
{ {
// generate a form for a well known workflow-definition supplying // generate a form for a well known workflow-definition supplying

View File

@@ -161,6 +161,9 @@ public class PackageManager
*/ */
public void update(final NodeRef packageRef) public void update(final NodeRef packageRef)
{ {
if(addItems.isEmpty() && removeItems.isEmpty())
return;
AuthenticationUtil.runAs(new RunAsWork<Void>() AuthenticationUtil.runAs(new RunAsWork<Void>()
{ {
public Void doWork() throws Exception public Void doWork() throws Exception
@@ -180,9 +183,12 @@ public class PackageManager
private void checkPackage(NodeRef packageRef) private void checkPackage(NodeRef packageRef)
{ {
boolean isPackage = nodeService.hasAspect(packageRef, PCKG_ASPECT); if(packageRef == null
if(isPackage == false) || nodeService.hasAspect(packageRef, PCKG_ASPECT)==false )
throw new WorkflowException("The package NodeRef must implement the aspect: " + PCKG_ASPECT); {
String msg = "The package NodeRef must implement the aspect: " + PCKG_ASPECT;
throw new WorkflowException(msg);
}
} }
private void removePackageItems(NodeRef packageRef) private void removePackageItems(NodeRef packageRef)

View File

@@ -26,12 +26,14 @@
package org.alfresco.repo.forms.processor.workflow; package org.alfresco.repo.forms.processor.workflow;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.repo.forms.processor.FieldProcessorRegistry; import org.alfresco.repo.forms.processor.FieldProcessorRegistry;
import org.alfresco.repo.forms.processor.node.ItemData; 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.DictionaryService;
import org.alfresco.service.cmr.dictionary.TypeDefinition; import org.alfresco.service.cmr.dictionary.TypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -155,21 +157,42 @@ public class TaskFormProcessor extends AbstractWorkflowFormProcessor<WorkflowTas
private String getTransitionValues(WorkflowTask item) private String getTransitionValues(WorkflowTask item)
{ {
StringBuilder builder = new StringBuilder();
WorkflowTransition[] transitions = item.definition.node.transitions; WorkflowTransition[] transitions = item.definition.node.transitions;
if(transitions == null) if(transitions == null || transitions.length == 0)
return ""; return "";
return buildTransitionString(item, transitions);
}
private String buildTransitionString(WorkflowTask item, WorkflowTransition[] transitions)
{
StringBuilder builder = new StringBuilder();
List<?> hiddenStr = getHiddenTransitions(item);
for (WorkflowTransition transition : transitions) for (WorkflowTransition transition : transitions)
{ {
builder.append(transition.getId()); String transId = transition.getId();
if(hiddenStr.contains(transId) == false)
{
builder.append(transId);
builder.append("|"); builder.append("|");
builder.append(transition.getTitle()); builder.append(transition.getTitle());
builder.append(","); builder.append(",");
} }
}
builder.deleteCharAt(builder.length()-1); builder.deleteCharAt(builder.length()-1);
return builder.toString(); return builder.toString();
} }
@SuppressWarnings("unchecked")
private List<String> getHiddenTransitions(WorkflowTask task)
{
Serializable hiddenValues = task.getProperties().get(WorkflowModel.PROP_HIDDEN_TRANSITIONS);
if(hiddenValues!=null && hiddenValues instanceof List<?>)
{
return (List<String>) hiddenValues;
}
return Collections.emptyList();
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.alfresco.repo.forms.processor.workflow.AbstractWorkflowFormProcessor#makeFormPersister(java.lang.Object) * @see org.alfresco.repo.forms.processor.workflow.AbstractWorkflowFormProcessor#makeFormPersister(java.lang.Object)
*/ */

View File

@@ -38,6 +38,7 @@ import static org.mockito.Mockito.when;
import java.io.Serializable; import java.io.Serializable;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -230,8 +231,12 @@ public class TaskFormProcessorTest extends TestCase
task.definition.node = new WorkflowNode(); task.definition.node = new WorkflowNode();
task.definition.node.transitions = transitions; 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); form = processForm(fieldName);
transitionValues = "id1|title1,id2|title2,id3|title3"; transitionValues = "id1|title1,id2|title2";
checkSingleProperty(form, fieldName, transitionValues); checkSingleProperty(form, fieldName, transitionValues);
} }

View File

@@ -116,6 +116,7 @@ public class PermissionServiceNOOPImpl
*/ */
public void deletePermissions(NodeRef nodeRef) public void deletePermissions(NodeRef nodeRef)
{ {
// Do Nothing.
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -123,6 +124,7 @@ public class PermissionServiceNOOPImpl
*/ */
public void deletePermission(NodeRef nodeRef, String authority, String perm) public void deletePermission(NodeRef nodeRef, String authority, String perm)
{ {
// Do Nothing.
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -130,6 +132,7 @@ public class PermissionServiceNOOPImpl
*/ */
public void setPermission(NodeRef nodeRef, String authority, String perm, boolean allow) public void setPermission(NodeRef nodeRef, String authority, String perm, boolean allow)
{ {
// Do Nothing.
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -137,6 +140,7 @@ public class PermissionServiceNOOPImpl
*/ */
public void setInheritParentPermissions(NodeRef nodeRef, boolean inheritParentPermissions) public void setInheritParentPermissions(NodeRef nodeRef, boolean inheritParentPermissions)
{ {
// Do Nothing.
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -150,24 +154,24 @@ public class PermissionServiceNOOPImpl
public void clearPermission(NodeRef nodeRef, String authority) public void clearPermission(NodeRef nodeRef, String authority)
{ {
// Do Nothing.
} }
// SPI // SPI
public void deletePermission(PermissionEntry permissionEntry) public void deletePermission(PermissionEntry permissionEntry)
{ {
// Do Nothing.
} }
public void deletePermissions(NodePermissionEntry nodePermissionEntry) public void deletePermissions(NodePermissionEntry nodePermissionEntry)
{ {
// Do Nothing.
} }
public void deletePermissions(String recipient) public void deletePermissions(String recipient)
{ {
// Do Nothing.
} }
public NodePermissionEntry explainPermission(NodeRef nodeRef, PermissionReference perm) public NodePermissionEntry explainPermission(NodeRef nodeRef, PermissionReference perm)
@@ -226,12 +230,12 @@ public class PermissionServiceNOOPImpl
public void setPermission(NodePermissionEntry nodePermissionEntry) public void setPermission(NodePermissionEntry nodePermissionEntry)
{ {
// Do Nothing.
} }
public void setPermission(PermissionEntry permissionEntry) public void setPermission(PermissionEntry permissionEntry)
{ {
// Do Nothing.
} }
public Map<NodeRef, Set<AccessPermission>> getAllSetPermissionsForCurrentUser() public Map<NodeRef, Set<AccessPermission>> getAllSetPermissionsForCurrentUser()
@@ -256,22 +260,22 @@ public class PermissionServiceNOOPImpl
public void clearPermission(StoreRef storeRef, String authority) public void clearPermission(StoreRef storeRef, String authority)
{ {
// Do Nothing.
} }
public void deletePermission(StoreRef storeRef, String authority, String permission) public void deletePermission(StoreRef storeRef, String authority, String permission)
{ {
// Do Nothing.
} }
public void deletePermissions(StoreRef storeRef) public void deletePermissions(StoreRef storeRef)
{ {
// Do Nothing.
} }
public void setPermission(StoreRef storeRef, String authority, String permission, boolean allow) public void setPermission(StoreRef storeRef, String authority, String permission, boolean allow)
{ {
// Do Nothing.
} }
public Set<AccessPermission> getAllSetPermissions(StoreRef storeRef) public Set<AccessPermission> getAllSetPermissions(StoreRef storeRef)
@@ -292,7 +296,6 @@ public class PermissionServiceNOOPImpl
return AccessStatus.ALLOWED; return AccessStatus.ALLOWED;
} }
@Override
public Set<String> getAuthorisations() { public Set<String> getAuthorisations() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return new HashSet<String>(); return new HashSet<String>();