Package org.jbpm.rewards

Source Code of org.jbpm.rewards.RewardsApprovalIntegration

package org.jbpm.rewards;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.apache.log4j.Logger;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.SystemEventListenerFactory;
import org.drools.builder.ResourceType;
import org.drools.persistence.jpa.JPAKnowledgeService;
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
import org.drools.runtime.process.WorkItem;
import org.drools.runtime.process.WorkItemHandler;
import org.drools.runtime.process.WorkItemManager;
import org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler;
import org.jbpm.process.workitem.wsht.SyncWSHumanTaskHandler;
import org.jbpm.task.AccessType;
import org.jbpm.task.Group;
import org.jbpm.task.User;
import org.jbpm.task.service.TaskService;
import org.jbpm.task.query.TaskSummary;
import org.jbpm.task.service.ContentData;
import org.jbpm.task.service.TaskClient;
import org.jbpm.task.service.TaskClientHandler.TaskSummaryResponseHandler;
import org.jbpm.task.service.TaskServiceSession;
import org.jbpm.task.service.hornetq.CommandBasedHornetQWSHumanTaskHandler;
import org.jbpm.task.service.hornetq.HornetQTaskClientConnector;
import org.jbpm.task.service.hornetq.HornetQTaskClientHandler;
import org.jbpm.task.service.responsehandlers.BlockingTaskOperationResponseHandler;
import org.jbpm.task.service.responsehandlers.BlockingTaskSummaryResponseHandler;
import org.jbpm.test.JbpmJUnitTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

/**
* TODO: work in progress.
*
* This is a sample file to integration test the Extended Rewards Approval process.
*
* Note: you must have BRMS server running as this process test
*       uses a running HornetQ messaging system for its
*       integration test.
*/
public class RewardsApprovalIntegration extends JbpmJUnitTestCase {

  private TaskClient client; 
  private StatefulKnowledgeSession ksession;
  private static TaskService taskService;
  private static TaskServiceSession taskSession;
  private Map<String, Object> params;
  private BlockingTaskSummaryResponseHandler taskSummaryResponseHandler;
  private BlockingTaskOperationResponseHandler responseHandler;
  private CommandBasedHornetQWSHumanTaskHandler handler;
  private KnowledgeBase kbase;
  private Map<String, ResourceType> resources;

  private static EntityManagerFactory emf;
  private Environment env;
  private int sessionId;
 
  @BeforeClass
    public static void setUpOnce() throws Exception {
      // nothing yet.
    }

    @Override
    @Before
    public void setUp() throws Exception {
        super.setUp();

//        // create the entity manager factory and register it in the environment
//        emf = Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" );
//        Environment env = KnowledgeBaseFactory.newEnvironment();
//        env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
//
//        // create a new knowledge session that uses JPA to store the runtime state
//        ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
//        sessionId = ksession.getId();

        // load up the knowledge base
       kbase = null;
      
       // Use the local files.
       resources = new HashMap<String, ResourceType>();
       resources.put("rewardsapproval.bpmn2", ResourceType.BPMN2);
     
    try {
         kbase = createKnowledgeBase(resources);
       } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
       }
       ksession = createKnowledgeSession(kbase);
    //ksession = createKnowledgeSession("rewardsapproval.bpmn2");
   
    // setup client to connect to human task service.
    client = new TaskClient(new HornetQTaskClientConnector("taskClient" + UUID.randomUUID(),
        new HornetQTaskClientHandler(SystemEventListenerFactory.getSystemEventListener())));
    client.connect("127.0.0.1", 5153);
 
    // setup task client to use running BRMS server task client.
       handler = new CommandBasedHornetQWSHumanTaskHandler(ksession);
       handler.setClient(client);

       // setup task users and groups.
       setupUsers();
      
    // register other work items
//    ksession.getWorkItemManager().registerWorkItemHandler("Log", new SystemOutWorkItemHandler());
//    ksession.getWorkItemManager().registerWorkItemHandler("Email", new SystemOutWorkItemHandler());
    ksession.getWorkItemManager().registerWorkItemHandler("Log", handler);
    ksession.getWorkItemManager().registerWorkItemHandler("Email", handler);
    ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
   
