/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.workflow.execution.impl;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import de.rcenvironment.core.communication.common.LogicalNodeId;
import de.rcenvironment.core.communication.common.NodeIdentifierUtils;
import de.rcenvironment.core.component.execution.api.ComponentExecutionInformation;
import de.rcenvironment.core.component.execution.impl.ComponentExecutionInformationImpl;
import de.rcenvironment.core.component.workflow.execution.api.WorkflowExecutionContext;
import de.rcenvironment.core.component.workflow.execution.api.WorkflowExecutionInformation;
import de.rcenvironment.core.component.workflow.execution.api.WorkflowState;
import de.rcenvironment.core.component.workflow.model.api.WorkflowDescription;
import de.rcenvironment.core.component.workflow.model.api.WorkflowNode;
/**
* Implementation of {@link WorkflowExecutionInformation}.
*
* @author Doreen Seider
*/
public class WorkflowExecutionInformationImpl extends ComponentExecutionInformationImpl implements WorkflowExecutionInformation {
private static final long serialVersionUID = 8037878257248368500L;
private long instantiationTime;
private WorkflowDescription workflowDescription;
private Map<String, ComponentExecutionInformation> componentExecutionInformations = new HashMap<>();
private LogicalNodeId nodeIdentifierStartedExecution;
private String additionalInformation;
private WorkflowState workflowState;
private Long workflowDataManagementId = null;
public WorkflowExecutionInformationImpl(WorkflowExecutionContext wfExeCtx) {
setInstanceName(wfExeCtx.getInstanceName());
setNodeId(wfExeCtx.getNodeId());
setDefaultStorageNodeId(wfExeCtx.getDefaultStorageNodeId());
setWorkflowDescription(wfExeCtx.getWorkflowDescription());
setWorkflowExecutionContext(wfExeCtx);
instantiationTime = new Date().getTime();
}
@Override
public WorkflowDescription getWorkflowDescription() {
return workflowDescription;
}
@Override
public long getStartTime() {
return instantiationTime;
}
@Override
public ComponentExecutionInformation getComponentExecutionInformation(String wfNodeId) {
return componentExecutionInformations.get(wfNodeId);
}
public void setWorkflowDescription(WorkflowDescription workflowDescription) {
this.workflowDescription = workflowDescription;
}
@Override
public LogicalNodeId getNodeIdStartedExecution() {
return nodeIdentifierStartedExecution;
}
@Override
public String getAdditionalInformationProvidedAtStart() {
return additionalInformation;
}
private void setWorkflowExecutionContext(WorkflowExecutionContext wfExeCtx) {
componentExecutionInformations.clear();
for (WorkflowNode wfNode : wfExeCtx.getWorkflowDescription().getWorkflowNodes()) {
ComponentExecutionInformationImpl componentExecutionInformation = new ComponentExecutionInformationImpl();
componentExecutionInformation.setIdentifier(wfExeCtx.getCompExeIdByWfNodeId(wfNode.getIdentifier()));
componentExecutionInformation.setInstanceName(wfNode.getName());
componentExecutionInformation.setNodeId(NodeIdentifierUtils.parseArbitraryIdStringToLogicalNodeIdWithExceptionWrapping(
wfNode.getComponentDescription().getComponentInstallation().getNodeId()));
componentExecutionInformation.setComponentIdentifier(wfNode.getComponentDescription().getIdentifier());
componentExecutionInformation.setDefaultStorageNodeId(wfExeCtx.getDefaultStorageNodeId());
componentExecutionInformations.put(wfNode.getIdentifier(), componentExecutionInformation);
}
nodeIdentifierStartedExecution = wfExeCtx.getNodeIdStartedExecution();
additionalInformation = wfExeCtx.getAdditionalInformationProvidedAtStart();
}
@Override
public int compareTo(WorkflowExecutionInformation other) {
return getWorkflowDescription().getName().compareToIgnoreCase(other.getWorkflowDescription().getName());
}
@Override
public WorkflowState getWorkflowState() {
return workflowState;
}
@Override
public Long getWorkflowDataManagementId() {
return workflowDataManagementId;
}
public void setWorkflowState(WorkflowState workflowState) {
this.workflowState = workflowState;
}
public void setWorkflowDataManagementId(Long workflowDataManagementId) {
this.workflowDataManagementId = workflowDataManagementId;
}
}