diff --git a/config/alfresco/web-client-application-context.xml b/config/alfresco/web-client-application-context.xml index fac2f10bc4..f34685bb91 100644 --- a/config/alfresco/web-client-application-context.xml +++ b/config/alfresco/web-client-application-context.xml @@ -11,6 +11,7 @@ classpath:alfresco/web-client-config-wizards.xml classpath:alfresco/web-client-config-properties.xml classpath:alfresco/web-client-config-navigation.xml + classpath:alfresco/web-client-config-wcm.xml classpath:alfresco/web-client-config-actions.xml classpath:alfresco/web-client-config-forum-actions.xml classpath:alfresco/web-client-config-wcm-actions.xml diff --git a/config/alfresco/web-client-config-wcm.xml b/config/alfresco/web-client-config-wcm.xml new file mode 100644 index 0000000000..808a90977e --- /dev/null +++ b/config/alfresco/web-client-config-wcm.xml @@ -0,0 +1,15 @@ + + + + + + + + wcmwf:submit + + + + + + diff --git a/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java b/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java index 8d5d95867b..81df1dde89 100644 --- a/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java +++ b/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java @@ -23,10 +23,13 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.StringTokenizer; import javax.faces.context.FacesContext; +import org.alfresco.config.ConfigElement; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.WCMAppModel; import org.alfresco.repo.avm.AVMNodeConverter; @@ -42,12 +45,16 @@ import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowPath; import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.namespace.QName; import org.alfresco.util.GUID; +import org.alfresco.web.app.Application; import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.workflow.WorkflowUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * AVM Specific workflow related helper methods. @@ -57,11 +64,16 @@ import org.alfresco.web.bean.workflow.WorkflowUtil; */ public class AVMWorkflowUtil extends WorkflowUtil { + private static final Log logger = LogFactory.getLog(AVMWorkflowUtil.class); + // 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"); + // cached configured lists + private static List configuredWorkflowDefs = null; + public static NodeRef createWorkflowPackage(final List srcPaths, final String storeId, final WorkflowPath path, @@ -156,4 +168,50 @@ public class AVMWorkflowUtil extends WorkflowUtil throw new AlfrescoRuntimeException("Unable to deserialize workflow default parameters: " + classErr.getMessage()); } } + + /** + * @return the list of WorkflowDefinition objects as configured in the wcm/workflows client config. + */ + public static List getConfiguredWorkflows() + { + if (configuredWorkflowDefs == null) + { + FacesContext fc = FacesContext.getCurrentInstance(); + List defs = Collections.emptyList(); + ConfigElement config = Application.getConfigService(fc).getGlobalConfig().getConfigElement("wcm"); + if (config != null) + { + ConfigElement workflowConfig = config.getChild("workflows"); + if (workflowConfig != null) + { + WorkflowService service = Repository.getServiceRegistry(fc).getWorkflowService(); + StringTokenizer t = new StringTokenizer(workflowConfig.getValue().trim(), ", "); + defs = new ArrayList(t.countTokens()); + while (t.hasMoreTokens()) + { + String wfName = t.nextToken(); + WorkflowDefinition def = service.getDefinitionByName("jbpm$" + wfName); + if (def != null) + { + defs.add(def); + } + else + { + logger.warn("WARNING: Cannot find WCM workflow def for configured definition name: " + wfName); + } + } + } + else + { + logger.warn("WARNING: Unable to find WCM 'workflows' config element definition."); + } + } + else + { + logger.warn("WARNING: Unable to find 'wcm' config element definition."); + } + configuredWorkflowDefs = defs; + } + return configuredWorkflowDefs; + } } diff --git a/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java index a8d322ce05..d7b10f7e79 100644 --- a/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java +++ b/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java @@ -19,19 +19,26 @@ package org.alfresco.web.bean.wcm; import java.io.File; import java.io.Serializable; import java.text.MessageFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.ResourceBundle; + import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.event.ValueChangeEvent; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import javax.faces.model.SelectItem; -import org.alfresco.error.AlfrescoRuntimeException; + import org.alfresco.model.ContentModel; import org.alfresco.model.WCMAppModel; import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileExistsException; +import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.MimetypeService; @@ -44,15 +51,22 @@ import org.alfresco.web.bean.FileUploadBean; import org.alfresco.web.bean.wizard.BaseWizardBean; import org.alfresco.web.data.IDataContainer; import org.alfresco.web.data.QuickSort; -import org.alfresco.web.forms.*; +import org.alfresco.web.forms.FormsService; +import org.alfresco.web.forms.RenderingEngine; +import org.alfresco.web.forms.RenderingEngineTemplate; +import org.alfresco.web.forms.RenderingEngineTemplateImpl; +import org.alfresco.web.forms.XMLUtil; import org.alfresco.web.forms.xforms.SchemaUtil; -import org.alfresco.web.ui.common.component.UIListItem; import org.alfresco.web.ui.common.Utils; +import org.alfresco.web.ui.common.component.UIListItem; import org.alfresco.web.ui.wcm.WebResources; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.xerces.xs.*; -import org.apache.commons.io.FilenameUtils; +import org.apache.xerces.xs.XSConstants; +import org.apache.xerces.xs.XSElementDeclaration; +import org.apache.xerces.xs.XSModel; +import org.apache.xerces.xs.XSNamedMap; import org.w3c.dom.Document; /** @@ -989,9 +1003,8 @@ public class CreateFormWizard { if (this.defaultWorkflowChoices == null) { - // TODO: add list of workflows from config - // @see org.alfresco.web.wcm.FormDetailsDialog#getWorkflowList() - final List workflowDefs = this.workflowService.getDefinitions(); + // get list of workflows from config definitions + final List workflowDefs = AVMWorkflowUtil.getConfiguredWorkflows(); this.defaultWorkflowChoices = new ArrayList(workflowDefs.size() + 1); for (WorkflowDefinition workflowDef : workflowDefs) diff --git a/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java index d004b8dc4e..bda55fabe4 100644 --- a/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java +++ b/source/java/org/alfresco/web/bean/wcm/CreateWebsiteWizard.java @@ -643,9 +643,8 @@ public class CreateWebsiteWizard extends BaseWizardBean */ public List getWorkflowList() { - // TODO: add list of workflows from config - // @see org.alfresco.web.wcm.FormDetailsDialog#getWorkflowList() - List workflowDefs = this.workflowService.getDefinitions(); + // get list of workflows from config definitions + List workflowDefs = AVMWorkflowUtil.getConfiguredWorkflows(); List items = new ArrayList(workflowDefs.size()); for (WorkflowDefinition workflowDef : workflowDefs) { diff --git a/source/java/org/alfresco/web/bean/wcm/FormDetailsDialog.java b/source/java/org/alfresco/web/bean/wcm/FormDetailsDialog.java index 08f2a0388d..11ae0c978e 100644 --- a/source/java/org/alfresco/web/bean/wcm/FormDetailsDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/FormDetailsDialog.java @@ -188,9 +188,8 @@ public class FormDetailsDialog extends BaseDialogBean */ public List getWorkflowList() { - // TODO: add list of workflows from config - // @see org.alfresco.web.wcm.CreateWebsiteWizard#getWorkflowList() - List workflowDefs = this.workflowService.getDefinitions(); + // get list of workflows from config definitions + List workflowDefs = AVMWorkflowUtil.getConfiguredWorkflows(); List items = new ArrayList(workflowDefs.size()); for (WorkflowDefinition workflowDef : workflowDefs) {