/******************************************************************************* * Copyright 2017 Graz University of Technology * EAAF-Core Components has been developed in a cooperation between EGIZ, * A-SIT+, A-SIT, and Graz University of Technology. * * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * https://joinup.ec.europa.eu/news/understanding-eupl-v12 * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. *******************************************************************************/ /******************************************************************************* *******************************************************************************/ /******************************************************************************* *******************************************************************************/ package at.gv.egiz.eaaf.core.api.idp.process; import java.io.InputStream; import at.gv.egiz.eaaf.core.api.IRequest; import at.gv.egiz.eaaf.core.exceptions.ProcessExecutionException; import at.gv.egiz.eaaf.core.impl.idp.process.ProcessDefinitionParserException; import at.gv.egiz.eaaf.core.impl.idp.process.ProcessInstance; import at.gv.egiz.eaaf.core.impl.idp.process.model.ProcessDefinition; /** * Process engine providing means for starting and resuming processes. * * @author tknall */ public interface ProcessEngine { /** * Registers a new process definition. Note that existing definitions with the same identifier will be replaced. * * @param processDefinition * The process definition to be registered. */ void registerProcessDefinition(ProcessDefinition processDefinition); /** * Registers a new process definition given as {@link InputStream}. Note that existing definitions with the same identifier will be replaced. * * @param processDefinitionInputStream The input stream to the definition to be registered. * @throws ProcessDefinitionParserException Thrown in case of an error parsing the process definition. * @return The process definition's identifier. */ String registerProcessDefinition(InputStream processDefinitionInputStream) throws ProcessDefinitionParserException; /** * Creates a process instance according to the referenced process definition, persists it into the database and returns it identifier. *

* Note that the method returns the identifier of a process instance which will be needed in order to start a process or to continue * process execution after asynchronous task execution (refer to {@link #start(String)} and * {@link #signal(String)} for further information). * * @param processDefinitionId * The identifier of the respective process definition. * @param executionContext The execution context (may be {@code null}). * @return The id of the newly created process instance (never {@code null}). * @throws ProcessExecutionException * Thrown in case of error, e.g. when a {@code processDefinitionId} is referenced that does not exist. */ String createProcessInstance(String processDefinitionId, ExecutionContext executionContext) throws ProcessExecutionException; /** * Creates a process instance according to the referenced process definition, persists it into the database and returns it identifier. *

* Note that the method returns the identifier of a process instance which will be needed in order to start a process or to continue * process execution after asynchronous task execution (refer to {@link #start(String)} and * {@link #signal(String)} for further information). * * @param processDefinitionId * The identifier of the respective process definition. * @return The id of the newly created process instance (never {@code null}). * @throws ProcessExecutionException * Thrown in case of error, e.g. when a {@code processDefinitionId} is referenced that does not exist. */ String createProcessInstance(String processDefinitionId) throws ProcessExecutionException; /** * Delete a process instance * * @param processInstanceId * The identifier of the respective process. * @throws ProcessExecutionException * Thrown in case of error, e.g. when a {@code processInstanceId} is referenced that does not exist. */ void deleteProcessInstance(String processInstanceId) throws ProcessExecutionException; /** * Returns the process instance with a given {@code processInstanceId}. * * @param processInstanceId * The process instance id. * @return The process instance (never {@code null}). * @throws IllegalArgumentException * In case the process instance does not/no longer exist. * @throws RuntimeException * In case the process instance could not be retrieved from persistence. */ ProcessInstance getProcessInstance(String processInstanceId); /** * Starts the process using the given {@code pendingReq}. * * @param pendingReq * The protocol request for which a process should be started. * @throws ProcessExecutionException * Thrown in case of error. */ void start(IRequest pendingReq) throws ProcessExecutionException; /** * Resumes process execution after an asynchronous task has been executed. * * @param pendingReq * The process instance id. * @throws ProcessExecutionException * Thrown in case of error. */ void signal(IRequest pendingReq) throws ProcessExecutionException; }