/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.jbpm.remote.ejb.test.client; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; import javax.naming.NamingException; import org.jbpm.services.api.RuntimeDataService; import org.jbpm.services.api.model.NodeInstanceDesc; import org.jbpm.services.api.model.ProcessDefinition; import org.jbpm.services.api.model.ProcessInstanceDesc; import org.jbpm.services.api.model.UserTaskDefinition; import org.jbpm.services.api.model.UserTaskInstanceDesc; import org.jbpm.services.api.model.VariableDesc; import org.jbpm.services.ejb.api.DefinitionServiceEJBRemote; import org.jbpm.services.ejb.api.DeploymentServiceEJBRemote; import org.jbpm.services.ejb.api.ProcessServiceEJBRemote; import org.jbpm.services.ejb.api.RuntimeDataServiceEJBRemote; import org.jbpm.services.ejb.api.UserTaskServiceEJBRemote; import org.jbpm.services.ejb.client.ClientServiceFactory; import org.jbpm.services.ejb.client.ServiceFactoryProvider; import org.kie.api.command.Command; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.process.ProcessInstance; import org.kie.api.runtime.process.WorkItem; import org.kie.api.runtime.query.QueryContext; import org.kie.api.task.model.Attachment; import org.kie.api.task.model.Comment; import org.kie.api.task.model.OrganizationalEntity; import org.kie.api.task.model.Status; import org.kie.api.task.model.Task; import org.kie.api.task.model.TaskSummary; import org.kie.internal.query.QueryFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class EJBClient { private static final String APPLICATION = "ejb-services-app"; private final Logger log = LoggerFactory.getLogger(EJBClient.class); private final String deploymentId; private final DeploymentServiceEJBRemote deploymentService; private final ProcessServiceEJBRemote processService; private final RuntimeDataServiceEJBRemote runtimeDataService; private final DefinitionServiceEJBRemote definitionService; private final UserTaskServiceEJBRemote userTaskService; public EJBClient(String deploymentId) throws NamingException { this.deploymentId = deploymentId; ClientServiceFactory factory = ServiceFactoryProvider.getProvider("JBoss"); deploymentService = factory.getService(APPLICATION, DeploymentServiceEJBRemote.class); processService = factory.getService(APPLICATION, ProcessServiceEJBRemote.class); runtimeDataService = factory.getService(APPLICATION, RuntimeDataServiceEJBRemote.class); definitionService = factory.getService(APPLICATION, DefinitionServiceEJBRemote.class); userTaskService = factory.getService(APPLICATION, UserTaskServiceEJBRemote.class); log.debug("Deployment Service: " + deploymentService); log.debug("Process Service: " + processService); log.debug("Runtime Data Service: " + runtimeDataService); log.debug("Definition Service: " + definitionService); log.debug("User Task Service: " + userTaskService); } private <T> List<T> toList(Collection<T> c) { List<T> l = new ArrayList<>(); if (c != null) { l.addAll(c); } return l; } public DeploymentServiceEJBRemote getDeploymentService() { return deploymentService; } public DefinitionServiceEJBRemote getDefinitionService() { return definitionService; } public RuntimeDataServiceEJBRemote getRuntimeDataService() { return runtimeDataService; } public ProcessServiceEJBRemote getProcessService() { return processService; } public UserTaskServiceEJBRemote getUserTaskService() { return userTaskService; } // *********** UserTaskServiceEJBRemote public void activate(Long taskId, String userId) { userTaskService.activate(taskId, userId); } public void claim(Long taskId, String userId) { userTaskService.claim(taskId, userId); } public void complete(Long taskId, String userId, Map<String, Object> data) { userTaskService.complete(taskId, userId, data); } public void delegate(Long taskId, String userId, String targetUserId) { userTaskService.delegate(taskId, userId, targetUserId); } public void exit(Long taskId, String userId) { userTaskService.exit(taskId, userId); } public void fail(Long taskId, String userId, Map<String, Object> faultData) { userTaskService.fail(taskId, userId, faultData); } public void forward(Long taskId, String userId, String targetEntityId) { userTaskService.forward(taskId, userId, targetEntityId); } public Long addComment(Long taskId, String text, String addedBy, Date addedOn) { return userTaskService.addComment(taskId, text, addedBy, addedOn); } public void deleteComment(Long taskId, Long commentId) { userTaskService.deleteComment(taskId, commentId); } public List<Comment> getCommentsByTaskId(Long taskId) { return userTaskService.getCommentsByTaskId(taskId); } public Comment getCommentById(Long taskId, Long commentId) { return userTaskService.getCommentById(taskId, commentId); } public Long addAttachment(Long taskId, String userId, String name, Object attachment) { return userTaskService.addAttachment(taskId, userId, name, attachment); } public void deleteAttachment(Long taskId, Long attachmentId) { userTaskService.deleteAttachment(taskId, attachmentId); } public Attachment getAttachmentById(Long taskId, Long attachmentId) { return userTaskService.getAttachmentById(taskId, attachmentId); } public List<Attachment> getAttachmentsByTaskId(Long taskId) { return userTaskService.getAttachmentsByTaskId(taskId); } public Task getTask(Long taskId) { return userTaskService.getTask(taskId); } public void release(Long taskId, String userId) { userTaskService.release(taskId, userId); } public void resume(Long taskId, String userId) { userTaskService.resume(taskId, userId); } public void skip(Long taskId, String userId) { userTaskService.skip(taskId, userId); } public void start(Long taskId, String userId) { userTaskService.start(taskId, userId); } public void stop(Long taskId, String userId) { userTaskService.stop(taskId, userId); } public void suspend(Long taskId, String userId) { userTaskService.suspend(taskId, userId); } public void nominate(Long taskId, String userId, List<OrganizationalEntity> potentialOwners) { userTaskService.nominate(taskId, userId, potentialOwners); } public Map<String, Object> getTaskOutputContentByTaskId(Long l) { return userTaskService.getTaskOutputContentByTaskId(l); } public Map<String, Object> getTaskInputContentByTaskId(Long l) { return userTaskService.getTaskInputContentByTaskId(l); } // *********** ProcessServiceEJBRemote public <T> T execute(Command<T> command) { return processService.execute(deploymentId, command); } public Long startProcessSimple(String processId) { return processService.startProcess(deploymentId, processId); } public Long startProcess(String processId) { Long pid = startProcessSimple(processId); log.info("Started process of type '" + processId + "' with id '" + pid + "'"); return pid; } public Long startProcess(String processId, Map<String, Object> parameters) { Long pid = processService.startProcess(deploymentId, processId, parameters); log.info("Started process of type '" + processId + "' with id '" + pid + "' with parameters"); return pid; } /** * Be sure to use this method for processes containing a save point. Otherwise you risk that * org.kie.internal.runtime.manager.SessionNotFoundException raises as the method queries for a process instance * that could be already finished. * @param processId process definition ID * @return instance of a running process * */ public ProcessInstance startAndGetProcess(String processId) { return getProcessInstance(startProcess(processId)); } /** * Be sure to use this method for processes containing a save point. Otherwise you risk that * org.kie.internal.runtime.manager.SessionNotFoundException raises as the method queries for a process instance * that could be already finished. * @param processId process definition ID * @param parameters process instance parameters * @return instance of a running process * */ public ProcessInstance startAndGetProcess(String processId, Map<String, Object> parameters) { return getProcessInstance(startProcess(processId, parameters)); } public void signalProcessInstance(Long processInstanceId, String type, Object event) { processService.signalProcessInstance(processInstanceId, type, event); } public ProcessInstance getProcessInstance(Long processInstanceId) { return processService.getProcessInstance(processInstanceId); } public void abortProcessInstance(Long processInstanceId) { processService.abortProcessInstance(processInstanceId); } public void completeWorkItem(Long workItemId) { completeWorkItem(workItemId, null); } public void completeWorkItem(Long workItemId, Map<String, Object> results) { processService.completeWorkItem(workItemId, results); } public void abortWorkItem(Long workItemId) { processService.abortWorkItem(workItemId); } public List<String> getAvailableSignals(Long processInstanceId) { return (List<String>) processService.getAvailableSignals(processInstanceId); } public void setProcessVariable(Long processInstanceId, String variableName, Object variableValue) { processService.setProcessVariable(processInstanceId, variableName, variableValue); } public Object getProcessVariable(Long processInstanceId, String variableName) { return processService.getProcessInstanceVariable(processInstanceId, variableName); } public void setProcessVariables(Long processInstanceId, Map<String, Object> variableMap) { processService.setProcessVariables(processInstanceId, variableMap); } public Map<String, Object> getProcessInstanceVariables(Long processInstanceId) { return processService.getProcessInstanceVariables(processInstanceId); } public List<WorkItem> getWorkItemByProcessInstance(Long processInstanceId) { return processService.getWorkItemByProcessInstance(processInstanceId); } // *********** DeploymentServiceEJBRemote public void deploy(String groupId, String artefactId, String version) { deploymentService.deploy(groupId, artefactId, version); } public void deploy(String groupId, String artefactId, String version, String kbaseName, String ksessionName) { deploymentService.deploy(groupId, artefactId, version, kbaseName, ksessionName); } public void deploy(String groupId, String artefactId, String version, String kbaseName, String ksessionName, String strategy) { deploymentService.deploy(groupId, artefactId, version, kbaseName, ksessionName, strategy); } public void undeploy(String deploymentId) { deploymentService.undeploy(deploymentId); } public boolean isDeployed(String deploymentId) { return deploymentService.isDeployed(deploymentId); } // *********** DefinitionServiceEJBRemote public ProcessDefinition buildProcessDefinition(String deploymentId, String bpmn2Content, KieContainer kcontainer, boolean cache) throws IllegalArgumentException { return definitionService.buildProcessDefinition(deploymentId, bpmn2Content, kcontainer, cache); } public ProcessDefinition getProcessDefinition(String deploymentId, String processId) { return definitionService.getProcessDefinition(deploymentId, processId); } public Collection<String> getReusableSubProcesses(String deploymentId, String processId) { return definitionService.getReusableSubProcesses(deploymentId, processId); } public Map<String, String> getProcessVariables(String deploymentId, String processId) { return definitionService.getProcessVariables(deploymentId, processId); } public Map<String, String> getServiceTasks(String deploymentId, String processId) { return definitionService.getServiceTasks(deploymentId, processId); } public Map<String, Collection<String>> getAssociatedEntities(String deploymentId, String processId) { return definitionService.getAssociatedEntities(deploymentId, processId); } public Collection<UserTaskDefinition> getTasksDefinitions(String deploymentId, String processId) { return definitionService.getTasksDefinitions(deploymentId, processId); } public Map<String, String> getTaskInputMappings(String deploymentId, String processId, String taskName) { return definitionService.getTaskInputMappings(deploymentId, processId, taskName); } public Map<String, String> getTaskOutputMappings(String deploymentId, String processId, String taskName) { return definitionService.getTaskOutputMappings(deploymentId, processId, taskName); } // *********** RuntimeDataServiceEJBRemote public List<ProcessInstanceDesc> getProcessInstances() { return toList(runtimeDataService.getProcessInstances(new QueryContext())); } public List<ProcessInstanceDesc> getProcessInstances(QueryContext context) { return toList(runtimeDataService.getProcessInstances(context)); } public List<ProcessInstanceDesc> getProcessInstances(List<Integer> list, String string, QueryContext context) { return toList(runtimeDataService.getProcessInstances(list, string, context)); } public List<ProcessInstanceDesc> getProcessInstancesByProcessId(List<Integer> states, String processId, String indicator, QueryContext context) { return toList(runtimeDataService.getProcessInstancesByProcessId(states, processId, indicator, context)); } public List<ProcessInstanceDesc> getProcessInstancesByProcessName(List<Integer> states, String processName, String indicator, QueryContext context) { return toList(runtimeDataService.getProcessInstancesByProcessName(states, processName, indicator, context)); } public List<ProcessInstanceDesc> getProcessInstancesByDeploymentId(String deploymentId, List<Integer> states, QueryContext context) { return toList(runtimeDataService.getProcessInstancesByDeploymentId(deploymentId, states, context)); } public ProcessInstanceDesc getProcessInstanceById(long processInstanceId) { return runtimeDataService.getProcessInstanceById(processInstanceId); } public List<ProcessInstanceDesc> getProcessInstancesByProcessDefinition(String processDefinitionId) { return toList(runtimeDataService.getProcessInstancesByProcessDefinition(processDefinitionId, new QueryContext())); } public List<ProcessInstanceDesc> getProcessInstancesByProcessDefinition(String processDefinitionId, QueryContext context) { return toList(runtimeDataService.getProcessInstancesByProcessDefinition(processDefinitionId, context)); } public List<ProcessInstanceDesc> getProcessInstancesByProcessDefinition(String processDefinitionId, List<Integer> states, QueryContext context) { return toList(runtimeDataService.getProcessInstancesByProcessDefinition(processDefinitionId, states, context)); } public NodeInstanceDesc getNodeInstanceForWorkItem(Long nodeInstanceId) { return runtimeDataService.getNodeInstanceForWorkItem(nodeInstanceId); } public List<NodeInstanceDesc> getProcessInstanceHistoryActive(long l, QueryContext context) { return toList(runtimeDataService.getProcessInstanceHistoryActive(l, context)); } public List<NodeInstanceDesc> getProcessInstanceHistoryCompleted(long l, QueryContext context) { return toList(runtimeDataService.getProcessInstanceHistoryCompleted(l, context)); } public List<NodeInstanceDesc> getProcessInstanceFullHistory(long processInstanceId) { return toList(runtimeDataService.getProcessInstanceFullHistory(processInstanceId, new QueryContext())); } public List<NodeInstanceDesc> getProcessInstanceFullHistory(long processInstanceId, QueryContext context) { return toList(runtimeDataService.getProcessInstanceFullHistory(processInstanceId, context)); } public List<NodeInstanceDesc> getProcessInstanceFullHistoryByType(long processId, RuntimeDataService.EntryType type, QueryContext context) { return toList(runtimeDataService.getProcessInstanceFullHistoryByType(processId, type, context)); } public List<VariableDesc> getVariablesCurrentState(long processInstanceId) { return toList(runtimeDataService.getVariablesCurrentState(processInstanceId)); } public List<VariableDesc> getVariableHistory(long processInstanceId, String variableId) { return toList(runtimeDataService.getVariableHistory(processInstanceId, variableId, new QueryContext())); } public List<VariableDesc> getVariableHistory(long processInstanceId, String variableId, QueryContext context) { return toList(runtimeDataService.getVariableHistory(processInstanceId, variableId, context)); } public List<ProcessDefinition> getProcessesByDeploymentId(String deploymentId, QueryContext context) { return toList(runtimeDataService.getProcessesByDeploymentId(deploymentId, context)); } public List<ProcessDefinition> getProcessesByFilter(String deploymentId, QueryContext context) { return toList(runtimeDataService.getProcessesByFilter(deploymentId, context)); } public List<ProcessDefinition> getProcesses(QueryContext context) { return toList(runtimeDataService.getProcesses(context)); } public List<String> getProcessIds(QueryContext context) { return toList(runtimeDataService.getProcessIds(deploymentId, context)); } public ProcessDefinition getProcessesByDeploymentIdProcessId(String processId) { return runtimeDataService.getProcessesByDeploymentIdProcessId(deploymentId, processId); } public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId) { return runtimeDataService.getTasksAssignedAsPotentialOwner(userId, new QueryFilter()); } public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, QueryFilter filter) { return runtimeDataService.getTasksAssignedAsPotentialOwner(userId, filter); } public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, QueryFilter filter) { return runtimeDataService.getTasksAssignedAsPotentialOwner(userId, groupIds, filter); } public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, List<Status> status, QueryFilter filter) { return runtimeDataService.getTasksAssignedAsPotentialOwner(userId, groupIds, status, filter); } public List<TaskSummary> getTasksAssignedAsPotentialOwnerByExpirationDateOptional(String userId, List<Status> status, Date from, QueryFilter filter) { return runtimeDataService.getTasksAssignedAsPotentialOwnerByExpirationDateOptional(userId, status, from, filter); } public List<TaskSummary> getTasksAssignedAsPotentialOwnerByStatus(String userId, List<Status> status, QueryFilter filter) { return runtimeDataService.getTasksAssignedAsPotentialOwnerByStatus(userId, status, filter); } public List<TaskSummary> getTasksOwnedByExpirationDateOptional(String userId, List<Status> status, Date from, QueryFilter filter) { return runtimeDataService.getTasksOwnedByExpirationDateOptional(userId, status, from, filter); } public List<Long> getTasksByProcessInstanceId(Long processInstanceId) { return runtimeDataService.getTasksByProcessInstanceId(processInstanceId); } public List<TaskSummary> getTasksByStatusByProcessInstanceId(Long processInstanceId, List<Status> status, QueryFilter filter) { return runtimeDataService.getTasksByStatusByProcessInstanceId(processInstanceId, status, filter); } public UserTaskInstanceDesc getTaskByWorkItemId(Long workItemId) { return runtimeDataService.getTaskByWorkItemId(workItemId); } public UserTaskInstanceDesc getTaskById(Long taskId) { return runtimeDataService.getTaskById(taskId); } public List<TaskSummary> getTasksAssignedAsBusinessAdministrator(String userId, QueryFilter filter) { return runtimeDataService.getTasksAssignedAsBusinessAdministrator(userId, filter); } public List<TaskSummary> getTasksOwned(String userId, QueryFilter filter) { return runtimeDataService.getTasksOwned(userId, filter); } public List<TaskSummary> getTasksOwnedByStatus(String userId, List<Status> status, QueryFilter filter) { return runtimeDataService.getTasksOwnedByStatus(userId, status, filter); } public List<TaskSummary> getTasksByStatusByProcessInstanceId(long processInstanceId, List<Status> status) { return runtimeDataService.getTasksByStatusByProcessInstanceId(processInstanceId, status, new QueryFilter()); } public List<TaskSummary> getTasksByStatusByProcessInstanceId(long processInstanceId, List<Status> status, QueryFilter filter) { return runtimeDataService.getTasksByStatusByProcessInstanceId(processInstanceId, status, filter); } public List<Long> getTasksByProcessInstanceId(long processInstanceId) { return runtimeDataService.getTasksByProcessInstanceId(processInstanceId); } }