    // initialize process parameters.
    params = new HashMap<String, Object>();   
    params.put("employee", "erics");
    params.put("reason", "Amazing demos for JBoss World!");
       
   
    }

    @Override
    @After
    public void tearDown() throws Exception {
      client.disconnect();
      super.tearDown();
    }

    @Test
    public void rewardApprovedIntegrationTest() {
   
       // start a new process instance       
       ProcessInstance processInstance = ksession.startProcess("org.jbpm.approval.rewards", params);
      
       // Check whether the process instance has completed successfully.
       assertProcessInstanceActive(processInstance.getId(), ksession);
       System.out.println("Process is active.");
       assertNodeExists(processInstance, "Approve Reward");
       System.out.println("Process had node we are looking for.");
       assertNodeTriggered(processInstance.getId(), "Start", "Approve Reward");
       System.out.println("Process has triggerd node we expect it to do.");
      
       // execute task by Mary from HR.
       BlockingTaskSummaryResponseHandler taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
       BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();

       // find our tasks for user.
       client.getTasksAssignedAsPotentialOwner("mary", "en-UK", taskSummaryResponseHandler);
       List<TaskSummary> tasks = taskSummaryResponseHandler.getResults();
      
       // claim and get started on task.
       System.out.println("Size of task list: " + tasks.size());
       client.claim(tasks.get(0).getId(), "mary", responseHandler);
       responseHandler.waitTillDone(1000);
      
       client.start(tasks.get(0).getId(), "mary", responseHandler);
       responseHandler.waitTillDone(1000);
      
       // Add task data to response.
       Map<String, Object> taskParams = new HashMap<String, Object>();
    taskParams.put("Explanation", "Great work");
    taskParams.put("Outcome", "Approved");
   
    // Serialized and inserted.
    ContentData content = new ContentData();
    content.setAccessType(AccessType.Inline);
    content.setContent(getByteArrayFromObject(taskParams));
   
    client.complete(tasks.get(0).getId(), "mary", content, responseHandler);
    responseHandler.waitTillDone(1000);
      
   
       //     List<TaskSummary> list = taskService.getTasksAssignedAsPotentialOwner("mary", new ArrayList<String>(), "en-UK");
//    TaskSummary task = list.get(0);
//    taskService.claim(task.getId(), "mary", new ArrayList<String>());
//    taskService.start(task.getId(), "mary");
//   
//    Map<String, Object> taskParams = new HashMap<String, Object>();
//    taskParams.put("Explanation", "Great work");
//    taskParams.put("Outcome", "Approved");
//   
//    // Serialized and inserted.
//    ContentData content = new ContentData();
//    content.setAccessType(AccessType.Inline);
//    content.setContent(getByteArrayFromObject(taskParams));
//   
//    // add results of task.
//    taskService.complete(task.getId(), "mary", content);

    // test for completion and in correct end node.
    assertProcessInstanceCompleted(processInstance.getId(), ksession);
    assertNodeTriggered(processInstance.getId(), "End Approved");
             
       System.out.println("Finished test.");
    }
   
  /**
   * Converts an object to a serialized byte array.
   *
   * @param obj Object to be converted.
   * @return byte[] Serialized array representing the object.
   */
  private static byte[] getByteArrayFromObject(Object obj) {
      byte[] result = null;
        
      try {
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          ObjectOutputStream oos = new ObjectOutputStream(baos);
          oos.writeObject(obj);
          oos.flush();
          oos.close();
          baos.close();
          result = baos.toByteArray();
      } catch (IOException ioEx) {
          Logger.getLogger("UtilityMethods").error("Error converting object to byteArray", ioEx);
      }
         
      return result;
  }

  /**
   * Sets up users in task service for tests.
   */
  private static void setupUsers() {
   
    emf = Persistence.createEntityManagerFactory("org.jbpm.task");
    taskService = new TaskService(emf, SystemEventListenerFactory.getSystemEventListener());
    taskSession = taskService.createSession();

    // now register new user and group for test.
    taskSession.addUser(new User("Administrator"));
    taskSession.addUser(new User("mary"));
    taskSession.addGroup(new Group("HR"));
  }
}

TOP

Related Classes of org.jbpm.rewards.RewardsApprovalIntegration

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.