WCM submit (for approval) workflow.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4540 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Caruana
2006-12-07 00:05:28 +00:00
parent 43b533cd3f
commit 0a69421b22
12 changed files with 93 additions and 21 deletions

View File

@@ -1220,6 +1220,8 @@ wf_review_options=Review Options
wf_review_status=Review Status wf_review_status=Review Status
wf_review_due_date=Review Due Date wf_review_due_date=Review Due Date
wf_review_priority=Review Priority wf_review_priority=Review Priority
wf_review_options=Review Options
wf_review_status=Review Status
wf_reviewer=Reviewer wf_reviewer=Reviewer
wf_reviewers=Reviewers wf_reviewers=Reviewers
wf_adhoc_due_date=Due Date wf_adhoc_due_date=Due Date

View File

@@ -347,6 +347,55 @@
</property-sheet> </property-sheet>
</config> </config>
<!-- WCM workflow tasks -->
<config evaluator="node-type" condition="wcmwf:submitReviewTask" replace="true">
<property-sheet>
<separator name="sep2" display-label-id="wf_review_options" component-generator="HeaderSeparatorGenerator" />
<show-property name="wcmwf:reviewType"/>
<separator name="sep3" display-label-id="users_and_roles" component-generator="HeaderSeparatorGenerator" />
<show-association name="bpm:assignees" display-label-id="wf_reviewers" />
</property-sheet>
</config>
<config evaluator="node-type" condition="wcmwf:reviewTask" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<show-property name="bpm:taskId" />
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:status" />
<separator name="sep2" display-label-id="wf_reviewers" component-generator="HeaderSeparatorGenerator" />
<show-property name="wcmwf:reviewType" read-only="true" />
<show-association name="bpm:assignees" display-label-id="wf_reviewers" read-only="true"/>
</property-sheet>
</config>
<config evaluator="node-type" condition="wcmwf:rejectedTask" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<show-property name="bpm:taskId" />
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="wcmwf:label" />
<separator name="sep2" display-label-id="wf_review_status" component-generator="HeaderSeparatorGenerator" />
<show-property name="wcmwf:reviewType" read-only="true"/>
<show-association name="bpm:assignees" display-label-id="wf_reviewers" read-only="true"/>
<show-property name="wcmwf:approveCnt" read-only="true"/>
</property-sheet>
</config>
<config evaluator="node-type" condition="wcmwf:approvedTask" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<show-property name="bpm:taskId" />
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="wcmwf:label" />
<separator name="sep2" display-label-id="wf_review_status" component-generator="HeaderSeparatorGenerator" />
<show-property name="wcmwf:reviewType" read-only="true"/>
<show-association name="bpm:assignees" display-label-id="wf_reviewers" read-only="true"/>
<show-property name="wcmwf:approveCnt" read-only="true"/>
</property-sheet>
</config>
<!-- Configuration for wcm types --> <!-- Configuration for wcm types -->
<config evaluator="node-type" condition="wca:webfolder"> <config evaluator="node-type" condition="wca:webfolder">
<property-sheet> <property-sheet>

View File

