diff --git a/source/java/org/alfresco/repo/forms/processor/workflow/AbstractWorkflowFormProcessor.java b/source/java/org/alfresco/repo/forms/processor/workflow/AbstractWorkflowFormProcessor.java index 245acb5aa9..bbd9fa9528 100644 --- a/source/java/org/alfresco/repo/forms/processor/workflow/AbstractWorkflowFormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/workflow/AbstractWorkflowFormProcessor.java @@ -20,15 +20,19 @@ package org.alfresco.repo.forms.processor.workflow; import java.util.List; +import java.util.regex.Matcher; import org.alfresco.repo.forms.Form; import org.alfresco.repo.forms.FormData; +import org.alfresco.repo.forms.FormNotFoundException; +import org.alfresco.repo.forms.Item; import org.alfresco.repo.forms.FormData.FieldData; import org.alfresco.repo.forms.processor.FormCreationData; import org.alfresco.repo.forms.processor.node.ContentModelFormProcessor; import org.alfresco.repo.forms.processor.node.ItemData; import org.alfresco.repo.workflow.WorkflowModel; import org.alfresco.service.cmr.workflow.WorkflowService; +import org.alfresco.util.ParameterCheck; /** * @author Nick Smith @@ -71,6 +75,57 @@ public abstract class AbstractWorkflowFormProcessor exten this.workflowService = workflowService; } + + /* + * @see + * org.alfresco.repo.forms.processor.node.NodeFormProcessor#getTypedItem + * (org.alfresco.repo.forms.Item) + */ + @Override + protected ItemType getTypedItem(Item item) + { + try + { + ParameterCheck.mandatory("item", item); + String itemId = decodeId(item.getId()); + return getTypedItemForDecodedId(itemId); + } + catch (Exception e) + { + throw new FormNotFoundException(item, e); + } + } + + /** + * The itemId may be in a URL/Webscript-friendly format. If so it must be converted + * back to the proper id format. + * + * @param itemId + */ + private String decodeId(String itemId) + { + String decodedId = itemId; + if (itemId.contains("$")==false) + { + decodedId = itemId.replaceFirst("_", Matcher.quoteReplacement("$")); + } + return decodedId; + } + + /** + * Returns an implementation of {@link ContentModelFormPersister} which is + * used to accumulate all the changes specified in the {@link Form} and then persist them. + * + * @param item + * @return + */ protected abstract ContentModelFormPersister makeFormPersister(ItemType item); + /** + * Returns the typed item. + * @param itemId the decoded item Id. + * @return + */ + protected abstract ItemType getTypedItemForDecodedId(String itemId); + } diff --git a/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessor.java b/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessor.java index 25cad6c688..0141fd9533 100644 --- a/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/workflow/TaskFormProcessor.java @@ -30,7 +30,6 @@ import java.util.List; import java.util.Map; import org.alfresco.repo.forms.Form; -import org.alfresco.repo.forms.Item; import org.alfresco.repo.forms.processor.FieldProcessorRegistry; import org.alfresco.repo.forms.processor.FormCreationData; import org.alfresco.repo.forms.processor.node.ItemData; @@ -41,7 +40,6 @@ import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; -import org.alfresco.util.ParameterCheck; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -69,12 +67,13 @@ public class TaskFormProcessor extends AbstractWorkflowFormProcessorname may be in a URL/Webscript-friendly format. If so it must be converted * back to the proper workflow definition name. - * - * @param itemId + * @param name + * @return The decoded name */ - private String decodeWorkflowDefinitionName(String itemId) + private String decodeWorkflowDefinitionName(String name) { - String defName = itemId; - if (itemId.contains("$")==false) + if (name.contains(":")==false) { - defName = itemId.replaceFirst("_", Matcher.quoteReplacement("$")); + name = name.replaceFirst("_", ":"); } - if (itemId.contains(":")==false) - { - defName = defName.replaceFirst("_", ":"); - } - return defName; + return name; } - + /* (non-Javadoc) * @see org.alfresco.repo.forms.processor.workflow.AbstractWorkflowFormProcessor#makeFormPersister(java.lang.Object) */