Activiti REST Client
package com.nuke.activiti.client;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONStringer;
import org.restlet.data.ChallengeScheme;
import org.restlet.data.MediaType;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.resource.ClientResource;
import org.slf4j.Logger;
/**
* @author tmichels
*/
public class ActivitiClient {
private static final Logger logger = org.slf4j.LoggerFactory.getLogger(NucleusClient.class);
private static final String REST_URI = "http://activiti-dev.com:8090/api/activiti/v1";
private static final String LDAP_USERNAME="xxxx";
private static final String LDAP_PASSWORD="xxxx";
private static ClientResource getClientResource(String uri) throws IOException{
ClientResource clientResource = new ClientResource(uri);
clientResource.setChallengeResponse(ChallengeScheme.HTTP_BASIC, LDAP_USERNAME, LDAP_PASSWORD);
return clientResource;
}
public static List<String> getQueueNames(String username) throws JSONException, IOException{
String authenticateUserUri = REST_URI + "/identity/users/"+username;
Representation authenticateUserJSON = getClientResource(authenticateUserUri).get(MediaType.APPLICATION_JSON);
JSONObject authenticateObject = new JSONObject(authenticateUserJSON.getText());
logger.info("Get Queue Name: " + authenticateObject);
if (!authenticateObject.opt("id").equals(null)) {
List<String> queueForUser = new ArrayList<String>();
String uri = REST_URI +"/repository/process-definitions";
Representation response = getClientResource(uri).get(MediaType.APPLICATION_JSON);
JSONObject object = new JSONObject(response.getText());
JSONArray arr = (JSONArray) object.get("data");
for (int i = 0; i < arr.length(); i++) {
JSONObject ob = (JSONObject) arr.get(i);
queueForUser.add(ob.get("name").toString());
}
return queueForUser;
}
return null;
}
public static String claimAndCompleteTaskByProcessIdAndActorName(String processInstanceId, String actorName) throws JSONException, IOException {
try {
String authenticateUserUri = REST_URI + "/identity/users/"+actorName;
Representation authenticateUserJSON = getClientResource(authenticateUserUri).get(MediaType.APPLICATION_JSON);
JSONObject authenticateObject = new JSONObject(authenticateUserJSON.getText());
logger.info("AuthenticateObject: " + authenticateObject);
if (!authenticateObject.opt("id").equals(null)) {
String getTaskUri = REST_URI + "/runtime/tasks?candidate=" + actorName + "&size=1&order=asc&taskDefinitionKey=UnassignedLoan";
Representation response = getClientResource(getTaskUri).get(MediaType.APPLICATION_JSON);
JSONObject object = new JSONObject(response.getText());
if (object != null) {
JSONArray arr = (JSONArray) object.get("data");
for (int i = 0; i < arr.length(); i++) {
JSONObject ob = (JSONObject) arr.get(i);
if (processInstanceId != null) {
if (ob.get("processDefinitionId").equals(processInstanceId)) {
logger.info("Returned task: " + ob);
if (ob.get("id") != null) {
String claimUri = REST_URI + "/runtime/tasks/" + ob.get("id");
logger.info("Claim URI: " + claimUri);
JSONStringer jsAssignee = new JSONStringer();
jsAssignee.object().key("assignee").value(actorName);
jsAssignee.key("owner").value(actorName);
jsAssignee.endObject();
logger.info("jsAssignee: " + jsAssignee.toString());
JSONStringer jsClaim = new JSONStringer();
jsClaim.object().key("action").value("claim");
jsClaim.endObject();
logger.info("jsClaim: " + jsClaim.toString());
JsonRepresentation jsonAssigneeRepresentation = new JsonRepresentation(jsAssignee);
logger.info("jsonAssigneeRepresentation: " + jsonAssigneeRepresentation.getText());
JsonRepresentation jsonClaimRepresentation = new JsonRepresentation(jsClaim);
logger.info("jsonClaimRepresentation: " + jsonClaimRepresentation.getText());
Representation assigneeResponse = getClientResource(claimUri).put(jsonAssigneeRepresentation);
Representation claimResponse = getClientResource(claimUri).post(jsonClaimRepresentation);
logger.info("Assignee Response: " + assigneeResponse.getText());
if (claimResponse.getText() == null) {
boolean completeTask = NucleusClient.completeTaskByIdWithVariables(ob.getString("description").toString(), actorName, null);
logger.info("Complete Response: " + completeTask);
if (completeTask) {
JSONObject taskByLoan = getTaskByLoanId(ob.getString("description").toString());
JSONArray taskByLoanArray = (JSONArray) taskByLoan.get("data");
if (!taskByLoanArray.isNull(0)) {
JSONObject obTask = (JSONObject) taskByLoanArray.get(0);
JSONStringer jsAssigneeAfterComplete = new JSONStringer();
jsAssigneeAfterComplete.object().key("assignee").value(actorName);
jsAssigneeAfterComplete.key("owner").value(actorName);
jsAssigneeAfterComplete.endObject();
JsonRepresentation jsonAssigneeAfterCompleteRepresentation = new JsonRepresentation(jsAssigneeAfterComplete);
String claimAfterCompleteUri = REST_URI + "/runtime/tasks/" + obTask.get("id");
getClientResource(claimAfterCompleteUri).put(jsonAssigneeAfterCompleteRepresentation);
}
return ob.getString("description");
}
}
}
}
}
}
}
return null;
}
return null;
}catch (Exception e){
logger.error("claimAndCompleteTaskByProcessIdAndActorName", e);
return null;
}
}
public static JSONObject getTaskByLoanId(String loanId) throws JSONException, IOException {
String getTaskByLoanId = REST_URI +"/runtime/tasks?description=" + loanId + "&size=1";
Representation response = getClientResource(getTaskByLoanId).get(MediaType.APPLICATION_JSON);
JSONObject object = new JSONObject(response.getText());
return object;
}
public static boolean completeTaskByIdWithVariables(String loanId, String actorName, Map<String, String> completeVariables) throws Exception {
try {
JSONObject loanjsonObjs = getTaskByLoanId(loanId);
JSONArray loanArr = (JSONArray) loanjsonObjs.get("data");
logger.info("LoanArr: " + loanArr);
if (!loanArr.isNull(0) && loanArr.getJSONObject(0).has("id")) {
JSONObject loanjsonObj = loanArr.getJSONObject(0);
String uri = REST_URI + "/runtime/tasks/" + loanjsonObj.get("id").toString();
JSONStringer jsComplete = new JSONStringer();
jsComplete.object().key("action").value("complete");
if (completeVariables!=null){
jsComplete.key("variables").array().object();
for (String completeVariable : completeVariables.keySet()) {
jsComplete.key("name").value(completeVariable).key("value").value(completeVariables.get(completeVariable));
}
jsComplete.endObject().endArray();
}
jsComplete.endObject();
JsonRepresentation jsonCompleteRepresentation = new JsonRepresentation(jsComplete);
logger.info("jsonCompleteRepresentation: " + jsonCompleteRepresentation.getText());
if(completeVariables==null || !(loanArr.getJSONObject(0).getString("taskDefinitionKey").equals("SaveForLater") && completeVariables.get("disposition").equals("saveforlater"))) {
Representation completeResponse = getClientResource(uri).post(jsonCompleteRepresentation, MediaType.APPLICATION_JSON);
logger.info("Complete Response: " + completeResponse.getText());
if (completeResponse.getText()==null){
if (completeVariables!=null && !completeVariables.get("disposition").equals("incomplete")) {
JSONObject taskByLoan = getTaskByLoanId(loanId);
JSONArray taskByLoanArray = (JSONArray) taskByLoan.get("data");
if (!taskByLoanArray.isNull(0)) {
JSONObject obTask = (JSONObject) taskByLoanArray.get(0);
JSONStringer jsAssigneeAfterComplete = new JSONStringer();
jsAssigneeAfterComplete.object().key("assignee").value(actorName);
jsAssigneeAfterComplete.key("owner").value(actorName);
jsAssigneeAfterComplete.endObject();
JsonRepresentation jsonAssigneeAfterCompleteRepresentation = new JsonRepresentation(jsAssigneeAfterComplete);
String claimAfterCompleteUri = REST_URI + "/runtime/tasks/" + obTask.get("id");
getClientResource(claimAfterCompleteUri).put(jsonAssigneeAfterCompleteRepresentation);
}
}
return true;
}
} else {
return true;
}
}
}catch (Exception e){
e.printStackTrace();
}
return false;
}
public static String getProcessIdByName(String queueName) throws IOException, JSONException {
String uri = REST_URI + "/repository/process-definitions";
Representation response = getClientResource(uri).get(MediaType.APPLICATION_JSON);
JSONObject object = new JSONObject(response.getText());
if (object != null) {
JSONArray arr = (JSONArray) object.get("data");
for (int i = 0; i < arr.length(); i++) {
JSONObject jsonObject = (JSONObject) arr.get(i);
if (jsonObject.get("key").equals(queueName)) {
logger.info("Returning processDefinitionId " + jsonObject.get("id"));
return (String) jsonObject.get("id");
}
}
}
return null;
}
public static String createTaskByProcessId(String processDefinitionId, Map<String, String> taskVariables) throws Exception {
String uri = REST_URI + "/runtime/process-instances";
JSONStringer jsRequest = new JSONStringer();
jsRequest.object().key("processDefinitionId").value(processDefinitionId).key("variables").array().object();
for (String taskVariable : taskVariables.keySet()) {
jsRequest.key("name").value(taskVariable).key("value").value(taskVariables.get(taskVariable));
}
jsRequest.endObject().endArray();
jsRequest.endObject();
Representation rep = new StringRepresentation(jsRequest.toString(), MediaType.APPLICATION_JSON);
JSONObject jsObj = new JSONObject(getClientResource(uri).post(rep).getText());
logger.info("Returned process: " + jsObj);
if (jsObj.has("id")) {
return jsObj.getString("id");
} else {
return null;
}
}
public static String getTaskIdByProcessIdAndActorName(String processInstanceId, String actorName) throws Exception {
String uri = REST_URI + "/runtime/tasks?candidate=" +actorName;
Representation response = getClientResource(uri).get(MediaType.APPLICATION_JSON);
JSONObject object = new JSONObject(response.getText());
if (object != null) {
JSONArray arr = (JSONArray) object.get("data");
for (int i = 0; i < arr.length(); i++) {
JSONObject ob = (JSONObject) arr.get(i);
if (ob.get("processDefinitionId").equals(processInstanceId)) {
logger.info("Returned task: " + ob);
logger.info("Returning taskId " + ob.get("id"));
return (String) ob.get("id");
}
}
}
return null;
}
public static boolean claimTaskByIdAndActorName(String taskId, String actorName) throws Exception {
String uri = REST_URI + "/runtime/tasks/" + taskId;
JSONStringer jsClaim = new JSONStringer();
jsClaim.object().key("action").value("claim");
jsClaim.endObject();
logger.info("jsClaim: " + jsClaim.toString());
JsonRepresentation jsonClaimRepresentation = new JsonRepresentation(jsClaim);
logger.info("jsonClaimRepresentation: " + jsonClaimRepresentation.getText());
Representation claimResponse = getClientResource(uri).post(jsonClaimRepresentation, MediaType.APPLICATION_JSON);
JSONStringer jsAssignee = new JSONStringer();
jsAssignee.object().key("assignee").value(actorName);
jsAssignee.key("owner").value(actorName);
jsAssignee.endObject();
logger.info("jsAssignee: " + jsAssignee.toString());
JsonRepresentation jsonAssignRepresentation = new JsonRepresentation(jsAssignee);
getClientResource(uri).put(jsonAssignRepresentation, MediaType.APPLICATION_JSON);
return claimResponse.getText()==null;
}
@SuppressWarnings("unused")
public static int getTaskCountByActorNameAndStatus(String actorName, String status) throws Exception {
String uri = REST_URI + "/runtime/tasks?candidate=" + actorName + "&status=" + status;
Representation response = getClientResource(uri).get(MediaType.APPLICATION_JSON);
JSONObject object = new JSONObject(response.getText());
if (object != null) {
JSONArray arr = (JSONArray) object.get("data");
logger.info("Tasklist " + actorName + " " + status + " size " + arr.length());
return arr.length();
}
return -1;
}
public static List<String> taskQueryByActorNameBySizeAndOrder(String actorName,int size, String order, String status) throws Exception {
List<String> taskForActor = new ArrayList<String>();
String url = REST_URI + "/runtime/tasks?assignee="+ actorName +"&size=" + size + "&order="+order +"&status="+status;
Representation response = getClientResource(url).get(MediaType.APPLICATION_JSON);
if (response != null) {
JSONObject object = new JSONObject(response.getText());
if (object != null) {
JSONArray arr = (JSONArray) object.get("data");
for (int i = 0; i < arr.length(); i++) {
JSONObject ob = (JSONObject) arr.get(i);
taskForActor.add(ob.toString());
}
}
}
return taskForActor;
}
}
Activiti REST Client Test
package com.nuke.activiti.client;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONException;
import org.junit.Test;
import com.nuke.activiti.common.AbstractTest;
/**
* @author tmichels
*/
public class ActivitiClientTest extends AbstractTest {
@Test
public void testGetQueueNamesAdmin() throws IOException, JSONException {
List<String> queueNames = NucleusClient.getQueueNames("qatester_tools");
for (String queueName : queueNames) {
System.out.println(queueName);
}
assertNotNull(queueNames);
}
@Test
public void testGetQueueNames() throws JSONException, IOException {
List<String> queueNames = NucleusClient.getQueueNames("qatester_tools");
for (String queueName : queueNames) {
System.out.println(queueName);
}
assertNotNull(queueNames);
}
@Test
public void testGetQueueTestEdgarNames() throws JSONException, IOException {
List<String> queueNames = NucleusClient.getQueueNames("qatester_tools");
for (String queueName : queueNames) {
System.out.println(queueName);
}
assertNotNull(queueNames);
}
@Test
public void testNewDiagram() throws IOException, JSONException {
assertNotNull(NucleusClient.getProcessIdByName("underwritingQueue"));
System.out.println("OUTPUT: " + NucleusClient.getProcessIdByName("bankVerificationQueue"));
assertNotNull(NucleusClient.getProcessIdByName("bankVerificationQueue"));
}
@Test
public void testWithUserInSameLDAPGroup() throws Exception {
assertNotNull(NucleusClient.getTaskIdByProcessIdAndActorName(NucleusClient.getProcessIdByName("underwritingQueue"), "qatester_tools"));
}
@Test
public void testGetQueueNamesNonReturn() throws JSONException, IOException {
List<String> queueNames = NucleusClient.getQueueNames("dummy");
assertNull(queueNames);
}
@Test
public void testLoanComplete() throws Exception {
String underwritingQueueProcessId = NucleusClient.getProcessIdByName("underwritingQueue");
Map<String, String> processVariables = new HashMap<String, String>();
processVariables.put("LoanId", "1");
String processInstanceId = NucleusClient.createTaskByProcessId(underwritingQueueProcessId, processVariables);
assertNotNull(processInstanceId);
assertNotNull(NucleusClient.taskQueryByActorNameBySizeAndOrder("qatester_admin", 1, "asc", "open"));
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "complete");
assertTrue(NucleusClient.completeTaskByIdWithVariables("1", "qatester_tools",completeVariables));
}
@Test
public void testLoanInComplete() throws Exception{
String underwritingQueueProcessId = NucleusClient.getProcessIdByName("underwritingQueue");
Map<String, String> processVariables = new HashMap<String, String>();
processVariables.put("LoanId", "2");
NucleusClient.createTaskByProcessId(underwritingQueueProcessId, processVariables);
assertTrue(NucleusClient.completeTaskByIdWithVariables("2", "qatester_admin", null));
assertNotNull(NucleusClient.taskQueryByActorNameBySizeAndOrder("qatester_admin", 1, "asc", "open"));
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "incomplete");
assertTrue(NucleusClient.completeTaskByIdWithVariables("2","qatester_tools", completeVariables));
assertNotNull(NucleusClient.taskQueryByActorNameBySizeAndOrder("qatester_admin", 1, "asc", "open"));
}
@Test
public void testSaveForLater() throws Exception{
String underwritingQueueProcessId = NucleusClient.getProcessIdByName("underwritingQueue");
Map<String, String> processVariables = new HashMap<String, String>();
processVariables.put("LoanId", "3");
String processInstanceId = NucleusClient.createTaskByProcessId(underwritingQueueProcessId, processVariables);
System.out.println(processInstanceId);
assertTrue(NucleusClient.completeTaskByIdWithVariables("3","qatester_tools", null));
assertNotNull(NucleusClient.taskQueryByActorNameBySizeAndOrder("qatester_admin", 1, "asc", "open"));
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "saveforlater");
assertTrue(NucleusClient.completeTaskByIdWithVariables("3", "qatester_tools",completeVariables));
}
@Test
public void endToEndTest() throws Exception {
String underwritingQueueProcessId = NucleusClient.getProcessIdByName("underwritingQueue");
assertNotNull(underwritingQueueProcessId);
Map<String, String> processVariables = new HashMap<String, String>();
processVariables.put("LoanId", "00000000000");
String processInstanceId = NucleusClient.createTaskByProcessId(underwritingQueueProcessId, processVariables);
System.out.println("processInstanceId: " + underwritingQueueProcessId);
assertNotNull(processInstanceId);
String taskId = NucleusClient.getTaskIdByProcessIdAndActorName(NucleusClient.getProcessIdByName("underwritingQueue"), "qatester_tools");
assertNotNull(taskId);
assertNotNull(NucleusClient.claimTaskByIdAndActorName(taskId, "qatester_tools"));
assertNotNull(NucleusClient.completeTaskByIdWithVariables(taskId,"qatester_tools", null));
assertNotNull(NucleusClient.getTaskCountByActorNameAndStatus("qatester_tools", "closed"));
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "saveforlater");
NucleusClient.completeTaskByIdWithVariables(taskId,"qatester_tools", completeVariables);
assertNotNull(NucleusClient.getTaskCountByActorNameAndStatus("qatester_tools", "closed"));
}
@Test
public void testUserInSameLDAPGroup() throws Exception {
assertNotNull(NucleusClient.getTaskIdByProcessIdAndActorName(NucleusClient.getProcessIdByName("underwritingQueue"), "qatester_tools"));
}
@Test
public void testGetProcessIdByName() throws Exception {
String queueProcessId = NucleusClient.getProcessIdByName("underwritingQueue");
assertNotNull(queueProcessId);
}
@Test
public void testCreateTaskByProcessId() throws Exception {
String underwritingQueueProcessId = NucleusClient.getProcessIdByName("underwritingQueue");
assertNotNull(underwritingQueueProcessId);
Map<String, String> processVariables = new HashMap<String, String>();
processVariables.put("LoanId", "332233555");
String createComplete = NucleusClient.createTaskByProcessId(underwritingQueueProcessId, processVariables);
System.out.println("CREATE COMPLETE: " + createComplete);
assertNotNull(createComplete);
}
@Test
public void testTaskByActorName() throws Exception {
String processId = NucleusClient.getProcessIdByName("underwritingQueue");
String taskId = NucleusClient.getTaskIdByProcessIdAndActorName(processId, "qatester_tools");
assertNotNull(taskId);
}
@Test
public void testClaimTaskById() throws Exception {
String processId = NucleusClient.getProcessIdByName("underwritingQueue");
String taskId = NucleusClient.getTaskIdByProcessIdAndActorName(processId, "qatester_tools");
assertNotNull(NucleusClient.claimTaskByIdAndActorName(taskId, "qatester_tools"));
}
@Test
public void testCompleteTaskById() throws Exception {
String processId = NucleusClient.getProcessIdByName("underwritingQueue");
Map<String, String> processVariables = new HashMap<String, String>();
processVariables.put("LoanId", "3333333333");
NucleusClient.createTaskByProcessId(processId, processVariables);
String taskId = NucleusClient.getTaskIdByProcessIdAndActorName(processId, "qatester_tools");
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "complete");
assertNotNull(NucleusClient.completeTaskByIdWithVariables(taskId,"qatester_tools", completeVariables));
}
@Test
public void testIncompleteTaskById() throws Exception{
String processId = NucleusClient.getProcessIdByName("underwritingQueue");
Map<String, String> processVariables = new HashMap<String, String>();
processVariables.put("LoanId", "4444444444");
NucleusClient.createTaskByProcessId(processId, processVariables);
String taskId = NucleusClient.getTaskIdByProcessIdAndActorName(processId, "qatester_tools");
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "incomplete");
assertNotNull(NucleusClient.completeTaskByIdWithVariables(taskId,"qatester_tools", completeVariables));
}
@Test
public void testSaveForLaterTaskById() throws Exception {
String processId = NucleusClient.getProcessIdByName("underwritingQueue");
Map<String, String> processVariables = new HashMap<String, String>();
processVariables.put("LoanId", "5555555555");
String creatProcessId = NucleusClient.createTaskByProcessId(processId, processVariables);
System.out.println("CreatedProcessId: " + creatProcessId);
String taskId = NucleusClient.getTaskIdByProcessIdAndActorName(processId, "qatester_tools");
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "saveforlater");
assertNotNull(NucleusClient.completeTaskByIdWithVariables(taskId,"qatester_tools", completeVariables));
}
@Test
public void testGetTaskCountByActorNameAndStatus() throws Exception {
int taskCount = NucleusClient.getTaskCountByActorNameAndStatus("qatester_tools", "open");
assertNotNull(taskCount);
}
@Test
public void testTaskQueryForActorNameBySizeAndOrder() throws Exception {
List<String> taskIds = NucleusClient.taskQueryByActorNameBySizeAndOrder("qatester_tools", 5, "asc", "open");
for (String taskId : taskIds) {
System.out.println("TASKID: " + taskId);
}
assertNotNull(taskIds);
}
@Test
public void testGetTaskClaimAndCompleteTaskByProcessIdAndActorName() throws JSONException, IOException {
assertNotNull(NucleusClient.claimAndCompleteTaskByProcessIdAndActorName(NucleusClient.getProcessIdByName("underwritingQueue"), "qatester_tools"));
}
@Test
public void testGetTaskClaimAndCompleteTaskByProcessIdAndActorNameWithWrongActorName() throws Exception{
assertNull(NucleusClient.claimAndCompleteTaskByProcessIdAndActorName(NucleusClient.getProcessIdByName("underwritingQueue"), "dummy"));
}
@Test
public void testGetTaskClaimAndCompleteTaskByProcessIdAndActorNameWithWrongProcessName() throws Exception{
assertNull(NucleusClient.claimAndCompleteTaskByProcessIdAndActorName(NucleusClient.getProcessIdByName("dummy"), "dummy"));
}
@Test
public void testProccessIdReturnNullWhenInvalid() throws IOException, JSONException {
assertNull(NucleusClient.getProcessIdByName("dummy"));
}
@Test
public void testGetTaskByLoanId() throws JSONException, IOException {
assertNotNull(NucleusClient.getTaskByLoanId("259190367").getJSONArray("data"));
}
@Test
public void testSaveForlater() throws Exception {
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "complete");
NucleusClient.completeTaskByIdWithVariables("685363", "qatester_tools", completeVariables);
}
@Test
public void testSaveForLaterIfAlreadySaveForLater() throws Exception {
String processId = NucleusClient.getProcessIdByName("underwritingQueue");
String taskId = NucleusClient.getTaskIdByProcessIdAndActorName(processId, "qatester_tools");
System.out.println("TaskId: " + taskId);
Map<String, String> completeVariables = new HashMap<String, String>();
completeVariables.put("disposition", "incomplete");
assertNotNull(NucleusClient.completeTaskByIdWithVariables("1111111111","qatester_tools", completeVariables));
}
}
Like this:
Like Loading...