ALF-4057 The default form returned by Task and Workflow Form Processors now excludes several properties which should not be displayed, such as the bpm:package association and the bpm:packageActionGroup property.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21495 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
N Smith
2010-07-29 17:50:04 +00:00
parent a272009f7e
commit 4a6b87905d
9 changed files with 171 additions and 40 deletions

View File

@@ -64,6 +64,7 @@ import org.springframework.util.StringUtils;
* Form service implementation unit test. * Form service implementation unit test.
* *
* @author Gavin Cornwell * @author Gavin Cornwell
* @author Nick Smith
*/ */
public class FormServiceImplTest extends BaseAlfrescoSpringTest public class FormServiceImplTest extends BaseAlfrescoSpringTest
{ {
@@ -1296,7 +1297,6 @@ public class FormServiceImplTest extends BaseAlfrescoSpringTest
ArrayList<String> fields = new ArrayList<String>(4); ArrayList<String> fields = new ArrayList<String>(4);
fields.add(WorkflowModel.PROP_DESCRIPTION.toPrefixString(namespaceService)); fields.add(WorkflowModel.PROP_DESCRIPTION.toPrefixString(namespaceService));
fields.add(WorkflowModel.PROP_STATUS.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)); fields.add(ContentModel.PROP_OWNER.toPrefixString(namespaceService));
return fields; return fields;
} }

View File

@@ -41,6 +41,8 @@ public abstract class FilteredFormProcessor<ItemType, PersistType> extends Abstr
{ {
private static final Log logger = LogFactory.getLog(FilteredFormProcessor.class); private static final Log logger = LogFactory.getLog(FilteredFormProcessor.class);
private List<String> ignoredFields = null;
protected FilterRegistry<ItemType, PersistType> filterRegistry; protected FilterRegistry<ItemType, PersistType> filterRegistry;
protected FieldProcessorRegistry fieldProcessorRegistry; protected FieldProcessorRegistry fieldProcessorRegistry;
@@ -58,6 +60,14 @@ public abstract class FilteredFormProcessor<ItemType, PersistType> extends Abstr
logger.debug("Set filter registry: " + this.filterRegistry + " for processor: " + this); logger.debug("Set filter registry: " + this.filterRegistry + " for processor: " + this);
} }
/**
* @param ignoredFields the ignoredFields to set
*/
public void setIgnoredFields(List<String> ignoredFields)
{
this.ignoredFields = ignoredFields;
}
/* /*
* @see * @see
* org.alfresco.repo.forms.processor.FormProcessor#generate(org.alfresco * org.alfresco.repo.forms.processor.FormProcessor#generate(org.alfresco
@@ -170,17 +180,25 @@ public abstract class FilteredFormProcessor<ItemType, PersistType> extends Abstr
} }
else else
{ {
fieldsToAdd = generateDefaultFields(data); fieldsToAdd = generateDefaultFields(data, getIgnoredFields());
} }
form.addFields(fieldsToAdd); form.addFields(fieldsToAdd);
} }
private List<String> getIgnoredFields()
{
if(ignoredFields != null)
return ignoredFields;
return getDefaultIgnoredFields();
}
/** /**
* Generates a list of default fields to add if no field names are specified. * Generates a list of default fields to add if no field names are specified.
* @param data Used for field creation. * @param data Used for field creation.
* @param ignoredFields TODO
* @return a {@link List} of {@link Field Fields} which may be empty. * @return a {@link List} of {@link Field Fields} which may be empty.
*/ */
protected List<Field> generateDefaultFields(FormCreationData data) protected List<Field> generateDefaultFields(FormCreationData data, List<String> fieldsToIgnore)
{ {
return Collections.emptyList(); return Collections.emptyList();
} }
@@ -266,4 +284,5 @@ public abstract class FilteredFormProcessor<ItemType, PersistType> extends Abstr
*/ */
protected abstract PersistType internalPersist(ItemType item, FormData data); protected abstract PersistType internalPersist(ItemType item, FormData data);
protected abstract List<String> getDefaultIgnoredFields();
} }

