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.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<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
{
// 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)
{
if(addItems.isEmpty() && removeItems.isEmpty())
return;
AuthenticationUtil.runAs(new RunAsWork<Void>()
{
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)

View File

@@ -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<WorkflowTas
private String getTransitionValues(WorkflowTask item)
{
StringBuilder builder = new StringBuilder();
WorkflowTransition[] transitions = item.definition.node.transitions;
if(transitions == null)
if(transitions == null || transitions.length == 0)
return "";
return buildTransitionString(item, transitions);
}
private String buildTransitionString(WorkflowTask item, WorkflowTransition[] transitions)
{
StringBuilder builder = new StringBuilder();
List<?> hiddenStr = getHiddenTransitions(item);
for (WorkflowTransition transition : transitions)
{
builder.append(transition.getId());
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<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)
* @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.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);
}

View File

@@ -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<NodeRef, Set<AccessPermission>> 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<AccessPermission> getAllSetPermissions(StoreRef storeRef)
@@ -292,7 +296,6 @@ public class PermissionServiceNOOPImpl
return AccessStatus.ALLOWED;
}
@Override
public Set<String> getAuthorisations() {
// TODO Auto-generated method stub
return new HashSet<String>();