/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.view.properties;
import java.util.Deque;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDatum;
import de.rcenvironment.core.component.workflow.execution.api.WorkflowExecutionInformation;
import de.rcenvironment.core.component.workflow.model.api.WorkflowNode;
import de.rcenvironment.core.datamodel.api.TypedDatum;
import de.rcenvironment.core.datamodel.types.api.DirectoryReferenceTD;
import de.rcenvironment.core.datamodel.types.api.FileReferenceTD;
import de.rcenvironment.core.datamodel.types.api.MatrixTD;
import de.rcenvironment.core.datamodel.types.api.ShortTextTD;
import de.rcenvironment.core.datamodel.types.api.SmallTableTD;
import de.rcenvironment.core.datamodel.types.api.VectorTD;
import de.rcenvironment.core.gui.workflow.EndpointContentProvider.Endpoint;
/**
* Provides helper methods used if editing inputs.
*
* @author Doreen Seider
*/
public final class InputEditingHelper {
private InputEditingHelper() {}
/**
* @param workflowInformation of affected workflow
* @param endpoint of affected input
* @return input value belonging to given endpoint
*/
public static String getLatestInputValue(WorkflowExecutionInformation workflowInformation, Endpoint endpoint) {
return getLatestInputValueFromEndpoint(workflowInformation.getExecutionIdentifier(),
getComponentIdentifier(workflowInformation, endpoint),
endpoint);
}
private static String getComponentIdentifier(WorkflowExecutionInformation workflowInformation, Endpoint endpoint) {
WorkflowNode workflowNode = endpoint.getWorkflowNode();
return workflowInformation.getComponentExecutionInformation(workflowNode.getIdentifier()).getExecutionIdentifier();
}
/**
*
* @param workflowId identifier of affected workflow
* @param componentId identefier of affected component
* @param endpoint of affected input
* @return current input value belonging to given endpoint
*/
public static String getLatestInputValueFromEndpoint(String workflowId, String componentId, Endpoint endpoint) {
Deque<EndpointDatum> inputs = InputModel.getInstance().getInputs(workflowId, componentId, endpoint.getName());
EndpointDatum input = null;
if (!inputs.isEmpty()) {
input = InputModel.getInstance().getInputs(workflowId, componentId, endpoint.getName()).getLast();
}
return getValueFromInput(input);
}
private static String getValueFromInput(EndpointDatum input) {
final int maxLength = 50;
String inputValue;
if (input != null && input.getValue() != null) {
TypedDatum rawInputValue = input.getValue();
switch (input.getValue().getDataType()) {
case FileReference:
inputValue = ((FileReferenceTD) rawInputValue).getFileName();
break;
case DirectoryReference:
inputValue = ((DirectoryReferenceTD) rawInputValue).getDirectoryName();
break;
case Integer:
case Float:
case Boolean:
inputValue = rawInputValue.toString();
break;
case ShortText:
inputValue = ((ShortTextTD) rawInputValue).toLengthLimitedString(maxLength);
break;
case Vector:
inputValue = ((VectorTD) rawInputValue).toLengthLimitedString(maxLength);
break;
case Matrix:
inputValue = ((MatrixTD) rawInputValue).toLengthLimitedString(maxLength);
break;
case SmallTable:
inputValue = ((SmallTableTD) rawInputValue).toLengthLimitedString(maxLength);
break;
default:
inputValue = input.getValue().toString();
break;
}
} else {
inputValue = "-";
}
return inputValue;
}
}