http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-file-impl/src/test/java/org/apache/taverna/workbench/file/impl/FileManagerTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-file-impl/src/test/java/org/apache/taverna/workbench/file/impl/FileManagerTest.java
 
b/taverna-file-impl/src/test/java/org/apache/taverna/workbench/file/impl/FileManagerTest.java
new file mode 100644
index 0000000..2cfc51d
--- /dev/null
+++ 
b/taverna-file-impl/src/test/java/org/apache/taverna/workbench/file/impl/FileManagerTest.java
@@ -0,0 +1,384 @@
+/*
+* 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.file.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.taverna.lang.observer.Observable;
+import org.apache.taverna.lang.observer.Observer;
+import org.apache.taverna.workbench.edits.Edit;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.edits.impl.EditManagerImpl;
+import org.apache.taverna.workbench.file.DataflowInfo;
+import org.apache.taverna.workbench.file.DataflowPersistenceHandler;
+import org.apache.taverna.workbench.file.FileManager;
+import org.apache.taverna.workbench.file.events.FileManagerEvent;
+import org.apache.taverna.workbench.file.events.SetCurrentDataflowEvent;
+import org.apache.taverna.workbench.file.exceptions.OpenException;
+import org.apache.taverna.workbench.file.exceptions.OverwriteException;
+import org.apache.taverna.workflow.edits.AddProcessorEdit;
+import org.apache.taverna.workflow.edits.RenameEdit;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.core.Processor;
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleReader;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleWriter;
+import org.apache.taverna.scufl2.rdfxml.RDFXMLReader;
+import org.apache.taverna.scufl2.rdfxml.RDFXMLWriter;
+import org.apache.taverna.scufl2.translator.t2flow.T2FlowReader;
+
+public class FileManagerTest {
+
+       private static final WorkflowBundleFileType WF_BUNDLE_FILE_TYPE = new 
WorkflowBundleFileType();
+       private static final T2FlowFileType T2_FLOW_FILE_TYPE = new 
T2FlowFileType();
+
+       private static final String DUMMY_WORKFLOW_T2FLOW = 
"dummy-workflow.t2flow";
+
+       private FileManagerImpl fileManager;
+       private EditManager editManager;
+
+       private FileManagerObserver fileManagerObserver= new 
FileManagerObserver();;
+
+       @Test
+       public void close() throws Exception {
+               assertTrue("Non-empty set of open dataflows", fileManager
+                               .getOpenDataflows().isEmpty());
+               WorkflowBundle dataflow = openDataflow();
+               assertEquals("Unexpected list of open dataflows", Arrays
+                               .asList(dataflow), 
fileManager.getOpenDataflows());
+               fileManager.closeDataflow(dataflow, true);
+               assertNotSame(dataflow, fileManager.getOpenDataflows().get(0));
+               assertTrue("Did not insert empty dataflow after close", 
fileManager
+                               
.getOpenDataflows().get(0).getMainWorkflow().getProcessors().isEmpty());
+       }
+
+       @Test
+       public void openRemovesEmptyDataflow() throws Exception {
+               WorkflowBundle newDataflow = fileManager.newDataflow();
+               assertEquals("Unexpected list of open dataflows", Arrays
+                               .asList(newDataflow), 
fileManager.getOpenDataflows());
+               WorkflowBundle dataflow = openDataflow();
+               // Should have removed newDataflow
+               assertEquals("Unexpected list of open dataflows", Arrays
+                               .asList(dataflow), 
fileManager.getOpenDataflows());
+       }
+
+       @Test
+       public void isChanged() throws Exception {
+               WorkflowBundle dataflow = openDataflow();
+               assertFalse("Dataflow should not have changed", fileManager
+                               .isDataflowChanged(dataflow));
+
+               // Do a change
+               Processor emptyProcessor = new Processor();
+               Edit<Workflow> addProcessorEdit = new 
AddProcessorEdit(dataflow.getMainWorkflow(),
+                               emptyProcessor);
+               editManager.doDataflowEdit(dataflow, addProcessorEdit);
+               assertTrue("Dataflow should have changed", fileManager
+                               .isDataflowChanged(dataflow));
+
+               // Save it with the change
+               File dataflowFile = File.createTempFile("test", ".t2flow");
+               dataflowFile.deleteOnExit();
+               dataflowFile.delete();
+
+               fileManager.saveDataflow(dataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, false);
+               assertFalse("Dataflow should no longer be marked as changed",
+                               fileManager.isDataflowChanged(dataflow));
+       }
+
+       @Ignore("Undo support for ischanged not yet implemented")
+       @Test
+       public void isChangedWithUndo() throws Exception {
+               WorkflowBundle dataflow = openDataflow();
+               // Do a change
+               Processor emptyProcessor = new Processor();
+               Edit<Workflow> addProcessorEdit = new 
AddProcessorEdit(dataflow.getMainWorkflow(),
+                               emptyProcessor);
+               editManager.doDataflowEdit(dataflow, addProcessorEdit);
+               assertTrue("Dataflow should have changed", fileManager
+                               .isDataflowChanged(dataflow));
+               editManager.undoDataflowEdit(dataflow);
+               assertFalse(
+                               "Dataflow should no longer be marked as changed 
after undo",
+                               fileManager.isDataflowChanged(dataflow));
+               editManager.redoDataflowEdit(dataflow);
+               assertTrue("Dataflow should have changed after redo before 
save",
+                               fileManager.isDataflowChanged(dataflow));
+
+               // Save it with the change
+               File dataflowFile = File.createTempFile("test", ".t2flow");
+               dataflowFile.deleteOnExit();
+               dataflowFile.delete();
+               fileManager.saveDataflow(dataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, false);
+               assertFalse("Dataflow should no longer be marked as changed",
+                               fileManager.isDataflowChanged(dataflow));
+
+               editManager.undoDataflowEdit(dataflow);
+               assertTrue("Dataflow should have changed after undo", 
fileManager
+                               .isDataflowChanged(dataflow));
+               fileManager.saveDataflow(dataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, false);
+               editManager.redoDataflowEdit(dataflow);
+               assertTrue("Dataflow should have changed after redo after save",
+                               fileManager.isDataflowChanged(dataflow));
+       }
+
+       @Test
+       public void isListed() throws Exception {
+               assertTrue("Non-empty set of open data flows", fileManager
+                               .getOpenDataflows().isEmpty());
+               WorkflowBundle dataflow = openDataflow();
+               assertEquals("Unexpected list of open dataflows", Arrays
+                               .asList(dataflow), 
fileManager.getOpenDataflows());
+       }
+
+       /**
+        * Always uses a <strong>new</strong> file manager instead of the 
instance
+        * one from {@link FileManager#getInstance()}.
+        *
+        * @see #getFileManagerInstance()
+        *
+        */
+       @Before
+       public void makeFileManager() {
+               System.setProperty("java.awt.headless", "true");
+               editManager = new EditManagerImpl();
+               fileManager = new FileManagerImpl(editManager);
+               fileManagerObserver = new FileManagerObserver();
+               fileManager.addObserver(fileManagerObserver);
+               WorkflowBundleIO workflowBundleIO = new WorkflowBundleIO();
+               
workflowBundleIO.setReaders(Arrays.<WorkflowBundleReader>asList(new 
RDFXMLReader(), new T2FlowReader()));
+               
workflowBundleIO.setWriters(Arrays.<WorkflowBundleWriter>asList(new 
RDFXMLWriter()));
+               T2DataflowOpener t2DataflowOpener = new T2DataflowOpener();
+               t2DataflowOpener.setWorkflowBundleIO(workflowBundleIO);
+               WorkflowBundleOpener workflowBundleOpener = new 
WorkflowBundleOpener();
+               workflowBundleOpener.setWorkflowBundleIO(workflowBundleIO);
+               WorkflowBundleSaver workflowBundleSaver = new 
WorkflowBundleSaver();
+               workflowBundleSaver.setWorkflowBundleIO(workflowBundleIO);
+               DataflowPersistenceHandlerRegistry 
dataflowPersistenceHandlerRegistry = new DataflowPersistenceHandlerRegistry();
+               
dataflowPersistenceHandlerRegistry.setDataflowPersistenceHandlers(Arrays.asList(
+                               new DataflowPersistenceHandler[] 
{t2DataflowOpener, workflowBundleOpener, workflowBundleSaver}));
+               dataflowPersistenceHandlerRegistry.updateColletions();
+               
fileManager.setDataflowPersistenceHandlerRegistry(dataflowPersistenceHandlerRegistry);
+       }
+
+       @Test
+       public void open() throws Exception {
+               assertTrue("ModelMapObserver already contained messages",
+                               fileManagerObserver.messages.isEmpty());
+               WorkflowBundle dataflow = openDataflow();
+               assertNotNull("Dataflow was not loaded", dataflow);
+               assertEquals("Loaded dataflow was not set as current dataflow",
+                               dataflow, fileManager.getCurrentDataflow());
+               assertFalse("ModelMapObserver did not contain message",
+                               fileManagerObserver.messages.isEmpty());
+               assertEquals("ModelMapObserver contained unexpected messages", 
2,
+                               fileManagerObserver.messages.size());
+               FileManagerEvent event = fileManagerObserver.messages.get(0);
+               assertTrue(event instanceof SetCurrentDataflowEvent);
+               assertEquals(dataflow, ((SetCurrentDataflowEvent) 
event).getDataflow());
+       }
+
+       @Test
+       public void openSilently() throws Exception {
+               assertTrue("ModelMapObserver already contained messages",
+                               fileManagerObserver.messages.isEmpty());
+               URL url = getClass().getResource(DUMMY_WORKFLOW_T2FLOW);
+               DataflowInfo info = 
fileManager.openDataflowSilently(T2_FLOW_FILE_TYPE, url);
+
+               WorkflowBundle dataflow = info.getDataflow();
+               assertNotNull("Dataflow was not loaded", dataflow);
+
+               assertNotSame("Loaded dataflow was set as current dataflow",
+                               dataflow, fileManager.getCurrentDataflow());
+               assertTrue("ModelMapObserver contained unexpected messages",
+                               fileManagerObserver.messages.isEmpty());
+       }
+
+       @Test
+       public void canSaveDataflow() throws Exception {
+               WorkflowBundle savedDataflow = openDataflow();
+               File dataflowFile = File.createTempFile("test", ".t2flow");
+               dataflowFile.deleteOnExit();
+               dataflowFile.delete();
+               fileManager.saveDataflow(savedDataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, true);
+               
assertTrue(fileManager.canSaveWithoutDestination(savedDataflow));
+               fileManager.saveDataflow(savedDataflow, true);
+               fileManager.closeDataflow(savedDataflow, true);
+
+               WorkflowBundle otherFlow = 
fileManager.openDataflow(WF_BUNDLE_FILE_TYPE, dataflowFile.toURI()
+                               .toURL());
+               assertTrue(fileManager.canSaveWithoutDestination(otherFlow));
+       }
+
+       @Test
+       public void save() throws Exception {
+               WorkflowBundle savedDataflow = openDataflow();
+               File dataflowFile = File.createTempFile("test", ".t2flow");
+               dataflowFile.deleteOnExit();
+               dataflowFile.delete();
+               assertFalse("File should not exist", dataflowFile.isFile());
+               fileManager.saveDataflow(savedDataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, false);
+               assertTrue("File should exist", dataflowFile.isFile());
+               WorkflowBundle loadedDataflow = 
fileManager.openDataflow(WF_BUNDLE_FILE_TYPE, dataflowFile.toURI()
+                               .toURL());
+               assertNotSame("Dataflow was not reopened", savedDataflow,
+                               loadedDataflow);
+               assertEquals("Unexpected number of processors in saved 
dataflow", 1,
+                               
savedDataflow.getMainWorkflow().getProcessors().size());
+               assertEquals("Unexpected number of processors in loaded 
dataflow", 1,
+                               
loadedDataflow.getMainWorkflow().getProcessors().size());
+
+               Processor savedProcessor = 
savedDataflow.getMainWorkflow().getProcessors().first();
+               Processor loadedProcessor = 
loadedDataflow.getMainWorkflow().getProcessors().first();
+               assertEquals("Loaded processor had wrong name", savedProcessor
+                               .getName(), loadedProcessor.getName());
+
+               // TODO convert to scufl2
+//             BeanshellActivity savedActivity = (BeanshellActivity) 
savedProcessor
+//                             .getActivityList().get(0);
+//             BeanshellActivity loadedActivity = (BeanshellActivity) 
loadedProcessor
+//                             .getActivityList().get(0);
+//             String savedScript = 
savedActivity.getConfiguration().getScript();
+//             String loadedScript = 
loadedActivity.getConfiguration().getScript();
+//             assertEquals("Unexpected saved script",
+//                             "String output = input + \"XXX\";", 
savedScript);
+//             assertEquals("Loaded script did not matched saved script", 
savedScript,
+//                             loadedScript);
+       }
+
+       @Test
+       public void saveSilent() throws Exception {
+               assertTrue("ModelMapObserver contained unexpected messages",
+                               fileManagerObserver.messages.isEmpty());
+
+               URL url = getClass().getResource(DUMMY_WORKFLOW_T2FLOW);
+               DataflowInfo info = 
fileManager.openDataflowSilently(T2_FLOW_FILE_TYPE, url);
+               WorkflowBundle dataflow = info.getDataflow();
+               assertTrue("ModelMapObserver contained unexpected messages",
+                               fileManagerObserver.messages.isEmpty());
+
+               File dataflowFile = File.createTempFile("test", ".t2flow");
+               dataflowFile.deleteOnExit();
+               dataflowFile.delete();
+               assertFalse("File should not exist", dataflowFile.isFile());
+
+               fileManager.saveDataflowSilently(dataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, false);
+               assertTrue("File should exist", dataflowFile.isFile());
+
+               assertTrue("ModelMapObserver contained unexpected messages",
+                               fileManagerObserver.messages.isEmpty());
+
+       }
+
+       @Test
+       public void saveOverwriteAgain() throws Exception {
+               WorkflowBundle dataflow = openDataflow();
+               File dataflowFile = File.createTempFile("test", ".t2flow");
+               dataflowFile.delete();
+               dataflowFile.deleteOnExit();
+               // File did NOT exist, should not fail
+               fileManager.saveDataflow(dataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, true);
+
+               Processor processor = 
dataflow.getMainWorkflow().getProcessors().first();
+               Edit<Processor> renameEdit = new 
RenameEdit<Processor>(processor,
+                               processor.getName() + "-changed");
+               editManager.doDataflowEdit(dataflow, renameEdit);
+
+               // Last save was OURs, so should *not* fail - even if we now use
+               // the specific saveDataflow() method
+               fileManager.saveDataflow(dataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, true);
+
+               //Thread.sleep(1500);
+               WorkflowBundle otherFlow = openDataflow();
+               // Saving another flow to same file should still fail
+               try {
+                       fileManager.saveDataflow(otherFlow,WF_BUNDLE_FILE_TYPE, 
dataflowFile, true);
+                       fail("Should have thrown OverwriteException");
+               } catch (OverwriteException ex) {
+                       // Expected
+               }
+       }
+
+       @Test(expected = OverwriteException.class)
+       public void saveOverwriteWarningFails() throws Exception {
+               WorkflowBundle dataflow = openDataflow();
+               File dataflowFile = File.createTempFile("test", ".t2flow");
+               dataflowFile.deleteOnExit();
+               // Should fail as file already exists
+               fileManager.saveDataflow(dataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, true);
+       }
+
+       @Test
+       public void saveOverwriteWarningWorks() throws Exception {
+               WorkflowBundle dataflow = openDataflow();
+               File dataflowFile = File.createTempFile("test", ".t2flow");
+               dataflowFile.delete();
+               dataflowFile.deleteOnExit();
+               // File did NOT exist, should not fail
+               fileManager.saveDataflow(dataflow, WF_BUNDLE_FILE_TYPE, 
dataflowFile, true);
+       }
+
+       @After
+       public void stopListeningToModelMap() {
+               fileManager.removeObserver(fileManagerObserver);
+       }
+
+       protected WorkflowBundle openDataflow() throws OpenException {
+               URL url = getClass().getResource(DUMMY_WORKFLOW_T2FLOW);
+               assertNotNull(url);
+               WorkflowBundle dataflow = 
fileManager.openDataflow(T2_FLOW_FILE_TYPE, url);
+               assertNotNull(dataflow);
+               return dataflow;
+       }
+
+       private final class FileManagerObserver implements 
Observer<FileManagerEvent> {
+               protected List<FileManagerEvent> messages = new 
ArrayList<FileManagerEvent>();
+
+               @Override
+               public void notify(Observable<FileManagerEvent> sender, 
FileManagerEvent message) throws Exception {
+                       messages.add(message);
+                       if (message instanceof SetCurrentDataflowEvent) {
+                               assertTrue("Dataflow was not listed as open 
when set current",
+                                               
fileManager.getOpenDataflows().contains(
+                                                               
((SetCurrentDataflowEvent) message).getDataflow()));
+                       }
+               }
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-file-impl/src/test/resources/net/sf/taverna/t2/workbench/file/impl/dummy-workflow.t2flow
----------------------------------------------------------------------
diff --git 
a/taverna-file-impl/src/test/resources/net/sf/taverna/t2/workbench/file/impl/dummy-workflow.t2flow
 
b/taverna-file-impl/src/test/resources/net/sf/taverna/t2/workbench/file/impl/dummy-workflow.t2flow
deleted file mode 100644
index b9a1075..0000000
--- 
a/taverna-file-impl/src/test/resources/net/sf/taverna/t2/workbench/file/impl/dummy-workflow.t2flow
+++ /dev/null
@@ -1,157 +0,0 @@
-<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow"; version="1" 
producedBy="test">
-       <dataflow id="ec0991ba-275c-49ed-b1d6-38534180fb7c" role="top">
-               <name>simple_workflow_with_input</name>
-               <inputPorts>
-                       <port>
-                               <name>input</name>
-                               <depth>0</depth>
-                               <granularDepth>0</granularDepth>
-                       </port>
-               </inputPorts>
-               <outputPorts>
-                       <port>
-                               <name>output</name>
-                       </port>
-               </outputPorts>
-               <processors>
-                       <processor>
-                               <name>Concat_XXX</name>
-                               <inputPorts>
-                                       <port>
-                                               <name>input</name>
-                                               <depth>0</depth>
-                                       </port>
-                               </inputPorts>
-                               <outputPorts>
-                                       <port>
-                                               <name>output</name>
-                                               <depth>0</depth>
-                                               <granularDepth>0</granularDepth>
-                                       </port>
-                               </outputPorts>
-                               <annotations />
-                               <activities>
-                                       <activity>
-                                               <class>
-                                                       
net.sf.taverna.t2.activities.beanshell.BeanshellActivity
-                                               </class>
-                                               <inputMap>
-                                                       <map from="input" 
to="input" />
-                                               </inputMap>
-                                               <outputMap>
-                                                       <map from="output" 
to="output" />
-                                               </outputMap>
-                                               <configBean encoding="xstream">
-                                                       
<net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean
-                                                               xmlns="">
-                                                               <script>String 
output = input + "XXX";</script>
-                                                               <dependencies />
-                                                               <inputs>
-                                                                       
<net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-                                                                               
<handledReferenceSchemes />
-                                                                               
<translatedElementType>java.lang.String</translatedElementType>
-                                                                               
<allowsLiteralValues>true</allowsLiteralValues>
-                                                                               
<name>input</name>
-                                                                               
<depth>0</depth>
-                                                                               
<mimeTypes>
-                                                                               
        <string>'text/plain'</string>
-                                                                               
</mimeTypes>
-                                                                       
</net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-                                                               </inputs>
-                                                               <outputs>
-                                                                       
<net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-                                                                               
<granularDepth>0</granularDepth>
-                                                                               
<name>output</name>
-                                                                               
<depth>0</depth>
-                                                                               
<mimeTypes>
-                                                                               
        <string>'text/plain'</string>
-                                                                               
</mimeTypes>
-                                                                       
</net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-                                                               </outputs>
-                                                       
</net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean>
-                                               </configBean>
-                                       </activity>
-                               </activities>
-                               <dispatchStack>
-                                       <dispatchLayer>
-                                               <class>
-                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize
-                                               </class>
-                                               <configBean encoding="xstream">
-                                                       
<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig
-                                                               xmlns="">
-                                                               
<maxJobs>1</maxJobs>
-                                                       
</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-                                               </configBean>
-                                       </dispatchLayer>
-                                       <dispatchLayer>
-                                               <class>
-                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce
-                                               </class>
-                                               <configBean encoding="xstream">
-                                                       <null xmlns="" />
-                                               </configBean>
-                                       </dispatchLayer>
-                                       <dispatchLayer>
-                                               <class>
-                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover
-                                               </class>
-                                               <configBean encoding="xstream">
-                                                       <null xmlns="" />
-                                               </configBean>
-                                       </dispatchLayer>
-                                       <dispatchLayer>
-                                               <class>
-                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry
-                                               </class>
-                                               <configBean encoding="xstream">
-                                                       
<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig
-                                                               xmlns="">
-                                                               
<backoffFactor>1.0</backoffFactor>
-                                                               
<initialDelay>0</initialDelay>
-                                                               
<maxDelay>0</maxDelay>
-                                                               
<maxRetries>0</maxRetries>
-                                                       
</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-                                               </configBean>
-                                       </dispatchLayer>
-                                       <dispatchLayer>
-                                               <class>
-                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke
-                                               </class>
-                                               <configBean encoding="xstream">
-                                                       <null xmlns="" />
-                                               </configBean>
-                                       </dispatchLayer>
-                               </dispatchStack>
-                               <iterationStrategyStack>
-                                       <iteration>
-                                               <strategy>
-                                                       <port name="input" 
depth="0" />
-                                               </strategy>
-                                       </iteration>
-                               </iterationStrategyStack>
-                       </processor>
-               </processors>
-               <conditions />
-               <datalinks>
-                       <datalink>
-                               <sink type="processor">
-                                       <processor>Concat_XXX</processor>
-                                       <port>input</port>
-                               </sink>
-                               <source type="dataflow">
-                                       <port>input</port>
-                               </source>
-                       </datalink>
-                       <datalink>
-                               <sink type="dataflow">
-                                       <port>output</port>
-                               </sink>
-                               <source type="processor">
-                                       <processor>Concat_XXX</processor>
-                                       <port>output</port>
-                               </source>
-                       </datalink>
-               </datalinks>
-       </dataflow>
-</workflow>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-file-impl/src/test/resources/org/apache/taverna/workbench/file/impl/dummy-workflow.t2flow
----------------------------------------------------------------------
diff --git 
a/taverna-file-impl/src/test/resources/org/apache/taverna/workbench/file/impl/dummy-workflow.t2flow
 
b/taverna-file-impl/src/test/resources/org/apache/taverna/workbench/file/impl/dummy-workflow.t2flow
new file mode 100644
index 0000000..b9a1075
--- /dev/null
+++ 
b/taverna-file-impl/src/test/resources/org/apache/taverna/workbench/file/impl/dummy-workflow.t2flow
@@ -0,0 +1,157 @@
+<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow"; version="1" 
producedBy="test">
+       <dataflow id="ec0991ba-275c-49ed-b1d6-38534180fb7c" role="top">
+               <name>simple_workflow_with_input</name>
+               <inputPorts>
+                       <port>
+                               <name>input</name>
+                               <depth>0</depth>
+                               <granularDepth>0</granularDepth>
+                       </port>
+               </inputPorts>
+               <outputPorts>
+                       <port>
+                               <name>output</name>
+                       </port>
+               </outputPorts>
+               <processors>
+                       <processor>
+                               <name>Concat_XXX</name>
+                               <inputPorts>
+                                       <port>
+                                               <name>input</name>
+                                               <depth>0</depth>
+                                       </port>
+                               </inputPorts>
+                               <outputPorts>
+                                       <port>
+                                               <name>output</name>
+                                               <depth>0</depth>
+                                               <granularDepth>0</granularDepth>
+                                       </port>
+                               </outputPorts>
+                               <annotations />
+                               <activities>
+                                       <activity>
+                                               <class>
+                                                       
net.sf.taverna.t2.activities.beanshell.BeanshellActivity
+                                               </class>
+                                               <inputMap>
+                                                       <map from="input" 
to="input" />
+                                               </inputMap>
+                                               <outputMap>
+                                                       <map from="output" 
to="output" />
+                                               </outputMap>
+                                               <configBean encoding="xstream">
+                                                       
<net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean
+                                                               xmlns="">
+                                                               <script>String 
output = input + "XXX";</script>
+                                                               <dependencies />
+                                                               <inputs>
+                                                                       
<net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+                                                                               
<handledReferenceSchemes />
+                                                                               
<translatedElementType>java.lang.String</translatedElementType>
+                                                                               
<allowsLiteralValues>true</allowsLiteralValues>
+                                                                               
<name>input</name>
+                                                                               
<depth>0</depth>
+                                                                               
<mimeTypes>
+                                                                               
        <string>'text/plain'</string>
+                                                                               
</mimeTypes>
+                                                                       
</net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+                                                               </inputs>
+                                                               <outputs>
+                                                                       
<net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+                                                                               
<granularDepth>0</granularDepth>
+                                                                               
<name>output</name>
+                                                                               
<depth>0</depth>
+                                                                               
<mimeTypes>
+                                                                               
        <string>'text/plain'</string>
+                                                                               
</mimeTypes>
+                                                                       
</net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+                                                               </outputs>
+                                                       
</net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean>
+                                               </configBean>
+                                       </activity>
+                               </activities>
+                               <dispatchStack>
+                                       <dispatchLayer>
+                                               <class>
+                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize
+                                               </class>
+                                               <configBean encoding="xstream">
+                                                       
<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig
+                                                               xmlns="">
+                                                               
<maxJobs>1</maxJobs>
+                                                       
</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+                                               </configBean>
+                                       </dispatchLayer>
+                                       <dispatchLayer>
+                                               <class>
+                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce
+                                               </class>
+                                               <configBean encoding="xstream">
+                                                       <null xmlns="" />
+                                               </configBean>
+                                       </dispatchLayer>
+                                       <dispatchLayer>
+                                               <class>
+                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover
+                                               </class>
+                                               <configBean encoding="xstream">
+                                                       <null xmlns="" />
+                                               </configBean>
+                                       </dispatchLayer>
+                                       <dispatchLayer>
+                                               <class>
+                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry
+                                               </class>
+                                               <configBean encoding="xstream">
+                                                       
<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig
+                                                               xmlns="">
+                                                               
<backoffFactor>1.0</backoffFactor>
+                                                               
<initialDelay>0</initialDelay>
+                                                               
<maxDelay>0</maxDelay>
+                                                               
<maxRetries>0</maxRetries>
+                                                       
</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+                                               </configBean>
+                                       </dispatchLayer>
+                                       <dispatchLayer>
+                                               <class>
+                                                       
net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke
+                                               </class>
+                                               <configBean encoding="xstream">
+                                                       <null xmlns="" />
+                                               </configBean>
+                                       </dispatchLayer>
+                               </dispatchStack>
+                               <iterationStrategyStack>
+                                       <iteration>
+                                               <strategy>
+                                                       <port name="input" 
depth="0" />
+                                               </strategy>
+                                       </iteration>
+                               </iterationStrategyStack>
+                       </processor>
+               </processors>
+               <conditions />
+               <datalinks>
+                       <datalink>
+                               <sink type="processor">
+                                       <processor>Concat_XXX</processor>
+                                       <port>input</port>
+                               </sink>
+                               <source type="dataflow">
+                                       <port>input</port>
+                               </source>
+                       </datalink>
+                       <datalink>
+                               <sink type="dataflow">
+                                       <port>output</port>
+                               </sink>
+                               <source type="processor">
+                                       <processor>Concat_XXX</processor>
+                                       <port>output</port>
+                               </source>
+                       </datalink>
+               </datalinks>
+       </dataflow>
+</workflow>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-model/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-graph-model/pom.xml b/taverna-graph-model/pom.xml
index f40acbc..8a117a3 100644
--- a/taverna-graph-model/pom.xml
+++ b/taverna-graph-model/pom.xml
@@ -121,11 +121,6 @@
                         <artifactId>taverna-configuration-ui-api</artifactId>
                         <version>${project.parent.version}</version>
                 </dependency>
-                <dependency>
-                        <groupId>${project.parent.groupId}</groupId>
-                        <artifactId>taverna-io</artifactId>
-                        <version>${project.parent.version}</version>
-                </dependency>
                <dependency>
                        <groupId>org.apache.batik</groupId>
                        <artifactId>batik-osgi</artifactId>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/AutoScrollInteractor.java
----------------------------------------------------------------------
diff --git 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/AutoScrollInteractor.java
 
b/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/AutoScrollInteractor.java
deleted file mode 100644
index 65a4aa5..0000000
--- 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/AutoScrollInteractor.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package net.sf.taverna.t2.workbench.views.graph;
-
-import static java.awt.event.InputEvent.BUTTON1_DOWN_MASK;
-import static java.awt.event.InputEvent.BUTTON1_MASK;
-import static java.awt.event.MouseEvent.BUTTON1;
-import static java.awt.event.MouseEvent.MOUSE_DRAGGED;
-import static java.awt.event.MouseEvent.MOUSE_PRESSED;
-import static java.lang.System.currentTimeMillis;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.InputEvent;
-import java.awt.event.MouseEvent;
-import java.awt.geom.AffineTransform;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.apache.batik.swing.JSVGCanvas;
-import org.apache.batik.swing.gvt.InteractorAdapter;
-import org.apache.batik.swing.gvt.JGVTComponent;
-
-/**
- * An interactor that scrolls the canvas view if the mouse is dragged to the
- * edge of the canvas.
- * 
- * @author David Withers
- */
-public class AutoScrollInteractor extends InteractorAdapter {
-       /**
-        * Defines the border around the canvas in which the auto scroll will 
become
-        * active.
-        */
-       private static final int BORDER = 25;
-       /**
-        * The interval, in milliseconds, between scroll events.
-        */
-       private static final long SCROLL_INTERVAL = 100;
-
-       private JSVGCanvas svgCanvas;
-       private Dimension canvasSize;
-       private int scrollX;
-       private int scrollY;
-       private int mouseX;
-       private int mouseY;
-
-       /**
-        * Component used to identify mouse events generated by this class
-        */
-       private Component eventIdentifier = new Component() {
-               private static final long serialVersionUID = 
-295542754718804222L;
-       };
-
-       private static Timer timer = new Timer("GraphAutoScrollTimer", true);
-
-       private TimerTask task;
-
-       /**
-        * Whether the interactor has finished.
-        */
-       protected boolean finished = true;
-
-       public AutoScrollInteractor(JSVGCanvas svgCanvas) {
-               this.svgCanvas = svgCanvas;
-       }
-
-       @Override
-       public boolean startInteraction(InputEvent ie) {
-               int mods = ie.getModifiers();
-               if (ie.getID() == MOUSE_PRESSED && (mods & BUTTON1_MASK) != 0) {
-                       AffineTransform transform = 
svgCanvas.getRenderingTransform();
-                       // check if we're zoomed in
-                       if (transform.getScaleX() > 1d || transform.getScaleY() 
> 1d) {
-                               canvasSize = svgCanvas.getSize();
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       @Override
-       public boolean endInteraction() {
-               return finished;
-       }
-
-       @Override
-       public void mousePressed(final MouseEvent e) {
-               if (startInteraction(e)) {
-                       finished = false;
-                       task = new TimerTask() {
-                               @Override
-                               public void run() {
-                                       scrollTimerCallback(e);
-                               }
-                       };
-                       timer.schedule(task, 0, SCROLL_INTERVAL);
-               }
-       }
-
-       /**
-        * Dispatches a mouse drag event that updates the mouse location by the
-        * amount that the canvas has been scrolled.
-        * 
-        * @param dragX
-        * @param dragY
-        */
-       private void dispatchDragEvent(double dragX, double dragY) {
-               int x = (int) (mouseX + dragX);
-               int y = (int) (mouseY + dragY);
-               MouseEvent mouseDragEvent = new MouseEvent(eventIdentifier,
-                               MOUSE_DRAGGED, currentTimeMillis(), 
BUTTON1_DOWN_MASK, x, y, 1,
-                               false, BUTTON1);
-               svgCanvas.dispatchEvent(mouseDragEvent);
-       }
-
-       @Override
-       public void mouseReleased(MouseEvent e) {
-               if (!finished) {
-                       finished = true;
-                       scrollX = 0;
-                       scrollY = 0;
-                       if (task != null)
-                               task.cancel();
-               }
-       }
-
-       @Override
-       public void mouseDragged(MouseEvent e) {
-               // ignore events generated by this class
-               if (!finished && e.getSource() != eventIdentifier) {
-                       mouseX = e.getX();
-                       mouseY = e.getY();
-                       int minX = BORDER;
-                       int maxX = canvasSize.width - BORDER;
-                       int minY = BORDER;
-                       int maxY = canvasSize.height - BORDER;
-
-                       scrollX = (mouseX < minX) ? (minX - mouseX)
-                                       : (mouseX > maxX) ? (maxX - mouseX) : 0;
-                       scrollY = (mouseY < minY) ? (minY - mouseY)
-                                       : (mouseY > maxY) ? (maxY - mouseY) : 0;
-               }
-       }
-
-       private void scrollTimerCallback(MouseEvent e) {
-               double x = scrollX;
-               double y = scrollY;
-               if (x == 0 && y == 0)
-                       return;
-
-               JGVTComponent c = (JGVTComponent) e.getSource();
-               AffineTransform rt = (AffineTransform) c.getRenderingTransform()
-                               .clone();
-               double currentTranslateX = rt.getTranslateX();
-               double currentTranslateY = rt.getTranslateY();
-               // the tranlation that will show the east edge
-               double maxTranslateX = -((canvasSize.width * rt.getScaleX()) - 
canvasSize.width);
-               // the translation that will show the south
-               double maxTranslateY = -((canvasSize.height * rt.getScaleY()) - 
canvasSize.height);
-
-               if (x > 0 && currentTranslateX + x > 0)
-                       // scroll left && not at west edge
-                       x = -currentTranslateX;
-               else if (x < 0 && currentTranslateX + x < maxTranslateX)
-                       // scroll right && not at east edge
-                       x = maxTranslateX - currentTranslateX;
-
-               if (y > 0 && currentTranslateY + y > 0)
-                       // scroll up && not at north edge
-                       y = -currentTranslateY;
-               else if (y < 0 && currentTranslateY + y < maxTranslateY)
-                       // scroll down && not at south edge
-                       y = maxTranslateY - currentTranslateY;
-
-               if (x != 0d || y != 0d) {
-                       AffineTransform at = 
AffineTransform.getTranslateInstance(x, y);
-                       rt.preConcatenate(at);
-                       c.setRenderingTransform(rt);
-                       dispatchDragEvent(x, y);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/GraphViewComponent.java
----------------------------------------------------------------------
diff --git 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/GraphViewComponent.java
 
b/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/GraphViewComponent.java
deleted file mode 100644
index dac96ab..0000000
--- 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/GraphViewComponent.java
+++ /dev/null
@@ -1,548 +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.views.graph;
-
-import static java.awt.BorderLayout.CENTER;
-import static java.awt.BorderLayout.NORTH;
-import static javax.swing.Action.SHORT_DESCRIPTION;
-import static javax.swing.Action.SMALL_ICON;
-import static javax.swing.BoxLayout.PAGE_AXIS;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.allportIcon;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.blobIcon;
-import static 
org.apache.taverna.workbench.icons.WorkbenchIcons.expandNestedIcon;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.horizontalIcon;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.noportIcon;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.refreshIcon;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.verticalIcon;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.zoomInIcon;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.zoomOutIcon;
-import static 
net.sf.taverna.t2.workbench.views.graph.config.GraphViewConfiguration.ALIGNMENT;
-import static 
net.sf.taverna.t2.workbench.views.graph.config.GraphViewConfiguration.ANIMATION_ENABLED;
-import static 
net.sf.taverna.t2.workbench.views.graph.config.GraphViewConfiguration.ANIMATION_SPEED;
-import static 
net.sf.taverna.t2.workbench.views.graph.config.GraphViewConfiguration.PORT_STYLE;
-import static org.apache.batik.swing.svg.AbstractJSVGComponent.ALWAYS_DYNAMIC;
-
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.BoxLayout;
-import javax.swing.ButtonGroup;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JPanel;
-import javax.swing.JToggleButton;
-import javax.swing.JToolBar;
-import javax.swing.Timer;
-import javax.swing.border.EmptyBorder;
-
-import org.apache.taverna.lang.observer.Observable;
-import org.apache.taverna.lang.observer.SwingAwareObserver;
-import org.apache.taverna.ui.menu.MenuManager;
-import org.apache.taverna.workbench.configuration.colour.ColourManager;
-import 
org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration;
-import org.apache.taverna.workbench.edits.EditManager;
-import 
org.apache.taverna.workbench.edits.EditManager.AbstractDataflowEditEvent;
-import org.apache.taverna.workbench.edits.EditManager.EditManagerEvent;
-import org.apache.taverna.workbench.file.FileManager;
-import org.apache.taverna.workbench.file.events.ClosedDataflowEvent;
-import org.apache.taverna.workbench.file.events.FileManagerEvent;
-import org.apache.taverna.workbench.models.graph.Graph.Alignment;
-import org.apache.taverna.workbench.models.graph.GraphController;
-import org.apache.taverna.workbench.models.graph.GraphController.PortStyle;
-import org.apache.taverna.workbench.models.graph.svg.SVGGraphController;
-import org.apache.taverna.workbench.selection.SelectionManager;
-import org.apache.taverna.workbench.selection.events.SelectionManagerEvent;
-import 
org.apache.taverna.workbench.selection.events.WorkflowBundleSelectionEvent;
-import org.apache.taverna.workbench.selection.events.WorkflowSelectionEvent;
-import org.apache.taverna.workbench.ui.dndhandler.ServiceTransferHandler;
-import org.apache.taverna.workbench.ui.zaria.UIComponentSPI;
-import net.sf.taverna.t2.workbench.views.graph.config.GraphViewConfiguration;
-import net.sf.taverna.t2.workbench.views.graph.menu.ResetDiagramAction;
-import net.sf.taverna.t2.workbench.views.graph.menu.ZoomInAction;
-import net.sf.taverna.t2.workbench.views.graph.menu.ZoomOutAction;
-
-import org.apache.batik.swing.JSVGCanvas;
-import org.apache.batik.swing.JSVGScrollPane;
-import org.apache.batik.swing.gvt.GVTTreeRendererAdapter;
-import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.commons.services.ServiceRegistry;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.Workflow;
-
-/**
- * @author David Withers
- * @author Alex Nenadic
- * @author Tom Oinn
- */
-public class GraphViewComponent extends JPanel implements UIComponentSPI {
-       private static final long serialVersionUID = 7404937056378331528L;
-       private static final Logger logger = 
Logger.getLogger(GraphViewComponent.class);
-
-       private Workflow workflow;
-       private SVGGraphController graphController;
-       private JPanel diagramPanel;
-
-       private Map<WorkflowBundle, Set<Workflow>> workflowsMap = new 
IdentityHashMap<>();
-
-       private Map<Workflow, SVGGraphController> graphControllerMap = new 
IdentityHashMap<>();
-       private Map<Workflow, JPanel> diagramPanelMap = new IdentityHashMap<>();
-       private Map<Workflow, Action[]> diagramActionsMap = new 
IdentityHashMap<>();
-
-       private Timer timer;
-
-       private CardLayout cardLayout;
-
-       private final ColourManager colourManager;
-       private final EditManager editManager;
-       private final MenuManager menuManager;
-       private final GraphViewConfiguration graphViewConfiguration;
-       private final WorkbenchConfiguration workbenchConfiguration;
-       private final SelectionManager selectionManager;
-       private final ServiceRegistry serviceRegistry;
-
-       public GraphViewComponent(ColourManager colourManager,
-                       EditManager editManager, FileManager fileManager,
-                       MenuManager menuManager,
-                       GraphViewConfiguration graphViewConfiguration,
-                       WorkbenchConfiguration workbenchConfiguration,
-                       SelectionManager selectionManager, ServiceRegistry 
serviceRegistry) {
-               this.colourManager = colourManager;
-               this.editManager = editManager;
-               this.menuManager = menuManager;
-               this.graphViewConfiguration = graphViewConfiguration;
-               this.workbenchConfiguration = workbenchConfiguration;
-               this.selectionManager = selectionManager;
-               this.serviceRegistry = serviceRegistry;
-
-               cardLayout = new CardLayout();
-               setLayout(cardLayout);
-
-               ActionListener taskPerformer = new ActionListener() {
-                       @Override
-                       public void actionPerformed(ActionEvent evt) {
-                               if (graphController != null)
-                                       graphController.redraw();
-                               timer.stop();
-                       }
-               };
-               timer = new Timer(100, taskPerformer);
-
-               addComponentListener(new ComponentAdapter() {
-                       @Override
-                       public void componentResized(ComponentEvent e) {
-                               if (timer.isRunning())
-                                       timer.restart();
-                               else
-                                       timer.start();
-                       }
-               });
-
-               editManager.addObserver(new EditManagerObserver());
-               selectionManager.addObserver(new SelectionManagerObserver());
-               fileManager.addObserver(new FileManagerObserver());
-       }
-
-       @Override
-       protected void finalize() throws Throwable {
-               if (timer != null)
-                       timer.stop();
-       }
-
-       @Override
-       public String getName() {
-               return "Graph View Component";
-       }
-
-       @Override
-       public ImageIcon getIcon() {
-               return null;
-       }
-
-       @Override
-       public void onDisplay() {
-       }
-
-       @Override
-       public void onDispose() {
-               if (timer != null)
-                       timer.stop();
-       }
-
-       private JPanel createDiagramPanel(Workflow workflow) {
-               final JPanel diagramPanel = new JPanel(new BorderLayout());
-
-               // get the default diagram settings
-               Alignment alignment = Alignment.valueOf(graphViewConfiguration
-                               .getProperty(ALIGNMENT));
-               PortStyle portStyle = PortStyle.valueOf(graphViewConfiguration
-                               .getProperty(PORT_STYLE));
-               boolean animationEnabled = 
Boolean.parseBoolean(graphViewConfiguration
-                               .getProperty(ANIMATION_ENABLED));
-               int animationSpeed = Integer.parseInt(graphViewConfiguration
-                               .getProperty(ANIMATION_SPEED));
-
-               // create an SVG canvas
-               final JSVGCanvas svgCanvas = new JSVGCanvas(null, true, false);
-               svgCanvas.setEnableZoomInteractor(false);
-               svgCanvas.setEnableRotateInteractor(false);
-               svgCanvas.setDocumentState(ALWAYS_DYNAMIC);
-               svgCanvas.setTransferHandler(new 
ServiceTransferHandler(editManager,
-                               menuManager, selectionManager, 
serviceRegistry));
-
-               AutoScrollInteractor asi = new AutoScrollInteractor(svgCanvas);
-               svgCanvas.addMouseListener(asi);
-               svgCanvas.addMouseMotionListener(asi);
-
-               final JSVGScrollPane svgScrollPane = new 
MySvgScrollPane(svgCanvas);
-
-               GVTTreeRendererAdapter gvtTreeRendererAdapter = new 
GVTTreeRendererAdapter() {
-                       @Override
-                       public void gvtRenderingCompleted(GVTTreeRendererEvent 
e) {
-                               logger.info("Rendered svg");
-                               svgScrollPane.reset();
-                               diagramPanel.revalidate();
-                       }
-               };
-               svgCanvas.addGVTTreeRendererListener(gvtTreeRendererAdapter);
-
-               // create a graph controller
-               SVGGraphController svgGraphController = new SVGGraphController(
-                               workflow, 
selectionManager.getSelectedProfile(), false,
-                               svgCanvas, alignment, portStyle, editManager, 
menuManager,
-                               colourManager, workbenchConfiguration);
-               svgGraphController.setDataflowSelectionModel(selectionManager
-                               
.getDataflowSelectionModel(workflow.getParent()));
-               svgGraphController.setAnimationSpeed(animationEnabled ? 
animationSpeed
-                               : 0);
-
-               graphControllerMap.put(workflow, svgGraphController);
-
-               // Toolbar with actions related to graph
-               JToolBar graphActionsToolbar = graphActionsToolbar(workflow,
-                               svgGraphController, svgCanvas, alignment, 
portStyle);
-               graphActionsToolbar.setAlignmentX(LEFT_ALIGNMENT);
-               graphActionsToolbar.setFloatable(false);
-
-               // Panel to hold the toolbars
-               JPanel toolbarPanel = new JPanel();
-               toolbarPanel.setLayout(new BoxLayout(toolbarPanel, PAGE_AXIS));
-               toolbarPanel.add(graphActionsToolbar);
-
-               diagramPanel.add(toolbarPanel, NORTH);
-               diagramPanel.add(svgScrollPane, CENTER);
-
-               // JTextField workflowHierarchy = new 
JTextField(workflow.getName());
-               // diagramPanel.add(workflowHierarchy, BorderLayout.SOUTH);
-
-               return diagramPanel;
-       }
-
-       @SuppressWarnings("serial")
-       private JToolBar graphActionsToolbar(Workflow workflow,
-                       final SVGGraphController graphController, JSVGCanvas 
svgCanvas,
-                       Alignment alignment, PortStyle portStyle) {
-               JToolBar toolBar = new JToolBar();
-
-               JButton resetDiagramButton = new JButton();
-               resetDiagramButton.setBorder(new EmptyBorder(0, 2, 0, 2));
-               JButton zoomInButton = new JButton();
-               zoomInButton.setBorder(new EmptyBorder(0, 2, 0, 2));
-               JButton zoomOutButton = new JButton();
-               zoomOutButton.setBorder(new EmptyBorder(0, 2, 0, 2));
-
-               Action resetDiagramAction = svgCanvas.new 
ResetTransformAction();
-               ResetDiagramAction.setDesignAction(resetDiagramAction);
-               resetDiagramAction.putValue(SHORT_DESCRIPTION, "Reset Diagram");
-               resetDiagramAction.putValue(SMALL_ICON, refreshIcon);
-               resetDiagramButton.setAction(resetDiagramAction);
-
-               Action zoomInAction = svgCanvas.new ZoomAction(1.2);
-               ZoomInAction.setDesignAction(zoomInAction);
-               zoomInAction.putValue(SHORT_DESCRIPTION, "Zoom In");
-               zoomInAction.putValue(SMALL_ICON, zoomInIcon);
-               zoomInButton.setAction(zoomInAction);
-
-               Action zoomOutAction = svgCanvas.new ZoomAction(1 / 1.2);
-               ZoomOutAction.setDesignAction(zoomOutAction);
-               zoomOutAction.putValue(SHORT_DESCRIPTION, "Zoom Out");
-               zoomOutAction.putValue(SMALL_ICON, zoomOutIcon);
-               zoomOutButton.setAction(zoomOutAction);
-
-               diagramActionsMap.put(workflow, new Action[] { 
resetDiagramAction,
-                               zoomInAction, zoomOutAction });
-
-               toolBar.add(resetDiagramButton);
-               toolBar.add(zoomInButton);
-               toolBar.add(zoomOutButton);
-
-               toolBar.addSeparator();
-
-               ButtonGroup nodeTypeGroup = new ButtonGroup();
-
-               JToggleButton noPorts = new JToggleButton();
-               JToggleButton allPorts = new JToggleButton();
-               JToggleButton blobs = new JToggleButton();
-               nodeTypeGroup.add(noPorts);
-               nodeTypeGroup.add(allPorts);
-               nodeTypeGroup.add(blobs);
-
-               if (portStyle.equals(PortStyle.NONE))
-                       noPorts.setSelected(true);
-               else if (portStyle.equals(PortStyle.ALL))
-                       allPorts.setSelected(true);
-               else
-                       blobs.setSelected(true);
-
-               noPorts.setAction(new AbstractAction() {
-                       @Override
-                       public void actionPerformed(ActionEvent arg0) {
-                               graphController.setPortStyle(PortStyle.NONE);
-                               graphController.redraw();
-                       }
-               });
-               noPorts.getAction().putValue(SHORT_DESCRIPTION,
-                               "Display no service ports");
-               noPorts.getAction().putValue(SMALL_ICON, noportIcon);
-               noPorts.setFocusPainted(false);
-
-               allPorts.setAction(new AbstractAction() {
-                       @Override
-                       public void actionPerformed(ActionEvent arg0) {
-                               graphController.setPortStyle(PortStyle.ALL);
-                               graphController.redraw();
-                       }
-               });
-               allPorts.getAction().putValue(SHORT_DESCRIPTION,
-                               "Display all service ports");
-               allPorts.getAction().putValue(SMALL_ICON, allportIcon);
-               allPorts.setFocusPainted(false);
-
-               blobs.setAction(new AbstractAction() {
-                       @Override
-                       public void actionPerformed(ActionEvent arg0) {
-                               graphController.setPortStyle(PortStyle.BLOB);
-                               graphController.redraw();
-                       }
-               });
-               blobs.getAction().putValue(SHORT_DESCRIPTION,
-                               "Display services as circles");
-               blobs.getAction().putValue(SMALL_ICON, blobIcon);
-               blobs.setFocusPainted(false);
-
-               toolBar.add(noPorts);
-               toolBar.add(allPorts);
-               toolBar.add(blobs);
-
-               toolBar.addSeparator();
-
-               ButtonGroup alignmentGroup = new ButtonGroup();
-
-               JToggleButton vertical = new JToggleButton();
-               JToggleButton horizontal = new JToggleButton();
-               alignmentGroup.add(vertical);
-               alignmentGroup.add(horizontal);
-
-               if (alignment.equals(Alignment.VERTICAL)) {
-                       vertical.setSelected(true);
-               } else {
-                       horizontal.setSelected(true);
-               }
-
-               vertical.setAction(new AbstractAction() {
-                       @Override
-                       public void actionPerformed(ActionEvent arg0) {
-                               
graphController.setAlignment(Alignment.VERTICAL);
-                               graphController.redraw();
-                       }
-               });
-               vertical.getAction().putValue(SHORT_DESCRIPTION,
-                               "Align services vertically");
-               vertical.getAction().putValue(SMALL_ICON, verticalIcon);
-               vertical.setFocusPainted(false);
-
-               horizontal.setAction(new AbstractAction() {
-                       @Override
-                       public void actionPerformed(ActionEvent arg0) {
-                               
graphController.setAlignment(Alignment.HORIZONTAL);
-                               graphController.redraw();
-                       }
-
-               });
-               horizontal.getAction().putValue(SHORT_DESCRIPTION,
-                               "Align services horizontally");
-               horizontal.getAction().putValue(SMALL_ICON, horizontalIcon);
-               horizontal.setFocusPainted(false);
-
-               toolBar.add(vertical);
-               toolBar.add(horizontal);
-
-               toolBar.addSeparator();
-
-               JToggleButton expandNested = new JToggleButton();
-               expandNested.setSelected(true);
-
-               expandNested.setAction(new AbstractAction() {
-                       @Override
-                       public void actionPerformed(ActionEvent arg0) {
-                               
graphController.setExpandNestedDataflows(!graphController
-                                               .expandNestedDataflows());
-                               graphController.redraw();
-                       }
-               });
-               expandNested.getAction().putValue(SHORT_DESCRIPTION,
-                               "Expand Nested Workflows");
-               expandNested.getAction().putValue(SMALL_ICON, expandNestedIcon);
-               expandNested.setFocusPainted(false);
-               toolBar.add(expandNested);
-
-               return toolBar;
-       }
-
-       /**
-        * Sets the Workflow to display in the graph view.
-        *
-        * @param workflow
-        */
-       private void setWorkflow(Workflow workflow) {
-               this.workflow = workflow;
-               if (!diagramPanelMap.containsKey(workflow))
-                       addWorkflow(workflow);
-               graphController = graphControllerMap.get(workflow);
-               diagramPanel = diagramPanelMap.get(workflow);
-               Action[] actions = diagramActionsMap.get(workflow);
-               if (actions != null && actions.length == 3) {
-                       ResetDiagramAction.setDesignAction(actions[0]);
-                       ZoomInAction.setDesignAction(actions[1]);
-                       ZoomOutAction.setDesignAction(actions[2]);
-               }
-               cardLayout.show(this, String.valueOf(diagramPanel.hashCode()));
-               graphController.redraw();
-       }
-
-       private void addWorkflow(Workflow workflow) {
-               JPanel newDiagramPanel = createDiagramPanel(workflow);
-               add(newDiagramPanel, 
String.valueOf(newDiagramPanel.hashCode()));
-               diagramPanelMap.put(workflow, newDiagramPanel);
-               if (!workflowsMap.containsKey(workflow.getParent()))
-                       workflowsMap.put(workflow.getParent(), new 
HashSet<Workflow>());
-               workflowsMap.get(workflow.getParent()).add(workflow);
-       }
-
-       private void removeWorkflow(Workflow workflow) {
-               JPanel panel = diagramPanelMap.remove(workflow);
-               if (panel != null)
-                       remove(panel);
-               SVGGraphController removedController = 
graphControllerMap.remove(workflow);
-               if (removedController != null)
-                       removedController.shutdown();
-               diagramActionsMap.remove(workflow);
-               Set<Workflow> workflows = 
workflowsMap.get(workflow.getParent());
-               if (workflows != null)
-                       workflows.remove(workflow);
-       }
-
-       public GraphController getGraphController(Workflow workflow) {
-               return graphControllerMap.get(workflow);
-       }
-
-       private class EditManagerObserver extends
-                       SwingAwareObserver<EditManagerEvent> {
-               @Override
-               public void notifySwing(Observable<EditManagerEvent> sender,
-                               EditManagerEvent message) {
-                       if (!(message instanceof AbstractDataflowEditEvent))
-                               return;
-                       AbstractDataflowEditEvent dataflowEditEvent = 
(AbstractDataflowEditEvent) message;
-                       if (dataflowEditEvent.getDataFlow() != 
workflow.getParent())
-                               return;
-                       
-                       boolean animationEnabled = Boolean
-                                       .parseBoolean(graphViewConfiguration
-                                                       
.getProperty(ANIMATION_ENABLED));
-                       int animationSpeed = (animationEnabled ? Integer
-                                       .parseInt(graphViewConfiguration
-                                                       
.getProperty(ANIMATION_SPEED)) : 0);
-                       boolean animationSettingChanged = (animationEnabled != 
(graphController
-                                       .getAnimationSpeed() != 0));
-
-                       if (graphController.isDotMissing() || 
animationSettingChanged) {
-                               removeWorkflow(workflow);
-                               setWorkflow(workflow);
-                       } else {
-                               if (animationSpeed != 
graphController.getAnimationSpeed())
-                                       
graphController.setAnimationSpeed(animationSpeed);
-                               graphController.redraw();
-                       }
-               }
-       }
-
-       private class FileManagerObserver extends 
SwingAwareObserver<FileManagerEvent> {
-               @Override
-               public void notifySwing(Observable<FileManagerEvent> sender, 
final FileManagerEvent message) {
-                       if (!(message instanceof ClosedDataflowEvent))
-                               return;
-                       ClosedDataflowEvent closedDataflowEvent = 
(ClosedDataflowEvent) message;
-
-                       WorkflowBundle workflowBundle = 
closedDataflowEvent.getDataflow();
-                       if (workflowsMap.containsKey(workflowBundle))
-                               for (Workflow workflow : 
workflowsMap.remove(workflowBundle))
-                                       removeWorkflow(workflow);
-               }
-       }
-
-       private class SelectionManagerObserver extends
-                       SwingAwareObserver<SelectionManagerEvent> {
-               @Override
-               public void notifySwing(Observable<SelectionManagerEvent> 
sender,
-                               SelectionManagerEvent message) {
-                       if (message instanceof WorkflowSelectionEvent)
-                               
setWorkflow(selectionManager.getSelectedWorkflow());
-                       else if (message instanceof 
WorkflowBundleSelectionEvent)
-                               
setWorkflow(selectionManager.getSelectedWorkflow());
-               }
-       }
-
-       private class MySvgScrollPane extends JSVGScrollPane {
-               private static final long serialVersionUID = 
-1539947450704269879L;
-
-               public MySvgScrollPane(JSVGCanvas canvas) {
-                       super(canvas);
-               }
-
-               @Override
-               public void reset() {
-                       super.resizeScrollBars();
-                       super.reset();
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/GraphViewComponentFactory.java
----------------------------------------------------------------------
diff --git 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/GraphViewComponentFactory.java
 
b/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/GraphViewComponentFactory.java
deleted file mode 100644
index 4f603d6..0000000
--- 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/GraphViewComponentFactory.java
+++ /dev/null
@@ -1,100 +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.views.graph;
-
-import javax.swing.ImageIcon;
-
-import org.apache.taverna.commons.services.ServiceRegistry;
-
-import org.apache.taverna.ui.menu.MenuManager;
-import org.apache.taverna.workbench.configuration.colour.ColourManager;
-import 
org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration;
-import org.apache.taverna.workbench.edits.EditManager;
-import org.apache.taverna.workbench.file.FileManager;
-import org.apache.taverna.workbench.selection.SelectionManager;
-import org.apache.taverna.workbench.ui.zaria.UIComponentFactorySPI;
-import org.apache.taverna.workbench.ui.zaria.UIComponentSPI;
-import net.sf.taverna.t2.workbench.views.graph.config.GraphViewConfiguration;
-
-/**
- * @author David Withers
- */
-public class GraphViewComponentFactory implements UIComponentFactorySPI {
-       private EditManager editManager;
-       private FileManager fileManager;
-       private MenuManager menuManager;
-       private SelectionManager selectionManager;
-       private ColourManager colourManager;
-       private WorkbenchConfiguration workbenchConfiguration;
-       private GraphViewConfiguration graphViewConfiguration;
-       private ServiceRegistry serviceRegistry;
-
-       @Override
-       public UIComponentSPI getComponent() {
-               return new GraphViewComponent(colourManager, editManager, 
fileManager,
-                               menuManager, graphViewConfiguration, 
workbenchConfiguration,
-                               selectionManager, serviceRegistry);
-       }
-
-       @Override
-       public ImageIcon getIcon() {
-               return null;
-       }
-
-       @Override
-       public String getName() {
-               return "Graph View";
-       }
-
-       public void setEditManager(EditManager editManager) {
-               this.editManager = editManager;
-       }
-
-       public void setFileManager(FileManager fileManager) {
-               this.fileManager = fileManager;
-       }
-
-       public void setMenuManager(MenuManager menuManager) {
-               this.menuManager = menuManager;
-       }
-
-       public void setSelectionManager(SelectionManager selectionManager) {
-               this.selectionManager = selectionManager;
-       }
-
-       public void setColourManager(ColourManager colourManager) {
-               this.colourManager = colourManager;
-       }
-
-       public void setWorkbenchConfiguration(
-                       WorkbenchConfiguration workbenchConfiguration) {
-               this.workbenchConfiguration = workbenchConfiguration;
-       }
-
-       public void setGraphViewConfiguration(
-                       GraphViewConfiguration graphViewConfiguration) {
-               this.graphViewConfiguration = graphViewConfiguration;
-       }
-
-       public void setServiceRegistry(ServiceRegistry serviceRegistry) {
-               this.serviceRegistry = serviceRegistry;
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/AddWFInputAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/AddWFInputAction.java
 
b/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/AddWFInputAction.java
deleted file mode 100644
index c102cd6..0000000
--- 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/AddWFInputAction.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.views.graph.actions;
-
-import static java.awt.event.InputEvent.ALT_DOWN_MASK;
-import static java.awt.event.InputEvent.SHIFT_DOWN_MASK;
-import static java.awt.event.KeyEvent.VK_I;
-import static javax.swing.KeyStroke.getKeyStroke;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.inputIcon;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-
-import org.apache.taverna.ui.menu.DesignOnlyAction;
-import org.apache.taverna.workbench.design.actions.AddDataflowInputAction;
-import org.apache.taverna.workbench.edits.EditManager;
-import org.apache.taverna.workbench.selection.SelectionManager;
-import org.apache.taverna.scufl2.api.core.Workflow;
-
-/**
- * An action that adds a workflow input.
- * 
- * @author Alex Nenadic
- * @author Alan R Williams
- */
-@SuppressWarnings("serial")
-public class AddWFInputAction extends AbstractAction implements
-               DesignOnlyAction {
-       private final EditManager editManager;
-       private final SelectionManager selectionManager;
-
-       public AddWFInputAction(EditManager editManager,
-                       SelectionManager selectionManager) {
-               super();
-               this.editManager = editManager;
-               this.selectionManager = selectionManager;
-               putValue(SMALL_ICON, inputIcon);
-               putValue(NAME, "Workflow input port");
-               putValue(SHORT_DESCRIPTION, "Workflow input port");
-               putValue(ACCELERATOR_KEY,
-                               getKeyStroke(VK_I, SHIFT_DOWN_MASK | 
ALT_DOWN_MASK));
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               Workflow workflow = selectionManager.getSelectedWorkflow();
-               new AddDataflowInputAction(workflow, null, editManager,
-                               selectionManager).actionPerformed(e);
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/AddWFOutputAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/AddWFOutputAction.java
 
b/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/AddWFOutputAction.java
deleted file mode 100644
index 72dfc61..0000000
--- 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/AddWFOutputAction.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.views.graph.actions;
-
-import static java.awt.event.InputEvent.ALT_DOWN_MASK;
-import static java.awt.event.InputEvent.SHIFT_DOWN_MASK;
-import static java.awt.event.KeyEvent.VK_O;
-import static javax.swing.KeyStroke.getKeyStroke;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-
-import org.apache.taverna.ui.menu.DesignOnlyAction;
-import org.apache.taverna.workbench.design.actions.AddDataflowOutputAction;
-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.scufl2.api.core.Workflow;
-
-/**
- * An action that adds a workflow output.
- * 
- * @author Alex Nenadic
- * @author Alan R Williams
- */
-@SuppressWarnings("serial")
-public class AddWFOutputAction extends AbstractAction implements
-               DesignOnlyAction {
-       private final EditManager editManager;
-       private final SelectionManager selectionManager;
-
-       public AddWFOutputAction(EditManager editManager,
-                       SelectionManager selectionManager) {
-               super();
-               this.editManager = editManager;
-               this.selectionManager = selectionManager;
-               putValue(SMALL_ICON, WorkbenchIcons.outputIcon);
-               putValue(NAME, "Workflow output port");
-               putValue(SHORT_DESCRIPTION, "Workflow output port");
-               putValue(ACCELERATOR_KEY,
-                               getKeyStroke(VK_O, SHIFT_DOWN_MASK | 
ALT_DOWN_MASK));
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               Workflow workflow = selectionManager.getSelectedWorkflow();
-               new AddDataflowOutputAction(workflow, null, editManager,
-                               selectionManager).actionPerformed(e);
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/DeleteGraphComponentAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/DeleteGraphComponentAction.java
 
b/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/DeleteGraphComponentAction.java
deleted file mode 100644
index 3d2736d..0000000
--- 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/DeleteGraphComponentAction.java
+++ /dev/null
@@ -1,180 +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.views.graph.actions;
-
-import static java.awt.event.KeyEvent.VK_DELETE;
-import static javax.swing.KeyStroke.getKeyStroke;
-import static org.apache.taverna.workbench.icons.WorkbenchIcons.deleteIcon;
-
-import java.awt.event.ActionEvent;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-
-import org.apache.taverna.lang.observer.Observable;
-import org.apache.taverna.lang.observer.Observer;
-import org.apache.taverna.lang.observer.SwingAwareObserver;
-import org.apache.taverna.ui.menu.DesignOnlyAction;
-import org.apache.taverna.workbench.design.actions.RemoveConditionAction;
-import 
org.apache.taverna.workbench.design.actions.RemoveDataflowInputPortAction;
-import 
org.apache.taverna.workbench.design.actions.RemoveDataflowOutputPortAction;
-import org.apache.taverna.workbench.design.actions.RemoveDatalinkAction;
-import org.apache.taverna.workbench.design.actions.RemoveProcessorAction;
-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.workbench.selection.events.DataflowSelectionMessage;
-import org.apache.taverna.workbench.selection.events.SelectionManagerEvent;
-import 
org.apache.taverna.workbench.selection.events.WorkflowBundleSelectionEvent;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-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.port.InputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-
-/**
- * An action that deletes the selected graph component.
- *
- * @author Alex Nenadic
- */
-@SuppressWarnings("serial")
-public class DeleteGraphComponentAction extends AbstractAction implements 
DesignOnlyAction {
-       /** Current workflow's selection model event observer.*/
-       private Observer<DataflowSelectionMessage> workflowSelectionObserver = 
new DataflowSelectionObserver();
-
-       private final EditManager editManager;
-       private final SelectionManager selectionManager;
-
-       public DeleteGraphComponentAction(EditManager editManager, final 
SelectionManager selectionManager) {
-               super();
-               this.editManager = editManager;
-               this.selectionManager = selectionManager;
-               putValue(SMALL_ICON, deleteIcon);
-               putValue(NAME, "Delete");
-               putValue(SHORT_DESCRIPTION, "Delete selected component");
-               putValue(ACCELERATOR_KEY, getKeyStroke(VK_DELETE, 0));
-               setEnabled(false);
-
-               selectionManager.addObserver(new SelectionManagerObserver());
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               WorkflowBundle workflowBundle = selectionManager
-                               .getSelectedWorkflowBundle();
-               DataflowSelectionModel dataFlowSelectionModel = selectionManager
-                               .getDataflowSelectionModel(workflowBundle);
-               // Get all selected components
-               Set<Object> selectedWFComponents = 
dataFlowSelectionModel.getSelection();
-               for (Object selectedWFComponent : selectedWFComponents)
-                       if (selectedWFComponent instanceof Processor) {
-                               Processor processor = (Processor) 
selectedWFComponent;
-                               new 
RemoveProcessorAction(processor.getParent(), processor,
-                                               null, editManager, 
selectionManager).actionPerformed(e);
-                       } else if (selectedWFComponent instanceof DataLink) {
-                               DataLink dataLink = (DataLink) 
selectedWFComponent;
-                               new RemoveDatalinkAction(dataLink.getParent(), 
dataLink, null,
-                                               editManager, 
selectionManager).actionPerformed(e);
-                       } else if (selectedWFComponent instanceof 
InputWorkflowPort) {
-                               InputWorkflowPort port = (InputWorkflowPort) 
selectedWFComponent;
-                               new 
RemoveDataflowInputPortAction(port.getParent(), port, null,
-                                               editManager, 
selectionManager).actionPerformed(e);
-                       } else if (selectedWFComponent instanceof 
OutputWorkflowPort) {
-                               OutputWorkflowPort port = (OutputWorkflowPort) 
selectedWFComponent;
-                               new 
RemoveDataflowOutputPortAction(port.getParent(), port,
-                                               null, editManager, 
selectionManager).actionPerformed(e);
-                       } else if (selectedWFComponent instanceof ControlLink) {
-                               ControlLink controlLink = (ControlLink) 
selectedWFComponent;
-                               new 
RemoveConditionAction(controlLink.getParent(), controlLink,
-                                               null, editManager, 
selectionManager).actionPerformed(e);
-                       }
-       }
-
-       /**
-        * Check if action should be enabled or disabled and update its status.
-        */
-       public void updateStatus(WorkflowBundle selectionWorkflowBundle) {
-               if (selectionWorkflowBundle != null) {
-                       DataflowSelectionModel selectionModel = selectionManager
-                                       
.getDataflowSelectionModel(selectionWorkflowBundle);
-                       Set<Object> selection = selectionModel.getSelection();
-                       if (!selection.isEmpty()) {
-                               // Take the first selected item - we only 
support single selections anyway
-                               Object selected = selection.toArray()[0];
-                               if ((selected instanceof Processor)
-                                               || (selected instanceof 
InputWorkflowPort)
-                                               || (selected instanceof 
OutputWorkflowPort)
-                                               || (selected instanceof 
DataLink)
-                                               || (selected instanceof 
ControlLink)) {
-                                       setEnabled(true);
-                                       return;
-                               }
-                       }
-               }
-               setEnabled(false);
-       }
-
-       /**
-        * Observes events on workflow Selection Manager, i.e. when a workflow 
node
-        * is selected in the graph view, and enables/disables this action
-        * accordingly.
-        */
-       private final class DataflowSelectionObserver extends
-                       SwingAwareObserver<DataflowSelectionMessage> {
-               @Override
-               public void notifySwing(Observable<DataflowSelectionMessage> 
sender,
-                               DataflowSelectionMessage message) {
-                       
updateStatus(selectionManager.getSelectedWorkflowBundle());
-               }
-       }
-
-       private final class SelectionManagerObserver extends
-                       SwingAwareObserver<SelectionManagerEvent> {
-               @Override
-               public void notifySwing(Observable<SelectionManagerEvent> 
sender,
-                               SelectionManagerEvent message) {
-                       if (!(message instanceof WorkflowBundleSelectionEvent))
-                               return;
-                       WorkflowBundleSelectionEvent 
workflowBundleSelectionEvent = (WorkflowBundleSelectionEvent) message;
-                       WorkflowBundle oldFlow = workflowBundleSelectionEvent
-                                       .getPreviouslySelectedWorkflowBundle();
-                       WorkflowBundle newFlow = workflowBundleSelectionEvent
-                                       .getSelectedWorkflowBundle();
-
-                       /*
-                        * Remove the workflow selection model listener from 
the previous
-                        * (if any) and add to the new workflow (if any)
-                        */
-                       if (oldFlow != null)
-                               
selectionManager.getDataflowSelectionModel(oldFlow)
-                                               
.removeObserver(workflowSelectionObserver);
-
-                       // Update the buttons status as current dataflow has 
changed
-                       updateStatus(newFlow);
-
-                       if (newFlow != null)
-                               
selectionManager.getDataflowSelectionModel(newFlow)
-                                               
.addObserver(workflowSelectionObserver);
-               }
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/RenameWFInputOutputProcessorAction.java
----------------------------------------------------------------------
diff --git 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/RenameWFInputOutputProcessorAction.java
 
b/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/RenameWFInputOutputProcessorAction.java
deleted file mode 100644
index ea7e626..0000000
--- 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/actions/RenameWFInputOutputProcessorAction.java
+++ /dev/null
@@ -1,184 +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.views.graph.actions;
-
-import static java.awt.event.KeyEvent.VK_F2;
-import static javax.swing.JOptionPane.WARNING_MESSAGE;
-import static javax.swing.JOptionPane.showMessageDialog;
-import static javax.swing.KeyStroke.getKeyStroke;
-
-import java.awt.event.ActionEvent;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-
-import org.apache.taverna.lang.observer.Observable;
-import org.apache.taverna.lang.observer.Observer;
-import org.apache.taverna.lang.observer.SwingAwareObserver;
-import org.apache.taverna.ui.menu.DesignOnlyAction;
-import org.apache.taverna.workbench.design.actions.EditDataflowInputPortAction;
-import 
org.apache.taverna.workbench.design.actions.EditDataflowOutputPortAction;
-import org.apache.taverna.workbench.design.actions.RenameProcessorAction;
-import org.apache.taverna.workbench.edits.EditManager;
-import org.apache.taverna.workbench.icons.WorkbenchIcons;
-import org.apache.taverna.workbench.selection.DataflowSelectionModel;
-import org.apache.taverna.workbench.selection.SelectionManager;
-import org.apache.taverna.workbench.selection.events.DataflowSelectionMessage;
-import org.apache.taverna.workbench.selection.events.SelectionManagerEvent;
-import 
org.apache.taverna.workbench.selection.events.WorkflowBundleSelectionEvent;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-
-/**
- * An action that allows user to rename workflow input, output or
- * processor, in case one of these is currently selected in the Graph View.
- *
- * @author Alex Nenadic
- */
-@SuppressWarnings("serial")
-public class RenameWFInputOutputProcessorAction extends AbstractAction 
implements DesignOnlyAction {
-       /** Current workflow's selection model event observer.*/
-       private Observer<DataflowSelectionMessage> workflowSelectionObserver = 
new DataflowSelectionObserver();
-
-       private final EditManager editManager;
-       private final SelectionManager selectionManager;
-
-       public RenameWFInputOutputProcessorAction(EditManager editManager,
-                       final SelectionManager selectionManager) {
-               super();
-               this.editManager = editManager;
-               this.selectionManager = selectionManager;
-               putValue(SMALL_ICON, WorkbenchIcons.renameIcon);
-               putValue(NAME, "Rename");
-               putValue(SHORT_DESCRIPTION, "Rename inputs, outputs or 
services");
-               putValue(ACCELERATOR_KEY, getKeyStroke(VK_F2, 0));
-               setEnabled(false);
-
-               selectionManager.addObserver(new SelectionManagerObserver());
-       }
-
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               WorkflowBundle workflowBundle = selectionManager
-                               .getSelectedWorkflowBundle();
-               DataflowSelectionModel dataFlowSelectionModel = selectionManager
-                               .getDataflowSelectionModel(workflowBundle);
-               // Get selected port
-               Set<Object> selectedWFComponents = dataFlowSelectionModel
-                               .getSelection();
-               if (selectedWFComponents.size() > 1) {
-                       showMessageDialog(
-                                       null,
-                                       "Only one workflow component should be 
selected for this action.",
-                                       "Warning", WARNING_MESSAGE);
-               } else {
-                       Object selectedWFComponent = 
selectedWFComponents.toArray()[0];
-                       if (selectedWFComponent instanceof InputWorkflowPort) {
-                               InputWorkflowPort port = (InputWorkflowPort) 
selectedWFComponent;
-                               new 
EditDataflowInputPortAction(port.getParent(), port, null,
-                                               editManager, 
selectionManager).actionPerformed(e);
-                       } else if (selectedWFComponent instanceof 
OutputWorkflowPort) {
-                               OutputWorkflowPort port = (OutputWorkflowPort) 
selectedWFComponent;
-                               new 
EditDataflowOutputPortAction(port.getParent(), port, null,
-                                               editManager, 
selectionManager).actionPerformed(e);
-                       } else if (selectedWFComponent instanceof Processor) {
-                               Processor processor = (Processor) 
selectedWFComponent;
-                               new 
RenameProcessorAction(processor.getParent(), processor,
-                                               null, editManager, 
selectionManager).actionPerformed(e);
-                       } else { // should not happen as the button will be 
disabled otherwise, but ...
-                               showMessageDialog(
-                                               null,
-                                               "This action does not apply for 
the selected component.",
-                                               "Warning", WARNING_MESSAGE);
-                       }
-               }
-       }
-
-       /**
-        * Check if action should be enabled or disabled and update its status.
-        */
-       public void updateStatus() {
-               WorkflowBundle workflowBundle = selectionManager
-                               .getSelectedWorkflowBundle();
-               DataflowSelectionModel selectionModel = selectionManager
-                               .getDataflowSelectionModel(workflowBundle);
-
-               // List of all selected objects in the graph view
-               Set<Object> selection = selectionModel.getSelection();
-
-               if (!selection.isEmpty()) {
-                       // Take the first selected item - we only support 
single selections anyway
-                       Object selected = selection.toArray()[0];
-                       if ((selected instanceof Processor)
-                                       || (selected instanceof 
InputWorkflowPort)
-                                       || (selected instanceof 
OutputWorkflowPort)) {
-                               setEnabled(true);
-                               return;
-                       }
-               }
-               setEnabled(false);
-       }
-
-       /**
-        * Observes events on workflow Selection Manager, i.e. when a workflow 
node
-        * is selected in the graph view, and enables/disables this action
-        * accordingly.
-        */
-       private final class DataflowSelectionObserver extends
-                       SwingAwareObserver<DataflowSelectionMessage> {
-               @Override
-               public void notifySwing(Observable<DataflowSelectionMessage> 
sender,
-                               DataflowSelectionMessage message) {
-                       updateStatus();
-               }
-       }
-
-       private final class SelectionManagerObserver extends
-                       SwingAwareObserver<SelectionManagerEvent> {
-               @Override
-               public void notifySwing(Observable<SelectionManagerEvent> 
sender,
-                               SelectionManagerEvent message) {
-                       if (!(message instanceof WorkflowBundleSelectionEvent))
-                               return;
-                       WorkflowBundleSelectionEvent 
workflowBundleSelectionEvent = (WorkflowBundleSelectionEvent) message;
-                       WorkflowBundle oldFlow = workflowBundleSelectionEvent
-                                       .getPreviouslySelectedWorkflowBundle();
-                       WorkflowBundle newFlow = workflowBundleSelectionEvent
-                                       .getSelectedWorkflowBundle();
-                       // Update the buttons status as current dataflow has 
changed
-                       updateStatus();
-
-                       /*
-                        * Remove the workflow selection model listener from 
the previous
-                        * (if any) and add to the new workflow (if any)
-                        */
-                       if (oldFlow != null)
-                               
selectionManager.getDataflowSelectionModel(oldFlow)
-                                               
.removeObserver(workflowSelectionObserver);
-
-                       if (newFlow != null)
-                               
selectionManager.getDataflowSelectionModel(newFlow)
-                                               
.addObserver(workflowSelectionObserver);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/bf8a7ea2/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/config/GraphViewConfiguration.java
----------------------------------------------------------------------
diff --git 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/config/GraphViewConfiguration.java
 
b/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/config/GraphViewConfiguration.java
deleted file mode 100644
index 1400064..0000000
--- 
a/taverna-graph-view/src/main/java/net/sf/taverna/t2/workbench/views/graph/config/GraphViewConfiguration.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 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.views.graph.config;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import uk.org.taverna.configuration.AbstractConfigurable;
-import uk.org.taverna.configuration.ConfigurationManager;
-
-import org.apache.taverna.workbench.models.graph.Graph.Alignment;
-import org.apache.taverna.workbench.models.graph.GraphController.PortStyle;
-
-/**
- * Configuration for the GraphViewComponent.
- * 
- * @author David Withers
- */
-public class GraphViewConfiguration extends AbstractConfigurable {
-       public static final String PORT_STYLE = "portStyle";
-       public static final String ALIGNMENT = "alignment";
-       public static final String ANIMATION_ENABLED = "animationEnabled";
-       public static final String ANIMATION_SPEED = "animationSpeed";
-
-       private Map<String, String> defaultPropertyMap;
-
-       public GraphViewConfiguration(ConfigurationManager 
configurationManager) {
-               super(configurationManager);
-       }
-
-       @Override
-       public String getCategory() {
-               return "general";
-       }
-
-       @Override
-       public Map<String, String> getDefaultPropertyMap() {
-               if (defaultPropertyMap == null) {
-                       defaultPropertyMap = new HashMap<>();
-                       defaultPropertyMap.put(PORT_STYLE, 
PortStyle.NONE.toString());
-                       defaultPropertyMap.put(ALIGNMENT, 
Alignment.VERTICAL.toString());
-                       defaultPropertyMap.put(ANIMATION_ENABLED, "false");
-                       defaultPropertyMap.put(ANIMATION_SPEED, "800");
-               }
-               return defaultPropertyMap;
-       }
-
-       @Override
-       public String getDisplayName() {
-               return "Diagram";
-       }
-
-       @Override
-       public String getFilePrefix() {
-               return "Diagram";
-       }
-
-       @Override
-       public String getUUID() {
-               return "3686BA31-449F-4147-A8AC-0C3F63AFC68F";
-       }
-}

Reply via email to