/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.app.xmlui.aspect.xmlworkflow; import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.SourceResolver; import org.apache.log4j.Logger; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.Options; import org.dspace.app.xmlui.wing.element.PageMeta; import org.dspace.app.xmlui.wing.element.UserMeta; import org.dspace.authorize.AuthorizeException; import org.dspace.core.LogManager; import org.dspace.xmlworkflow.WorkflowFactory; import org.dspace.xmlworkflow.state.Step; import org.dspace.xmlworkflow.state.Workflow; import org.dspace.xmlworkflow.storedcomponents.XmlWorkflowItem; import org.xml.sax.SAXException; import java.io.IOException; import java.sql.SQLException; import java.util.Map; /** * A class that will render the current action in which the given workflow item * is currently located * * @author Bram De Schouwer (bram.deschouwer at dot com) * @author Kevin Van de Velde (kevin at atmire dot com) * @author Ben Bosman (ben at atmire dot com) * @author Mark Diggory (markd at atmire dot com) */ public class WorkflowTransformer extends AbstractDSpaceTransformer { private AbstractXMLUIAction xmluiActionUI; private boolean authorized = true; private static Logger log = Logger.getLogger(WorkflowTransformer.class); @Override public void setup(SourceResolver resolver, Map objectModel, String src, Parameters parameters) throws ProcessingException, SAXException, IOException { super.setup(resolver, objectModel, src, parameters); authorized = true; try { String stepID = parameters.getParameter("stepID"); String actionID = parameters.getParameter("actionID"); int workflowID = parameters.getParameterAsInteger("workflowID"); XmlWorkflowItem wfi = XmlWorkflowItem.find(context, workflowID); Workflow wf = WorkflowFactory.getWorkflow(wfi.getCollection()); Step step = wf.getStep(stepID); xmluiActionUI = (AbstractXMLUIAction) WorkflowXMLUIFactory.getActionInterface(actionID); authorized = step.getActionConfig(actionID).getProcessingAction().isAuthorized(context, ObjectModelHelper.getRequest(objectModel), wfi); if(xmluiActionUI != null) xmluiActionUI.setup(resolver, objectModel, src, parameters); // else // throw new ProcessingException("Step class is null! We do not have a valid AbstractStep in " + this.transformerClassName + ". "); } catch (Exception e) { log.error(LogManager.getHeader(context, "error while setting up workflowtransformer", ""), e); throw new ProcessingException("Something went wrong while setting up the workflow"); } } public void addBody(Body body) throws SAXException, WingException, SQLException, IOException, AuthorizeException { if(!authorized) throw new AuthorizeException("You are not authorized to perform this task"); xmluiActionUI.addBody(body); } /** What to add to the options list */ public void addOptions(Options options) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException { //call addOptions for this step xmluiActionUI.addOptions(options); } /** What user metadata to add to the document */ public void addUserMeta(UserMeta userMeta) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException { //call addUserMeta for this step xmluiActionUI.addUserMeta(userMeta); } /** What page metadata to add to the document */ public void addPageMeta(PageMeta pageMeta) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException { //call addPageMeta for this step xmluiActionUI.addPageMeta(pageMeta); } /** * Recycle */ public void recycle() { if(xmluiActionUI!=null) { this.xmluiActionUI.recycle(); this.xmluiActionUI = null; } super.recycle(); } }