ALF-3974 Cleaned up various classes after the Form Processor refactor. Added @since tags to all new classes. Moved TaskUpdater, WorkflowBuilder and PackageManager into org.alfresco.repo.workflow.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21431 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
N Smith
2010-07-27 10:01:55 +00:00
parent 876ebf377f
commit 1ab5c1fc62
46 changed files with 245 additions and 188 deletions

View File

@@ -137,15 +137,15 @@
parent="qnameFieldProcessor" /> parent="qnameFieldProcessor" />
<bean id="encodingFieldProcessor" <bean id="encodingFieldProcessor"
class="org.alfresco.repo.forms.processor.node.TransientEncodingFieldProcessor" class="org.alfresco.repo.forms.processor.node.EncodingFieldProcessor"
parent="baseFieldProcessor" /> parent="baseFieldProcessor" />
<bean id="mimetypeFieldProcessor" <bean id="mimetypeFieldProcessor"
class="org.alfresco.repo.forms.processor.node.TransientMimetypeFieldProcessor" class="org.alfresco.repo.forms.processor.node.MimetypeFieldProcessor"
parent="baseFieldProcessor" /> parent="baseFieldProcessor" />
<bean id="sizeFieldProcessor" <bean id="sizeFieldProcessor"
class="org.alfresco.repo.forms.processor.node.TransientSizeFieldProcessor" class="org.alfresco.repo.forms.processor.node.SizeFieldProcessor"
parent="baseFieldProcessor" /> parent="baseFieldProcessor" />
<bean id="defaultFieldProcessor" <bean id="defaultFieldProcessor"

View File

