/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.execution.api;
import java.util.List;
import java.util.Map;
import de.rcenvironment.core.communication.common.LogicalNodeId;
import de.rcenvironment.core.component.execution.impl.ComponentExecutionContextImpl;
import de.rcenvironment.core.component.model.api.ComponentDescription;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDatumRecipient;
/**
* Create {@link ComponentExecutionContext} objects.
*
* @author Doreen Seider
*/
public class ComponentExecutionContextBuilder {
private ComponentExecutionContextImpl compExeCtx;
public ComponentExecutionContextBuilder() {
compExeCtx = new ComponentExecutionContextImpl();
}
/**
* Sets the execution identifiers.
*
* @param executionIdentifier execution identifier of the component executed
* @param workflowExecutionIdentifier execution identifier of the workflow executed
* @return {@link ComponentExecutionContextBuilder} instance for method chaining purposes
*/
public ComponentExecutionContextBuilder setExecutionIdentifiers(String executionIdentifier, String workflowExecutionIdentifier) {
compExeCtx.setExecutionIdentifier(executionIdentifier);
compExeCtx.setWorkflowExecutionIdentifier(workflowExecutionIdentifier);
return this;
}
/**
* Sets the instance names.
*
* @param instanceName name of the component executed
* @param workflowInstanceName name of the workflow executed
* @return {@link ComponentExecutionContextBuilder} instance for method chaining purposes
*/
public ComponentExecutionContextBuilder setInstanceNames(String instanceName, String workflowInstanceName) {
compExeCtx.setInstanceName(instanceName);
compExeCtx.setWorkflowInstanceName(workflowInstanceName);
return this;
}
/**
* Sets the nodes.
*
* @param workflowNode hosting node of the workflow (controller) executed
* @param defaultStorageNode node of the default storage
* @return {@link ComponentExecutionContextBuilder} instance for method chaining purposes
*/
public ComponentExecutionContextBuilder setNodes(LogicalNodeId workflowNode, LogicalNodeId defaultStorageNode) {
compExeCtx.setWorkflowNodeId(workflowNode);
compExeCtx.setDefaultStorageNode(defaultStorageNode);
return this;
}
/**
* Sets the {@link ComponentDescription} of the component executed.
*
* @param componentDescription {@link ComponentDescription} of the component executed.
* @return {@link ComponentExecutionContextBuilder} instance for method chaining purposes
*/
public ComponentExecutionContextBuilder setComponentDescription(ComponentDescription componentDescription) {
compExeCtx.setComponentDescription(componentDescription);
return this;
}
/**
* Sets information about predecessors and successors of the component executed.
*
* @param isConnectedToEndpointDatumSenders <code>true</code> if the component executed is connected to inputs, otherwise
* <code>false</code>
* @param endpointDatumRecipients set of {@link EndpointDatumRecipient}s
* @return {@link ComponentExecutionContextBuilder} instance for method chaining purposes
*/
public ComponentExecutionContextBuilder setPredecessorAndSuccessorInformation(boolean isConnectedToEndpointDatumSenders,
Map<String, List<EndpointDatumRecipient>> endpointDatumRecipients) {
compExeCtx.setIsConnectedToEndpointDatumSenders(isConnectedToEndpointDatumSenders);
compExeCtx.setEndpointDatumRecipients(endpointDatumRecipients);
return this;
}
/**
* Sets the workflow graph.
*
* @param workflowGraph {@link WorkflowGraph} instance with graph information of the associated workflow
* @return {@link ComponentExecutionContextBuilder} instance for method chaining purposes
*/
public ComponentExecutionContextBuilder setWorkflowGraph(WorkflowGraph workflowGraph) {
compExeCtx.setWorkflowGraph(workflowGraph);
return this;
}
/**
* Sets the data management id of the component instance.
*
* @param workflowInstanceDataManagementId data management id of the workflow instance
* @param instanceDataManagementId data management id of the component instance
* @param inputDataManagementIds data management ids of the inputs
* @param outputDataManagementIds data management ids of the outputs
* @return {@link ComponentExecutionContextBuilder} instance for method chaining purposes
*/
public ComponentExecutionContextBuilder setDataManagementIds(Long workflowInstanceDataManagementId, Long instanceDataManagementId,
Map<String, Long> inputDataManagementIds,
Map<String, Long> outputDataManagementIds) {
compExeCtx.setWorkflowInstanceDataManagementId(workflowInstanceDataManagementId);
compExeCtx.setInstanceDataManagementId(instanceDataManagementId);
compExeCtx.setInputDataManagementIds(inputDataManagementIds);
compExeCtx.setOutputDataManagementIds(outputDataManagementIds);
return this;
}
/**
* @return {@link ComponentExecutionContext} object
*/
public ComponentExecutionContext build() {
return compExeCtx;
}
}