View File

@@ -21,9 +21,9 @@ package org.alfresco.repo.forms.processor.node;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_ADDED_SUFFIX; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_ADDED_SUFFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_PREFIX; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_PREFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_REMOVED_SUFFIX; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_REMOVED_SUFFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.DEFAULT_CONTENT_MIMETYPE;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ON; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ON;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.PROP_DATA_PREFIX; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.PROP_DATA_PREFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.DEFAULT_CONTENT_MIMETYPE;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
@@ -183,9 +183,10 @@ public abstract class ContentModelFormProcessor<ItemType, PersistType> extends
} }
@Override @Override
protected List<Field> generateDefaultFields(FormCreationData data) protected List<Field> generateDefaultFields(FormCreationData data, List<String> fieldsToIgnore)
{ {
DefaultFieldBuilder defaultFieldBuilder = new DefaultFieldBuilder(data, fieldProcessorRegistry); DefaultFieldBuilder defaultFieldBuilder =
new DefaultFieldBuilder(data, fieldProcessorRegistry, namespaceService, fieldsToIgnore);
return defaultFieldBuilder.buildDefaultFields(); return defaultFieldBuilder.buildDefaultFields();
} }

View File

@@ -21,12 +21,14 @@ package org.alfresco.repo.forms.processor.node;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.alfresco.repo.forms.Field; import org.alfresco.repo.forms.Field;
import org.alfresco.repo.forms.processor.FieldProcessor; import org.alfresco.repo.forms.processor.FieldProcessor;
import org.alfresco.repo.forms.processor.FieldProcessorRegistry; import org.alfresco.repo.forms.processor.FieldProcessorRegistry;
import org.alfresco.repo.forms.processor.FormCreationData; import org.alfresco.repo.forms.processor.FormCreationData;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@@ -47,25 +49,42 @@ public class DefaultFieldBuilder
private final FormCreationData formData; private final FormCreationData formData;
private final ItemData<?> ItemData; private final ItemData<?> ItemData;
private final FieldProcessorRegistry registry; private final FieldProcessorRegistry registry;
private final NamespaceService namespaceService;
private final List<String> ignoredFields;
private final Log logger; private final Log logger;
public DefaultFieldBuilder(FormCreationData data, public DefaultFieldBuilder(FormCreationData data,
FieldProcessorRegistry registry) FieldProcessorRegistry registry,
NamespaceService namespaceService,
List<String> ignoredFields)
{ {
this(data, registry, MY_LOGGER); this(data, registry, namespaceService, ignoredFields, MY_LOGGER);
} }
public DefaultFieldBuilder(FormCreationData formData, public DefaultFieldBuilder(FormCreationData formData,
FieldProcessorRegistry registry, FieldProcessorRegistry registry,
NamespaceService namespaceService,
List<String> ignoredFields,
Log logger) Log logger)
{ {
this.logger = logger; this.logger = logger;
this.formData = formData; this.formData = formData;
this.registry = registry; this.registry = registry;
this.namespaceService = namespaceService;
this.ignoredFields = getNonNullList(ignoredFields );
this.ItemData = (ItemData<?>) formData.getItemData(); this.ItemData = (ItemData<?>) formData.getItemData();
} }
/**
* @param ignoredTransientFields2
* @return
*/
private <T> List<T> getNonNullList(List<T> list)
{
return list == null ? Collections.<T>emptyList() : list;
}
public List<Field> buildDefaultFields() public List<Field> buildDefaultFields()
{ {
List<Field> assocFields = buildDefaultAssociationFields(); List<Field> assocFields = buildDefaultAssociationFields();
@@ -84,20 +103,32 @@ public class DefaultFieldBuilder
Collection<QName> names = ItemData.getAllPropertyDefinitionNames(); Collection<QName> names = ItemData.getAllPropertyDefinitionNames();
List<Field> fields = new ArrayList<Field>(names.size()); List<Field> fields = new ArrayList<Field>(names.size());
for (QName name : names) for (QName name : names)
{
if(ignoreQName(name)==false)
{ {
fields.add(buildPropertyField(name)); fields.add(buildPropertyField(name));
} }
}
return fields; return fields;
} }
private boolean ignoreQName(QName qname)
{
String name = qname.toPrefixString(namespaceService);
return ignoredFields.contains(name);
}
public List<Field> buildDefaultAssociationFields() public List<Field> buildDefaultAssociationFields()
{ {
Collection<QName> names = ItemData.getAllAssociationDefinitionNames(); Collection<QName> names = ItemData.getAllAssociationDefinitionNames();
List<Field> fields = new ArrayList<Field>(names.size()); List<Field> fields = new ArrayList<Field>(names.size());
for (QName name : names) for (QName name : names)
{
if(ignoreQName(name)==false)
{ {
fields.add(buildAssociationField(name)); fields.add(buildAssociationField(name));
} }
}
return fields; return fields;
} }
@@ -106,9 +137,12 @@ public class DefaultFieldBuilder
Collection<String> names = ItemData.getAllTransientFieldNames(); Collection<String> names = ItemData.getAllTransientFieldNames();
List<Field> fields = new ArrayList<Field>(names.size()); List<Field> fields = new ArrayList<Field>(names.size());
for (String name : names) for (String name : names)
{
if(ignoredFields.contains(name)==false)
{ {
fields.add(buildTransientField(name)); fields.add(buildTransientField(name));
} }
}
return fields; return fields;
} }

