Package org.uengine.workflow.springws

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

package org.uengine.workflow.springws;

import java.util.ArrayList;
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.kernel.RoleMapping;
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 PutRoleMappingEndpoint extends AbstractJDomPayloadEndpoint implements WorkflowWebServiceConstants {
 
  private WorkflowService workflowService;
 
  private XPath instanceIdExpression;
  private XPath roleNameExpression;

  public PutRoleMappingEndpoint(WorkflowService workflowService) {
    this.workflowService = workflowService;
   
    try {
      instanceIdExpression = XPath.newInstance("//wf:instanceId");
      instanceIdExpression.addNamespace(WORKFLOW_NAMESPACE);
     
      roleNameExpression = XPath.newInstance("//wf:roleName");
      roleNameExpression.addNamespace(WORKFLOW_NAMESPACE);
    } catch (JDOMException e) {
      e.printStackTrace();
    }
  }

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

    String instanceId = instanceIdExpression.valueOf(putRoleMappingRequest);
    String roleName = roleNameExpression.valueOf(putRoleMappingRequest);
    List elementEndpointList = putRoleMappingRequest.getChildren("endpoints", WORKFLOW_NAMESPACE);
    ArrayList endpoints = ElementToObject.makeEndpointList(elementEndpointList);
   
    RoleMapping roleMapping = RoleMapping.create();

    for (int i = 0; i < endpoints.size(); i++) {
      String endpoint = (String) endpoints.get(i);
     
      roleMapping.setEndpoint(endpoint);
     
      if ( i != endpoints.size() - 1)
        roleMapping.moveToAdd();
    }

    roleMapping.setName(roleName);
   
   
    ProcessManagerFactoryBean processManagerFactory = new ProcessManagerFactoryBean();
    ProcessManagerRemote pm = null;

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

    boolean isSuccess = false;
   
    try {
      pm = processManagerFactory.getProcessManager();

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

      isSuccess = workflowService.putRoleMapping(instanceId, roleMapping, pm);
      pm.applyChanges();

      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) {
      }
    }
   
    Element response = new Element(PUT_ROLEMAPPING_REQUEST, WORKFLOW_NAMESPACE).setText(String.valueOf(isSuccess));

    return response;
  }
}
TOP

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

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.