@@ -34,6 +34,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.GUID; import org.alfresco.util.GUID;
import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.repository.Repository;
import org.alfresco.web.bean.workflow.WorkflowUtil; import org.alfresco.web.bean.workflow.WorkflowUtil;
@@ -45,6 +46,11 @@ import org.alfresco.web.bean.workflow.WorkflowUtil;
*/ */
public class AVMWorkflowUtil extends WorkflowUtil public class AVMWorkflowUtil extends WorkflowUtil
{ {
// Common workflow definitions
private static final String WCM_WORKFLOW_MODEL_1_0_URI = "http://www.alfresco.org/model/wcmworkflow/1.0";
public static final QName PROP_FROM_PATH = QName.createQName(WCM_WORKFLOW_MODEL_1_0_URI, "fromPath");
public static final QName PROP_LABEL = QName.createQName(WCM_WORKFLOW_MODEL_1_0_URI, "label");
private static final String STORE_WORKFLOW_SYSTEM = "workflow-system"; private static final String STORE_WORKFLOW_SYSTEM = "workflow-system";
private static final String FOLDER_PACKAGES = "packages"; private static final String FOLDER_PACKAGES = "packages";

View File

@@ -788,7 +788,7 @@ public class CreateFormWizard
{ {
return (this.defaultWorkflowName == null return (this.defaultWorkflowName == null
? null ? null
: this.workflowService.getDefinitionByName("jbpm$" + this.defaultWorkflowName)); : this.workflowService.getDefinitionByName(this.defaultWorkflowName));
} }
public String[] getDefaultWorkflowName() public String[] getDefaultWorkflowName()

View File

@@ -266,7 +266,7 @@ public class CreateWebContentWizard extends BaseContentWizard
if (LOGGER.isDebugEnabled()) if (LOGGER.isDebugEnabled())
LOGGER.debug("using workflow " + workflowName + " for form " + formName); LOGGER.debug("using workflow " + workflowName + " for form " + formName);
wd = this.workflowService.getDefinitionByName("jbpm$" + workflowName); wd = this.workflowService.getDefinitionByName(workflowName);
// deserialize the workflow parameters // deserialize the workflow parameters
parameters = (Map<QName, Serializable>)AVMWorkflowUtil.deserializeWorkflowParams(workflowRef); parameters = (Map<QName, Serializable>)AVMWorkflowUtil.deserializeWorkflowParams(workflowRef);

View File

@@ -658,7 +658,7 @@ public class CreateWebsiteWizard extends BaseWizardBean
if (index != -1) if (index != -1)
{ {
WorkflowDefinition workflow = (WorkflowDefinition)this.workflowsList.get(index).getValue(); WorkflowDefinition workflow = (WorkflowDefinition)this.workflowsList.get(index).getValue();
this.workflows.add(new WorkflowWrapper(workflow.getName(), workflow.getTitle())); this.workflows.add(new WorkflowWrapper(workflow.getName(), workflow.getTitle(), workflow.getDescription()));
} }
} }
@@ -782,7 +782,7 @@ public class CreateWebsiteWizard extends BaseWizardBean
WorkflowDefinition wf = this.form.getDefaultWorkflow(); WorkflowDefinition wf = this.form.getDefaultWorkflow();
if (this.workflow == null && wf != null) if (this.workflow == null && wf != null)
{ {
this.workflow = new WorkflowWrapper(wf.name, wf.getTitle()); this.workflow = new WorkflowWrapper(wf.name, wf.getTitle(), wf.getDescription());
} }
return this.workflow; return this.workflow;
} }
@@ -937,14 +937,16 @@ public class CreateWebsiteWizard extends BaseWizardBean
{ {
private String name; private String name;
private String title; private String title;
private String description;
private String filenamePattern; private String filenamePattern;
private QName type; private QName type;
private Map<QName, Serializable> params; private Map<QName, Serializable> params;
public WorkflowWrapper(String name, String title) public WorkflowWrapper(String name, String title, String description)
{ {
this.name = name; this.name = name;
this.title = title; this.title = title;
this.description = description;
this.filenamePattern = filenamePattern; this.filenamePattern = filenamePattern;
} }
@@ -964,6 +966,14 @@ public class CreateWebsiteWizard extends BaseWizardBean
return this.title; return this.title;
} }
/**
* @return the display label of the workflow.
*/
public String getDescription()
{
return this.description;
}
/** /**
* @return Returns the filename pattern. * @return Returns the filename pattern.
*/ */

View File

