/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.joiner.gui;
import java.util.HashMap;
import de.rcenvironment.components.joiner.common.JoinerComponentConstants;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationDescription;
import de.rcenvironment.core.datamodel.api.DataType;
import de.rcenvironment.core.gui.workflow.editor.commands.endpoint.AddDynamicEndpointCommand;
import de.rcenvironment.core.gui.workflow.editor.properties.WorkflowNodeCommand;
/**
* Special {@link AddDynamicEndpointCommand} for merger.
*
* @author Sascha Zur
*/
public class JoinerAddOrRemoveDynamicEndpointsCommand extends WorkflowNodeCommand {
private final int newCount;
private int oldInputCount;
private DataType dataType;
public JoinerAddOrRemoveDynamicEndpointsCommand(int newCount) {
super();
this.newCount = newCount;
}
@Override
public void initialize() {
ConfigurationDescription config = getProperties().getConfigurationDescription();
oldInputCount = Integer.valueOf(config.getConfigurationValue(JoinerComponentConstants.INPUT_COUNT));
dataType = DataType.valueOf(config.getConfigurationValue(JoinerComponentConstants.DATATYPE));
}
@Override
public boolean canExecute() {
return true;
}
@Override
public boolean canUndo() {
return true;
}
@Override
public void execute() {
if (newCount > oldInputCount) {
for (int i = oldInputCount + 1; i <= newCount; i++) {
getWorkflowNode().getInputDescriptionsManager().addDynamicEndpointDescription(
JoinerComponentConstants.DYNAMIC_INPUT_ID, JoinerComponentConstants.INPUT_NAME + getString(i), dataType,
new HashMap<String, String>());
}
} else if (newCount < oldInputCount) {
for (int i = oldInputCount; i > newCount && i > 1; i--) {
getWorkflowNode().getInputDescriptionsManager().removeDynamicEndpointDescription(
JoinerComponentConstants.INPUT_NAME + getString(i));
}
}
getProperties().getConfigurationDescription().setConfigurationValue(JoinerComponentConstants.INPUT_COUNT, String.valueOf(newCount));
}
@Override
public void undo() {
if (newCount > oldInputCount) {
for (int i = oldInputCount + 1; i <= newCount; i++) {
getWorkflowNode().getInputDescriptionsManager().removeDynamicEndpointDescription(
JoinerComponentConstants.INPUT_NAME + getString(i));
}
} else if (newCount < oldInputCount) {
for (int i = oldInputCount; i > newCount && i > 1; i--) {
getWorkflowNode().getInputDescriptionsManager().addDynamicEndpointDescription(
JoinerComponentConstants.DYNAMIC_INPUT_ID, JoinerComponentConstants.INPUT_NAME + getString(i), dataType,
new HashMap<String, String>());
}
}
getProperties().getConfigurationDescription().setConfigurationValue(JoinerComponentConstants.INPUT_COUNT,
String.valueOf(oldInputCount));
}
// 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;
}
}