/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.editor.handlers;
import java.util.ArrayList;
import java.util.List;
import de.rcenvironment.core.component.workflow.model.api.Connection;
import de.rcenvironment.core.component.workflow.model.api.WorkflowDescription;
import de.rcenvironment.core.component.workflow.model.api.WorkflowLabel;
import de.rcenvironment.core.component.workflow.model.api.WorkflowNode;
import de.rcenvironment.core.gui.workflow.ConnectionUtils;
import de.rcenvironment.core.gui.workflow.editor.commands.ConnectionDeleteCommand;
import de.rcenvironment.core.gui.workflow.editor.commands.WorkflowLabelDeleteCommand;
import de.rcenvironment.core.gui.workflow.editor.commands.WorkflowNodeDeleteCommand;
import de.rcenvironment.core.gui.workflow.parts.ConnectionPart;
import de.rcenvironment.core.gui.workflow.parts.ConnectionWrapper;
import de.rcenvironment.core.gui.workflow.parts.WorkflowLabelPart;
import de.rcenvironment.core.gui.workflow.parts.WorkflowNodePart;
/**
* Deletes a workflow node.
*
* @author Doreen Seider
*/
public class WorkflowNodeDeleteHandler extends AbstractWorkflowNodeEditHandler {
@Override
void edit() {
@SuppressWarnings("rawtypes") List selections = viewer.getSelectedEditParts();
List<WorkflowNode> wfNodes = new ArrayList<WorkflowNode>();
List<WorkflowLabel> wfLabels = new ArrayList<WorkflowLabel>();
List<Connection> wfConnections = new ArrayList<Connection>();
for (Object element : selections) {
if (element instanceof WorkflowNodePart) {
WorkflowNodePart part = (WorkflowNodePart) element;
wfNodes.add((WorkflowNode) part.getModel());
}
if (element instanceof WorkflowLabelPart) {
WorkflowLabelPart part = (WorkflowLabelPart) element;
wfLabels.add((WorkflowLabel) part.getModel());
}
if (element instanceof ConnectionPart) {
ConnectionPart part = (ConnectionPart) element;
ConnectionWrapper wrapper = (ConnectionWrapper) part.getModel();
wfConnections = ConnectionUtils.getConnectionsBetweenNodes(wrapper.getSource(), wrapper.getTarget(),
(WorkflowDescription) viewer.getContents().getModel());
}
}
if (!wfNodes.isEmpty()) {
commandStack.execute(new WorkflowNodeDeleteCommand((WorkflowDescription) viewer.getContents().getModel(), wfNodes));
}
if (!wfLabels.isEmpty()) {
commandStack.execute(new WorkflowLabelDeleteCommand((WorkflowDescription) viewer.getContents().getModel(), wfLabels));
}
if (!wfConnections.isEmpty()) {
commandStack.execute(new ConnectionDeleteCommand((WorkflowDescription) viewer.getContents().getModel(), wfConnections));
}
}
}