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)); } }
NucleusClient ?
Superb buddy,cheers
what is nucleus client??