@@ -25,6 +25,13 @@ import org.apache.commons.logging.Log;
import com.sun.star.lang.IllegalArgumentException; import com.sun.star.lang.IllegalArgumentException;
/**
*
* @since 3.4
* @author Nick Smith
*
* @param <Data>
*/
public abstract class AbstractFieldProcessor<Data> implements FieldProcessor public abstract class AbstractFieldProcessor<Data> implements FieldProcessor
{ {
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -21,6 +21,12 @@ package org.alfresco.repo.forms.processor;
import org.alfresco.repo.forms.Field; import org.alfresco.repo.forms.Field;
/**
*
* @since 3.4
* @author Nick Smith
*
*/
public interface FieldProcessor public interface FieldProcessor
{ {
Field generateField(String fieldName, FormCreationData data); Field generateField(String fieldName, FormCreationData data);

View File

@@ -24,6 +24,11 @@ import java.util.Map;
import org.alfresco.repo.forms.Field; import org.alfresco.repo.forms.Field;
/**
* @since 3.4
* @author Nick Smith
*
*/
public class FieldProcessorRegistry public class FieldProcessorRegistry
{ {
private final Map<String, FieldProcessor> processors = new HashMap<String, FieldProcessor>(); private final Map<String, FieldProcessor> processors = new HashMap<String, FieldProcessor>();

View File

@@ -30,6 +30,7 @@ import java.util.Map;
/** /**
* Simple DTO containing various objects needed to generate Forms. * Simple DTO containing various objects needed to generate Forms.
* @since 3.4
* @author Nick Smith * @author Nick Smith
*/ */
public class FormCreationData public class FormCreationData

View File

@@ -20,7 +20,11 @@
package org.alfresco.repo.forms.processor; package org.alfresco.repo.forms.processor;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
* @param <PersistType>
*/ */
public interface FormPersister<PersistType> public interface FormPersister<PersistType>
{ {

View File

@@ -19,6 +19,12 @@ 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;
/**
*
* @since 3.4
* @author Nick Smith
*
*/
public class AssociationFieldProcessor extends QNameFieldProcessor<AssociationDefinition> public class AssociationFieldProcessor extends QNameFieldProcessor<AssociationDefinition>
{ {
private static final Log logger = LogFactory.getLog(AssociationFieldProcessor.class); private static final Log logger = LogFactory.getLog(AssociationFieldProcessor.class);
@@ -50,7 +56,7 @@ public class AssociationFieldProcessor extends QNameFieldProcessor<AssociationDe
public Field makeField(AssociationDefinition assocDef, Object value, FieldGroup group) public Field makeField(AssociationDefinition assocDef, Object value, FieldGroup group)
{ {
AssociationFieldDefinition fieldDef = makeAssociationFieldDefinition(assocDef, group); AssociationFieldDefinition fieldDef = makeAssociationFieldDefinition(assocDef, group);
return new ContentField(assocDef, fieldDef, value); return new ContentModelField(assocDef, fieldDef, value);
} }
/** /**

View File

@@ -30,14 +30,15 @@ import org.alfresco.service.namespace.QName;
/** /**
* @author Nick Smith * @author Nick Smith
* @since 3.4
*/ */
public class ContentField implements Field public class ContentModelField implements Field
{ {
private final FieldDefinition fieldDefinition; private final FieldDefinition fieldDefinition;
private final ClassAttributeDefinition classDefinition; private final ClassAttributeDefinition classDefinition;
private final Object value; private final Object value;
public ContentField(PropertyDefinition propertyDefinition, public ContentModelField(PropertyDefinition propertyDefinition,
PropertyFieldDefinition fieldDef, Object value) PropertyFieldDefinition fieldDef, Object value)
{ {
this.classDefinition = propertyDefinition; this.classDefinition = propertyDefinition;
@@ -45,7 +46,7 @@ public class ContentField implements Field
this.value = value; this.value = value;
} }
public ContentField(AssociationDefinition assocDefinition, public ContentModelField(AssociationDefinition assocDefinition,
AssociationFieldDefinition fieldDef, Object value) AssociationFieldDefinition fieldDef, Object value)
{ {
this.classDefinition = assocDefinition; this.classDefinition = assocDefinition;
@@ -57,7 +58,7 @@ public class ContentField implements Field
* This constructor should only be used to create FieldInfo for transient properties such as encoding, mimetype or size. * This constructor should only be used to create FieldInfo for transient properties such as encoding, mimetype or size.
* @param fieldDef The PropertyFieldDefinition for the transient property. * @param fieldDef The PropertyFieldDefinition for the transient property.
*/ */
public ContentField(FieldDefinition fieldDef, Object value) public ContentModelField(FieldDefinition fieldDef, Object value)
{ {
this.classDefinition = null; this.classDefinition = null;
this.fieldDefinition = fieldDef; this.fieldDefinition = fieldDef;

View File

@@ -22,6 +22,8 @@ package org.alfresco.repo.forms.processor.node;
import org.alfresco.repo.forms.processor.FieldProcessorRegistry; import org.alfresco.repo.forms.processor.FieldProcessorRegistry;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */

View File

@@ -18,6 +18,13 @@
*/ */
package org.alfresco.repo.forms.processor.node; 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_PREFIX;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DATA_REMOVED_SUFFIX;
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.DEFAULT_CONTENT_MIMETYPE;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -37,7 +44,6 @@ import org.alfresco.repo.forms.FormException;
import org.alfresco.repo.forms.FormData.FieldData; import org.alfresco.repo.forms.FormData.FieldData;
import org.alfresco.repo.forms.processor.FilteredFormProcessor; import org.alfresco.repo.forms.processor.FilteredFormProcessor;
import org.alfresco.repo.forms.processor.FormCreationData; import org.alfresco.repo.forms.processor.FormCreationData;
import org.alfresco.repo.forms.processor.workflow.DataKeyMatcher;
import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.AspectDefinition;
import org.alfresco.service.cmr.dictionary.AssociationDefinition; import org.alfresco.service.cmr.dictionary.AssociationDefinition;
import org.alfresco.service.cmr.dictionary.ChildAssociationDefinition; import org.alfresco.service.cmr.dictionary.ChildAssociationDefinition;
@@ -70,48 +76,11 @@ import org.springframework.extensions.surf.util.I18NUtil;
* form processors that deal with Alfresco content models i.e. types and nodes. * form processors that deal with Alfresco content models i.e. types and nodes.
* *
* @author Gavin Cornwell * @author Gavin Cornwell
* @author Nick Smith
*/ */
public abstract class ContentModelFormProcessor<ItemType, PersistType> extends public abstract class ContentModelFormProcessor<ItemType, PersistType> extends
FilteredFormProcessor<ItemType, PersistType> FilteredFormProcessor<ItemType, PersistType>
{ {
/** Public constants */
public static final String ON = "on";
public static final String PROP = "prop";
public static final String ASSOC = "assoc";
public static final String DATA_KEY_SEPARATOR = "_";
public static final String PROP_DATA_PREFIX = PROP + DATA_KEY_SEPARATOR;
public static final String ASSOC_DATA_PREFIX = ASSOC + DATA_KEY_SEPARATOR;
public static final String ASSOC_DATA_ADDED_SUFFIX = DATA_KEY_SEPARATOR + "added";
public static final String ASSOC_DATA_REMOVED_SUFFIX = DATA_KEY_SEPARATOR + "removed";
public static final String TRANSIENT_MIMETYPE = "mimetype";
public static final String TRANSIENT_SIZE = "size";
public static final String TRANSIENT_ENCODING = "encoding";
/** Protected constants */
protected static final String DEFAULT_CONTENT_MIMETYPE = "text/plain";
protected static final String MSG_MIMETYPE_LABEL = "form_service.mimetype.label";
protected static final String MSG_MIMETYPE_DESC = "form_service.mimetype.description";
protected static final String MSG_ENCODING_LABEL = "form_service.encoding.label";
protected static final String MSG_ENCODING_DESC = "form_service.encoding.description";
protected static final String MSG_SIZE_LABEL = "form_service.size.label";
protected static final String MSG_SIZE_DESC = "form_service.size.description";
/** Services */ /** Services */
protected NodeService nodeService; protected NodeService nodeService;
@@ -145,8 +114,6 @@ public abstract class ContentModelFormProcessor<ItemType, PersistType> extends
*/ */
protected Pattern associationNamePattern = Pattern.compile(ASSOC_DATA_PREFIX + "([a-zA-Z0-9]+)_(.*)(_[a-zA-Z]+)"); protected Pattern associationNamePattern = Pattern.compile(ASSOC_DATA_PREFIX + "([a-zA-Z0-9]+)_(.*)(_[a-zA-Z]+)");
private DataKeyMatcher keyMatcher;
/** /**
* Sets the node service * Sets the node service
* *
@@ -185,7 +152,6 @@ public abstract class ContentModelFormProcessor<ItemType, PersistType> extends
public void setNamespaceService(NamespaceService namespaceService) public void setNamespaceService(NamespaceService namespaceService)
{ {
this.namespaceService = namespaceService; this.namespaceService = namespaceService;
this.keyMatcher = new DataKeyMatcher(namespaceService);
} }
/** /**
@@ -509,15 +475,15 @@ public abstract class ContentModelFormProcessor<ItemType, PersistType> extends
{ {
String fieldName = tppm.group(1); String fieldName = tppm.group(1);
if (fieldName.equals(TRANSIENT_MIMETYPE)) if (fieldName.equals(MimetypeFieldProcessor.KEY))
{ {
processMimetypePropertyPersist(nodeRef, fieldData, propsToPersist); processMimetypePropertyPersist(nodeRef, fieldData, propsToPersist);
} }
else if (fieldName.equals(TRANSIENT_ENCODING)) else if (fieldName.equals(EncodingFieldProcessor.KEY))
{ {
processEncodingPropertyPersist(nodeRef, fieldData, propsToPersist); processEncodingPropertyPersist(nodeRef, fieldData, propsToPersist);
} }
else if (fieldName.equals(TRANSIENT_SIZE)) else if (fieldName.equals(SizeFieldProcessor.KEY))
{ {
// the size property is well known but should never be // the size property is well known but should never be
// persisted // persisted
@@ -814,7 +780,7 @@ public abstract class ContentModelFormProcessor<ItemType, PersistType> extends
if (data != null) if (data != null)
{ {
FieldData mimetypeField = data.getFieldData(PROP + DATA_KEY_SEPARATOR + TRANSIENT_MIMETYPE); FieldData mimetypeField = data.getFieldData(PROP_DATA_PREFIX + MimetypeFieldProcessor.KEY);
if (mimetypeField != null) if (mimetypeField != null)
{ {
String mimetypeFieldValue = (String)mimetypeField.getValue(); String mimetypeFieldValue = (String)mimetypeField.getValue();

View File

@@ -32,7 +32,10 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class DefaultFieldBuilder public class DefaultFieldBuilder
{ {

View File

@@ -28,6 +28,12 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/**
*
* @since 3.4
* @author Nick Smith
*
*/
public class DefaultFieldProcessor extends QNameFieldProcessor<ClassAttributeDefinition> implements InitializingBean public class DefaultFieldProcessor extends QNameFieldProcessor<ClassAttributeDefinition> implements InitializingBean
{ {
private static final Log logger = LogFactory.getLog(DefaultFieldProcessor.class); private static final Log logger = LogFactory.getLog(DefaultFieldProcessor.class);

View File

@@ -20,7 +20,6 @@
package org.alfresco.repo.forms.processor.node; package org.alfresco.repo.forms.processor.node;
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.TRANSIENT_ENCODING;
import org.alfresco.repo.forms.FieldDefinition; import org.alfresco.repo.forms.FieldDefinition;
import org.alfresco.repo.forms.PropertyFieldDefinition; import org.alfresco.repo.forms.PropertyFieldDefinition;
@@ -29,10 +28,18 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
public class TransientEncodingFieldProcessor extends TransientFieldProcessor /**
*
* @since 3.4
* @author Nick Smith
*
*/
public class EncodingFieldProcessor extends TransientFieldProcessor
{ {
private static final Log logger = LogFactory.getLog(TransientEncodingFieldProcessor.class); private static final Log logger = LogFactory.getLog(EncodingFieldProcessor.class);
public static final String KEY = "encoding";
private static final String MSG_ENCODING_LABEL = "form_service.encoding.label"; private static final String MSG_ENCODING_LABEL = "form_service.encoding.label";
private static final String MSG_ENCODING_DESC = "form_service.encoding.description"; private static final String MSG_ENCODING_DESC = "form_service.encoding.description";
@@ -45,8 +52,8 @@ public class TransientEncodingFieldProcessor extends TransientFieldProcessor
@Override @Override
protected FieldDefinition makeTransientFieldDefinition() protected FieldDefinition makeTransientFieldDefinition()
{ {
String dataKeyName = PROP_DATA_PREFIX + TRANSIENT_ENCODING; String dataKeyName = PROP_DATA_PREFIX + KEY;
PropertyFieldDefinition encodingField = new PropertyFieldDefinition(TRANSIENT_ENCODING, PropertyFieldDefinition encodingField = new PropertyFieldDefinition(KEY,
DataTypeDefinition.TEXT.getLocalName()); DataTypeDefinition.TEXT.getLocalName());
encodingField.setLabel(I18NUtil.getMessage(MSG_ENCODING_LABEL)); encodingField.setLabel(I18NUtil.getMessage(MSG_ENCODING_LABEL));
encodingField.setDescription(I18NUtil.getMessage(MSG_ENCODING_DESC)); encodingField.setDescription(I18NUtil.getMessage(MSG_ENCODING_DESC));
@@ -57,6 +64,6 @@ public class TransientEncodingFieldProcessor extends TransientFieldProcessor
@Override @Override
protected String getRegistryKey() protected String getRegistryKey()
{ {
return FormFieldConstants.TRANSIENT_ENCODING; return KEY;
} }
} }

View File

@@ -40,7 +40,10 @@ import org.alfresco.service.namespace.NamespaceServiceMemoryImpl;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class FieldProcessorTest extends TestCase public class FieldProcessorTest extends TestCase
{ {

View File

@@ -35,6 +35,7 @@ import org.alfresco.service.namespace.NamespaceService;
* {@link PropertyDefinition PropertyDefinitions} and * {@link PropertyDefinition PropertyDefinitions} and
* {@link AssociationDefinition AssociationDefinitions} * {@link AssociationDefinition AssociationDefinitions}
* *
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */

View File

@@ -20,6 +20,7 @@
package org.alfresco.repo.forms.processor.node; package org.alfresco.repo.forms.processor.node;
/** /**
* @since 3.4
* @author Nick Smith * @author Nick Smith
*/ */
public interface FormFieldConstants public interface FormFieldConstants
@@ -43,13 +44,11 @@ public interface FormFieldConstants
public static final String ASSOC_DATA_REMOVED_SUFFIX = DATA_KEY_SEPARATOR + "removed"; public static final String ASSOC_DATA_REMOVED_SUFFIX = DATA_KEY_SEPARATOR + "removed";
public static final String TRANSIENT_MIMETYPE = "mimetype";
public static final String TRANSIENT_SIZE = "size";
public static final String TRANSIENT_ENCODING = "encoding";
public static final String ADDED = "added"; public static final String ADDED = "added";
public static final String REMOVED = "removed"; public static final String REMOVED = "removed";
/** Protected constants */
public static final String DEFAULT_CONTENT_MIMETYPE = "text/plain";
} }

View File

@@ -38,6 +38,7 @@ import org.alfresco.service.namespace.QName;
* Simple data transfer object used by the ContentModelFormProcessor and its * Simple data transfer object used by the ContentModelFormProcessor and its
* descendants. * descendants.
* *
* @since 3.4
* @author Nick Smith * @author Nick Smith
*/ */
public class ItemData<ItemType> implements TransientValueGetter public class ItemData<ItemType> implements TransientValueGetter

View File

@@ -20,7 +20,6 @@
package org.alfresco.repo.forms.processor.node; package org.alfresco.repo.forms.processor.node;
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.TRANSIENT_MIMETYPE;
import org.alfresco.repo.forms.FieldDefinition; import org.alfresco.repo.forms.FieldDefinition;
import org.alfresco.repo.forms.PropertyFieldDefinition; import org.alfresco.repo.forms.PropertyFieldDefinition;
@@ -29,10 +28,19 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
public class TransientMimetypeFieldProcessor extends TransientFieldProcessor /**
*
* @since 3.4
* @author Nick Smith
*
*/
public class MimetypeFieldProcessor extends TransientFieldProcessor
{ {
private static final Log logger = LogFactory.getLog(TransientMimetypeFieldProcessor.class); private static final Log logger = LogFactory.getLog(MimetypeFieldProcessor.class);
private static final String MSG_MIMETYPE_LABEL = "form_service.mimetype.label";
public static final String KEY = "mimetype";
private static final String MSG_MIMETYPE_LABEL = "form_service.mimetype.label";
private static final String MSG_MIMETYPE_DESC = "form_service.mimetype.description"; private static final String MSG_MIMETYPE_DESC = "form_service.mimetype.description";
@Override @Override
@@ -42,8 +50,8 @@ public class TransientMimetypeFieldProcessor extends TransientFieldProcessor
@Override @Override
protected FieldDefinition makeTransientFieldDefinition() { protected FieldDefinition makeTransientFieldDefinition() {
String dataKeyName = PROP_DATA_PREFIX + TRANSIENT_MIMETYPE; String dataKeyName = PROP_DATA_PREFIX + KEY;
PropertyFieldDefinition mimetypeField = new PropertyFieldDefinition(TRANSIENT_MIMETYPE, DataTypeDefinition.TEXT PropertyFieldDefinition mimetypeField = new PropertyFieldDefinition(KEY, DataTypeDefinition.TEXT
.getLocalName()); .getLocalName());
mimetypeField.setLabel(I18NUtil.getMessage(MSG_MIMETYPE_LABEL)); mimetypeField.setLabel(I18NUtil.getMessage(MSG_MIMETYPE_LABEL));
mimetypeField.setDescription(I18NUtil.getMessage(MSG_MIMETYPE_DESC)); mimetypeField.setDescription(I18NUtil.getMessage(MSG_MIMETYPE_DESC));
@@ -54,6 +62,6 @@ public class TransientMimetypeFieldProcessor extends TransientFieldProcessor
@Override @Override
protected String getRegistryKey() protected String getRegistryKey()
{ {
return FormFieldConstants.TRANSIENT_MIMETYPE; return KEY;
} }
} }

View File

@@ -40,7 +40,10 @@ import org.alfresco.service.cmr.dictionary.PropertyDefinition;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class MockClassAttributeDefinition implements PropertyDefinition, AssociationDefinition public class MockClassAttributeDefinition implements PropertyDefinition, AssociationDefinition
{ {

View File

@@ -1,10 +1,32 @@
/*
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.repo.forms.processor.node; package org.alfresco.repo.forms.processor.node;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.PROP; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.PROP;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.TRANSIENT_ENCODING;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.TRANSIENT_MIMETYPE;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.TRANSIENT_SIZE;
import org.alfresco.repo.forms.processor.FieldProcessor; import org.alfresco.repo.forms.processor.FieldProcessor;
import org.alfresco.repo.forms.processor.workflow.PackageItemsFieldProcessor; import org.alfresco.repo.forms.processor.workflow.PackageItemsFieldProcessor;
@@ -12,15 +34,21 @@ import org.alfresco.repo.forms.processor.workflow.TransitionFieldProcessor;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceService;
/**
*
* @since 3.4
* @author Nick Smith
*
*/
public class MockFieldProcessorRegistry extends ContentModelFieldProcessorRegistry public class MockFieldProcessorRegistry extends ContentModelFieldProcessorRegistry
{ {
public MockFieldProcessorRegistry(NamespaceService namespaceService, DictionaryService dictionaryService) public MockFieldProcessorRegistry(NamespaceService namespaceService, DictionaryService dictionaryService)
{ {
register(PROP, makePropertyFieldProcessor(namespaceService, dictionaryService)); register(PROP, makePropertyFieldProcessor(namespaceService, dictionaryService));
register(ASSOC, makeAssociationFieldProcessor(namespaceService, dictionaryService)); register(ASSOC, makeAssociationFieldProcessor(namespaceService, dictionaryService));
register(TRANSIENT_ENCODING, makeEncodingFieldProcessor()); register(EncodingFieldProcessor.KEY, makeEncodingFieldProcessor());
register(TRANSIENT_MIMETYPE, makeMimetypeFieldProcessor()); register(MimetypeFieldProcessor.KEY, makeMimetypeFieldProcessor());
register(TRANSIENT_SIZE, makeSizeFieldProcessor()); register(SizeFieldProcessor.KEY, makeSizeFieldProcessor());
register(TransitionFieldProcessor.KEY, makeTransitionFieldProcessor()); register(TransitionFieldProcessor.KEY, makeTransitionFieldProcessor());
register(PackageItemsFieldProcessor.KEY, makePackageItemFieldProcessor()); register(PackageItemsFieldProcessor.KEY, makePackageItemFieldProcessor());
setDefaultProcessor(makeDefaultFieldProcessor(namespaceService, dictionaryService)); setDefaultProcessor(makeDefaultFieldProcessor(namespaceService, dictionaryService));
@@ -60,19 +88,19 @@ public class MockFieldProcessorRegistry extends ContentModelFieldProcessorRegist
return processor; return processor;
} }
private TransientEncodingFieldProcessor makeEncodingFieldProcessor() private EncodingFieldProcessor makeEncodingFieldProcessor()
{ {
return new TransientEncodingFieldProcessor(); return new EncodingFieldProcessor();
} }
private TransientMimetypeFieldProcessor makeMimetypeFieldProcessor() private MimetypeFieldProcessor makeMimetypeFieldProcessor()
{ {
return new TransientMimetypeFieldProcessor(); return new MimetypeFieldProcessor();
} }
private TransientSizeFieldProcessor makeSizeFieldProcessor() private SizeFieldProcessor makeSizeFieldProcessor()
{ {
return new TransientSizeFieldProcessor(); return new SizeFieldProcessor();
} }
private PropertyFieldProcessor makePropertyFieldProcessor(NamespaceService namespaceService, private PropertyFieldProcessor makePropertyFieldProcessor(NamespaceService namespaceService,

View File

@@ -48,6 +48,7 @@ import org.apache.commons.logging.LogFactory;
* repository nodes. * repository nodes.
* *
* @author Gavin Cornwell * @author Gavin Cornwell
* @author Nick Smith
*/ */
public class NodeFormProcessor extends ContentModelFormProcessor<NodeRef, NodeRef> public class NodeFormProcessor extends ContentModelFormProcessor<NodeRef, NodeRef>
{ {
@@ -193,9 +194,9 @@ public class NodeFormProcessor extends ContentModelFormProcessor<NodeRef, NodeRe
ContentData contentData = getContentData(item); ContentData contentData = getContentData(item);
if(contentData!=null) if(contentData!=null)
{ {
values.put(TRANSIENT_ENCODING, contentData.getEncoding()); values.put(EncodingFieldProcessor.KEY, contentData.getEncoding());
values.put(TRANSIENT_MIMETYPE, contentData.getMimetype()); values.put(MimetypeFieldProcessor.KEY, contentData.getMimetype());
values.put(TRANSIENT_SIZE, contentData.getSize()); values.put(SizeFieldProcessor.KEY, contentData.getSize());
} }
return values; return values;
} }

View File

@@ -45,6 +45,12 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
/**
*
* @since 3.4
* @author Nick Smith
*
*/
public class PropertyFieldProcessor extends QNameFieldProcessor<PropertyDefinition> public class PropertyFieldProcessor extends QNameFieldProcessor<PropertyDefinition>
{ {
private static final Log logger = LogFactory.getLog(PropertyFieldProcessor.class); private static final Log logger = LogFactory.getLog(PropertyFieldProcessor.class);
@@ -83,7 +89,7 @@ public class PropertyFieldProcessor extends QNameFieldProcessor<PropertyDefiniti
public Field makeField(PropertyDefinition propDef, Object value, FieldGroup group) public Field makeField(PropertyDefinition propDef, Object value, FieldGroup group)
{ {
PropertyFieldDefinition fieldDef = makePropertyFieldDefinition(propDef, group); PropertyFieldDefinition fieldDef = makePropertyFieldDefinition(propDef, group);
return new ContentField(propDef, fieldDef, value); return new ContentModelField(propDef, fieldDef, value);
} }
@Override @Override

View File

@@ -30,6 +30,13 @@ import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
/**
*
* @since 3.4
* @author Nick Smith
*
* @param <Type>
*/
public abstract class QNameFieldProcessor<Type extends ClassAttributeDefinition> extends AbstractFieldProcessor<ItemData<?>> public abstract class QNameFieldProcessor<Type extends ClassAttributeDefinition> extends AbstractFieldProcessor<ItemData<?>>
{ {
protected NamespaceService namespaceService; protected NamespaceService namespaceService;

View File

@@ -20,7 +20,6 @@
package org.alfresco.repo.forms.processor.node; package org.alfresco.repo.forms.processor.node;
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.TRANSIENT_SIZE;
import org.alfresco.repo.forms.FieldDefinition; import org.alfresco.repo.forms.FieldDefinition;
import org.alfresco.repo.forms.PropertyFieldDefinition; import org.alfresco.repo.forms.PropertyFieldDefinition;
@@ -29,9 +28,19 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
public class TransientSizeFieldProcessor extends TransientFieldProcessor /**
*
* @since 3.4
* @author Nick Smith
*
*/
public class SizeFieldProcessor extends TransientFieldProcessor
{ {
private static final Log logger = LogFactory.getLog(TransientSizeFieldProcessor.class); private static final Log logger = LogFactory.getLog(SizeFieldProcessor.class);
public static final String KEY = "size";
private static final String MSG_SIZE_LABEL = "form_service.size.label"; private static final String MSG_SIZE_LABEL = "form_service.size.label";
private static final String MSG_SIZE_DESC = "form_service.size.description"; private static final String MSG_SIZE_DESC = "form_service.size.description";
@@ -44,8 +53,8 @@ public class TransientSizeFieldProcessor extends TransientFieldProcessor
@Override @Override
protected FieldDefinition makeTransientFieldDefinition() protected FieldDefinition makeTransientFieldDefinition()
{ {
String dataKeyName = PROP_DATA_PREFIX + TRANSIENT_SIZE; String dataKeyName = PROP_DATA_PREFIX + KEY;
PropertyFieldDefinition sizeField = new PropertyFieldDefinition(TRANSIENT_SIZE, PropertyFieldDefinition sizeField = new PropertyFieldDefinition(KEY,
DataTypeDefinition.LONG.getLocalName()); DataTypeDefinition.LONG.getLocalName());
sizeField.setLabel(I18NUtil.getMessage(MSG_SIZE_LABEL)); sizeField.setLabel(I18NUtil.getMessage(MSG_SIZE_LABEL));
sizeField.setDescription(I18NUtil.getMessage(MSG_SIZE_DESC)); sizeField.setDescription(I18NUtil.getMessage(MSG_SIZE_DESC));
@@ -57,6 +66,6 @@ public class TransientSizeFieldProcessor extends TransientFieldProcessor
@Override @Override
protected String getRegistryKey() protected String getRegistryKey()
{ {
return FormFieldConstants.TRANSIENT_SIZE; return KEY;
} }
} }

View File

@@ -24,6 +24,12 @@ import org.alfresco.repo.forms.FieldDefinition;
import org.alfresco.repo.forms.processor.AbstractFieldProcessor; import org.alfresco.repo.forms.processor.AbstractFieldProcessor;
import org.alfresco.repo.forms.processor.FormCreationData; import org.alfresco.repo.forms.processor.FormCreationData;
/**
*
* @since 3.4
* @author Nick Smith
*
*/
public abstract class TransientFieldProcessor extends AbstractFieldProcessor<TransientValueGetter> public abstract class TransientFieldProcessor extends AbstractFieldProcessor<TransientValueGetter>
{ {
/* (non-Javadoc) /* (non-Javadoc)
@@ -37,7 +43,7 @@ public abstract class TransientFieldProcessor extends AbstractFieldProcessor<Tra
Object value = getValue(fieldName, typedData); Object value = getValue(fieldName, typedData);
if (transientPropDef != null) if (transientPropDef != null)
{ {
fieldInfo = new ContentField(transientPropDef, value); fieldInfo = new ContentModelField(transientPropDef, value);
} }
return fieldInfo; return fieldInfo;
} }

View File

@@ -20,6 +20,8 @@
package org.alfresco.repo.forms.processor.node; package org.alfresco.repo.forms.processor.node;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */

View File

@@ -39,11 +39,14 @@ import org.alfresco.util.GUID;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.*;
/** /**
* FormProcessor implementation that can generate and persist Form objects for * FormProcessor implementation that can generate and persist Form objects for
* types in the Alfresco content model. * types in the Alfresco content model.
* *
* @author Gavin Cornwell * @author Gavin Cornwell
* @author 3.4
*/ */
public class TypeFormProcessor extends ContentModelFormProcessor<TypeDefinition, NodeRef> public class TypeFormProcessor extends ContentModelFormProcessor<TypeDefinition, NodeRef>
{ {

View File

@@ -35,7 +35,12 @@ import org.alfresco.service.cmr.workflow.WorkflowService;
import org.alfresco.util.ParameterCheck; import org.alfresco.util.ParameterCheck;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
* @param <ItemType>
* @param <PersistType>
*/ */
public abstract class AbstractWorkflowFormProcessor<ItemType, PersistType> extends ContentModelFormProcessor<ItemType, PersistType> public abstract class AbstractWorkflowFormProcessor<ItemType, PersistType> extends ContentModelFormProcessor<ItemType, PersistType>
{ {

View File

@@ -34,8 +34,11 @@ import org.apache.commons.logging.LogFactory;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
* @param <T>
*/ */
public abstract class ContentModelFormPersister<T> implements FormPersister<T> public abstract class ContentModelFormPersister<T> implements FormPersister<T>
{ {

View File

@@ -22,6 +22,8 @@ package org.alfresco.repo.forms.processor.workflow;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */
@@ -93,24 +95,4 @@ public class DataKeyInfo
return isAdd; return isAdd;
} }
/**
* Implements the visitor pattern. Takes a DataKeyInfoVisitor and calls the
* appropriate visit method based on the fieldType.
*
* @param <T>
* @param visitor
* @return
*/
public <T> T visit(DataKeyInfoVisitor<T> visitor)
{
switch(fieldType)
{
case ASSOCIATION: return visitor.visitAssociation(this);
case PROPERTY: return visitor.visitProperty(this);
case TRANSIENT_ASSOCIATION: return visitor.visitTransientAssociation(this);
case TRANSIENT_PROPERTY: return visitor.visitTransientProperty(this);
default: return null; //Should never be reached.
}
}
} }

View File

@@ -1,60 +0,0 @@
/*
* Copyright (C) 2005-2010 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.forms.processor.workflow;
/**
* Visitor interface used to enable the visitor pattern on {@link DataKeyInfo}
* instances. Implementations of this interface can call
* <code>DataKeyInfo.visit(DataKeyInfoVisitor)</code> to have the appropriate
* visit method called on the visitor, based on the fieldType of the
* {@link DataKeyInfo} instance.
*
* @author Nick Smith
*/
public interface DataKeyInfoVisitor<T>
{
/**
* Called for {@link DataKeyInfo} instances with a field type of ASSOCIATION.
* @param info
* @return
*/
T visitAssociation(DataKeyInfo info);
/**
* Called for {@link DataKeyInfo} instances with a field type of PROPERTY.
* @param info
* @return
*/
T visitProperty(DataKeyInfo info);
/**
* Called for {@link DataKeyInfo} instances with a field type of TRANSIENT_ASSOCIATION.
* @param info
* @return
*/
T visitTransientAssociation(DataKeyInfo info);
/**
* Called for {@link DataKeyInfo} instances with a field type of TRANSIENT_PROPERTY.
* @param info
* @return
*/
T visitTransientProperty(DataKeyInfo info);
}

View File

@@ -28,6 +28,8 @@ import org.alfresco.service.namespace.QName;
import static org.alfresco.repo.forms.processor.node.FormFieldConstants.*; import static org.alfresco.repo.forms.processor.node.FormFieldConstants.*;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */

View File

@@ -20,6 +20,8 @@
package org.alfresco.repo.forms.processor.workflow; package org.alfresco.repo.forms.processor.workflow;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */

View File

@@ -21,10 +21,12 @@ package org.alfresco.repo.forms.processor.workflow;
import org.alfresco.repo.forms.FormData.FieldData; import org.alfresco.repo.forms.FormData.FieldData;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
* @param <T>
*/ */
public interface FormPersister<T> public interface FormPersister<T>
{ {

View File

@@ -32,6 +32,8 @@ import static org.alfresco.repo.forms.processor.node.FormFieldConstants.ASSOC_DA
/** /**
* {@link FieldProcessor} for handling package contents when displaying Workflow and Task Forms. * {@link FieldProcessor} for handling package contents when displaying Workflow and Task Forms.
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*/ */
public class PackageItemsFieldProcessor extends TransientFieldProcessor public class PackageItemsFieldProcessor extends TransientFieldProcessor

View File

@@ -24,6 +24,7 @@ import java.util.List;
import org.alfresco.repo.forms.FormData.FieldData; import org.alfresco.repo.forms.FormData.FieldData;
import org.alfresco.repo.forms.processor.node.ItemData; import org.alfresco.repo.forms.processor.node.ItemData;
import org.alfresco.repo.workflow.TaskUpdater;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
@@ -34,6 +35,8 @@ import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */

View File

@@ -47,7 +47,10 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class TaskFormProcessor extends AbstractWorkflowFormProcessor<WorkflowTask, WorkflowTask> public class TaskFormProcessor extends AbstractWorkflowFormProcessor<WorkflowTask, WorkflowTask>
{ {

View File

@@ -79,7 +79,10 @@ import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class TaskFormProcessorTest extends TestCase public class TaskFormProcessorTest extends TestCase
{ {

View File

@@ -29,6 +29,8 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */

View File

@@ -38,7 +38,10 @@ import org.json.JSONException;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class TypedPropertyValueGetter public class TypedPropertyValueGetter
{ {

View File

@@ -23,6 +23,7 @@ import java.io.Serializable;
import java.util.List; import java.util.List;
import org.alfresco.repo.forms.processor.node.ItemData; import org.alfresco.repo.forms.processor.node.ItemData;
import org.alfresco.repo.workflow.WorkflowBuilder;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
@@ -34,6 +35,8 @@ import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
* *
*/ */

View File

@@ -35,6 +35,7 @@ import org.apache.commons.logging.LogFactory;
* Temporary FormProcessor implementation that can generate and persist * Temporary FormProcessor implementation that can generate and persist
* Form objects for workflow definitions. * Form objects for workflow definitions.
* *
*@since 3.4
* @author Nick Smith * @author Nick Smith
*/ */
public class WorkflowFormProcessor extends AbstractWorkflowFormProcessor<WorkflowDefinition, WorkflowInstance> public class WorkflowFormProcessor extends AbstractWorkflowFormProcessor<WorkflowDefinition, WorkflowInstance>

View File

@@ -22,7 +22,10 @@ package org.alfresco.repo.forms.processor.workflow;
import junit.framework.TestCase; import junit.framework.TestCase;
/** /**
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class WorkflowFormProcessorTest extends TestCase public class WorkflowFormProcessorTest extends TestCase
{ {

View File

@@ -17,7 +17,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.alfresco.repo.forms.processor.workflow; package org.alfresco.repo.workflow;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@@ -28,7 +28,6 @@ import java.util.Set;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.workflow.WorkflowModel;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
@@ -42,7 +41,14 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
/** /**
* This helper class is used to manage a workflow package. The manager is a
* stateful object which accumulates all the changes to be made to the package
* (such as adding and removing package items). These changes are then applied
* to the package when either the create() or update() method is called.
*
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class PackageManager public class PackageManager
{ {

View File

@@ -23,7 +23,7 @@
* http://www.alfresco.com/legal/licensing" * http://www.alfresco.com/legal/licensing"
*/ */
package org.alfresco.repo.forms.processor.workflow; package org.alfresco.repo.workflow;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap; import java.util.HashMap;
@@ -39,9 +39,10 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
/** /**
* A utility class for updating workflow tasks. This is a stateful object that * A helper class for updating and transitioning {@link WorkflowTask
* accumulates a set of updates to a task and then commits all the updates when * WorkflowTasks}. This is a stateful object that accumulates a set of updates
* the update() method is called. * to a task and then commits all the updates when either the update() or
* transition() method is called.
* *
* @since 3.4 * @since 3.4
* @author Nick Smith * @author Nick Smith

View File

@@ -17,14 +17,13 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.alfresco.repo.forms.processor.workflow; package org.alfresco.repo.workflow;
import java.io.Serializable; import java.io.Serializable;
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.workflow.WorkflowModel;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowDefinition;
@@ -36,10 +35,11 @@ import org.alfresco.service.cmr.workflow.WorkflowTask;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
/** /**
* A helper class used to start workflows. The builder accumuates all the * A helper class used to start workflows. The builder is a stateful object that
* changes to be made to the list of parameters and package items, then starts a * accumulates the various parameters and package items used to start the
* new workflow once the build() method is called. * workflow. The workflow is started when the build() method is called.
* *
* @since 3.4
* @author Nick Smith * @author Nick Smith
*/ */
public class WorkflowBuilder public class WorkflowBuilder