/*
* 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.HashMap;
import java.util.Map;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescriptionsManager;
import de.rcenvironment.core.gui.workflow.editor.properties.Refreshable;
/**
* Edits one single input and one output with the same name as the input .
*
* @author Sascha Zur
* @author Martin Misiak FIXED 0014355: {@link #undo()} reverted to the datatype of the new @link {@link EndpointDescription} instead of the
* old.
*/
public class EditDynamicInputWithAnotherInputAndOutputCommand extends EditDynamicInputWithOutputCommand {
private final String inputNameSuffix;
private String inputGroup;
private boolean addOrRemoveOtherInput;
private Map<String, String> metaDataInputWithSuffix;
public EditDynamicInputWithAnotherInputAndOutputCommand(EndpointDescription oldDescription, EndpointDescription newDescription,
String inputNameSuffix, String inputGroup, boolean addOrRemoveOtherInput, Refreshable... panes) {
super(oldDescription, newDescription, panes);
this.inputNameSuffix = inputNameSuffix;
this.inputGroup = inputGroup;
this.addOrRemoveOtherInput = addOrRemoveOtherInput;
this.metaDataInputWithSuffix = new HashMap<>();
}
@Override
public void execute() {
EndpointDescriptionsManager inputManager = getProperties().getInputDescriptionsManager();
EndpointDescription addInputDesc = inputManager.getEndpointDescription(oldDesc.getName() + inputNameSuffix);
Map<String, String> metaDataForInput = new HashMap<String, String>();
metaDataForInput.putAll(newDesc.getMetaData());
metaDataForInput.putAll(metaDataInputWithSuffix);
if (!addOrRemoveOtherInput) {
addInputDesc.setName(newDesc.getName() + inputNameSuffix);
inputManager.editDynamicEndpointDescription(oldDesc.getName() + inputNameSuffix, newDesc.getName() + inputNameSuffix,
newDesc.getDataType(), metaDataForInput, addInputDesc.getDynamicEndpointIdentifier(), inputGroup);
} else {
if (addInputDesc == null) {
InputWithOutputsCommandUtils.addInputWithSuffix(getProperties(), newDesc.getDynamicEndpointIdentifier(), newDesc.getName(),
newDesc.getEndpointDefinition().getDefaultDataType(), inputNameSuffix, inputGroup, metaDataForInput);
} else {
InputWithOutputsCommandUtils.removeInputWithSuffix(getProperties(), oldDesc.getName(), inputNameSuffix);
}
}
super.execute();
}
@Override
public void undo() {
EndpointDescriptionsManager inputManager = getProperties().getInputDescriptionsManager();
EndpointDescription inputConvergedDesc = getProperties().getInputDescriptionsManager()
.getEndpointDescription(newDesc.getName() + inputNameSuffix);
Map<String, String> metaDataForInput = new HashMap<String, String>();
metaDataForInput.putAll(oldDesc.getMetaData());
metaDataForInput.putAll(metaDataInputWithSuffix);
if (!addOrRemoveOtherInput) {
inputConvergedDesc.setName(oldDesc.getName() + inputNameSuffix);
inputManager.editDynamicEndpointDescription(newDesc.getName() + inputNameSuffix,
oldDesc.getName() + inputNameSuffix, oldDesc.getDataType(), metaDataForInput,
newDesc.getDynamicEndpointIdentifier(), inputGroup);
} else {
if (inputConvergedDesc == null) {
InputWithOutputsCommandUtils.addInputWithSuffix(getProperties(), oldDesc.getDynamicEndpointIdentifier(), oldDesc.getName(),
oldDesc.getEndpointDefinition().getDefaultDataType(), inputNameSuffix, inputGroup, metaDataForInput);
} else {
InputWithOutputsCommandUtils.removeInputWithSuffix(getProperties(), newDesc.getName(), inputNameSuffix);
}
}
super.undo();
}
/**
* Adds the given meta data to the current ones.
*
* @param additionalMetaDataInputWithSuffix to add.
*/
public void addMetaDataToInputWithSuffix(Map<String, String> additionalMetaDataInputWithSuffix) {
this.metaDataInputWithSuffix.putAll(additionalMetaDataInputWithSuffix);
}
}