/* * 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.Map; import org.jbpm.services.api.model.ProcessDefinition; import org.jbpm.services.api.model.UserTaskDefinition; import org.kie.api.runtime.KieContainer; /** * Provides details from definition point of view which is extracted from BPMN2 definitions. * Delivers information about: * <ul> * <li>process such as id, name, version</li> * <li>process variables (name and type)</li> * <li>defined reusable subprocesses</li> * <li>defined service tasks (domain specific services)</li> * <li>defined user tasks</li> * <li>user task input and outputs</li> * </ul> */ public interface DefinitionService { /** * Performs build operation for given bpmn2content to produce fully populated <code>ProcessDefinition</code> * @param deploymentId identifier of deployment this process belongs to, * might be null if built definition does not need to be stored * @param bpmn2Content actual BPMN xml content as string to be parsed and processed * @param kieContainer the {@link KieContainer} instance that contains the deployment project: this should be used when * parsing the BPMN2 in case custom classes or other project resources (processes, rules) are referenced * @param cache indicates if the definition service should cache this <code>ProcessDefinition</code> * @return fully populated <code>ProcessDefinition</code> * @throws IllegalArgumentException in case build operation cannot be completed */ ProcessDefinition buildProcessDefinition(String deploymentId, String bpmn2Content, KieContainer kieContainer, boolean cache) throws IllegalArgumentException; void addProcessDefinition(String deploymentId, String processId, Object processDescriptor, KieContainer kieContainer); /** * Returns previously built <code>ProcessDefinition</code>. * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @return returns complete <code>ProcessDefinition</code> if found otherwise null */ ProcessDefinition getProcessDefinition(String deploymentId, String processId); /** * Returns collection of process identifiers of reusable processes used by given process. * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @return returns collection of found reusable subprocess identifiers, maybe an empty list if none were found */ Collection<String> getReusableSubProcesses(String deploymentId, String processId); /** * Returns all process variables defined in the given process where: * <ul> * <li>key in the map is name of the process variable</li> * <li>value in the map is type of the process variable</li> * </ul> * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @return map of all process variables defined or empty map if none are found */ Map<String, String> getProcessVariables(String deploymentId, String processId); /** * Returns a list of all referenced java classes defined in the given process. * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @return a list of all referenced classes defined or an empty list if none are found */ Collection<String> getJavaClasses(String deploymentId, String processId); /** * Returns a list of all referenced rules used in the given process. * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @return a list of all referenced rules or an empty list if none are found */ Collection<String> getRuleSets(String deploymentId, String processId); /** * Returns service (domain specific) tasks defined in the process where: * <ul> * <li>key in the map is name of the task node</li> * <li>value in the map is name of the domain specific service (name that handler should be registered with)</li> * </ul> * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @return returns map of all found service tasks or empty map if none are found */ Map<String, String> getServiceTasks(String deploymentId, String processId); /** * Returns all organizational entities identifiers involved in the process - like users and groups. * Since this is based on definition and not runtime it can return references to process variables * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @return returns map of all found organizational entities grouped by task they are assigned to */ Map<String, Collection<String>> getAssociatedEntities(String deploymentId, String processId); /** * Returns all user task definitions defined in given process * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @return returns collection of <code>UserTaskDefinition</code>s or empty collection if none were found */ Collection<UserTaskDefinition> getTasksDefinitions(String deploymentId, String processId); /** * Returns map of data input defined for given user task * <ul> * <li>key in the map is identifier of dataInput</li> * <li>value in the map is name dataInput</li> * </ul> * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @param taskName name of a task the data input should be collected for * @return returns map of found data inputs or empty map if none were found */ Map<String, String> getTaskInputMappings(String deploymentId, String processId, String taskName); /** * Returns map of data output defined for given user task * <ul> * <li>key in the map is identifier of dataOutput</li> * <li>value in the map is name dataOutput</li> * </ul> * <br/> * NOTE: This method assumes process has already been built by invoking <code>buildProcessDefinition</code> method * @param deploymentId identifier of deployment that process belongs to * @param processId identifier of the process * @param taskName name of a task the data output should be collected for * @return returns map of found data outputs or empty map if none were found */ Map<String, String> getTaskOutputMappings(String deploymentId, String processId, String taskName); }