/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.execution.api; import java.util.Set; import de.rcenvironment.core.communication.common.ResolvableNodeId; import de.rcenvironment.core.utils.common.rpc.RemoteOperationException; /** * Manages component executions. * * @author Doreen Seider */ public interface ComponentExecutionService { /** * Initializes a new component execution. * * @param executionContext {@link ComponentExecutionContext} providing information about the execution. * @param authToken token which authorizes the caller to execute the component * @param referenceTimestamp current timestamp on workflow node * @return execution identifier of the component executed * @throws RemoteOperationException if communication error occurs (cannot occur if component runs locally) * @throws ComponentExecutionException if initializing the component failed */ String init(ComponentExecutionContext executionContext, String authToken, Long referenceTimestamp) throws ComponentExecutionException, RemoteOperationException; /** * Prepares a component. * * @param executionId execution identifier of the component executed * @param node the hosting node of the component executed * @throws RemoteOperationException if communication error occurs (cannot occur if component runs locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ void prepare(String executionId, ResolvableNodeId node) throws ExecutionControllerException, RemoteOperationException; /** * Starts a component. * * @param executionId execution identifier of the component executed * @param node the hosting node of the component executed * @throws RemoteOperationException if communication error occurs (cannot occur if component runs locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ void start(String executionId, ResolvableNodeId node) throws ExecutionControllerException, RemoteOperationException; /** * Pauses a component. * * @param executionId execution identifier of the component executed * @param node the hosting node of the component executed * @throws RemoteOperationException if communication error occurs (cannot occur if component runs locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ void pause(String executionId, ResolvableNodeId node) throws ExecutionControllerException, RemoteOperationException; /** * Resumes a component. * * @param executionId execution identifier of the component executed * @param node the hosting node of the component executed * @throws RemoteOperationException if communication error occurs (cannot occur if component runs locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ void resume(String executionId, ResolvableNodeId node) throws ExecutionControllerException, RemoteOperationException; /** * Cancels a component. * * @param executionId execution identifier of the component executed * @param node the hosting node of the component executed * @throws RemoteOperationException if communication error occurs (cannot occur if component runs locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ void cancel(String executionId, ResolvableNodeId node) throws ExecutionControllerException, RemoteOperationException; /** * Disposes a component. * * @param executionId execution identifier of the component executed * @param node the hosting node of the component executed * @throws RemoteOperationException if communication error occurs (cannot occur if component runs locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ void dispose(String executionId, ResolvableNodeId node) throws ExecutionControllerException, RemoteOperationException; /** * @param verificationToken verification token used to verify results of a certain component run * @return {@link ComponentExecutionInformation} of the component related to the verification token or <code>null</code> if no one * related was found * @throws RemoteOperationException if called from remote and remote method call failed (cannot occur if controller and components run * locally) */ ComponentExecutionInformation getComponentExecutionInformation(String verificationToken) throws RemoteOperationException; /** * Verifies the results of the last component run if verification was requested. * * @param executionId execution identifier of the component executed * @param node the hosting node of the component executed * @param verificationToken verification token related to the component executed * @param verified <code>true</code> if results are verified otherwise <code>false</code> * @return <code>true</code> if verification result could be applied successfully, otherwise <code>false</code> (most likely reason: * invalid verification token or component not in state {@link ComponentState#WAITING_FOR_APPROVAL} (anymore)) * @throws RemoteOperationException if communication error occurs (cannot occur if component runs locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ boolean verifyResults(String executionId, ResolvableNodeId node, String verificationToken, boolean verified) throws ExecutionControllerException, RemoteOperationException; /** * Gets current component state. * * @param executionId execution identifier (part of {@link ComponentExecutionInformation}) of the component to get the state for * @param node the node of the component controller * @return {@link ComponentState} * @throws RemoteOperationException if communication error occurs (cannot occur if controller and components run locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ ComponentState getComponentState(String executionId, ResolvableNodeId node) throws ExecutionControllerException, RemoteOperationException; /** * @return {@link WorkflowExecutionInformation} objects of all active and local workflows */ Set<ComponentExecutionInformation> getLocalComponentExecutionInformations(); }