/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.joiner.gui;
import de.rcenvironment.components.joiner.common.JoinerComponentConstants;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationDescription;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription;
import de.rcenvironment.core.datamodel.api.DataType;
import de.rcenvironment.core.gui.workflow.editor.commands.endpoint.EditDynamicEndpointCommand;
import de.rcenvironment.core.gui.workflow.editor.properties.WorkflowNodeCommand;
/**
* Special {@link EditDynamicEndpointCommand} for merger.
*
* @author Sascha Zur
*/
public class JoinerEditDynamicEndpointCommand extends WorkflowNodeCommand {
private final DataType newDataType;
private DataType oldDataType;
private int inputCount;
public JoinerEditDynamicEndpointCommand(DataType newDataType) {
super();
this.newDataType = newDataType;
}
@Override
public void initialize() {
ConfigurationDescription config = getProperties().getConfigurationDescription();
oldDataType = DataType.valueOf(config.getConfigurationValue(JoinerComponentConstants.DATATYPE));
inputCount = Integer.valueOf(config.getConfigurationValue(JoinerComponentConstants.INPUT_COUNT));
}
@Override
public boolean canExecute() {
return true;
}
@Override
public boolean canUndo() {
return true;
}
@Override
public void execute() {
for (int i = 1; i <= inputCount; i++) {
EndpointDescription oldInput = getWorkflowNode().getInputDescriptionsManager()
.getEndpointDescription(JoinerComponentConstants.INPUT_NAME + getString(i));
EndpointDescription newInput = EndpointDescription.copy(oldInput);
newInput.setDataType(newDataType);
getWorkflowNode().getInputDescriptionsManager()
.editDynamicEndpointDescription(oldInput.getName(), oldInput.getName(), newInput.getDataType(), newInput.getMetaData());
}
EndpointDescription oldOutput = getWorkflowNode().getOutputDescriptionsManager()
.getEndpointDescription(JoinerComponentConstants.OUTPUT_NAME);
EndpointDescription newOutput = EndpointDescription.copy(oldOutput);
newOutput.setDataType(newDataType);
getWorkflowNode().getOutputDescriptionsManager()
.editStaticEndpointDescription(oldOutput.getName(), newOutput.getDataType(), newOutput.getMetaData());
getProperties().getConfigurationDescription().setConfigurationValue(JoinerComponentConstants.DATATYPE, newDataType.name());
}
@Override
public void undo() {
for (int i = 1; i <= inputCount; i++) {
EndpointDescription oldInput = getWorkflowNode().getInputDescriptionsManager()
.getEndpointDescription(JoinerComponentConstants.INPUT_NAME + getString(i));
EndpointDescription newInput = EndpointDescription.copy(oldInput);
newInput.setDataType(oldDataType);
getWorkflowNode().getInputDescriptionsManager()
.editDynamicEndpointDescription(oldInput.getName(), oldInput.getName(), newInput.getDataType(), newInput.getMetaData());
}
EndpointDescription oldOutput = getWorkflowNode().getOutputDescriptionsManager()
.getEndpointDescription(JoinerComponentConstants.OUTPUT_NAME);
EndpointDescription newOutput = EndpointDescription.copy(oldOutput);
newOutput.setDataType(oldDataType);
getWorkflowNode().getOutputDescriptionsManager()
.editStaticEndpointDescription(newOutput.getName(), newOutput.getDataType(), newOutput.getMetaData());
getProperties().getConfigurationDescription().setConfigurationValue(JoinerComponentConstants.DATATYPE, oldDataType.name());
}
// Adds zeros if i is less than 100 so that the order is right.
private String getString(int i) {
String result = "";
if (i < 10) {
result += "0";
}
if (i < 10 * 10) {
result += "0";
}
result += i;
return result;
}
}