diff --git a/config/alfresco/messages/patch-service.properties b/config/alfresco/messages/patch-service.properties
index 0545accfe7..cbafd04f06 100644
--- a/config/alfresco/messages/patch-service.properties
+++ b/config/alfresco/messages/patch-service.properties
@@ -154,4 +154,6 @@ patch.AVMLayeredSnapshot.result=Layered Node indirectionVersions set.
patch.groupMembersAsIdentifiers.description=Reindex usr:authorityContainer members as identifiers=======
+patch.genericWorkflow.result.deployed=Re-deployed {0} workflows.
+patch.redeploySubmitProcess.description=Re-deploy WCM Submit Process Definition.
\ No newline at end of file
diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml
index c7ca0022ec..aebd5ff50e 100644
--- a/config/alfresco/patch/patch-services-context.xml
+++ b/config/alfresco/patch/patch-services-context.xml
@@ -798,6 +798,22 @@
-
-
+
+ patch.redeploySubmitProcess
+ patch.redeploySubmitProcess.description
+ 0
+ 57
+ 58
+
+
+
+
+ jbpm
+ alfresco/workflow/submit_processdefinition.xml
+ text/xml
+
+
+
+
+
diff --git a/config/alfresco/version.properties b/config/alfresco/version.properties
index 63ca630a8d..b2f259a8f2 100644
--- a/config/alfresco/version.properties
+++ b/config/alfresco/version.properties
@@ -19,4 +19,4 @@ version.build=@build-number@
# Schema number
-version.schema=57
+version.schema=58
diff --git a/config/alfresco/workflow-context.xml b/config/alfresco/workflow-context.xml
index 559ce117b8..c7106a2b8b 100644
--- a/config/alfresco/workflow-context.xml
+++ b/config/alfresco/workflow-context.xml
@@ -96,4 +96,7 @@
/${spaces.company_home.childname}
+
+
+
diff --git a/source/java/org/alfresco/repo/admin/patch/impl/GenericWorkflowPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/GenericWorkflowPatch.java
new file mode 100644
index 0000000000..c6a8278055
--- /dev/null
+++ b/source/java/org/alfresco/repo/admin/patch/impl/GenericWorkflowPatch.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2005-2007 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.admin.patch.impl;
+
+import java.util.List;
+import java.util.Properties;
+
+import org.alfresco.i18n.I18NUtil;
+import org.alfresco.repo.admin.patch.AbstractPatch;
+import org.alfresco.repo.workflow.WorkflowDeployer;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+/**
+ * Generic patch that re-deploys a workflow definition
+ *
+ * @author David Caruana
+ */
+public class GenericWorkflowPatch extends AbstractPatch implements ApplicationContextAware
+{
+ private static final String MSG_DEPLOYED = "patch.genericWorkflow.result.deployed";
+
+ private ApplicationContext applicationContext;
+ private List workflowDefinitions;
+
+
+ /* (non-Javadoc)
+ * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
+ */
+ public void setApplicationContext(ApplicationContext applicationContext)
+ throws BeansException
+ {
+ this.applicationContext = applicationContext;
+ }
+
+ /**
+ * Sets the Workflow Definitions
+ *
+ * @param workflowDefinitions
+ */
+ public void setWorkflowDefinitions(List workflowDefinitions)
+ {
+ this.workflowDefinitions = workflowDefinitions;
+ }
+
+ @Override
+ protected void checkProperties()
+ {
+ checkPropertyNotNull(workflowDefinitions, "workflowDefinitions");
+ super.checkProperties();
+ }
+
+ @Override
+ protected String applyInternal() throws Exception
+ {
+ WorkflowDeployer deployer = (WorkflowDeployer)applicationContext.getBean("workflowPatchDeployer");
+
+ for (Properties props : workflowDefinitions)
+ {
+ props.put(WorkflowDeployer.REDEPLOY, "true");
+ }
+ deployer.setWorkflowDefinitions(workflowDefinitions);
+ deployer.deploy();
+
+ // done
+ return I18NUtil.getMessage(MSG_DEPLOYED, workflowDefinitions.size());
+ }
+
+}