/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.execution.api;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDatum;
import de.rcenvironment.core.utils.common.rpc.RemoteOperationException;
/**
* Component-specific {@link ExecutionController}.
*
* @author Doreen Seider
*/
public interface ComponentExecutionController extends ExecutionController {
/**
* Prepares the component.
*/
void prepare();
/**
* @return the {@link ComponentState}
*/
ComponentState getState();
/**
* Calls if an {@link EndpointDatum} was received from a local {@link RemotableEndpointDatumDispatcher}.
*
* @param endpointDatum {@link EndpointDatum} received
*/
void onEndpointDatumReceived(EndpointDatum endpointDatum);
/**
* Called if asynchronous sending of an {@link EndpointDatum} failed.
*
* @param endpointDatum affected {@link EndpointDatum}
* @param e {@link RemoteOperationException} thrown
*/
void onSendingEndointDatumFailed(EndpointDatum endpointDatum, RemoteOperationException e);
/**
* Cancels the component.
*
* @param timeoutMsec max time to wait
* @throws InterruptedException if waiting for the component to get cancelled failed
* @return <code>false</code> if the timeout exceeded, otherwise <code>true</code>
*/
boolean cancelSync(long timeoutMsec) throws InterruptedException;
/**
* @return <code>true</code> if sending heartbeats to workflow controller succeeded, <code>false</code> otherwise
*/
boolean isWorkflowControllerReachable();
/**
* Verifies the results of the last component run if verification was requested.
*
* @param verificationToken verification token used to verify results of a certain component run
* @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> (reason: invalid
* verification token)
*/
boolean verifyResults(String verificationToken, boolean verified);
/**
* @return latest verification token if component is in {@link ComponentState#WAITING_FOR_APPROVAL} (or {@link ComponentState#PAUSING}),
* otherwise <code>null</code> in case of another {@link ComponentState} or in case no token exists.
*/
String getVerificationToken();
}