View File

@@ -288,4 +288,13 @@ public class NodeFormProcessor extends ContentModelFormProcessor<NodeRef, NodeRe
return item; return item;
} }
/* (non-Javadoc)
* @see org.alfresco.repo.forms.processor.FilteredFormProcessor#getDefaultIgnoredFields()
*/
@Override
protected List<String> getDefaultIgnoredFields()
{
return null;
}
} }

View File

@@ -21,6 +21,7 @@ package org.alfresco.repo.forms.processor.node;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
@@ -280,4 +281,13 @@ public class TypeFormProcessor extends ContentModelFormProcessor<TypeDefinition,
{ {
return null; return null;
} }
/* (non-Javadoc)
* @see org.alfresco.repo.forms.processor.FilteredFormProcessor#getDefaultIgnoredFields()
*/
@Override
protected List<String> getDefaultIgnoredFields()
{
return null;
}
} }

View File

@@ -19,6 +19,7 @@
package org.alfresco.repo.forms.processor.workflow; package org.alfresco.repo.forms.processor.workflow;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@@ -117,6 +118,35 @@ public abstract class AbstractWorkflowFormProcessor<ItemType, PersistType> exten
return decodedId; return decodedId;
} }
/* (non-Javadoc)
* @see org.alfresco.repo.forms.processor.FilteredFormProcessor#getDefaultIgnoredFields()
*/
@Override
protected List<String> getDefaultIgnoredFields()
{
ArrayList<String> fields = new ArrayList<String>(5);
fields.add("bpm:package");
fields.add("bpm:pooledActors");
fields.add("bpm:completedItems");
fields.add("sys:node-dbid");
fields.add("sys:store-identifier");
fields.add("bpm:completionDate");
fields.add("bpm:context");
fields.add("sys:node-uuid");
fields.add("bpm:hiddenTransitions");
fields.add("cm:creator");
fields.add("cm:modifier");
fields.add("bpm:packageActionGroup");
fields.add("bpm:packageItemActionGroup");
fields.add("bpm:outcome");
fields.add("cm:content");
fields.add("cm:accessed");
fields.add("bpm:startDate");
fields.add("cm:modified");
fields.add("cm:created");
fields.add("sys:store-protocol");
return fields;
}
/** /**
* Returns an implementation of {@link ContentModelFormPersister} which is * Returns an implementation of {@link ContentModelFormPersister} which is
* used to accumulate all the changes specified in the {@link Form} and then persist them. * used to accumulate all the changes specified in the {@link Form} and then persist them.

View File

@@ -25,6 +25,19 @@
package org.alfresco.repo.forms.processor.workflow; package org.alfresco.repo.forms.processor.workflow;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_ADDED_SUFFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_PREFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_REMOVED_SUFFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.PROP_DATA_PREFIX;
import static org.alfresco.repo.workflow.WorkflowModel.ASPECT_WORKFLOW_PACKAGE;
import static org.alfresco.repo.workflow.WorkflowModel.ASSOC_ASSIGNEE;
import static org.alfresco.repo.workflow.WorkflowModel.ASSOC_PACKAGE_CONTAINS;
import static org.alfresco.repo.workflow.WorkflowModel.ASSOC_POOLED_ACTORS;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_DESCRIPTION;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_HIDDEN_TRANSITIONS;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_PACKAGE_ACTION_GROUP;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_PACKAGE_ITEM_ACTION_GROUP;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_STATUS;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyMap; import static org.mockito.Matchers.anyMap;
import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.anyString;
@@ -34,7 +47,6 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.*;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
@@ -54,10 +66,8 @@ import org.alfresco.repo.forms.FormNotFoundException;
import org.alfresco.repo.forms.Item; import org.alfresco.repo.forms.Item;
import org.alfresco.repo.forms.FormData.FieldData; import org.alfresco.repo.forms.FormData.FieldData;
import org.alfresco.repo.forms.processor.node.DefaultFieldProcessor; import org.alfresco.repo.forms.processor.node.DefaultFieldProcessor;
import org.alfresco.repo.forms.processor.node.FormFieldConstants;
import org.alfresco.repo.forms.processor.node.MockClassAttributeDefinition; import org.alfresco.repo.forms.processor.node.MockClassAttributeDefinition;
import org.alfresco.repo.forms.processor.node.MockFieldProcessorRegistry; import org.alfresco.repo.forms.processor.node.MockFieldProcessorRegistry;
import org.alfresco.repo.workflow.WorkflowModel;
import org.alfresco.service.cmr.dictionary.AssociationDefinition; import org.alfresco.service.cmr.dictionary.AssociationDefinition;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
@@ -79,7 +89,6 @@ import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.NamespaceServiceMemoryImpl; import org.alfresco.service.namespace.NamespaceServiceMemoryImpl;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.QNamePattern; import org.alfresco.service.namespace.QNamePattern;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock; import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
@@ -93,11 +102,11 @@ public class TaskFormProcessorTest extends TestCase
{ {
private static final String TASK_DEF_NAME = "TaskDef"; private static final String TASK_DEF_NAME = "TaskDef";
private static final String TASK_ID = "foo$Real Id"; private static final String TASK_ID = "foo$Real Id";
private static final QName DESC_NAME = WorkflowModel.PROP_DESCRIPTION; private static final QName DESC_NAME = PROP_DESCRIPTION;
private static final QName STATUS_NAME = WorkflowModel.PROP_STATUS; private static final QName STATUS_NAME = PROP_STATUS;
private static final QName PROP_WITH_ = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "some_prop"); private static final QName PROP_WITH_ = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "some_prop");
private static final QName ACTORS_NAME = WorkflowModel.ASSOC_POOLED_ACTORS; private static final QName ACTORS_NAME = ASSOC_POOLED_ACTORS;
private static final QName ASSIGNEE_NAME = WorkflowModel.ASSOC_ASSIGNEE; private static final QName ASSIGNEE_NAME = ASSOC_ASSIGNEE;
private static final QName ASSOC_WITH_ = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "some_assoc"); private static final QName ASSOC_WITH_ = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "some_assoc");
private static final NodeRef FAKE_NODE = new NodeRef(NamespaceService.BPM_MODEL_1_0_URI + "/FakeNode"); private static final NodeRef FAKE_NODE = new NodeRef(NamespaceService.BPM_MODEL_1_0_URI + "/FakeNode");
private static final NodeRef FAKE_NODE2 = new NodeRef(NamespaceService.BPM_MODEL_1_0_URI + "/FakeNode2"); private static final NodeRef FAKE_NODE2 = new NodeRef(NamespaceService.BPM_MODEL_1_0_URI + "/FakeNode2");
@@ -210,12 +219,18 @@ public class TaskFormProcessorTest extends TestCase
Form form = processForm(); Form form = processForm();
List<String> fieldDefs = form.getFieldDefinitionNames(); List<String> fieldDefs = form.getFieldDefinitionNames();
assertTrue(fieldDefs.contains(ASSIGNEE_NAME.toPrefixString(namespaceService))); assertTrue(fieldDefs.contains(ASSIGNEE_NAME.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(ACTORS_NAME.toPrefixString(namespaceService))); assertTrue(fieldDefs.contains(ASSOC_WITH_.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(DESC_NAME.toPrefixString(namespaceService))); assertTrue(fieldDefs.contains(DESC_NAME.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(STATUS_NAME.toPrefixString(namespaceService))); assertTrue(fieldDefs.contains(STATUS_NAME.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(PROP_WITH_.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(PackageItemsFieldProcessor.KEY)); assertTrue(fieldDefs.contains(PackageItemsFieldProcessor.KEY));
assertTrue(fieldDefs.contains(TransitionFieldProcessor.KEY)); assertTrue(fieldDefs.contains(TransitionFieldProcessor.KEY));
// Check 'default ignored fields' are proerly removed from defaults.
assertFalse(fieldDefs.contains(ACTORS_NAME.toPrefixString(namespaceService)));
assertFalse(fieldDefs.contains(PROP_PACKAGE_ACTION_GROUP.toPrefixString(namespaceService)));
assertFalse(fieldDefs.contains(PROP_PACKAGE_ITEM_ACTION_GROUP.toPrefixString(namespaceService)));
Serializable fieldData = (Serializable) Arrays.asList(FAKE_NODE.toString()); Serializable fieldData = (Serializable) Arrays.asList(FAKE_NODE.toString());
FormData formData = form.getFormData(); FormData formData = form.getFormData();
assertEquals(fieldData, formData.getFieldData("assoc_bpm_assignee").getValue()); assertEquals(fieldData, formData.getFieldData("assoc_bpm_assignee").getValue());
@@ -241,7 +256,7 @@ public class TaskFormProcessorTest extends TestCase
// Hide transition with id3. // Hide transition with id3.
Serializable hiddenValue = (Serializable) Collections.singletonList("id3"); Serializable hiddenValue = (Serializable) Collections.singletonList("id3");
task.properties.put(WorkflowModel.PROP_HIDDEN_TRANSITIONS, hiddenValue ); task.properties.put(PROP_HIDDEN_TRANSITIONS, hiddenValue );
form = processForm(fieldName); form = processForm(fieldName);
transitionValues = "id1|title1,id2|title2"; transitionValues = "id1|title1,id2|title2";
@@ -396,7 +411,7 @@ public class TaskFormProcessorTest extends TestCase
ArrayList<ChildAssociationRef> results = new ArrayList<ChildAssociationRef>(children.length); ArrayList<ChildAssociationRef> results = new ArrayList<ChildAssociationRef>(children.length);
for (NodeRef nodeRef : children) for (NodeRef nodeRef : children)
{ {
ChildAssociationRef child = new ChildAssociationRef(WorkflowModel.ASSOC_PACKAGE_CONTAINS, PCKG_NODE, null, nodeRef); ChildAssociationRef child = new ChildAssociationRef(ASSOC_PACKAGE_CONTAINS, PCKG_NODE, null, nodeRef);
results.add(child); results.add(child);
} }
when(nodeService.getChildAssocs(eq(PCKG_NODE), (QNamePattern)any(), (QNamePattern)any())) when(nodeService.getChildAssocs(eq(PCKG_NODE), (QNamePattern)any(), (QNamePattern)any()))
@@ -417,7 +432,7 @@ public class TaskFormProcessorTest extends TestCase
verify(nodeService, times(times)) verify(nodeService, times(times))
.addChild(eq(PCKG_NODE), .addChild(eq(PCKG_NODE),
eq(child), eq(child),
eq(WorkflowModel.ASSOC_PACKAGE_CONTAINS), eq(ASSOC_PACKAGE_CONTAINS),
(QName)any()); (QName)any());
} }
@@ -599,13 +614,13 @@ public class TaskFormProcessorTest extends TestCase
properties.put(PROP_WITH_, with_); properties.put(PROP_WITH_, with_);
// Add a Package Action property // Add a Package Action property
QName pckgActionGroup = WorkflowModel.PROP_PACKAGE_ACTION_GROUP; QName pckgActionGroup = PROP_PACKAGE_ACTION_GROUP;
PropertyDefinition pckgAction = MockClassAttributeDefinition.mockPropertyDefinition(pckgActionGroup, textType, PropertyDefinition pckgAction = MockClassAttributeDefinition.mockPropertyDefinition(pckgActionGroup, textType,
""); "");
properties.put(pckgActionGroup, pckgAction); properties.put(pckgActionGroup, pckgAction);
// Add a Package Action property // Add a Package Action property
QName pckgItemActionGroup = WorkflowModel.PROP_PACKAGE_ITEM_ACTION_GROUP; QName pckgItemActionGroup = PROP_PACKAGE_ITEM_ACTION_GROUP;
PropertyDefinition pckgItemAction = MockClassAttributeDefinition.mockPropertyDefinition(pckgItemActionGroup, PropertyDefinition pckgItemAction = MockClassAttributeDefinition.mockPropertyDefinition(pckgItemActionGroup,
textType, "read_package_item_actions"); textType, "read_package_item_actions");
properties.put(pckgItemActionGroup, pckgItemAction); properties.put(pckgItemActionGroup, pckgItemAction);
@@ -694,7 +709,7 @@ public class TaskFormProcessorTest extends TestCase
private NodeService makeNodeService() private NodeService makeNodeService()
{ {
NodeService service = mock(NodeService.class); NodeService service = mock(NodeService.class);
when(service.hasAspect(PCKG_NODE, WorkflowModel.ASPECT_WORKFLOW_PACKAGE)) when(service.hasAspect(PCKG_NODE, ASPECT_WORKFLOW_PACKAGE))
.thenReturn(true); .thenReturn(true);
return service; return service;
} }

View File

@@ -23,6 +23,16 @@ import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DA
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_PREFIX; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_PREFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_REMOVED_SUFFIX; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_REMOVED_SUFFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.PROP_DATA_PREFIX; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.PROP_DATA_PREFIX;
import static org.alfresco.repo.workflow.WorkflowModel.ASPECT_WORKFLOW_PACKAGE;
import static org.alfresco.repo.workflow.WorkflowModel.ASSOC_ASSIGNEE;
import static org.alfresco.repo.workflow.WorkflowModel.ASSOC_PACKAGE;
import static org.alfresco.repo.workflow.WorkflowModel.ASSOC_PACKAGE_CONTAINS;
import static org.alfresco.repo.workflow.WorkflowModel.ASSOC_POOLED_ACTORS;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_DESCRIPTION;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_PACKAGE_ACTION_GROUP;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_PACKAGE_ITEM_ACTION_GROUP;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_PRIORITY;
import static org.alfresco.repo.workflow.WorkflowModel.PROP_STATUS;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyMap; import static org.mockito.Matchers.anyMap;
import static org.mockito.Matchers.eq; import static org.mockito.Matchers.eq;
@@ -51,7 +61,6 @@ import org.alfresco.repo.forms.FormData.FieldData;
import org.alfresco.repo.forms.processor.node.DefaultFieldProcessor; import org.alfresco.repo.forms.processor.node.DefaultFieldProcessor;
import org.alfresco.repo.forms.processor.node.MockClassAttributeDefinition; import org.alfresco.repo.forms.processor.node.MockClassAttributeDefinition;
import org.alfresco.repo.forms.processor.node.MockFieldProcessorRegistry; import org.alfresco.repo.forms.processor.node.MockFieldProcessorRegistry;
import org.alfresco.repo.workflow.WorkflowModel;
import org.alfresco.service.cmr.dictionary.AssociationDefinition; import org.alfresco.service.cmr.dictionary.AssociationDefinition;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
@@ -84,12 +93,12 @@ public class WorkflowFormProcessorTest extends TestCase
{ {
private static final String TASK_DEF_NAME = "TaskDef"; private static final String TASK_DEF_NAME = "TaskDef";
private static final String WF_DEF_NAME = "foo$wf:bar"; private static final String WF_DEF_NAME = "foo$wf:bar";
private static final QName PRIORITY_NAME = WorkflowModel.PROP_PRIORITY; private static final QName PRIORITY_NAME = PROP_PRIORITY;
private static final QName DESC_NAME = WorkflowModel.PROP_DESCRIPTION; private static final QName DESC_NAME = PROP_DESCRIPTION;
private static final QName STATUS_NAME = WorkflowModel.PROP_STATUS; private static final QName STATUS_NAME = PROP_STATUS;
private static final QName PROP_WITH_ = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "some_prop"); private static final QName PROP_WITH_ = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "some_prop");
private static final QName ACTORS_NAME = WorkflowModel.ASSOC_POOLED_ACTORS; private static final QName ACTORS_NAME = ASSOC_POOLED_ACTORS;
private static final QName ASSIGNEE_NAME = WorkflowModel.ASSOC_ASSIGNEE; private static final QName ASSIGNEE_NAME = ASSOC_ASSIGNEE;
private static final QName ASSOC_WITH_ = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "some_assoc"); private static final QName ASSOC_WITH_ = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "some_assoc");
private static final NodeRef FAKE_NODE = new NodeRef(NamespaceService.BPM_MODEL_1_0_URI + "/FakeNode"); private static final NodeRef FAKE_NODE = new NodeRef(NamespaceService.BPM_MODEL_1_0_URI + "/FakeNode");
private static final NodeRef FAKE_NODE2 = new NodeRef(NamespaceService.BPM_MODEL_1_0_URI + "/FakeNode2"); private static final NodeRef FAKE_NODE2 = new NodeRef(NamespaceService.BPM_MODEL_1_0_URI + "/FakeNode2");
@@ -198,11 +207,15 @@ public class WorkflowFormProcessorTest extends TestCase
Form form = processForm(); Form form = processForm();
List<String> fieldDefs = form.getFieldDefinitionNames(); List<String> fieldDefs = form.getFieldDefinitionNames();
assertTrue(fieldDefs.contains(ASSIGNEE_NAME.toPrefixString(namespaceService))); assertTrue(fieldDefs.contains(ASSIGNEE_NAME.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(ACTORS_NAME.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(DESC_NAME.toPrefixString(namespaceService))); assertTrue(fieldDefs.contains(DESC_NAME.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(PRIORITY_NAME.toPrefixString(namespaceService))); assertTrue(fieldDefs.contains(PRIORITY_NAME.toPrefixString(namespaceService)));
assertTrue(fieldDefs.contains(PackageItemsFieldProcessor.KEY)); assertTrue(fieldDefs.contains(PackageItemsFieldProcessor.KEY));
// Check 'default ignored fields' are proerly removed from defaults.
assertFalse(fieldDefs.contains(ACTORS_NAME.toPrefixString(namespaceService)));
assertFalse(fieldDefs.contains(PROP_PACKAGE_ACTION_GROUP.toPrefixString(namespaceService)));
assertFalse(fieldDefs.contains(PROP_PACKAGE_ITEM_ACTION_GROUP.toPrefixString(namespaceService)));
Serializable fieldData = (Serializable) Collections.emptyList(); Serializable fieldData = (Serializable) Collections.emptyList();
FormData formData = form.getFormData(); FormData formData = form.getFormData();
assertEquals(fieldData, formData.getFieldData("assoc_bpm_assignee").getValue()); assertEquals(fieldData, formData.getFieldData("assoc_bpm_assignee").getValue());
@@ -230,7 +243,7 @@ public class WorkflowFormProcessorTest extends TestCase
// Check adds description property and Package. // Check adds description property and Package.
assertEquals(2, actualProperties.size()); assertEquals(2, actualProperties.size());
assertEquals(value, actualProperties.get(DESC_NAME)); assertEquals(value, actualProperties.get(DESC_NAME));
assertEquals(PCKG_NODE, actualProperties.get(WorkflowModel.ASSOC_PACKAGE)); assertEquals(PCKG_NODE, actualProperties.get(ASSOC_PACKAGE));
} }
public void testPersistPropertyWith_() throws Exception public void testPersistPropertyWith_() throws Exception
@@ -317,7 +330,7 @@ public class WorkflowFormProcessorTest extends TestCase
ArrayList<ChildAssociationRef> results = new ArrayList<ChildAssociationRef>(children.length); ArrayList<ChildAssociationRef> results = new ArrayList<ChildAssociationRef>(children.length);
for (NodeRef nodeRef : children) for (NodeRef nodeRef : children)
{ {
ChildAssociationRef child = new ChildAssociationRef(WorkflowModel.ASSOC_PACKAGE_CONTAINS, PCKG_NODE, null, nodeRef); ChildAssociationRef child = new ChildAssociationRef(ASSOC_PACKAGE_CONTAINS, PCKG_NODE, null, nodeRef);
results.add(child); results.add(child);
} }
when(nodeService.getChildAssocs(eq(PCKG_NODE), (QNamePattern)any(), (QNamePattern)any())) when(nodeService.getChildAssocs(eq(PCKG_NODE), (QNamePattern)any(), (QNamePattern)any()))
@@ -338,7 +351,7 @@ public class WorkflowFormProcessorTest extends TestCase
verify(nodeService, times(times)) verify(nodeService, times(times))
.addChild(eq(PCKG_NODE), .addChild(eq(PCKG_NODE),
eq(child), eq(child),
eq(WorkflowModel.ASSOC_PACKAGE_CONTAINS), eq(ASSOC_PACKAGE_CONTAINS),
(QName)any()); (QName)any());
} }
@@ -510,13 +523,13 @@ public class WorkflowFormProcessorTest extends TestCase
properties.put(PROP_WITH_, with_); properties.put(PROP_WITH_, with_);
// Add a Package Action property // Add a Package Action property
QName pckgActionGroup = WorkflowModel.PROP_PACKAGE_ACTION_GROUP; QName pckgActionGroup = PROP_PACKAGE_ACTION_GROUP;
PropertyDefinition pckgAction = MockClassAttributeDefinition.mockPropertyDefinition(pckgActionGroup, textType, PropertyDefinition pckgAction = MockClassAttributeDefinition.mockPropertyDefinition(pckgActionGroup, textType,
"add_package_item_actions"); "add_package_item_actions");
properties.put(pckgActionGroup, pckgAction); properties.put(pckgActionGroup, pckgAction);
// Add a Package Action property // Add a Package Action property
QName pckgItemActionGroup = WorkflowModel.PROP_PACKAGE_ITEM_ACTION_GROUP; QName pckgItemActionGroup = PROP_PACKAGE_ITEM_ACTION_GROUP;
PropertyDefinition pckgItemAction = MockClassAttributeDefinition.mockPropertyDefinition(pckgItemActionGroup, PropertyDefinition pckgItemAction = MockClassAttributeDefinition.mockPropertyDefinition(pckgItemActionGroup,
textType, "start_package_item_actions"); textType, "start_package_item_actions");
properties.put(pckgItemActionGroup, pckgItemAction); properties.put(pckgItemActionGroup, pckgItemAction);
@@ -597,7 +610,7 @@ public class WorkflowFormProcessorTest extends TestCase
private NodeService makeNodeService() private NodeService makeNodeService()
{ {
NodeService service = mock(NodeService.class); NodeService service = mock(NodeService.class);
when(service.hasAspect(PCKG_NODE, WorkflowModel.ASPECT_WORKFLOW_PACKAGE)) when(service.hasAspect(PCKG_NODE, ASPECT_WORKFLOW_PACKAGE))
.thenReturn(true); .thenReturn(true);
return service; return service;
} }