http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/EditDataflowOutputPortAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/EditDataflowOutputPortAction.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/EditDataflowOutputPortAction.java
deleted file mode 100644
index d331da6..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/EditDataflowOutputPortAction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.actions;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.util.HashSet;
-import java.util.Set;
-
-import net.sf.taverna.t2.lang.ui.ValidatingUserInputDialog;
-import net.sf.taverna.t2.workbench.design.ui.DataflowOutputPortPanel;
-import net.sf.taverna.t2.workbench.edits.EditException;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.icons.WorkbenchIcons;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workflow.edits.RenameEdit;
-
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-
-/**
- * Action for editing a dataflow output port.
- * 
- * @author David Withers
- */
-@SuppressWarnings("serial")
-public class EditDataflowOutputPortAction extends DataflowEditAction {
-       private static final Logger logger = Logger
-                       .getLogger(EditDataflowOutputPortAction.class);
-
-       private OutputWorkflowPort port;
-
-       public EditDataflowOutputPortAction(Workflow dataflow,
-                       OutputWorkflowPort port, Component component,
-                       EditManager editManager, SelectionManager 
selectionManager) {
-               super(dataflow, component, editManager, selectionManager);
-               this.port = port;
-               putValue(SMALL_ICON, WorkbenchIcons.renameIcon);
-               putValue(NAME, "Edit workflow output port...");
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               Set<String> usedOutputPorts = new HashSet<>();
-               for (OutputWorkflowPort usedOutputPort : 
dataflow.getOutputPorts())
-                       if (!usedOutputPort.getName().equals(port.getName()))
-                               usedOutputPorts.add(usedOutputPort.getName());
-
-               DataflowOutputPortPanel inputPanel = new 
DataflowOutputPortPanel();
-
-               ValidatingUserInputDialog vuid = new ValidatingUserInputDialog(
-                               "Edit Workflow Output Port", inputPanel);
-               vuid.addTextComponentValidation(inputPanel.getPortNameField(),
-                               "Set the workflow output port name.", 
usedOutputPorts,
-                               "Duplicate workflow output port name.",
-                               "[\\p{L}\\p{Digit}_.]+", "Invalid workflow 
output port name.");
-               vuid.setSize(new Dimension(400, 200));
-
-               inputPanel.setPortName(port.getName());
-
-               try {
-                       if (vuid.show(component))
-                               changeOutputPort(inputPanel);
-               } catch (EditException ex) {
-                       logger.debug("Rename workflow output port failed", ex);
-               }
-       }
-
-       private void changeOutputPort(DataflowOutputPortPanel inputPanel)
-                       throws EditException {
-               editManager.doDataflowEdit(dataflow.getParent(), new 
RenameEdit<>(port,
-                               inputPanel.getPortName()));
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveConditionAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveConditionAction.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveConditionAction.java
deleted file mode 100644
index a067d26..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveConditionAction.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.actions;
-
-import static net.sf.taverna.t2.workbench.icons.WorkbenchIcons.deleteIcon;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-
-import net.sf.taverna.t2.workbench.edits.EditException;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workflow.edits.RemoveChildEdit;
-
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.scufl2.api.core.ControlLink;
-import org.apache.taverna.scufl2.api.core.Workflow;
-
-/**
- * Action for removing a condition from the dataflow.
- * 
- * @author David Withers
- */
-@SuppressWarnings("serial")
-public class RemoveConditionAction extends DataflowEditAction {
-       private static final Logger logger = Logger
-                       .getLogger(RemoveConditionAction.class);
-
-       private ControlLink controlLink;
-
-       public RemoveConditionAction(Workflow dataflow, ControlLink controlLink,
-                       Component component, EditManager editManager,
-                       SelectionManager selectionManager) {
-               super(dataflow, component, editManager, selectionManager);
-               this.controlLink = controlLink;
-               putValue(SMALL_ICON, deleteIcon);
-               putValue(NAME, "Delete control link");
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               try {
-                       dataflowSelectionModel.removeSelection(controlLink);
-                       editManager.doDataflowEdit(dataflow.getParent(),
-                                       new RemoveChildEdit<>(dataflow, 
controlLink));
-               } catch (EditException e1) {
-                       logger.debug("Delete control link failed", e1);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDataflowInputPortAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDataflowInputPortAction.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDataflowInputPortAction.java
deleted file mode 100644
index 707835a..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDataflowInputPortAction.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.actions;
-
-import static net.sf.taverna.t2.workbench.icons.WorkbenchIcons.deleteIcon;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.taverna.t2.workbench.edits.CompoundEdit;
-import net.sf.taverna.t2.workbench.edits.Edit;
-import net.sf.taverna.t2.workbench.edits.EditException;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workflow.edits.RemoveDataLinkEdit;
-import net.sf.taverna.t2.workflow.edits.RemoveWorkflowInputPortEdit;
-
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.scufl2.api.core.DataLink;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
-
-/**
- * Action for removing an input port from the dataflow.
- * 
- * @author David Withers
- */
-@SuppressWarnings("serial")
-public class RemoveDataflowInputPortAction extends DataflowEditAction {
-       private static Logger logger = Logger
-                       .getLogger(RemoveDataflowInputPortAction.class);
-
-       private InputWorkflowPort port;
-
-       public RemoveDataflowInputPortAction(Workflow dataflow,
-                       InputWorkflowPort port, Component component,
-                       EditManager editManager, SelectionManager 
selectionManager) {
-               super(dataflow, component, editManager, selectionManager);
-               this.port = port;
-               putValue(SMALL_ICON, deleteIcon);
-               putValue(NAME, "Delete workflow input port");
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               try {
-                       dataflowSelectionModel.removeSelection(port);
-                       List<DataLink> datalinks = 
scufl2Tools.datalinksFrom(port);
-                       if (datalinks.isEmpty())
-                               editManager.doDataflowEdit(dataflow.getParent(),
-                                               new 
RemoveWorkflowInputPortEdit(dataflow, port));
-                       else {
-                               List<Edit<?>> editList = new ArrayList<>();
-                               for (DataLink datalink : datalinks)
-                                       editList.add(new 
RemoveDataLinkEdit(dataflow, datalink));
-                               editList.add(new 
RemoveWorkflowInputPortEdit(dataflow, port));
-                               editManager.doDataflowEdit(dataflow.getParent(),
-                                               new CompoundEdit(editList));
-                       }
-               } catch (EditException e1) {
-                       logger.debug("Delete workflow input port failed", e1);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDataflowOutputPortAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDataflowOutputPortAction.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDataflowOutputPortAction.java
deleted file mode 100644
index 69d5559..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDataflowOutputPortAction.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.actions;
-
-import static net.sf.taverna.t2.workbench.icons.WorkbenchIcons.deleteIcon;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.taverna.t2.workbench.edits.CompoundEdit;
-import net.sf.taverna.t2.workbench.edits.Edit;
-import net.sf.taverna.t2.workbench.edits.EditException;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workflow.edits.RemoveDataLinkEdit;
-import net.sf.taverna.t2.workflow.edits.RemoveWorkflowOutputPortEdit;
-
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.scufl2.api.core.DataLink;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-
-/**
- * Action for removing an output port from the dataflow.
- * 
- * @author David Withers
- */
-@SuppressWarnings("serial")
-public class RemoveDataflowOutputPortAction extends DataflowEditAction {
-       private static final Logger logger = Logger
-                       .getLogger(RemoveDataflowOutputPortAction.class);
-
-       private OutputWorkflowPort port;
-
-       public RemoveDataflowOutputPortAction(Workflow dataflow,
-                       OutputWorkflowPort port, Component component,
-                       EditManager editManager, SelectionManager 
selectionManager) {
-               super(dataflow, component, editManager, selectionManager);
-               this.port = port;
-               putValue(SMALL_ICON, deleteIcon);
-               putValue(NAME, "Delete workflow output port");
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               try {
-                       dataflowSelectionModel.removeSelection(port);
-                       List<DataLink> datalinks = 
scufl2Tools.datalinksTo(port);
-                       if (datalinks.isEmpty())
-                               editManager.doDataflowEdit(dataflow.getParent(),
-                                               new 
RemoveWorkflowOutputPortEdit(dataflow, port));
-                       else {
-                               List<Edit<?>> editList = new ArrayList<>();
-                               for (DataLink datalink : datalinks)
-                                       editList.add(new 
RemoveDataLinkEdit(dataflow, datalink));
-                               editList.add(new 
RemoveWorkflowOutputPortEdit(dataflow, port));
-                               editManager.doDataflowEdit(dataflow.getParent(),
-                                               new CompoundEdit(editList));
-                       }
-               } catch (EditException ex) {
-                       logger.debug("Delete workflow output port failed", ex);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDatalinkAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDatalinkAction.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDatalinkAction.java
deleted file mode 100644
index 4e1a31f..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveDatalinkAction.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.actions;
-
-import static net.sf.taverna.t2.workbench.icons.WorkbenchIcons.deleteIcon;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-
-import net.sf.taverna.t2.workbench.edits.EditException;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workflow.edits.RemoveDataLinkEdit;
-
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.scufl2.api.core.DataLink;
-import org.apache.taverna.scufl2.api.core.Workflow;
-
-/**
- * Action for removing a datalink from the dataflow.
- * 
- * @author David Withers
- */
-@SuppressWarnings("serial")
-public class RemoveDatalinkAction extends DataflowEditAction {
-       private static final Logger logger = 
Logger.getLogger(RemoveDatalinkAction.class);
-
-       private DataLink datalink;
-
-       public RemoveDatalinkAction(Workflow dataflow, DataLink datalink,
-                       Component component, EditManager editManager,
-                       SelectionManager selectionManager) {
-               super(dataflow, component, editManager, selectionManager);
-               this.datalink = datalink;
-               putValue(SMALL_ICON, deleteIcon);
-               putValue(NAME, "Delete data link");
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent ev) {
-               try {
-                       dataflowSelectionModel.removeSelection(datalink);
-                       editManager.doDataflowEdit(dataflow.getParent(),
-                                       new RemoveDataLinkEdit(dataflow, 
datalink));
-               } catch (EditException ex) {
-                       logger.debug("Delete data link failed", ex);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveProcessorAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveProcessorAction.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveProcessorAction.java
deleted file mode 100644
index 16e4eb7..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RemoveProcessorAction.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.actions;
-
-import static net.sf.taverna.t2.workbench.icons.WorkbenchIcons.deleteIcon;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.taverna.t2.workbench.edits.CompoundEdit;
-import net.sf.taverna.t2.workbench.edits.Edit;
-import net.sf.taverna.t2.workbench.edits.EditException;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workflow.edits.RemoveChildEdit;
-import net.sf.taverna.t2.workflow.edits.RemoveDataLinkEdit;
-
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.common.NamedSet;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.core.BlockingControlLink;
-import org.apache.taverna.scufl2.api.core.ControlLink;
-import org.apache.taverna.scufl2.api.core.DataLink;
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.port.InputProcessorPort;
-import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
-import org.apache.taverna.scufl2.api.profiles.ProcessorBinding;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-
-/**
- * Action for removing a processor from the dataflow.
- * 
- * @author David Withers
- */
-@SuppressWarnings("serial")
-public class RemoveProcessorAction extends DataflowEditAction {
-       private static final Logger logger = Logger
-                       .getLogger(RemoveProcessorAction.class);
-
-       private Processor processor;
-
-       public RemoveProcessorAction(Workflow dataflow, Processor processor,
-                       Component component, EditManager editManager,
-                       SelectionManager selectionManager) {
-               super(dataflow, component, editManager, selectionManager);
-               this.processor = processor;
-               putValue(SMALL_ICON, deleteIcon);
-               putValue(NAME, "Delete service");
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               try {
-                       dataflowSelectionModel.removeSelection(processor);
-
-                       NamedSet<InputProcessorPort> inputPorts = 
processor.getInputPorts();
-                       NamedSet<OutputProcessorPort> outputPorts = processor
-                                       .getOutputPorts();
-                       List<BlockingControlLink> controlLinksBlocking = 
scufl2Tools
-                                       .controlLinksBlocking(processor);
-                       List<BlockingControlLink> controlLinksWaitingFor = 
scufl2Tools
-                                       .controlLinksWaitingFor(processor);
-                       List<Edit<?>> editList = new ArrayList<>();
-                       for (InputProcessorPort inputPort : inputPorts)
-                               for (DataLink datalink : 
scufl2Tools.datalinksTo(inputPort))
-                                       editList.add(new 
RemoveDataLinkEdit(dataflow, datalink));
-                       for (OutputProcessorPort outputPort : outputPorts)
-                               for (DataLink datalink : 
scufl2Tools.datalinksFrom(outputPort))
-                                       editList.add(new 
RemoveDataLinkEdit(dataflow, datalink));
-                       for (ControlLink controlLink : controlLinksBlocking)
-                               editList.add(new RemoveChildEdit<>(dataflow, 
controlLink));
-                       for (ControlLink controlLink : controlLinksWaitingFor)
-                               editList.add(new RemoveChildEdit<>(dataflow, 
controlLink));
-
-                       for (Profile profile : 
dataflow.getParent().getProfiles()) {
-                               List<ProcessorBinding> processorBindings = 
scufl2Tools
-                                               
.processorBindingsForProcessor(processor, profile);
-                               for (ProcessorBinding processorBinding : 
processorBindings) {
-                                       Activity boundActivity = 
processorBinding
-                                                       .getBoundActivity();
-                                       List<ProcessorBinding> 
processorBindingsToActivity = scufl2Tools
-                                                       
.processorBindingsToActivity(boundActivity);
-                                       if (processorBindingsToActivity.size() 
== 1) {
-                                               editList.add(new 
RemoveChildEdit<>(profile,
-                                                               boundActivity));
-                                               for (Configuration 
configuration : scufl2Tools
-                                                               
.configurationsFor(boundActivity, profile))
-                                                       editList.add(new 
RemoveChildEdit<Profile>(profile,
-                                                                       
configuration));
-                                       }
-                                       editList.add(new 
RemoveChildEdit<Profile>(profile,
-                                                       processorBinding));
-                               }
-                       }
-                       for (Profile profile : 
dataflow.getParent().getProfiles()) {
-                               List<Configuration> configurations = scufl2Tools
-                                               .configurationsFor(processor, 
profile);
-                               for (Configuration configuration : 
configurations)
-                                       editList.add(new 
RemoveChildEdit<>(profile, configuration));
-                       }
-                       if (editList.isEmpty())
-                               editManager.doDataflowEdit(dataflow.getParent(),
-                                               new RemoveChildEdit<>(dataflow, 
processor));
-                       else {
-                               editList.add(new RemoveChildEdit<>(dataflow, 
processor));
-                               editManager.doDataflowEdit(dataflow.getParent(),
-                                               new CompoundEdit(editList));
-                       }
-               } catch (EditException e1) {
-                       logger.error("Delete processor failed", e1);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RenameProcessorAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RenameProcessorAction.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RenameProcessorAction.java
deleted file mode 100644
index a291762..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/actions/RenameProcessorAction.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.actions;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.util.HashSet;
-import java.util.Set;
-
-import net.sf.taverna.t2.lang.ui.ValidatingUserInputDialog;
-import net.sf.taverna.t2.workbench.design.ui.ProcessorPanel;
-import net.sf.taverna.t2.workbench.edits.EditException;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.icons.WorkbenchIcons;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workflow.edits.RenameEdit;
-
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.core.Workflow;
-
-/**
- * Action for renaming a processor.
- * 
- * @author David Withers
- */
-public class RenameProcessorAction extends DataflowEditAction {
-
-       private static final long serialVersionUID = 1L;
-
-       private static Logger logger = Logger
-                       .getLogger(RenameProcessorAction.class);
-
-       private Processor processor;
-
-       public RenameProcessorAction(Workflow dataflow, Processor processor,
-                       Component component, EditManager editManager,
-                       SelectionManager selectionManager) {
-               super(dataflow, component, editManager, selectionManager);
-               this.processor = processor;
-               putValue(SMALL_ICON, WorkbenchIcons.renameIcon);
-               putValue(NAME, "Rename service...");
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               Set<String> usedProcessors = new HashSet<>();
-               for (Processor usedProcessor : dataflow.getProcessors())
-                       if 
(!usedProcessor.getName().equals(processor.getName()))
-                               usedProcessors.add(usedProcessor.getName());
-
-               ProcessorPanel inputPanel = new ProcessorPanel();
-
-               ValidatingUserInputDialog vuid = new ValidatingUserInputDialog(
-                               "Rename service", inputPanel);
-               
vuid.addTextComponentValidation(inputPanel.getProcessorNameField(),
-                               "Set the service name.", usedProcessors, 
"Duplicate service.",
-                               "[\\p{L}\\p{Digit}_.]+", "Invalid service 
name.");
-               vuid.setSize(new Dimension(400, 200));
-
-               inputPanel.setProcessorName(processor.getName());
-
-               try {
-                       if (vuid.show(component))
-                               changeProcessorName(inputPanel);
-               } catch (EditException e1) {
-                       logger.debug("Rename service (processor) failed", e1);
-               }
-       }
-
-       private void changeProcessorName(ProcessorPanel inputPanel)
-                       throws EditException {
-               String processorName = inputPanel.getProcessorName();
-               editManager.doDataflowEdit(dataflow.getParent(), new 
RenameEdit<>(
-                               processor, processorName));
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/DataflowInputPortPanel.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/DataflowInputPortPanel.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/DataflowInputPortPanel.java
deleted file mode 100644
index e578ef2..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/DataflowInputPortPanel.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.ui;
-
-import static java.awt.GridBagConstraints.HORIZONTAL;
-import static java.awt.GridBagConstraints.NONE;
-import static java.awt.GridBagConstraints.NORTHWEST;
-import static java.awt.GridBagConstraints.WEST;
-import static java.awt.event.ItemEvent.SELECTED;
-
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-import javax.swing.ButtonGroup;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JSpinner;
-import javax.swing.JTextField;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.border.EmptyBorder;
-
-/**
- * UI for creating/editing dataflow input ports.
- * 
- * @author David Withers
- */
-public class DataflowInputPortPanel extends JPanel {
-       private static final long serialVersionUID = 2650486705615513458L;
-
-       private JTextField portNameField;
-       private JRadioButton singleValueButton;
-       private JRadioButton listValueButton;
-       private JSpinner listDepthSpinner;
-
-       public DataflowInputPortPanel() {
-               super(new GridBagLayout());
-
-               portNameField = new JTextField();
-               singleValueButton = new JRadioButton("Single value");
-               listValueButton = new JRadioButton("List of depth ");
-               listDepthSpinner = new JSpinner(new SpinnerNumberModel(1, 1, 
100, 1));
-
-               setBorder(new EmptyBorder(10, 10, 10, 10));
-
-               GridBagConstraints constraints = new GridBagConstraints();
-
-               constraints.anchor = WEST;
-               constraints.gridx = 0;
-               constraints.gridy = 0;
-               constraints.ipadx = 10;
-               add(new JLabel("Name:"), constraints);
-
-               constraints.gridx = 1;
-               constraints.gridwidth = 2;
-               constraints.ipadx = 0;
-               constraints.weightx = 1d;
-               constraints.fill = HORIZONTAL;
-               add(portNameField, constraints);
-
-               constraints.gridx = 0;
-               constraints.gridy = 1;
-               constraints.gridwidth = 1;
-               constraints.weightx = 0d;
-               constraints.fill = NONE;
-               constraints.ipadx = 10;
-               constraints.insets = new Insets(10, 0, 0, 0);
-               add(new JLabel("Type:"), constraints);
-
-               ButtonGroup buttonGroup = new ButtonGroup();
-               buttonGroup.add(singleValueButton);
-               buttonGroup.add(listValueButton);
-
-               final JLabel helpLabel = new JLabel(
-                               "Depth 1 is a list, 2 is a list of lists, 
etc.");
-               helpLabel.setFont(helpLabel.getFont().deriveFont(11f));
-
-               singleValueButton.addItemListener(new ItemListener() {
-                       @Override
-                       public void itemStateChanged(ItemEvent e) {
-                               boolean selected = (e.getStateChange() == 
SELECTED);
-                               listDepthSpinner.setEnabled(!selected);
-                               helpLabel.setEnabled(!selected);
-                       }
-               });
-
-               constraints.gridx = 1;
-               constraints.gridwidth = 2;
-               constraints.ipadx = 0;
-               add(singleValueButton, constraints);
-               constraints.gridy = 2;
-               constraints.gridwidth = 1;
-               constraints.insets = new Insets(0, 0, 0, 0);
-               add(listValueButton, constraints);
-               constraints.gridx = 2;
-               add(listDepthSpinner, constraints);
-               constraints.gridx = 1;
-               constraints.gridy = 3;
-               constraints.gridwidth = 2;
-               constraints.weighty = 1d;
-               constraints.anchor = NORTHWEST;
-               constraints.insets = new Insets(0, 20, 0, 0);
-               add(helpLabel, constraints);
-       }
-
-       /**
-        * Returns the portNameField.
-        * 
-        * @return the portNameField
-        */
-       public JTextField getPortNameField() {
-               return portNameField;
-       }
-
-       /**
-        * Returns the singleValueButton.
-        * 
-        * @return the singleValueButton
-        */
-       public JRadioButton getSingleValueButton() {
-               return singleValueButton;
-       }
-
-       /**
-        * Returns the listValueButton.
-        * 
-        * @return the listValueButton
-        */
-       public JRadioButton getListValueButton() {
-               return listValueButton;
-       }
-
-       /**
-        * Returns the port name.
-        * 
-        * @return the port name
-        */
-       public String getPortName() {
-               return portNameField.getText();
-       }
-
-       /**
-        * Sets the port name.
-        * 
-        * @param name
-        *            the name of the port
-        */
-       public void setPortName(String name) {
-               portNameField.setText(name);
-               // Select the text
-               if (!name.isEmpty()) {
-                       portNameField.setSelectionStart(0);
-                       portNameField.setSelectionEnd(name.length());
-               }
-       }
-
-       /**
-        * Returns the port depth.
-        * 
-        * @return the port depth
-        */
-       public int getPortDepth() {
-               if (singleValueButton.isSelected())
-                       return 0;
-               return (Integer) listDepthSpinner.getValue();
-       }
-
-       /**
-        * Sets the port depth.
-        * 
-        * @param depth
-        *            the depth of the port
-        */
-       public void setPortDepth(int depth) {
-               if (depth == 0) {
-                       singleValueButton.setSelected(true);
-               } else {
-                       listValueButton.setSelected(true);
-                       listDepthSpinner.setValue(depth);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/DataflowOutputPortPanel.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/DataflowOutputPortPanel.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/DataflowOutputPortPanel.java
deleted file mode 100644
index 59ac0f7..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/DataflowOutputPortPanel.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.ui;
-
-import static java.awt.GridBagConstraints.HORIZONTAL;
-import static java.awt.GridBagConstraints.VERTICAL;
-import static java.awt.GridBagConstraints.WEST;
-
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.border.EmptyBorder;
-
-/**
- * UI for creating/editing dataflow output ports.
- * 
- * @author David Withers
- */
-public class DataflowOutputPortPanel extends JPanel {
-       private static final long serialVersionUID = -2542858679939965553L;
-
-       private JTextField portNameField;
-
-       public DataflowOutputPortPanel() {
-               super(new GridBagLayout());
-
-               portNameField = new JTextField();
- 
-               setBorder(new EmptyBorder(10, 10, 10, 10));
-               
-               GridBagConstraints constraints = new GridBagConstraints();
-
-               constraints.anchor = WEST;
-               constraints.gridx = 0;
-               constraints.gridy = 0;
-               constraints.ipadx = 10;
-               add(new JLabel("Name:"), constraints);
-
-               constraints.gridx = 1;
-               constraints.gridwidth = 2;
-               constraints.ipadx = 0;
-               constraints.weightx = 1d;
-               constraints.fill = HORIZONTAL;
-               add(portNameField, constraints);
-
-               constraints.gridx = 0;
-               constraints.gridy = 1;
-               constraints.fill = VERTICAL;
-               constraints.weighty = 1d;
-               add(new JPanel(), constraints);
-       }
-       
-       /**
-        * Returns the portNameField.
-        *
-        * @return the portNameField
-        */
-       public JTextField getPortNameField() {
-               return portNameField;
-       }
-
-       /**
-        * Returns the port name.
-        *
-        * @return the port name
-        */
-       public String getPortName() {
-               return portNameField.getText();
-       }
-       
-       /**
-        * Sets the port name.
-        *
-        * @param name the name of the port
-        */
-       public void setPortName(String name) {
-               portNameField.setText(name);
-               // Select the text
-               if (!name.isEmpty()) {
-                       portNameField.setSelectionStart(0);
-                       portNameField.setSelectionEnd(name.length());
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/ProcessorPanel.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/ProcessorPanel.java
 
b/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/ProcessorPanel.java
deleted file mode 100644
index 4528727..0000000
--- 
a/taverna-design-ui/src/main/java/net/sf/taverna/t2/workbench/design/ui/ProcessorPanel.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- 
******************************************************************************/
-package net.sf.taverna.t2.workbench.design.ui;
-
-import static java.awt.GridBagConstraints.HORIZONTAL;
-import static java.awt.GridBagConstraints.VERTICAL;
-import static java.awt.GridBagConstraints.WEST;
-
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.border.EmptyBorder;
-
-/**
- * UI for editing processors.
- * 
- * @author David Withers
- */
-public class ProcessorPanel extends JPanel {
-       private static final long serialVersionUID = 260705376633425003L;
-
-       private JTextField processorNameField;
-
-       public ProcessorPanel() {
-               super(new GridBagLayout());
-
-               processorNameField = new JTextField();
-
-               setBorder(new EmptyBorder(10, 10, 10, 10));
-
-               GridBagConstraints constraints = new GridBagConstraints();
-
-               constraints.anchor = WEST;
-               constraints.gridx = 0;
-               constraints.gridy = 0;
-               constraints.ipadx = 10;
-               add(new JLabel("Name:"), constraints);
-
-               constraints.gridx = 1;
-               constraints.gridwidth = 2;
-               constraints.ipadx = 0;
-               constraints.weightx = 1d;
-               constraints.fill = HORIZONTAL;
-               add(processorNameField, constraints);
-
-               constraints.gridx = 0;
-               constraints.gridy = 1;
-               constraints.fill = VERTICAL;
-               constraints.weighty = 1d;
-               add(new JPanel(), constraints);
-       }
-
-       /**
-        * Returns the processorNameField.
-        * 
-        * @return the processorNameField
-        */
-       public JTextField getProcessorNameField() {
-               return processorNameField;
-       }
-
-       /**
-        * Returns the processor name.
-        * 
-        * @return the processor name
-        */
-       public String getProcessorName() {
-               return processorNameField.getText();
-       }
-
-       /**
-        * Sets the processor name.
-        * 
-        * @param name
-        *            the name of the processor
-        */
-       public void setProcessorName(String name) {
-               processorNameField.setText(name);
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddConditionAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddConditionAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddConditionAction.java
new file mode 100644
index 0000000..a5b0966
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddConditionAction.java
@@ -0,0 +1,81 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import org.apache.taverna.workbench.activityicons.ActivityIconManager;
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.AddChildEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.common.Scufl2Tools;
+import org.apache.taverna.scufl2.api.core.BlockingControlLink;
+import org.apache.taverna.scufl2.api.core.Processor;
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.profiles.ProcessorBinding;
+
+/**
+ * Action for adding a condition to the dataflow.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class AddConditionAction extends DataflowEditAction {
+       private static final Logger logger = 
Logger.getLogger(AddConditionAction.class);
+       private static final Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+       private Processor control;
+       private Processor target;
+
+       public AddConditionAction(Workflow dataflow, Processor control,
+                       Processor target, Component component, EditManager 
editManager,
+                       SelectionManager selectionManager,
+                       ActivityIconManager activityIconManager) {
+               super(dataflow, component, editManager, selectionManager);
+               this.control = control;
+               this.target = target;
+               ProcessorBinding processorBinding = scufl2Tools
+                               .processorBindingForProcessor(control, 
dataflow.getParent()
+                                               .getMainProfile());
+               putValue(SMALL_ICON,
+                               
activityIconManager.iconForActivity(processorBinding
+                                               .getBoundActivity().getType()));
+               putValue(NAME, control.getName());
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent event) {
+               try {
+                       BlockingControlLink controlLink = new 
BlockingControlLink();
+                       controlLink.setUntilFinished(control);
+                       controlLink.setBlock(target);
+                       editManager.doDataflowEdit(dataflow.getParent(),
+                                       new AddChildEdit<>(dataflow, 
controlLink));
+               } catch (EditException e) {
+                       logger.debug("Create control link between '" + 
control.getName()
+                                       + "' and '" + target.getName() + "' 
failed");
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddDataflowInputAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddDataflowInputAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddDataflowInputAction.java
new file mode 100644
index 0000000..23428ce
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddDataflowInputAction.java
@@ -0,0 +1,95 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.taverna.lang.ui.ValidatingUserInputDialog;
+import org.apache.taverna.workbench.design.ui.DataflowInputPortPanel;
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.icons.WorkbenchIcons;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.AddWorkflowInputPortEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
+
+/**
+ * Action for adding an input port to the dataflow.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class AddDataflowInputAction extends DataflowEditAction {
+       private static final Logger logger = Logger
+                       .getLogger(AddDataflowInputAction.class);
+
+       public AddDataflowInputAction(Workflow dataflow, Component component,
+                       EditManager editManager, SelectionManager 
selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               putValue(SMALL_ICON, WorkbenchIcons.inputIcon);
+               putValue(NAME, "Workflow input port");
+               putValue(SHORT_DESCRIPTION, "Add workflow input port");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent event) {
+               try {
+                       Set<String> usedInputPorts = new HashSet<>();
+                       for (InputWorkflowPort inputPort : 
dataflow.getInputPorts())
+                               usedInputPorts.add(inputPort.getName());
+
+                       DataflowInputPortPanel inputPanel = new 
DataflowInputPortPanel();
+
+                       ValidatingUserInputDialog vuid = new 
ValidatingUserInputDialog(
+                                       "Add Workflow Input Port", inputPanel);
+                       
vuid.addTextComponentValidation(inputPanel.getPortNameField(),
+                                       "Set the workflow input port name.", 
usedInputPorts,
+                                       "Duplicate workflow input port name.",
+                                       "[\\p{L}\\p{Digit}_.]+",
+                                       "Invalid workflow input port name.");
+                       
vuid.addMessageComponent(inputPanel.getSingleValueButton(),
+                                       "Set the input port type.");
+                       
vuid.addMessageComponent(inputPanel.getListValueButton(),
+                                       "Set the input port list depth.");
+                       vuid.setSize(new Dimension(400, 250));
+
+                       inputPanel.setPortDepth(0);
+
+                       if (vuid.show(component)) {
+                               InputWorkflowPort dataflowInputPort = new 
InputWorkflowPort();
+                               
dataflowInputPort.setName(inputPanel.getPortName());
+                               
dataflowInputPort.setDepth(inputPanel.getPortDepth());
+                               editManager.doDataflowEdit(dataflow.getParent(),
+                                               new 
AddWorkflowInputPortEdit(dataflow,
+                                                               
dataflowInputPort));
+                       }
+               } catch (EditException e) {
+                       logger.warn("Adding a new workflow input port failed");
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddDataflowOutputAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddDataflowOutputAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddDataflowOutputAction.java
new file mode 100644
index 0000000..27f241d
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/AddDataflowOutputAction.java
@@ -0,0 +1,89 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.taverna.lang.ui.ValidatingUserInputDialog;
+import org.apache.taverna.workbench.design.ui.DataflowOutputPortPanel;
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.icons.WorkbenchIcons;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.AddWorkflowOutputPortEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
+
+/**
+ * Action for adding an output port to the dataflow.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class AddDataflowOutputAction extends DataflowEditAction {
+       private static final Logger logger = Logger
+                       .getLogger(AddDataflowOutputAction.class);
+
+       public AddDataflowOutputAction(Workflow dataflow, Component component,
+                       EditManager editManager, SelectionManager 
selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               putValue(SMALL_ICON, WorkbenchIcons.outputIcon);
+               putValue(NAME, "Workflow output port");
+               putValue(SHORT_DESCRIPTION, "Add workflow output port");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent event) {
+               try {
+                       Set<String> usedOutputPorts = new HashSet<>();
+                       for (OutputWorkflowPort outputPort : 
dataflow.getOutputPorts())
+                               usedOutputPorts.add(outputPort.getName());
+
+                       DataflowOutputPortPanel inputPanel = new 
DataflowOutputPortPanel();
+
+                       ValidatingUserInputDialog vuid = new 
ValidatingUserInputDialog(
+                                       "Add Workflow Output Port", inputPanel);
+                       
vuid.addTextComponentValidation(inputPanel.getPortNameField(),
+                                       "Set the workflow output port name.", 
usedOutputPorts,
+                                       "Duplicate workflow output port name.",
+                                       "[\\p{L}\\p{Digit}_.]+",
+                                       "Invalid workflow output port name.");
+                       vuid.setSize(new Dimension(400, 200));
+
+                       if (vuid.show(component)) {
+                               String portName = inputPanel.getPortName();
+                               OutputWorkflowPort dataflowOutputPort = new 
OutputWorkflowPort();
+                               dataflowOutputPort.setName(portName);
+                               editManager.doDataflowEdit(dataflow.getParent(),
+                                               new 
AddWorkflowOutputPortEdit(dataflow,
+                                                               
dataflowOutputPort));
+                       }
+               } catch (EditException e) {
+                       logger.debug("Create workflow output port failed", e);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/DataflowEditAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/DataflowEditAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/DataflowEditAction.java
new file mode 100644
index 0000000..337dada
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/DataflowEditAction.java
@@ -0,0 +1,56 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import java.awt.Component;
+
+import javax.swing.AbstractAction;
+
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.selection.DataflowSelectionModel;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.scufl2.api.common.Scufl2Tools;
+import org.apache.taverna.scufl2.api.core.Workflow;
+
+/**
+ * Abstract superclass of dataflow edit actions.
+ * 
+ * @author David Withers
+ */
+public abstract class DataflowEditAction extends AbstractAction {
+       private static final long serialVersionUID = -1155192575675025091L;
+
+       protected final SelectionManager selectionManager;
+       protected EditManager editManager;
+       protected DataflowSelectionModel dataflowSelectionModel;
+       protected Workflow dataflow;
+       protected Component component;
+       protected Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+       public DataflowEditAction(Workflow dataflow, Component component,
+                       EditManager editManager, SelectionManager 
selectionManager) {
+               this.dataflow = dataflow;
+               this.component = component;
+               this.editManager = editManager;
+               this.selectionManager = selectionManager;
+               dataflowSelectionModel = selectionManager
+                               
.getDataflowSelectionModel(dataflow.getParent());
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/EditDataflowInputPortAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/EditDataflowInputPortAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/EditDataflowInputPortAction.java
new file mode 100644
index 0000000..df8df77
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/EditDataflowInputPortAction.java
@@ -0,0 +1,114 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.taverna.lang.ui.ValidatingUserInputDialog;
+import org.apache.taverna.workbench.design.ui.DataflowInputPortPanel;
+import org.apache.taverna.workbench.edits.CompoundEdit;
+import org.apache.taverna.workbench.edits.Edit;
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.icons.WorkbenchIcons;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.ChangeDepthEdit;
+import org.apache.taverna.workflow.edits.RenameEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
+
+/**
+ * Action for editing a dataflow input port.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class EditDataflowInputPortAction extends DataflowEditAction {
+       private static Logger logger = Logger
+                       .getLogger(EditDataflowInputPortAction.class);
+
+       private InputWorkflowPort port;
+
+       public EditDataflowInputPortAction(Workflow dataflow,
+                       InputWorkflowPort port, Component component,
+                       EditManager editManager, SelectionManager 
selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               this.port = port;
+               putValue(SMALL_ICON, WorkbenchIcons.renameIcon);
+               putValue(NAME, "Edit workflow input port...");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+               Set<String> usedInputPorts = new HashSet<>();
+               for (InputWorkflowPort usedInputPort : dataflow.getInputPorts())
+                       if (!usedInputPort.getName().equals(port.getName()))
+                               usedInputPorts.add(usedInputPort.getName());
+
+               DataflowInputPortPanel inputPanel = new 
DataflowInputPortPanel();
+
+               ValidatingUserInputDialog vuid = new ValidatingUserInputDialog(
+                               "Edit Workflow Input Port", inputPanel);
+               vuid.addTextComponentValidation(inputPanel.getPortNameField(),
+                               "Set the workflow input port name.", 
usedInputPorts,
+                               "Duplicate workflow input port name.", 
"[\\p{L}\\p{Digit}_.]+",
+                               "Invalid workflow input port name.");
+               vuid.addMessageComponent(inputPanel.getSingleValueButton(),
+                               "Set the input port type.");
+               vuid.addMessageComponent(inputPanel.getListValueButton(),
+                               "Set the input port list depth.");
+               vuid.setSize(new Dimension(400, 250));
+
+               inputPanel.setPortName(port.getName());
+               inputPanel.setPortDepth(port.getDepth());
+
+               try {
+                       if (vuid.show(component))
+                               changeInputPort(inputPanel);
+               } catch (EditException e1) {
+                       logger.warn("Rename workflow input port failed", e1);
+               }
+       }
+
+       private void changeInputPort(DataflowInputPortPanel inputPanel)
+                       throws EditException {
+               List<Edit<?>> editList = new ArrayList<>();
+               String portName = inputPanel.getPortName();
+               if (!portName.equals(port.getName()))
+                       editList.add(new RenameEdit<>(port, portName));
+               int portDepth = inputPanel.getPortDepth();
+               if (portDepth != port.getDepth())
+                       editList.add(new ChangeDepthEdit<>(port, portDepth));
+               if (editList.size() == 1)
+                       editManager.doDataflowEdit(dataflow.getParent(), 
editList.get(0));
+               else if (editList.size() > 1)
+                       editManager.doDataflowEdit(dataflow.getParent(), new 
CompoundEdit(
+                                       editList));
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/EditDataflowOutputPortAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/EditDataflowOutputPortAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/EditDataflowOutputPortAction.java
new file mode 100644
index 0000000..8dd5388
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/EditDataflowOutputPortAction.java
@@ -0,0 +1,94 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.taverna.lang.ui.ValidatingUserInputDialog;
+import org.apache.taverna.workbench.design.ui.DataflowOutputPortPanel;
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.icons.WorkbenchIcons;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.RenameEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
+
+/**
+ * Action for editing a dataflow output port.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class EditDataflowOutputPortAction extends DataflowEditAction {
+       private static final Logger logger = Logger
+                       .getLogger(EditDataflowOutputPortAction.class);
+
+       private OutputWorkflowPort port;
+
+       public EditDataflowOutputPortAction(Workflow dataflow,
+                       OutputWorkflowPort port, Component component,
+                       EditManager editManager, SelectionManager 
selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               this.port = port;
+               putValue(SMALL_ICON, WorkbenchIcons.renameIcon);
+               putValue(NAME, "Edit workflow output port...");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+               Set<String> usedOutputPorts = new HashSet<>();
+               for (OutputWorkflowPort usedOutputPort : 
dataflow.getOutputPorts())
+                       if (!usedOutputPort.getName().equals(port.getName()))
+                               usedOutputPorts.add(usedOutputPort.getName());
+
+               DataflowOutputPortPanel inputPanel = new 
DataflowOutputPortPanel();
+
+               ValidatingUserInputDialog vuid = new ValidatingUserInputDialog(
+                               "Edit Workflow Output Port", inputPanel);
+               vuid.addTextComponentValidation(inputPanel.getPortNameField(),
+                               "Set the workflow output port name.", 
usedOutputPorts,
+                               "Duplicate workflow output port name.",
+                               "[\\p{L}\\p{Digit}_.]+", "Invalid workflow 
output port name.");
+               vuid.setSize(new Dimension(400, 200));
+
+               inputPanel.setPortName(port.getName());
+
+               try {
+                       if (vuid.show(component))
+                               changeOutputPort(inputPanel);
+               } catch (EditException ex) {
+                       logger.debug("Rename workflow output port failed", ex);
+               }
+       }
+
+       private void changeOutputPort(DataflowOutputPortPanel inputPanel)
+                       throws EditException {
+               editManager.doDataflowEdit(dataflow.getParent(), new 
RenameEdit<>(port,
+                               inputPanel.getPortName()));
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveConditionAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveConditionAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveConditionAction.java
new file mode 100644
index 0000000..5c19dc5
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveConditionAction.java
@@ -0,0 +1,68 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import static org.apache.taverna.workbench.icons.WorkbenchIcons.deleteIcon;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.RemoveChildEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.core.ControlLink;
+import org.apache.taverna.scufl2.api.core.Workflow;
+
+/**
+ * Action for removing a condition from the dataflow.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class RemoveConditionAction extends DataflowEditAction {
+       private static final Logger logger = Logger
+                       .getLogger(RemoveConditionAction.class);
+
+       private ControlLink controlLink;
+
+       public RemoveConditionAction(Workflow dataflow, ControlLink controlLink,
+                       Component component, EditManager editManager,
+                       SelectionManager selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               this.controlLink = controlLink;
+               putValue(SMALL_ICON, deleteIcon);
+               putValue(NAME, "Delete control link");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+               try {
+                       dataflowSelectionModel.removeSelection(controlLink);
+                       editManager.doDataflowEdit(dataflow.getParent(),
+                                       new RemoveChildEdit<>(dataflow, 
controlLink));
+               } catch (EditException e1) {
+                       logger.debug("Delete control link failed", e1);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDataflowInputPortAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDataflowInputPortAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDataflowInputPortAction.java
new file mode 100644
index 0000000..e71a0d9
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDataflowInputPortAction.java
@@ -0,0 +1,84 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import static org.apache.taverna.workbench.icons.WorkbenchIcons.deleteIcon;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.taverna.workbench.edits.CompoundEdit;
+import org.apache.taverna.workbench.edits.Edit;
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.RemoveDataLinkEdit;
+import org.apache.taverna.workflow.edits.RemoveWorkflowInputPortEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.core.DataLink;
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
+
+/**
+ * Action for removing an input port from the dataflow.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class RemoveDataflowInputPortAction extends DataflowEditAction {
+       private static Logger logger = Logger
+                       .getLogger(RemoveDataflowInputPortAction.class);
+
+       private InputWorkflowPort port;
+
+       public RemoveDataflowInputPortAction(Workflow dataflow,
+                       InputWorkflowPort port, Component component,
+                       EditManager editManager, SelectionManager 
selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               this.port = port;
+               putValue(SMALL_ICON, deleteIcon);
+               putValue(NAME, "Delete workflow input port");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+               try {
+                       dataflowSelectionModel.removeSelection(port);
+                       List<DataLink> datalinks = 
scufl2Tools.datalinksFrom(port);
+                       if (datalinks.isEmpty())
+                               editManager.doDataflowEdit(dataflow.getParent(),
+                                               new 
RemoveWorkflowInputPortEdit(dataflow, port));
+                       else {
+                               List<Edit<?>> editList = new ArrayList<>();
+                               for (DataLink datalink : datalinks)
+                                       editList.add(new 
RemoveDataLinkEdit(dataflow, datalink));
+                               editList.add(new 
RemoveWorkflowInputPortEdit(dataflow, port));
+                               editManager.doDataflowEdit(dataflow.getParent(),
+                                               new CompoundEdit(editList));
+                       }
+               } catch (EditException e1) {
+                       logger.debug("Delete workflow input port failed", e1);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDataflowOutputPortAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDataflowOutputPortAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDataflowOutputPortAction.java
new file mode 100644
index 0000000..ece84ba
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDataflowOutputPortAction.java
@@ -0,0 +1,84 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import static org.apache.taverna.workbench.icons.WorkbenchIcons.deleteIcon;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.taverna.workbench.edits.CompoundEdit;
+import org.apache.taverna.workbench.edits.Edit;
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.RemoveDataLinkEdit;
+import org.apache.taverna.workflow.edits.RemoveWorkflowOutputPortEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.core.DataLink;
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
+
+/**
+ * Action for removing an output port from the dataflow.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class RemoveDataflowOutputPortAction extends DataflowEditAction {
+       private static final Logger logger = Logger
+                       .getLogger(RemoveDataflowOutputPortAction.class);
+
+       private OutputWorkflowPort port;
+
+       public RemoveDataflowOutputPortAction(Workflow dataflow,
+                       OutputWorkflowPort port, Component component,
+                       EditManager editManager, SelectionManager 
selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               this.port = port;
+               putValue(SMALL_ICON, deleteIcon);
+               putValue(NAME, "Delete workflow output port");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+               try {
+                       dataflowSelectionModel.removeSelection(port);
+                       List<DataLink> datalinks = 
scufl2Tools.datalinksTo(port);
+                       if (datalinks.isEmpty())
+                               editManager.doDataflowEdit(dataflow.getParent(),
+                                               new 
RemoveWorkflowOutputPortEdit(dataflow, port));
+                       else {
+                               List<Edit<?>> editList = new ArrayList<>();
+                               for (DataLink datalink : datalinks)
+                                       editList.add(new 
RemoveDataLinkEdit(dataflow, datalink));
+                               editList.add(new 
RemoveWorkflowOutputPortEdit(dataflow, port));
+                               editManager.doDataflowEdit(dataflow.getParent(),
+                                               new CompoundEdit(editList));
+                       }
+               } catch (EditException ex) {
+                       logger.debug("Delete workflow output port failed", ex);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDatalinkAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDatalinkAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDatalinkAction.java
new file mode 100644
index 0000000..2f23e25
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveDatalinkAction.java
@@ -0,0 +1,67 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import static org.apache.taverna.workbench.icons.WorkbenchIcons.deleteIcon;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.RemoveDataLinkEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.core.DataLink;
+import org.apache.taverna.scufl2.api.core.Workflow;
+
+/**
+ * Action for removing a datalink from the dataflow.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class RemoveDatalinkAction extends DataflowEditAction {
+       private static final Logger logger = 
Logger.getLogger(RemoveDatalinkAction.class);
+
+       private DataLink datalink;
+
+       public RemoveDatalinkAction(Workflow dataflow, DataLink datalink,
+                       Component component, EditManager editManager,
+                       SelectionManager selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               this.datalink = datalink;
+               putValue(SMALL_ICON, deleteIcon);
+               putValue(NAME, "Delete data link");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent ev) {
+               try {
+                       dataflowSelectionModel.removeSelection(datalink);
+                       editManager.doDataflowEdit(dataflow.getParent(),
+                                       new RemoveDataLinkEdit(dataflow, 
datalink));
+               } catch (EditException ex) {
+                       logger.debug("Delete data link failed", ex);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveProcessorAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveProcessorAction.java
 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveProcessorAction.java
new file mode 100644
index 0000000..a8fc634
--- /dev/null
+++ 
b/taverna-design-ui/src/main/java/org/apache/taverna/workbench/design/actions/RemoveProcessorAction.java
@@ -0,0 +1,135 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.workbench.design.actions;
+
+import static org.apache.taverna.workbench.icons.WorkbenchIcons.deleteIcon;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.taverna.workbench.edits.CompoundEdit;
+import org.apache.taverna.workbench.edits.Edit;
+import org.apache.taverna.workbench.edits.EditException;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workflow.edits.RemoveChildEdit;
+import org.apache.taverna.workflow.edits.RemoveDataLinkEdit;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.activity.Activity;
+import org.apache.taverna.scufl2.api.common.NamedSet;
+import org.apache.taverna.scufl2.api.configurations.Configuration;
+import org.apache.taverna.scufl2.api.core.BlockingControlLink;
+import org.apache.taverna.scufl2.api.core.ControlLink;
+import org.apache.taverna.scufl2.api.core.DataLink;
+import org.apache.taverna.scufl2.api.core.Processor;
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.port.InputProcessorPort;
+import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
+import org.apache.taverna.scufl2.api.profiles.ProcessorBinding;
+import org.apache.taverna.scufl2.api.profiles.Profile;
+
+/**
+ * Action for removing a processor from the dataflow.
+ * 
+ * @author David Withers
+ */
+@SuppressWarnings("serial")
+public class RemoveProcessorAction extends DataflowEditAction {
+       private static final Logger logger = Logger
+                       .getLogger(RemoveProcessorAction.class);
+
+       private Processor processor;
+
+       public RemoveProcessorAction(Workflow dataflow, Processor processor,
+                       Component component, EditManager editManager,
+                       SelectionManager selectionManager) {
+               super(dataflow, component, editManager, selectionManager);
+               this.processor = processor;
+               putValue(SMALL_ICON, deleteIcon);
+               putValue(NAME, "Delete service");
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+               try {
+                       dataflowSelectionModel.removeSelection(processor);
+
+                       NamedSet<InputProcessorPort> inputPorts = 
processor.getInputPorts();
+                       NamedSet<OutputProcessorPort> outputPorts = processor
+                                       .getOutputPorts();
+                       List<BlockingControlLink> controlLinksBlocking = 
scufl2Tools
+                                       .controlLinksBlocking(processor);
+                       List<BlockingControlLink> controlLinksWaitingFor = 
scufl2Tools
+                                       .controlLinksWaitingFor(processor);
+                       List<Edit<?>> editList = new ArrayList<>();
+                       for (InputProcessorPort inputPort : inputPorts)
+                               for (DataLink datalink : 
scufl2Tools.datalinksTo(inputPort))
+                                       editList.add(new 
RemoveDataLinkEdit(dataflow, datalink));
+                       for (OutputProcessorPort outputPort : outputPorts)
+                               for (DataLink datalink : 
scufl2Tools.datalinksFrom(outputPort))
+                                       editList.add(new 
RemoveDataLinkEdit(dataflow, datalink));
+                       for (ControlLink controlLink : controlLinksBlocking)
+                               editList.add(new RemoveChildEdit<>(dataflow, 
controlLink));
+                       for (ControlLink controlLink : controlLinksWaitingFor)
+                               editList.add(new RemoveChildEdit<>(dataflow, 
controlLink));
+
+                       for (Profile profile : 
dataflow.getParent().getProfiles()) {
+                               List<ProcessorBinding> processorBindings = 
scufl2Tools
+                                               
.processorBindingsForProcessor(processor, profile);
+                               for (ProcessorBinding processorBinding : 
processorBindings) {
+                                       Activity boundActivity = 
processorBinding
+                                                       .getBoundActivity();
+                                       List<ProcessorBinding> 
processorBindingsToActivity = scufl2Tools
+                                                       
.processorBindingsToActivity(boundActivity);
+                                       if (processorBindingsToActivity.size() 
== 1) {
+                                               editList.add(new 
RemoveChildEdit<>(profile,
+                                                               boundActivity));
+                                               for (Configuration 
configuration : scufl2Tools
+                                                               
.configurationsFor(boundActivity, profile))
+                                                       editList.add(new 
RemoveChildEdit<Profile>(profile,
+                                                                       
configuration));
+                                       }
+                                       editList.add(new 
RemoveChildEdit<Profile>(profile,
+                                                       processorBinding));
+                               }
+                       }
+                       for (Profile profile : 
dataflow.getParent().getProfiles()) {
+                               List<Configuration> configurations = scufl2Tools
+                                               .configurationsFor(processor, 
profile);
+                               for (Configuration configuration : 
configurations)
+                                       editList.add(new 
RemoveChildEdit<>(profile, configuration));
+                       }
+                       if (editList.isEmpty())
+                               editManager.doDataflowEdit(dataflow.getParent(),
+                                               new RemoveChildEdit<>(dataflow, 
processor));
+                       else {
+                               editList.add(new RemoveChildEdit<>(dataflow, 
processor));
+                               editManager.doDataflowEdit(dataflow.getParent(),
+                                               new CompoundEdit(editList));
+                       }
+               } catch (EditException e1) {
+                       logger.error("Delete processor failed", e1);
+               }
+       }
+}

Reply via email to