/* * Copyright 2014 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.services.api; import java.util.Collection; import java.util.List; import java.util.Map; import org.kie.api.command.Command; import org.kie.api.runtime.manager.Context; import org.kie.api.runtime.process.ProcessInstance; import org.kie.api.runtime.process.WorkItem; import org.kie.internal.process.CorrelationKey; public interface ProcessService { /** * Starts a process with no variables * * @param deploymentId deployment information for the process's kjar * @param processId The process's identifier * @return process instance identifier * @throws RuntimeException in case of encountered errors * @throws DeploymentNotFoundException in case deployment with given deployment id does not exist or is not active */ Long startProcess(String deploymentId, String processId); /** * Starts a process with no variables * * @param deploymentId deployment information for the process's kjar * @param processId The process's identifier * @param params process variables * @return process instance identifier * @throws RuntimeException in case of encountered errors * @throws DeploymentNotFoundException in case deployment with given deployment id does not exist or is not active */ Long startProcess(String deploymentId, String processId, Map<String, Object> params); /** * Starts a process with no variables * * @param deploymentId deployment information for the process's kjar * @param processId The process's identifier * @param correlationKey correlation key to be assigned to process instance - must be unique * @return process instance identifier * @throws RuntimeException in case of encountered errors * @throws DeploymentNotFoundException in case deployment with given deployment id does not exist or is not active */ Long startProcess(String deploymentId, String processId, CorrelationKey correlationKey); /** * Starts a process with no variables * * @param deploymentId deployment information for the process's kjar * @param processId The process's identifier * @param correlationKey correlation key to be assigned to process instance - must be unique * @param params process variables * @return process instance identifier * @throws RuntimeException in case of encountered errors * @throws DeploymentNotFoundException in case deployment with given deployment id does not exist or is not active */ Long startProcess(String deploymentId, String processId, CorrelationKey correlationKey, Map<String, Object> params); /** * Aborts the specified process * * @param processInstanceId process instance's unique identifier * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ void abortProcessInstance(Long processInstanceId); /** * Aborts all specified processes * * @param processInstanceIds list of process instance unique identifiers * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ void abortProcessInstances(List<Long> processInstanceIds); /** * Signal an event to a single process instance * * @param processInstanceId the process instance's unique identifier * @param signalName the signal's id in the process * @param event the event object to be passed in with the event * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ void signalProcessInstance(Long processInstanceId, String signalName, Object event); /** * Signal an event to given list of process instances * * @param processInstanceIds list of process instance unique identifiers * @param signalName the signal's id in the process * @param event the event object to be passed in with the event * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ void signalProcessInstances(List<Long> processInstanceIds, String signalName, Object event); /** * Signal an event to a any process instance that listens to give signal that belongs to given deployment * * @param deployment information for the process's kjar * @param signalName the signal's id in the process * @param event the event object to be passed in with the event * @throws DeploymentNotFoundException in case deployment unit was not found */ void signalEvent(String deployment, String signalName, Object event); /** * Returns process instance information. Will return null if no * active process with that id is found * * @param processInstanceId The process instance's unique identifier * @return Process instance information * @throws DeploymentNotFoundException in case deployment unit was not found */ ProcessInstance getProcessInstance(Long processInstanceId); /** * Returns process instance information. Will return null if no * active process with that correlation key is found * * @param correlationKey correlation key assigned to process instance * @return Process instance information * @throws DeploymentNotFoundException in case deployment unit was not found */ ProcessInstance getProcessInstance(CorrelationKey correlationKey); /** * Sets a process variable. * @param processInstanceId The process instance's unique identifier. * @param variableName The variable name to set. * @param variable The variable value. * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ void setProcessVariable(Long processInstanceId, String variableId, Object value); /** * Sets process variables. * @param processInstanceId The process instance's unique identifier. * @param variables map of process variables (key - variable name, value - variable value) * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ void setProcessVariables(Long processInstanceId, Map<String, Object> variables); /** * Gets a process instance's variable. * @param processInstanceId the process instance's unique identifier. * @param variableName the variable name to get from the process. * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ Object getProcessInstanceVariable(Long processInstanceId, String variableName); /** * Gets a process instance's variable values. * @param processInstanceId The process instance's unique identifier. * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ Map<String, Object> getProcessInstanceVariables(Long processInstanceId); /** * Returns all signals available in current state of given process instance * @param processInstanceId process instance id * @return list of available signals or empty list if no signals are available */ Collection<String> getAvailableSignals(Long processInstanceId); /** * Completes the specified WorkItem with the given results * * @param id workItem id * @param results results of the workItem * @throws DeploymentNotFoundException in case deployment unit was not found * @throws WorkItemNotFoundException in case work item with given id was not found */ void completeWorkItem(Long id, Map<String, Object> results); /** * Abort the specified workItem * * @param id workItem id * @throws DeploymentNotFoundException in case deployment unit was not found * @throws WorkItemNotFoundException in case work item with given id was not found */ void abortWorkItem(Long id); /** * Returns the specified workItem * * @param id workItem id * @return The specified workItem * @throws DeploymentNotFoundException in case deployment unit was not found * @throws WorkItemNotFoundException in case work item with given id was not found */ WorkItem getWorkItem(Long id); /** * Returns active work items by process instance id. * * @param processInstanceId process instance id * @return The list of active workItems for the process instance * @throws DeploymentNotFoundException in case deployment unit was not found * @throws ProcessInstanceNotFoundException in case process instance with given id was not found */ List<WorkItem> getWorkItemByProcessInstance(Long processInstanceId); /** * Executes provided command on the underlying command executor (usually KieSession) * @param deploymentId deployment information for the process's kjar * @param command actual command for execution * @return results of command execution * @throws DeploymentNotFoundException in case deployment with given deployment id does not exist * or is not active for restricted commands (e.g. start process) */ public <T> T execute(String deploymentId, Command<T> command); /** * Executes provided command on the underlying command executor (usually KieSession) * @param deploymentId deployment information for the process's kjar * @param context context implementation to be used to get runtime engine * @param command actual command for execution * @return results of command execution * @throws DeploymentNotFoundException in case deployment with given deployment id does not exist * or is not active for restricted commands (e.g. start process) */ public <T> T execute(String deploymentId, Context<?> context, Command<T> command); }