Package org.uengine.workflow.springws

Source Code of org.uengine.workflow.springws.CompleteWorkitemEndpoint

package org.uengine.workflow.springws;

import java.util.HashMap;
import java.util.List;

import javax.naming.InitialContext;
import javax.transaction.Status;
import javax.transaction.UserTransaction;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.xpath.XPath;
import org.springframework.ws.server.endpoint.AbstractJDomPayloadEndpoint;
import org.uengine.kernel.GlobalContext;
import org.uengine.processmanager.ProcessManagerFactoryBean;
import org.uengine.processmanager.ProcessManagerRemote;
import org.uengine.workflow.springservice.WorkflowService;
import org.uengine.workflow.springws.util.ElementToObject;
import org.uengine.workflow.springws.util.ObjectToElement;

public class CompleteWorkitemEndpoint extends AbstractJDomPayloadEndpoint implements WorkflowWebServiceConstants {

  private WorkflowService workflowService;

  private XPath endpointExpression;
  private XPath instanceIdExpression;
  private XPath taskIdExpression;
  private XPath tracingTagExpression;

  public CompleteWorkitemEndpoint(WorkflowService workflowService) {

    this.workflowService = workflowService;

    try {
      endpointExpression = XPath.newInstance("//wf:endpoint");
      endpointExpression.addNamespace(WORKFLOW_NAMESPACE);

      instanceIdExpression = XPath.newInstance("//wf:instanceId");
      instanceIdExpression.addNamespace(WORKFLOW_NAMESPACE);

      taskIdExpression = XPath.newInstance("//wf:taskId");
      taskIdExpression.addNamespace(WORKFLOW_NAMESPACE);

      tracingTagExpression = XPath.newInstance("//wf:tracingTag");
      tracingTagExpression.addNamespace(WORKFLOW_NAMESPACE);
    } catch (JDOMException e) {
      e.printStackTrace();
    }
  }

  @Override
  protected Element invokeInternal(Element completeWorkitemRequest) throws Exception {

    String endpoint = endpointExpression.valueOf(completeWorkitemRequest);
    String instanceId = instanceIdExpression.valueOf(completeWorkitemRequest);
    String taskId = taskIdExpression.valueOf(completeWorkitemRequest);
    String tracingTag = tracingTagExpression.valueOf(completeWorkitemRequest);

    List elementProcessVariableList = completeWorkitemRequest.getChildren("processVariable", WORKFLOW_NAMESPACE);
    HashMap processVariableMap = ElementToObject.makeProcessVariableMap(elementProcessVariableList);

    ProcessManagerFactoryBean processManagerFactory = new ProcessManagerFactoryBean();
    ProcessManagerRemote pm = null;

    InitialContext context = new InitialContext();
    UserTransaction tx = (GlobalContext.useManagedTransaction ? (UserTransaction) context.lookup(GlobalContext.USERTRANSACTION_JNDI_NAME) : null);

    String completedTaskId = null;
    List nextTaskList = null;

    try {
      pm = processManagerFactory.getProcessManager();

      if (tx != null)
        tx.begin();

      completedTaskId = workflowService.completeWorkitem(endpoint, instanceId, taskId, tracingTag, processVariableMap, pm);
      pm.applyChanges();

      nextTaskList = workflowService.nextTask(instanceId);

      if (tx != null && tx.getStatus() != Status.STATUS_NO_TRANSACTION)
        tx.commit();

    } catch (Exception e) {
      try {
        pm.cancelChanges();
      } catch (Exception ex) {
      }

      if (tx != null && tx.getStatus() != Status.STATUS_NO_TRANSACTION)
        tx.rollback();

    } finally {
      try {
        pm.remove();
      } catch (Exception e) {
      }
    }

    Document doc = new Document(new Element(COMPLETE_WORKITEM_RESPONSE, WORKFLOW_NAMESPACE));
    doc.getRootElement().addContent(new Element("completedTaskId", WORKFLOW_NAMESPACE).setText(completedTaskId));

    doc = ObjectToElement.makeNextTaskElement(doc, nextTaskList);
    Element returnElement = doc.getRootElement();

    return returnElement;
   
  }
}
TOP

Related Classes of org.uengine.workflow.springws.CompleteWorkitemEndpoint

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.