/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.editor.commands.endpoint;
import java.util.LinkedList;
import java.util.List;
import de.rcenvironment.core.component.api.LoopComponentConstants;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription;
import de.rcenvironment.core.gui.workflow.editor.properties.Refreshable;
/**
* Removes one single input, another input with given suffix and two outputs - one with the same
* name as the input and one with the same name as the input + given suffix.
*
* @author Sascha Zur
*/
public class RemoveDynamicInputWithAnotherPossibleInputAndOutputsCommand extends RemoveDynamicInputWithOutputsCommand {
private final String addDynInputId;
private final String inputNameSuffix;
private final List<String> inputsWithSuffixInput;
public RemoveDynamicInputWithAnotherPossibleInputAndOutputsCommand(String dynEndpointId, String addDynInputId, String inputNameSuffix,
String addDynOutputId, String outputNameSuffix, List<String> names, Refreshable... panes) {
super(dynEndpointId, addDynOutputId, outputNameSuffix, names, panes);
this.addDynInputId = addDynInputId;
this.inputNameSuffix = inputNameSuffix;
this.inputsWithSuffixInput = new LinkedList<>();
}
@Override
public void initialize() {
for (String name : names) {
oldDescriptions.put(name, getProperties().getInputDescriptionsManager().getEndpointDescription(name));
EndpointDescription endpointDescription = getProperties().getInputDescriptionsManager()
.getEndpointDescription(name + inputNameSuffix);
if (!name.endsWith(inputNameSuffix) && endpointDescription != null) {
inputsWithSuffixInput.add(name);
}
}
}
@Override
public void execute() {
for (String name : names) {
EndpointDescription endpointDescription = getProperties().getInputDescriptionsManager()
.getEndpointDescription(name + inputNameSuffix);
if (!name.endsWith(inputNameSuffix)
&& endpointDescription != null) {
InputWithOutputsCommandUtils.removeInputWithSuffix(getProperties(), name, inputNameSuffix);
}
}
super.execute();
}
@Override
public void undo() {
for (String name : names) {
EndpointDescription oldDescription = oldDescriptions.get(name);
if (inputsWithSuffixInput.contains(name)) {
InputWithOutputsCommandUtils.addInputWithSuffix(getProperties(), addDynInputId, name, oldDescription.getDataType(),
inputNameSuffix, LoopComponentConstants.ENDPOINT_STARTVALUE_GROUP);
}
}
super.undo();
}
}