/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow.editor.commands; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.gef.commands.Command; import de.rcenvironment.core.component.workflow.model.api.Connection; import de.rcenvironment.core.component.workflow.model.api.Location; import de.rcenvironment.core.component.workflow.model.api.WorkflowDescription; import de.rcenvironment.core.gui.workflow.ConnectionUtils; import de.rcenvironment.core.gui.workflow.parts.ConnectionWrapper; /** * Command to remove all bendpoints from a connection at once. * * @author Oliver Seebach * */ public class BendpointDeleteAllCommand extends Command { private static final String SOURCE_TARGET_SEPARATOR = ":"; private List<Connection> connections = new ArrayList<>(); private ConnectionWrapper referencedWrapper; private WorkflowDescription workflowDescription; // By convention the key of this map is "SourceId:TargetId" of the nodes of the associated connection. private Map<String, List<Location>> removedBendpointsPerConnection = new HashMap<>(); @Override public void execute() { for (Connection connection : connections){ if (!removedBendpointsPerConnection.keySet().contains(connection)){ removedBendpointsPerConnection.put(connection.getSourceNode().getIdentifier() + SOURCE_TARGET_SEPARATOR + connection.getTargetNode().getIdentifier() , connection.getBendpoints()); } connection.removeAllBendpoints(); } ConnectionUtils.validateConnectionWrapperForEqualBendpointLocations(workflowDescription, referencedWrapper, this.getClass().getSimpleName() + " execute or redo"); } @Override public void undo() { for (String sourceTargetString : removedBendpointsPerConnection.keySet()){ String sourceId = sourceTargetString.split(SOURCE_TARGET_SEPARATOR)[0]; String targetId = sourceTargetString.split(SOURCE_TARGET_SEPARATOR)[1]; for (Connection connection : connections){ List<Location> bendpointsToRestore = new ArrayList<>(); if (connection.getSourceNode().getIdentifier().equals(sourceId) && connection.getTargetNode().getIdentifier().equals(targetId)){ bendpointsToRestore = removedBendpointsPerConnection.get(sourceId + SOURCE_TARGET_SEPARATOR + targetId); } connection.addBendpoints(bendpointsToRestore); } } ConnectionUtils.validateConnectionWrapperForEqualBendpointLocations(workflowDescription, referencedWrapper, this.getClass().getSimpleName() + " undo"); } @Override public void redo() { execute(); } public void setConnections(List<Connection> connections) { this.connections = connections; } public void setReferencedModel(ConnectionWrapper referencedModel) { this.referencedWrapper = referencedModel; } public void setWorkflowDescription(WorkflowDescription workflowDescription) { this.workflowDescription = workflowDescription; } }