@@ -99,10 +99,10 @@ public class EditWebsiteWizard extends CreateWebsiteWizard
{ {
NodeRef wfRef = workflowRefs.get(0).getChildRef(); NodeRef wfRef = workflowRefs.get(0).getChildRef();
String wfName = (String)this.nodeService.getProperty(wfRef, WCMAppModel.PROP_WORKFLOW_NAME); String wfName = (String)this.nodeService.getProperty(wfRef, WCMAppModel.PROP_WORKFLOW_NAME);
WorkflowDefinition wfDef = this.workflowService.getDefinitionByName("jbpm$" + wfName); WorkflowDefinition wfDef = this.workflowService.getDefinitionByName(wfName);
if (wfDef != null) if (wfDef != null)
{ {
WorkflowWrapper wfWrapper = new WorkflowWrapper(wfName, wfDef.getTitle()); WorkflowWrapper wfWrapper = new WorkflowWrapper(wfName, wfDef.getTitle(), wfDef.getDescription());
wfWrapper.setParams((Map<QName, Serializable>)AVMWorkflowUtil.deserializeWorkflowParams(wfRef)); wfWrapper.setParams((Map<QName, Serializable>)AVMWorkflowUtil.deserializeWorkflowParams(wfRef));
if (wfDef.startTaskDefinition != null) if (wfDef.startTaskDefinition != null)
{ {
@@ -144,10 +144,10 @@ public class EditWebsiteWizard extends CreateWebsiteWizard
{ {
NodeRef wfRef = wChildRef.getChildRef(); NodeRef wfRef = wChildRef.getChildRef();
String wfName = (String)this.nodeService.getProperty(wfRef, WCMAppModel.PROP_WORKFLOW_NAME); String wfName = (String)this.nodeService.getProperty(wfRef, WCMAppModel.PROP_WORKFLOW_NAME);
WorkflowDefinition wfDef = this.workflowService.getDefinitionByName("jbpm$" + wfName); WorkflowDefinition wfDef = this.workflowService.getDefinitionByName(wfName);
if (wfDef != null) if (wfDef != null)
{ {
WorkflowWrapper wfWrapper = new WorkflowWrapper(wfName, wfDef.getTitle()); WorkflowWrapper wfWrapper = new WorkflowWrapper(wfName, wfDef.getTitle(), wfDef.getDescription());
wfWrapper.setParams((Map<QName, Serializable>)AVMWorkflowUtil.deserializeWorkflowParams(wfRef)); wfWrapper.setParams((Map<QName, Serializable>)AVMWorkflowUtil.deserializeWorkflowParams(wfRef));
wfWrapper.setFilenamePattern((String)this.nodeService.getProperty( wfWrapper.setFilenamePattern((String)this.nodeService.getProperty(
wfRef, WCMAppModel.PROP_FILENAMEPATTERN)); wfRef, WCMAppModel.PROP_FILENAMEPATTERN));

View File

@@ -231,8 +231,8 @@ public class FormDetailsDialog extends BaseDialogBean
} }
if (this.workflowSelectedValue != null && this.workflowSelectedValue.length != 0) if (this.workflowSelectedValue != null && this.workflowSelectedValue.length != 0)
{ {
WorkflowDefinition def = this.workflowService.getDefinitionByName("jbpm$" + this.workflowSelectedValue[0]); WorkflowDefinition def = this.workflowService.getDefinitionByName(this.workflowSelectedValue[0]);
form.setWorkflow(new CreateWebsiteWizard.WorkflowWrapper(def.getName(), def.getTitle())); form.setWorkflow(new CreateWebsiteWizard.WorkflowWrapper(def.getName(), def.getTitle(), def.getDescription()));
} }
return outcome; return outcome;
} }

View File

@@ -121,8 +121,7 @@ public class FormWorkflowDialog extends BaseDialogBean
{ {
if (this.workflowNode == null) if (this.workflowNode == null)
{ {
// TODO: remove the 'jbpm$' prefix once bug fix to WorkflowService has been merged across! WorkflowDefinition flowDef = this.workflowService.getDefinitionByName(getActionWorkflow().getName());
WorkflowDefinition flowDef = this.workflowService.getDefinitionByName("jbpm$" + getActionWorkflow().getName());
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
logger.debug("Selected workflow: "+ flowDef); logger.debug("Selected workflow: "+ flowDef);

View File

@@ -174,8 +174,13 @@ public class SubmitDialog extends BaseDialogBean
NodeRef workflowPackage = createWorkflowPackage(); NodeRef workflowPackage = createWorkflowPackage();
params.put(WorkflowModel.ASSOC_PACKAGE, workflowPackage); params.put(WorkflowModel.ASSOC_PACKAGE, workflowPackage);
// add submission parameters
params.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, getComment());
params.put(AVMWorkflowUtil.PROP_LABEL, getLabel());
params.put(AVMWorkflowUtil.PROP_FROM_PATH, AVMConstants.buildAVMStoreRootPath(this.avmBrowseBean.getSandbox()));
// start the workflow to get access to the start task // start the workflow to get access to the start task
WorkflowDefinition wfDef = workflowService.getDefinitionByName("jbpm$" + workflowName); WorkflowDefinition wfDef = workflowService.getDefinitionByName(workflowName);
WorkflowPath path = this.workflowService.startWorkflow(wfDef.id, params); WorkflowPath path = this.workflowService.startWorkflow(wfDef.id, params);
if (path != null) if (path != null)
{ {
@@ -286,7 +291,7 @@ public class SubmitDialog extends BaseDialogBean
List<UIListItem> items = new ArrayList<UIListItem>(this.workflows.size()); List<UIListItem> items = new ArrayList<UIListItem>(this.workflows.size());
for (FormWorkflowWrapper wrapper : this.workflows) for (FormWorkflowWrapper wrapper : this.workflows)
{ {
WorkflowDefinition workflowDef = this.workflowService.getDefinitionByName("jbpm$" + wrapper.Name); WorkflowDefinition workflowDef = this.workflowService.getDefinitionByName(wrapper.Name);
UIListItem item = new UIListItem(); UIListItem item = new UIListItem();
item.setValue(workflowDef.getName()); item.setValue(workflowDef.getName());
item.setLabel(workflowDef.getTitle()); item.setLabel(workflowDef.getTitle());
@@ -423,11 +428,12 @@ public class SubmitDialog extends BaseDialogBean
{ {
List<ItemWrapper> items = getSubmitItems(); List<ItemWrapper> items = getSubmitItems();
// create package paths (layered to user sandbox area as target) // create package paths (layered to staging area as target)
String sandboxPath = AVMConstants.buildAVMStoreRootPath(this.avmBrowseBean.getSandbox()); String stagingPath = AVMConstants.buildAVMStoreRootPath(this.avmBrowseBean.getStagingStore());
String packagesPath = AVMWorkflowUtil.createAVMLayeredPackage(this.avmService, sandboxPath); String packagesPath = AVMWorkflowUtil.createAVMLayeredPackage(this.avmService, stagingPath);
// construct diffs for selected items for submission // construct diffs for selected items for submission
String sandboxPath = AVMConstants.buildAVMStoreRootPath(this.avmBrowseBean.getSandbox());
List<AVMDifference> diffs = new ArrayList<AVMDifference>(this.submitItems.size()); List<AVMDifference> diffs = new ArrayList<AVMDifference>(this.submitItems.size());
for (ItemWrapper wrapper : this.submitItems) for (ItemWrapper wrapper : this.submitItems)
{ {

View File

@@ -104,7 +104,7 @@ class FormImpl
WCMAppModel.PROP_DEFAULT_WORKFLOW_NAME); WCMAppModel.PROP_DEFAULT_WORKFLOW_NAME);
final WorkflowService workflowService = this.getServiceRegistry().getWorkflowService(); final WorkflowService workflowService = this.getServiceRegistry().getWorkflowService();
return (defaultWorkflowName != null return (defaultWorkflowName != null
? workflowService.getDefinitionByName("jbpm$" + defaultWorkflowName) ? workflowService.getDefinitionByName(defaultWorkflowName)
: null); : null);
} }

View File

@@ -76,9 +76,9 @@
<h:panelGrid columns="2" cellpadding="3" cellspacing="3" border="0" style="margin-left:16px" styleClass="summary"> <h:panelGrid columns="2" cellpadding="3" cellspacing="3" border="0" style="margin-left:16px" styleClass="summary">
<c:forEach items="${WizardManager.bean.workflows}" var="r"> <c:forEach items="${WizardManager.bean.workflows}" var="r">
<h:outputText value="#{msg.name}:" styleClass="mainSubTitle" /> <h:outputText value="#{msg.name}:" styleClass="mainSubTitle" />
<f:verbatim>${r.name}</f:verbatim>
<h:outputText value="#{msg.title}:" styleClass="mainSubTitle" />
<f:verbatim>${r.title}</f:verbatim> <f:verbatim>${r.title}</f:verbatim>
<h:outputText value="#{msg.description}:" styleClass="mainSubTitle" />
<f:verbatim>${r.description}</f:verbatim>
<h:outputText value="#{msg.website_filename_pattern}:" styleClass="mainSubTitle" /> <h:outputText value="#{msg.website_filename_pattern}:" styleClass="mainSubTitle" />
<f:verbatim>${r.filenamePattern}</f:verbatim> <f:verbatim>${r.filenamePattern}</f:verbatim>
<f:verbatim /> <f:verbatim />