/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.execution.impl; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import de.rcenvironment.core.communication.api.ServiceCallContext; import de.rcenvironment.core.communication.common.LogicalNodeId; import de.rcenvironment.core.communication.common.NodeIdentifierUtils; import de.rcenvironment.core.component.execution.api.ComponentExecutionContext; import de.rcenvironment.core.component.execution.api.WorkflowGraph; import de.rcenvironment.core.component.model.api.ComponentDescription; import de.rcenvironment.core.component.model.endpoint.api.EndpointDatumRecipient; import de.rcenvironment.core.component.model.endpoint.api.EndpointDatumRecipientFactory; import de.rcenvironment.core.utils.common.StringUtils; /** * Implementation of {@link ComponentExecutionContext}. * * @author Doreen Seider */ public class ComponentExecutionContextImpl implements ComponentExecutionContext { private static final long serialVersionUID = -6480792333241604054L; private String executionIdentifier; private String instanceName; private LogicalNodeId controllerNode; private String workflowExecutionIdentifier; private String workflowInstanceName; private LogicalNodeId defaultStorageNodeId; private ComponentDescription componentDescription; private boolean isConnectedToEndpointDatumSenders; // EndpointDatumRecipient stored as String for serialization purposes private Map<String, List<String>> serializedEndpointDatumRecipients = new HashMap<String, List<String>>(); private File workingDirectory; private WorkflowGraph workflowGraph; private Long workflowInstanceDataManagementId; private Long instanceDataManagementId; private Map<String, Long> inputDataManagementIds; private Map<String, Long> outputDataManagementIds; private Map<String, List<EndpointDatumRecipient>> cachedEndpointDatumRecipients; @Override public String getExecutionIdentifier() { return executionIdentifier; } @Override public String getInstanceName() { return instanceName; } @Override public LogicalNodeId getWorkflowNodeId() { return controllerNode; } @Override public String getWorkflowExecutionIdentifier() { return workflowExecutionIdentifier; } @Override public String getWorkflowInstanceName() { return workflowInstanceName; } @Override public LogicalNodeId getDefaultStorageNodeId() { return defaultStorageNodeId; } @Override public ComponentDescription getComponentDescription() { return componentDescription; } @Override public boolean isConnectedToEndpointDatumSenders() { return isConnectedToEndpointDatumSenders; } @Override public LogicalNodeId getNodeId() { return NodeIdentifierUtils.parseArbitraryIdStringToLogicalNodeIdWithExceptionWrapping(componentDescription .getComponentInstallation().getNodeId()); } @Override public Map<String, List<EndpointDatumRecipient>> getEndpointDatumRecipients() { if (cachedEndpointDatumRecipients == null) { Map<String, List<EndpointDatumRecipient>> edrs = new HashMap<>(); for (String output : serializedEndpointDatumRecipients.keySet()) { edrs.put(output, new ArrayList<EndpointDatumRecipient>()); for (String sedr : serializedEndpointDatumRecipients.get(output)) { String[] parts = StringUtils.splitAndUnescape(sedr); edrs.get(output).add( EndpointDatumRecipientFactory.createEndpointDatumRecipient(parts[0], parts[1], parts[2], NodeIdentifierUtils.parseArbitraryIdStringToLogicalNodeIdWithExceptionWrapping(parts[3]))); } } cachedEndpointDatumRecipients = edrs; } return cachedEndpointDatumRecipients; } @Override public File getWorkingDirectory() { return workingDirectory; } @Override public WorkflowGraph getWorkflowGraph() { return workflowGraph; } @Override public Long getWorkflowInstanceDataManagementId() { return workflowInstanceDataManagementId; } @Override public Long getInstanceDataManagementId() { return instanceDataManagementId; } @Override public Map<String, Long> getInputDataManagementIds() { return inputDataManagementIds; } @Override public Map<String, Long> getOutputDataManagementIds() { return outputDataManagementIds; } public void setExecutionIdentifier(String executionIdentifier) { this.executionIdentifier = executionIdentifier; } public void setInstanceName(String instanceName) { this.instanceName = instanceName; } public void setIsConnectedToEndpointDatumSenders(boolean isConnectedToEndpointDatumSenders) { this.isConnectedToEndpointDatumSenders = isConnectedToEndpointDatumSenders; } public void setWorkflowExecutionIdentifier(String wfExeId) { this.workflowExecutionIdentifier = wfExeId; } public void setWorkflowInstanceName(String wfInstanceName) { this.workflowInstanceName = wfInstanceName; } public void setWorkflowNodeId(LogicalNodeId wfNodeId) { this.controllerNode = wfNodeId; } public void setDefaultStorageNode(LogicalNodeId defaultStorageNode) { this.defaultStorageNodeId = defaultStorageNode; } public void setComponentDescription(ComponentDescription componentDescription) { this.componentDescription = componentDescription; } /** * Sets {@link EndpointDatumRecipient}s per output and serializes {@link EndpointDatumRecipient} instances. * * @param endpointDatumRecipients list of {@link EndpointDatumRecipient}s per output */ public void setEndpointDatumRecipients(Map<String, List<EndpointDatumRecipient>> endpointDatumRecipients) { for (String output : endpointDatumRecipients.keySet()) { serializedEndpointDatumRecipients.put(output, new ArrayList<String>()); for (EndpointDatumRecipient edr : endpointDatumRecipients.get(output)) { serializedEndpointDatumRecipients.get(output).add(StringUtils.escapeAndConcat( new String[] { edr.getInputName(), edr.getInputsComponentExecutionIdentifier(), edr.getInputsComponentInstanceName(), edr.getInputsNodeId().getLogicalNodeIdString() })); } } } public void setWorkingDirectory(File workingDirectory) { this.workingDirectory = workingDirectory; } public void setWorkflowGraph(WorkflowGraph workflowGraph) { this.workflowGraph = workflowGraph; } public void setWorkflowInstanceDataManagementId(Long workflowInstanceDataManagementId) { this.workflowInstanceDataManagementId = workflowInstanceDataManagementId; } public void setInstanceDataManagementId(Long instanceDataManagementId) { this.instanceDataManagementId = instanceDataManagementId; } public void setInputDataManagementIds(Map<String, Long> inputDataManagementIds) { this.inputDataManagementIds = inputDataManagementIds; } public void setOutputDataManagementIds(Map<String, Long> outputDataManagementIds) { this.outputDataManagementIds = outputDataManagementIds; } @Override public ServiceCallContext getServiceCallContext() { return null; } }