mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
Merge pull request #1313 from KevinVdV/DS-3062-fix-xml-workflow
[DS-3062] Fixing issues that prevented the xmlworkflow from being enabled
This commit is contained in:
@@ -31,6 +31,7 @@ import org.dspace.discovery.IndexingService;
|
|||||||
import org.dspace.discovery.SearchServiceException;
|
import org.dspace.discovery.SearchServiceException;
|
||||||
import org.dspace.services.ConfigurationService;
|
import org.dspace.services.ConfigurationService;
|
||||||
import org.dspace.services.factory.DSpaceServicesFactory;
|
import org.dspace.services.factory.DSpaceServicesFactory;
|
||||||
|
import org.dspace.workflow.factory.WorkflowServiceFactory;
|
||||||
import org.flywaydb.core.Flyway;
|
import org.flywaydb.core.Flyway;
|
||||||
import org.flywaydb.core.api.FlywayException;
|
import org.flywaydb.core.api.FlywayException;
|
||||||
import org.flywaydb.core.api.MigrationInfo;
|
import org.flywaydb.core.api.MigrationInfo;
|
||||||
@@ -406,14 +407,9 @@ public class DatabaseUtils
|
|||||||
// NOTE: this also loads migrations from any sub-package
|
// NOTE: this also loads migrations from any sub-package
|
||||||
scriptLocations.add("classpath:org.dspace.storage.rdbms.migration");
|
scriptLocations.add("classpath:org.dspace.storage.rdbms.migration");
|
||||||
|
|
||||||
// Special scenario: If XMLWorkflows are enabled, we need to run its migration(s)
|
//Add all potential workflow migration paths
|
||||||
// as it REQUIRES database schema changes. XMLWorkflow uses Java migrations
|
List<String> workflowFlywayMigrationLocations = WorkflowServiceFactory.getInstance().getWorkflowService().getFlywayMigrationLocations();
|
||||||
// which first check whether the XMLWorkflow tables already exist
|
scriptLocations.addAll(workflowFlywayMigrationLocations);
|
||||||
String framework = config.getProperty("workflow.framework");
|
|
||||||
if (framework!=null && framework.equals("xmlworkflow"))
|
|
||||||
{
|
|
||||||
scriptLocations.add("classpath:org.dspace.storage.rdbms.xmlworkflow");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now tell Flyway which locations to load SQL / Java migrations from
|
// Now tell Flyway which locations to load SQL / Java migrations from
|
||||||
log.info("Loading Flyway DB migrations from: " + StringUtils.join(scriptLocations, ", "));
|
log.info("Loading Flyway DB migrations from: " + StringUtils.join(scriptLocations, ", "));
|
||||||
|
@@ -10,10 +10,10 @@ package org.dspace.storage.rdbms.xmlworkflow;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.dspace.core.ConfigurationManager;
|
|
||||||
import org.dspace.core.Constants;
|
import org.dspace.core.Constants;
|
||||||
import org.dspace.storage.rdbms.DatabaseUtils;
|
import org.dspace.storage.rdbms.DatabaseUtils;
|
||||||
|
import org.dspace.workflow.factory.WorkflowServiceFactory;
|
||||||
|
import org.dspace.xmlworkflow.service.XmlWorkflowService;
|
||||||
import org.flywaydb.core.api.migration.MigrationChecksumProvider;
|
import org.flywaydb.core.api.migration.MigrationChecksumProvider;
|
||||||
import org.flywaydb.core.api.migration.jdbc.JdbcMigration;
|
import org.flywaydb.core.api.migration.jdbc.JdbcMigration;
|
||||||
import org.flywaydb.core.internal.util.scanner.classpath.ClassPathResource;
|
import org.flywaydb.core.internal.util.scanner.classpath.ClassPathResource;
|
||||||
@@ -53,8 +53,8 @@ public class V5_0_2014_11_04__Enable_XMLWorkflow_Migration
|
|||||||
public void migrate(Connection connection)
|
public void migrate(Connection connection)
|
||||||
throws IOException, SQLException
|
throws IOException, SQLException
|
||||||
{
|
{
|
||||||
// Make sure XML Workflow is enabled in workflow.cfg before proceeding
|
// Make sure XML Workflow is enabled, shouldn't even be needed since this class is only loaded if the service is enabled.
|
||||||
if (StringUtils.equals(ConfigurationManager.getProperty("workflow.framework"), "xmlworkflow")
|
if (WorkflowServiceFactory.getInstance().getWorkflowService() instanceof XmlWorkflowService
|
||||||
// If your database was upgraded to DSpace 6 prior to enabling XML Workflow, we MUST skip this 5.x migration, as it is incompatible
|
// If your database was upgraded to DSpace 6 prior to enabling XML Workflow, we MUST skip this 5.x migration, as it is incompatible
|
||||||
// with a 6.x database. In that scenario the corresponding 6.x XML Workflow migration will create necessary tables.
|
// with a 6.x database. In that scenario the corresponding 6.x XML Workflow migration will create necessary tables.
|
||||||
&& DatabaseUtils.getCurrentFlywayDSpaceState(connection) < 6)
|
&& DatabaseUtils.getCurrentFlywayDSpaceState(connection) < 6)
|
||||||
|
@@ -10,12 +10,13 @@ package org.dspace.storage.rdbms.xmlworkflow;
|
|||||||
import org.dspace.core.ConfigurationManager;
|
import org.dspace.core.ConfigurationManager;
|
||||||
import org.dspace.core.Constants;
|
import org.dspace.core.Constants;
|
||||||
import org.dspace.storage.rdbms.DatabaseUtils;
|
import org.dspace.storage.rdbms.DatabaseUtils;
|
||||||
|
import org.dspace.workflow.factory.WorkflowServiceFactory;
|
||||||
|
import org.dspace.xmlworkflow.service.XmlWorkflowService;
|
||||||
import org.flywaydb.core.api.migration.MigrationChecksumProvider;
|
import org.flywaydb.core.api.migration.MigrationChecksumProvider;
|
||||||
import org.flywaydb.core.api.migration.jdbc.JdbcMigration;
|
import org.flywaydb.core.api.migration.jdbc.JdbcMigration;
|
||||||
import org.flywaydb.core.internal.util.scanner.classpath.ClassPathResource;
|
import org.flywaydb.core.internal.util.scanner.classpath.ClassPathResource;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User: kevin (kevin at atmire.com)
|
* User: kevin (kevin at atmire.com)
|
||||||
@@ -30,8 +31,8 @@ public class V6_0_2015_09_01__DS_2701_Enable_XMLWorkflow_Migration implements Jd
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void migrate(Connection connection) throws Exception {
|
public void migrate(Connection connection) throws Exception {
|
||||||
// Make sure XML Workflow is enabled in workflow.cfg before proceeding
|
// Make sure XML Workflow is enabled, shouldn't even be needed since this class is only loaded if the service is enabled.
|
||||||
if (StringUtils.equals(ConfigurationManager.getProperty("workflow.framework"), "xmlworkflow"))
|
if (WorkflowServiceFactory.getInstance().getWorkflowService() instanceof XmlWorkflowService)
|
||||||
{
|
{
|
||||||
// Now, check if the XMLWorkflow table (cwf_workflowitem) already exists in this database
|
// Now, check if the XMLWorkflow table (cwf_workflowitem) already exists in this database
|
||||||
// If XMLWorkflow Table does NOT exist in this database, then lets do the migration!
|
// If XMLWorkflow Table does NOT exist in this database, then lets do the migration!
|
||||||
|
@@ -75,4 +75,6 @@ public interface WorkflowService<T extends WorkflowItem> {
|
|||||||
public List<String> getEPersonDeleteConstraints(Context context, EPerson ePerson) throws SQLException;
|
public List<String> getEPersonDeleteConstraints(Context context, EPerson ePerson) throws SQLException;
|
||||||
|
|
||||||
public Group getWorkflowRoleGroup(Context context, Collection collection, String roleName, Group roleGroup) throws SQLException, IOException, WorkflowConfigurationException, AuthorizeException, WorkflowException;
|
public Group getWorkflowRoleGroup(Context context, Collection collection, String roleName, Group roleGroup) throws SQLException, IOException, WorkflowConfigurationException, AuthorizeException, WorkflowException;
|
||||||
|
|
||||||
|
public List<String> getFlywayMigrationLocations();
|
||||||
}
|
}
|
||||||
|
@@ -1089,4 +1089,9 @@ public class BasicWorkflowServiceImpl implements BasicWorkflowService
|
|||||||
}
|
}
|
||||||
return roleGroup;
|
return roleGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getFlywayMigrationLocations() {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,17 +10,19 @@ package org.dspace.xmlworkflow;
|
|||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.apache.xpath.XPathAPI;
|
import org.apache.xpath.XPathAPI;
|
||||||
import org.dspace.content.Collection;
|
import org.dspace.content.Collection;
|
||||||
import org.dspace.core.ConfigurationManager;
|
import org.dspace.services.ConfigurationService;
|
||||||
import org.dspace.services.factory.DSpaceServicesFactory;
|
import org.dspace.services.factory.DSpaceServicesFactory;
|
||||||
import org.dspace.xmlworkflow.factory.XmlWorkflowFactory;
|
import org.dspace.xmlworkflow.factory.XmlWorkflowFactory;
|
||||||
import org.dspace.xmlworkflow.state.Step;
|
import org.dspace.xmlworkflow.state.Step;
|
||||||
import org.dspace.xmlworkflow.state.actions.UserSelectionActionConfig;
|
import org.dspace.xmlworkflow.state.actions.UserSelectionActionConfig;
|
||||||
import org.dspace.xmlworkflow.state.Workflow;
|
import org.dspace.xmlworkflow.state.Workflow;
|
||||||
import org.dspace.xmlworkflow.state.actions.WorkflowActionConfig;
|
import org.dspace.xmlworkflow.state.actions.WorkflowActionConfig;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
import javax.xml.transform.TransformerException;
|
import javax.xml.transform.TransformerException;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -41,8 +43,16 @@ public class XmlWorkflowFactoryImpl implements XmlWorkflowFactory {
|
|||||||
|
|
||||||
private Logger log = Logger.getLogger(XmlWorkflowFactoryImpl.class);
|
private Logger log = Logger.getLogger(XmlWorkflowFactoryImpl.class);
|
||||||
|
|
||||||
|
@Autowired(required = true)
|
||||||
|
protected ConfigurationService configurationService;
|
||||||
protected HashMap<String, Workflow> workflowCache;
|
protected HashMap<String, Workflow> workflowCache;
|
||||||
protected String path = ConfigurationManager.getProperty("dspace.dir")+"/config/workflow.xml";
|
protected String path;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
protected void init()
|
||||||
|
{
|
||||||
|
path = configurationService.getProperty("dspace.dir")+ File.separator + "config" + File.separator + "workflow.xml";
|
||||||
|
}
|
||||||
// private static String pathActions = ConfigurationManager.getProperty("dspace.dir")+"/config/workflow-actions.xml";
|
// private static String pathActions = ConfigurationManager.getProperty("dspace.dir")+"/config/workflow-actions.xml";
|
||||||
|
|
||||||
protected XmlWorkflowFactoryImpl()
|
protected XmlWorkflowFactoryImpl()
|
||||||
|
@@ -150,6 +150,11 @@ public class XmlWorkflowServiceImpl implements XmlWorkflowService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getFlywayMigrationLocations() {
|
||||||
|
return Collections.singletonList("classpath:org.dspace.storage.rdbms.xmlworkflow");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public XmlWorkflowItem start(Context context, WorkspaceItem wsi) throws SQLException, AuthorizeException, IOException, WorkflowException {
|
public XmlWorkflowItem start(Context context, WorkspaceItem wsi) throws SQLException, AuthorizeException, IOException, WorkflowException {
|
||||||
try {
|
try {
|
||||||
|
Reference in New Issue
Block a user