/* * 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.List; import java.util.Map; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription; import de.rcenvironment.core.component.workflow.model.spi.ComponentInstanceProperties; import de.rcenvironment.core.datamodel.api.EndpointType; import de.rcenvironment.core.gui.workflow.editor.properties.Refreshable; import de.rcenvironment.core.gui.workflow.editor.properties.WorkflowNodeCommand; /** * {@link WorkflowNodeCommand} editing dynamic endpoints in a <code>WorkflowNode</code>. * * @author Christian Weiss * @author Sascha Zur */ public class RemoveDynamicEndpointCommand extends WorkflowNodeCommand { protected final EndpointType direction; protected final String id; protected Refreshable[] refreshable; protected final List<String> names; protected Map<String, EndpointDescription> oldDescriptions; private boolean executable = true; private boolean undoable = false; /** * The constructor. * * @param name the name of the endpoint * @param type the type of the endpoint * @param outputPane */ public RemoveDynamicEndpointCommand(EndpointType type, String dynamicEndpointId, List<String> names, Refreshable... refreshable) { direction = type; id = dynamicEndpointId; this.names = names; this.refreshable = refreshable; this.oldDescriptions = new HashMap<String, EndpointDescription>(); } @Override public void initialize() { // do nothing } @Override public boolean canExecute() { return executable; } @Override public void execute() { if (executable) { for (String name : names) { final ComponentInstanceProperties componentInstanceConfiguration = getProperties(); if (direction == EndpointType.INPUT) { oldDescriptions.put(name, getProperties().getInputDescriptionsManager().getEndpointDescription(name)); componentInstanceConfiguration.getInputDescriptionsManager().removeDynamicEndpointDescription(name); } else { oldDescriptions.put(name, getProperties().getOutputDescriptionsManager().getEndpointDescription(name)); componentInstanceConfiguration.getOutputDescriptionsManager().removeDynamicEndpointDescription(name); } } executable = false; undoable = true; } if (refreshable != null) { for (Refreshable r : refreshable) { r.refresh(); } } } @Override public boolean canUndo() { return undoable; } @Override public void undo() { if (undoable) { for (String name : names) { EndpointDescription oldDescription = oldDescriptions.get(name); final ComponentInstanceProperties componentInstanceConfiguration = getProperties(); if (direction == EndpointType.INPUT) { componentInstanceConfiguration.getInputDescriptionsManager().addDynamicEndpointDescription(id, name, oldDescription.getDataType(), oldDescription.getMetaData(), oldDescription.getIdentifier(), oldDescription.getParentGroupName(), true); } else { componentInstanceConfiguration.getOutputDescriptionsManager().addDynamicEndpointDescription(id, name, oldDescription.getDataType(), oldDescription.getMetaData()); } } executable = true; undoable = false; } if (refreshable != null) { for (Refreshable r : refreshable) { r.refresh(); } } } }