taverna-*

.. and observer goes, as it's already in taverna-engine


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/commit/f676ef35
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/tree/f676ef35
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/diff/f676ef35

Branch: refs/heads/master
Commit: f676ef352e740a17bcc03aee32f72c98276c3c47
Parents: f0af04e
Author: Stian Soiland-Reyes <[email protected]>
Authored: Fri Mar 6 22:28:07 2015 +0000
Committer: Stian Soiland-Reyes <[email protected]>
Committed: Fri Mar 6 22:28:07 2015 +0000

----------------------------------------------------------------------
 README.md                                       |   3 -
 beans/pom.xml                                   |  21 -
 .../t2/lang/beans/PropertyAnnotated.java        |  74 ---
 .../t2/lang/beans/PropertyAnnotation.java       | 109 ---
 .../lang/beans/PropertyAnnotationExtractor.java | 202 ------
 io/pom.xml                                      |  21 -
 .../net/sf/taverna/t2/lang/io/StreamCopier.java |  69 --
 .../sf/taverna/t2/lang/io/StreamDevourer.java   | 106 ---
 observer/pom.xml                                |  28 -
 .../taverna/t2/lang/observer/MultiCaster.java   |  93 ---
 .../sf/taverna/t2/lang/observer/Observable.java |  56 --
 .../sf/taverna/t2/lang/observer/Observer.java   |  44 --
 .../t2/lang/observer/SwingAwareObserver.java    |  51 --
 .../taverna/t2/lang/observer/package-info.java  |  73 ---
 .../taverna/t2/lang/observer/ObserverTest.java  | 133 ----
 partition/pom.xml                               |  23 -
 .../sf/taverna/t2/partition/HashSetModel.java   | 116 ----
 .../net/sf/taverna/t2/partition/Partition.java  | 441 -------------
 .../t2/partition/PartitionAlgorithm.java        |  47 --
 .../t2/partition/PartitionAlgorithmSetSPI.java  |  36 -
 .../t2/partition/PropertyExtractorRegistry.java |  37 --
 .../t2/partition/PropertyExtractorSPI.java      |  44 --
 .../java/net/sf/taverna/t2/partition/Query.java |  56 --
 .../sf/taverna/t2/partition/RootPartition.java  | 394 -----------
 .../net/sf/taverna/t2/partition/SetModel.java   |  53 --
 .../t2/partition/SetModelChangeListener.java    |  42 --
 .../algorithms/CustomPartitionAlgorithm.java    |  98 ---
 .../LiteralValuePartitionAlgorithm.java         | 106 ---
 .../ui/PartitionAlgorithmListEditor.java        | 224 -------
 .../t2/partition/ui/TableTreeNodeColumn.java    |  69 --
 .../t2/partition/ui/TableTreeNodeRenderer.java  | 554 ----------------
 .../net/sf/taverna/t2/partition/ui/UITest.java  |  58 --
 .../t2/partition/PartitionTestApplication.java  | 280 --------
 .../LiteralValuePartitionAlgorithmTest.java     |  68 --
 taverna-beaninfo/pom.xml                        |  21 +
 .../t2/lang/beans/PropertyAnnotated.java        |  74 +++
 .../t2/lang/beans/PropertyAnnotation.java       | 109 +++
 .../lang/beans/PropertyAnnotationExtractor.java | 202 ++++++
 taverna-io/pom.xml                              |  21 +
 .../net/sf/taverna/t2/lang/io/StreamCopier.java |  69 ++
 .../sf/taverna/t2/lang/io/StreamDevourer.java   | 106 +++
 taverna-partition/pom.xml                       |  23 +
 .../sf/taverna/t2/partition/HashSetModel.java   | 116 ++++
 .../net/sf/taverna/t2/partition/Partition.java  | 441 +++++++++++++
 .../t2/partition/PartitionAlgorithm.java        |  47 ++
 .../t2/partition/PartitionAlgorithmSetSPI.java  |  36 +
 .../t2/partition/PropertyExtractorRegistry.java |  37 ++
 .../t2/partition/PropertyExtractorSPI.java      |  44 ++
 .../java/net/sf/taverna/t2/partition/Query.java |  56 ++
 .../sf/taverna/t2/partition/RootPartition.java  | 394 +++++++++++
 .../net/sf/taverna/t2/partition/SetModel.java   |  53 ++
 .../t2/partition/SetModelChangeListener.java    |  42 ++
 .../algorithms/CustomPartitionAlgorithm.java    |  98 +++
 .../LiteralValuePartitionAlgorithm.java         | 106 +++
 .../ui/PartitionAlgorithmListEditor.java        | 224 +++++++
 .../t2/partition/ui/TableTreeNodeColumn.java    |  69 ++
 .../t2/partition/ui/TableTreeNodeRenderer.java  | 554 ++++++++++++++++
 .../net/sf/taverna/t2/partition/ui/UITest.java  |  58 ++
 .../t2/partition/PartitionTestApplication.java  | 280 ++++++++
 .../LiteralValuePartitionAlgorithmTest.java     |  68 ++
 taverna-ui/pom.xml                              |  36 +
 .../net/sf/taverna/t2/lang/ui/CArrowImage.java  | 198 ++++++
 .../t2/lang/ui/CTransferableTreePath.java       |  66 ++
 .../taverna/t2/lang/ui/DeselectingButton.java   |  45 ++
 .../sf/taverna/t2/lang/ui/DialogTextArea.java   |  83 +++
 .../sf/taverna/t2/lang/ui/EdgeLineBorder.java   |  91 +++
 .../sf/taverna/t2/lang/ui/EditorKeySetUtil.java |  67 ++
 .../taverna/t2/lang/ui/ExtensionFileFilter.java | 105 +++
 .../net/sf/taverna/t2/lang/ui/FileTools.java    | 117 ++++
 .../net/sf/taverna/t2/lang/ui/HtmlUtils.java    |  87 +++
 .../sf/taverna/t2/lang/ui/JSplitPaneExt.java    |  56 ++
 .../sf/taverna/t2/lang/ui/KeywordDocument.java  | 568 ++++++++++++++++
 .../t2/lang/ui/LineEnabledTextPanel.java        | 106 +++
 .../net/sf/taverna/t2/lang/ui/LinePainter.java  | 163 +++++
 .../t2/lang/ui/LineWrappingTextArea.java        | 217 ++++++
 .../sf/taverna/t2/lang/ui/NoWrapEditorKit.java  |  77 +++
 .../sf/taverna/t2/lang/ui/ReadOnlyTextArea.java |  50 ++
 .../t2/lang/ui/SanitisingDocumentFilter.java    |  60 ++
 .../net/sf/taverna/t2/lang/ui/ShadedLabel.java  | 126 ++++
 .../net/sf/taverna/t2/lang/ui/TableMap.java     |  69 ++
 .../net/sf/taverna/t2/lang/ui/TableSorter.java  | 341 ++++++++++
 .../t2/lang/ui/ValidatingUserInputDialog.java   | 274 ++++++++
 .../net/sf/taverna/t2/lang/ui/icons/Icons.java  |  48 ++
 .../lang/ui/tabselector/ScrollController.java   |  85 +++
 .../sf/taverna/t2/lang/ui/tabselector/Tab.java  | 200 ++++++
 .../t2/lang/ui/tabselector/TabLayout.java       | 135 ++++
 .../ui/tabselector/TabSelectorComponent.java    |  99 +++
 .../lang/ui/treetable/AbstractCellEditor.java   |  81 +++
 .../ui/treetable/AbstractTreeTableModel.java    | 198 ++++++
 .../t2/lang/ui/treetable/JTreeTable.LICENSE     |  59 ++
 .../t2/lang/ui/treetable/JTreeTable.java        | 657 +++++++++++++++++++
 .../t2/lang/ui/treetable/LinesBorder.java       | 178 +++++
 .../t2/lang/ui/treetable/TreeTableModel.java    |  69 ++
 .../ui/treetable/TreeTableModelAdapter.java     | 132 ++++
 .../net/sf/taverna/t2/lang/ui/icons/ok.png      | Bin 0 -> 3318 bytes
 .../net/sf/taverna/t2/lang/ui/icons/severe.png  | Bin 0 -> 867 bytes
 .../net/sf/taverna/t2/lang/ui/icons/warning.png | Bin 0 -> 3459 bytes
 ui/pom.xml                                      |  36 -
 .../net/sf/taverna/t2/lang/ui/CArrowImage.java  | 198 ------
 .../t2/lang/ui/CTransferableTreePath.java       |  66 --
 .../taverna/t2/lang/ui/DeselectingButton.java   |  45 --
 .../sf/taverna/t2/lang/ui/DialogTextArea.java   |  83 ---
 .../sf/taverna/t2/lang/ui/EdgeLineBorder.java   |  91 ---
 .../sf/taverna/t2/lang/ui/EditorKeySetUtil.java |  67 --
 .../taverna/t2/lang/ui/ExtensionFileFilter.java | 105 ---
 .../net/sf/taverna/t2/lang/ui/FileTools.java    | 117 ----
 .../net/sf/taverna/t2/lang/ui/HtmlUtils.java    |  87 ---
 .../sf/taverna/t2/lang/ui/JSplitPaneExt.java    |  56 --
 .../sf/taverna/t2/lang/ui/KeywordDocument.java  | 568 ----------------
 .../t2/lang/ui/LineEnabledTextPanel.java        | 106 ---
 .../net/sf/taverna/t2/lang/ui/LinePainter.java  | 163 -----
 .../t2/lang/ui/LineWrappingTextArea.java        | 217 ------
 .../sf/taverna/t2/lang/ui/NoWrapEditorKit.java  |  77 ---
 .../sf/taverna/t2/lang/ui/ReadOnlyTextArea.java |  50 --
 .../t2/lang/ui/SanitisingDocumentFilter.java    |  60 --
 .../net/sf/taverna/t2/lang/ui/ShadedLabel.java  | 126 ----
 .../net/sf/taverna/t2/lang/ui/TableMap.java     |  69 --
 .../net/sf/taverna/t2/lang/ui/TableSorter.java  | 341 ----------
 .../t2/lang/ui/ValidatingUserInputDialog.java   | 274 --------
 .../net/sf/taverna/t2/lang/ui/icons/Icons.java  |  48 --
 .../lang/ui/tabselector/ScrollController.java   |  85 ---
 .../sf/taverna/t2/lang/ui/tabselector/Tab.java  | 200 ------
 .../t2/lang/ui/tabselector/TabLayout.java       | 135 ----
 .../ui/tabselector/TabSelectorComponent.java    |  99 ---
 .../lang/ui/treetable/AbstractCellEditor.java   |  81 ---
 .../ui/treetable/AbstractTreeTableModel.java    | 198 ------
 .../t2/lang/ui/treetable/JTreeTable.LICENSE     |  59 --
 .../t2/lang/ui/treetable/JTreeTable.java        | 657 -------------------
 .../t2/lang/ui/treetable/LinesBorder.java       | 178 -----
 .../t2/lang/ui/treetable/TreeTableModel.java    |  69 --
 .../ui/treetable/TreeTableModelAdapter.java     | 132 ----
 .../net/sf/taverna/t2/lang/ui/icons/ok.png      | Bin 3318 -> 0 bytes
 .../net/sf/taverna/t2/lang/ui/icons/severe.png  | Bin 867 -> 0 bytes
 .../net/sf/taverna/t2/lang/ui/icons/warning.png | Bin 3459 -> 0 bytes
 134 files changed, 8291 insertions(+), 8772 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
deleted file mode 100644
index 58d1f52..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Taverna Workflow system assorted support utilities
-
-This code was previously hosted at 
http://taverna.googlecode.com/svn/taverna/utils/net.sf.taverna.t2.lang/
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/beans/pom.xml
----------------------------------------------------------------------
diff --git a/beans/pom.xml b/beans/pom.xml
deleted file mode 100644
index ea51b1a..0000000
--- a/beans/pom.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-       <modelVersion>4.0.0</modelVersion>
-       <parent>
-               <groupId>net.sf.taverna.t2</groupId>
-               <artifactId>lang</artifactId>
-               <version>2.0.1-SNAPSHOT</version>
-       </parent>
-       <groupId>net.sf.taverna.t2.lang</groupId>
-       <artifactId>beans</artifactId>
-       <packaging>bundle</packaging>
-       <name>BeanInfo extensions</name>
-       <dependencies>
-               <dependency>
-                       <groupId>org.apache.log4j</groupId>
-                       
<artifactId>com.springsource.org.apache.log4j</artifactId>
-                       <version>${log4j.version}</version>
-               </dependency>
-       </dependencies>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotated.java
----------------------------------------------------------------------
diff --git 
a/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotated.java 
b/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotated.java
deleted file mode 100644
index aa59e68..0000000
--- a/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotated.java
+++ /dev/null
@@ -1,74 +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.lang.beans;
-
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.beans.SimpleBeanInfo;
-
-/**
- * A {@link BeanInfo} that includes {@link PropertyDescriptor}s from methods
- * annotated using {@link PropertyAnnotation}.
- * <p>
- * The bean info from the PropertyAnnotation will then be available through
- * Java's {@link Introspector}, and allows you to specify details such as
- * {@link PropertyAnnotation#displayName()} and
- * {@link PropertyAnnotation#hidden()} for the properties of a Java Bean.
- * <p>
- * This class can either be used as a superclass for the classes containing
- * property annotated methods, or put in a neighbouring BeanInfo class.
- * <p>
- * For instance, if your class is called DescribedClass and has methods
- * annotated using {@link PropertyAnnotation}, either let DescribedClass
- * subclass {@link PropertyAnnotated}, or make a neighbouring {@link BeanInfo}
- * class called DescribedClassBeanInfo, which should subclass
- * {@link PropertyAnnotated}.
- * 
- * 
- * @author Stian Soiland-Reyes
- * 
- */
-public class PropertyAnnotated extends SimpleBeanInfo {
-
-       private static PropertyAnnotationExtractor extractor = new 
PropertyAnnotationExtractor();
-
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       public PropertyDescriptor[] getPropertyDescriptors() {
-               return extractor.getPropertyDescriptors(getDescribedClass());
-       }
-
-       /**
-        * The class that is being described. By default this returns
-        * {@link #getClass()} so that {@link PropertyAnnotated} can be used as 
a
-        * superclass, but if instead the DescribedClassBeanInfo pattern is 
used,
-        * subclass PropertyAnnotated in each BeanInfo class, and override this
-        * method to return the described class. (DescribedClass in this 
example)
-        * 
-        */
-       public Class<?> getDescribedClass() {
-               return getClass();
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotation.java
----------------------------------------------------------------------
diff --git 
a/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotation.java 
b/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotation.java
deleted file mode 100644
index 5923a21..0000000
--- a/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotation.java
+++ /dev/null
@@ -1,109 +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.lang.beans;
-
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * An annotation of a Java bean style property method, ie. a getXX() or setXX()
- * method.
- * <p>
- * The annotations allow the method to better describe properties such as
- * {@link #displayName()}, {@link #shortDescription()} and {@link #hidden()}.
- * <p>
- * The annotations can be retrieved as {@link PropertyDescriptor} using
- * {@link PropertyAnnotationExtractor}, or if {@link PropertyAnnotated} has 
been
- * used (recommended), through Java's BeanInfo support, such as using
- * {@link Introspector}.
- * <p>
- * Annotations can be applied to interfaces or classes, abstract and normal 
- * methods, as long as they confirm with the Java bean conventions. 
Annotations 
- * will be inherited, so overriding methods don't need to reapply the 
annotations,
- * although they can if they want to override.
- * <p>
- * It is recommended that classes using these annotations either subclass
- * {@link PropertyAnnotated} or have a neighbouring BeanInfo class that
- * subclasses PropertyAnnotated.
- * <p>
- * Example usage:
- * 
- * <pre>
- *     public interface MyBean {
- *             // Annotation for the property called "name". displayName: Title
- *             // of the property shown in UI instead of "name".
- *             &#064;PropertyAnnotation(displayName = "Full name")
- *             public String getName();
- *
- *             // Second annotation for the write-method of the same property 
called
- *             // "name". Both displayName and shortDescription will be set on 
the
- *             // property descriptor.
- *             &#064;PropertyAnnotation(shortDescription = "The name of the 
person")
- *             public void setName(String name);
- *
- *             // Boolean read method for the property "married", two 
annotations.
- *             // expert: Only shown in UI under "advanced" views.
- *             &#064;PropertyAnnotation(expert = true, shortDescription = 
"Marital status")
- *             public boolean isMarried();
- *
- *             // Write-method for the "married" property, no new annotations, 
but will
- *             // get the ones from {&#064;link #isMarried()}.
- *             public void setMarried(boolean married);
- *
- *             // Write-only method, hidden (not shown in UIs).
- *             &#064;PropertyAnnotation(hidden = true)
- *             public void setID(String id);
- *
- *             // Read-only method, no annotations, defaults will be used.
- *             public void getTelephoneNumber(String number);
- *     }
- * </pre>
- * 
- * @see PropertyAnnotated
- * @author Stian Soiland-Reyes
- * 
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target( { ElementType.METHOD })
-public @interface PropertyAnnotation {
-
-       /**
-        * A unique string that means the default should be used
-        */
-       public static String DEFAULT = 
"Default_8930B86A-50C0-4859-9B6F-DD034B3C5C1E";
-
-       String displayName() default DEFAULT;
-
-       String name() default DEFAULT;
-
-       String shortDescription() default DEFAULT;
-
-       boolean expert() default false;
-
-       boolean hidden() default false;
-
-       boolean preferred() default false;
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotationExtractor.java
----------------------------------------------------------------------
diff --git 
a/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotationExtractor.java
 
b/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotationExtractor.java
deleted file mode 100644
index 4524822..0000000
--- 
a/beans/src/main/java/net/sf/taverna/t2/lang/beans/PropertyAnnotationExtractor.java
+++ /dev/null
@@ -1,202 +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.lang.beans;
-
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.WeakHashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * A utility class for extracting {@link PropertyDescriptor}s from a class 
which
- * methods have been described using {@link PropertyAnnotation}.
- * 
- * @author Stian Soiland-Reyes
- * 
- */
-public class PropertyAnnotationExtractor {
-
-       protected static Pattern methodPattern = Pattern
-                       .compile("(get|is|set)(.+)");
-
-       protected WeakHashMap<Class<?>, List<Method>> allMethodsCache = new 
WeakHashMap<Class<?>, List<Method>>();
-
-       protected WeakHashMap<Class<?>, PropertyDescriptor[]> 
propertyDescriptorsCache = new WeakHashMap<Class<?>, PropertyDescriptor[]>();
-
-       @SuppressWarnings("unchecked")
-       protected List<Class> ignoreClasses = Arrays.<Class>asList(Class.class, 
Object.class, PropertyAnnotated.class);
-       
-       /**
-        * Find PropertyDescriptors for the given bean class based on 
descriptions
-        * using {@link PropertyAnnotation}s.
-        * <p>
-        * Annotations will be inherited from interfaces and superclasses.
-        * 
-        * @param beanClass
-        * @return Array of {@link PropertyDescriptor}
-        */
-       public PropertyDescriptor[] getPropertyDescriptors(Class<?> beanClass) {
-               PropertyDescriptor[] cached = 
propertyDescriptorsCache.get(beanClass);
-               if (cached != null) {
-                       return cached;
-               }
-
-               Map<String, PropertyDescriptor> descriptors = new 
HashMap<String, PropertyDescriptor>();
-
-               for (Method method : allMethods(beanClass)) {
-                       PropertyAnnotation annotation = method
-                                       
.getAnnotation(PropertyAnnotation.class);
-                       Matcher methodMatcher = 
methodPattern.matcher(method.getName());
-                       if (!methodMatcher.matches() && annotation == null) {
-                               continue;
-                       }
-                       
-                       String name = PropertyAnnotation.DEFAULT;
-                       if (annotation != null) {
-                               annotation.name();
-                       }
-                       if (name.equals(PropertyAnnotation.DEFAULT)) {
-                               name = methodMatcher.group(2);
-                               if (name.length() < 1) {
-                                       continue;
-                               }
-                               // decapitalize first letter
-                               name = name.substring(0, 1).toLowerCase() + 
name.substring(1);
-                       }
-                       Method writeMethod = null;
-                       Method readMethod = null;
-                       if (methodMatcher.group(1).equals("set")) {
-                               writeMethod = method;
-                               if (writeMethod.getParameterTypes().length != 
1) {
-                                       continue;
-                               }
-                       } else {
-                               readMethod = method;
-                               if (readMethod.getParameterTypes().length != 0) 
{
-                                       continue;
-                               }
-                       }
-
-                       PropertyDescriptor descriptor = descriptors.get(name);
-                       try {
-                               if (descriptor == null) {
-                                       descriptor = new 
PropertyDescriptor(name, readMethod,
-                                                       writeMethod);
-                                       descriptors.put(name, descriptor);
-                               }
-                               // Set the one we just found
-                               if (readMethod != null) {
-                                       descriptor.setReadMethod(readMethod);
-                               }
-                               if (writeMethod != null) {
-                                       descriptor.setWriteMethod(writeMethod);
-                               }
-                       } catch (IntrospectionException ex) {
-                               throw new RuntimeException("Can't inspect 
property " + name
-                                               + " using method " + method, 
ex);
-                       }
-                       if (annotation != null) {
-                               descriptor.setExpert(annotation.expert());
-                               descriptor.setHidden(annotation.hidden());
-                               descriptor.setPreferred(annotation.preferred());
-                               if (!annotation.displayName()
-                                               
.equals(PropertyAnnotation.DEFAULT)) {
-                                       
descriptor.setDisplayName(annotation.displayName());
-                               }
-                               if (!annotation.shortDescription().equals(
-                                               PropertyAnnotation.DEFAULT)) {
-                                       
descriptor.setShortDescription(annotation
-                                                       .shortDescription());
-                               }
-                       }
-               }
-               cached = descriptors.values().toArray(
-                               new PropertyDescriptor[descriptors.size()]);
-               propertyDescriptorsCache.put(beanClass, cached);
-               return cached;
-       }
-
-       /**
-        * Find all {@link Method}s defined in the class, all its superclasses 
and
-        * interfaces. This might include methods that override each other.
-        * <p>
-        * The list contains first the methods from each of the class's 
interfaces
-        * (and the methods they inherit from their interfaces), then recurses 
for
-        * the subclass of this class (including any additional interfaces used 
in
-        * the superclasses), before finally adding methods declared in the 
given
-        * class.
-        * <p>
-        * This can be useful to find annotations given to methods that have 
been
-        * overridden in subclasses.
-        * 
-        * @param theClass
-        * @return
-        */
-       @SuppressWarnings("unchecked")
-       protected List<Method> allMethods(Class<?> theClass) {
-               List<Method> methods = allMethodsCache.get(theClass);
-               if (methods == null) {
-                       methods = new ArrayList<Method>();
-                       allMethods(theClass, new HashSet<Class>(ignoreClasses), 
methods);
-                       allMethodsCache.put(theClass, methods);
-               }
-               return methods;
-       }
-
-       @SuppressWarnings("unchecked")
-       protected void allMethods(Class<?> theClass, Set<Class> visitedClasses,
-                       List<Method> foundMethods) {
-               if (theClass == null || theClass == Object.class
-                               || theClass == Class.class || 
!visitedClasses.add(theClass)) {
-                       // Top class or already visted
-                       return;
-               }
-               // Let's first dig down into our interfaces
-               for (Class anInterface : theClass.getInterfaces()) {
-                       allMethods(anInterface, visitedClasses, foundMethods);
-               }
-               // And our superclasses
-               allMethods(theClass.getSuperclass(), visitedClasses, 
foundMethods);
-               // Before we find any methods only declared in this class
-               // (parent methods are already earlier in the list -
-               // note that the new methods might override earlier methods)
-               for (Method method : theClass.getDeclaredMethods()) {
-                       int methodModifiers = method.getModifiers();
-                       if (!Modifier.isPublic(methodModifiers)
-                                       || Modifier.isStatic(methodModifiers)) {
-                               continue;
-                       }
-                       assert !foundMethods.contains(method) : "Method 
discovered twice: "
-                                       + method;
-                       foundMethods.add(method);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/io/pom.xml
----------------------------------------------------------------------
diff --git a/io/pom.xml b/io/pom.xml
deleted file mode 100644
index 1512fd7..0000000
--- a/io/pom.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-       <modelVersion>4.0.0</modelVersion>
-       <parent>
-               <groupId>net.sf.taverna.t2</groupId>
-               <artifactId>lang</artifactId>
-               <version>2.0.1-SNAPSHOT</version>
-       </parent>
-       <groupId>net.sf.taverna.t2.lang</groupId>
-       <artifactId>io</artifactId>
-       <packaging>bundle</packaging>
-       <name>IO utility classes</name>
-       <dependencies>
-               <dependency>
-                       <groupId>org.apache.log4j</groupId>
-                       
<artifactId>com.springsource.org.apache.log4j</artifactId>
-                       <version>${log4j.version}</version>
-               </dependency>
-       </dependencies>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/io/src/main/java/net/sf/taverna/t2/lang/io/StreamCopier.java
----------------------------------------------------------------------
diff --git a/io/src/main/java/net/sf/taverna/t2/lang/io/StreamCopier.java 
b/io/src/main/java/net/sf/taverna/t2/lang/io/StreamCopier.java
deleted file mode 100644
index b0d600d..0000000
--- a/io/src/main/java/net/sf/taverna/t2/lang/io/StreamCopier.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.lang.io;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.log4j.Logger;
-
-/**
- * Copies an InputStream to an OutputStream.
- * 
- * @author Tom Oinn
- */
-public class StreamCopier extends Thread {
-
-       private static Logger logger = Logger
-       .getLogger(StreamCopier.class);
-
-       InputStream is;
-
-       OutputStream os;
-
-       /**
-        * Create a new StreamCopier which will, when started, copy the 
specified
-        * InputStream to the specified OutputStream
-        */
-       public StreamCopier(InputStream is, OutputStream os) {
-               super("StreamCopier");
-               this.is = is;
-               this.os = os;
-       }
-
-       /**
-        * Start copying the stream, exits when the InputStream runs out of data
-        */
-       public void run() {
-               try {
-                       byte[] buffer = new byte[1024];
-                       int bytesRead;
-                       while ((bytesRead = is.read(buffer)) != -1) {
-                               os.write(buffer, 0, bytesRead);
-                       }
-                       os.flush();
-                       os.close();
-               } catch (Exception ex) {
-                       logger.error("Could not copy stream", ex);
-               }
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/io/src/main/java/net/sf/taverna/t2/lang/io/StreamDevourer.java
----------------------------------------------------------------------
diff --git a/io/src/main/java/net/sf/taverna/t2/lang/io/StreamDevourer.java 
b/io/src/main/java/net/sf/taverna/t2/lang/io/StreamDevourer.java
deleted file mode 100644
index 8495e27..0000000
--- a/io/src/main/java/net/sf/taverna/t2/lang/io/StreamDevourer.java
+++ /dev/null
@@ -1,106 +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.lang.io;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-import org.apache.log4j.Logger;
-
-/**
- * Devours an input stream and allows the contents to be read as a String once
- * the stream has completed.
- * 
- * @author Tom Oinn
- * @author Alan R Williams
- */
-public class StreamDevourer extends Thread {
-       
-       private static Logger logger = Logger.getLogger(StreamDevourer.class);
-
-       private static byte[] newLine = 
System.getProperty("line.separator").getBytes();
-
-       BufferedReader br;
-
-       ByteArrayOutputStream output;
-
-       /**
-        * Returns the current value of the internal ByteArrayOutputStream
-        */
-       @Override
-       public String toString() {
-               return output.toString();
-       }
-
-       /**
-        * Waits for the stream to close then returns the String representation 
of
-        * its contents (this is equivalent to doing a join then calling 
toString)
-        */
-       public String blockOnOutput() {
-               try {
-                       this.join();
-                       return output.toString();
-               } catch (InterruptedException ie) {
-                       logger.error("Interrupted", ie);
-                       interrupt();
-                       return "";
-               }
-       }
-
-       /**
-        * Create the StreamDevourer and point it at an InputStream to consume
-        */
-       public StreamDevourer(InputStream is) {
-               super("StreamDevourer");
-               this.br = new BufferedReader(new InputStreamReader(is));
-               this.output = new ByteArrayOutputStream();
-       }
-
-       /**
-        * When started this Thread will copy all data from the InputStream 
into a
-        * ByteArrayOutputStream via a BufferedReader. Because of the use of the
-        * BufferedReader this is only really appropriate for streams of textual
-        * data
-        */
-       @Override
-       public void run() {
-               try {
-                       String line = null;
-                       while ((line = br.readLine()) != null) {
-                               // && line.endsWith("</svg>") == false) {
-                               if (line.endsWith("\\") && 
!line.endsWith("\\\\")) {
-                                       line = line.substring(0, line.length() 
- 1);
-                                       output.write(line.getBytes());
-                               } else {
-                                       output.write(line.getBytes());
-                                       output.write(newLine);
-                               }
-                       }
-                       br.close();
-               } catch (IOException ioe) {
-                       logger.error(ioe);
-               }
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/observer/pom.xml
----------------------------------------------------------------------
diff --git a/observer/pom.xml b/observer/pom.xml
deleted file mode 100644
index 76e8140..0000000
--- a/observer/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-       <modelVersion>4.0.0</modelVersion>
-       <parent>
-               <groupId>net.sf.taverna.t2</groupId>
-               <artifactId>lang</artifactId>
-               <version>2.0.1-SNAPSHOT</version>
-       </parent>
-       <groupId>net.sf.taverna.t2.lang</groupId>
-       <artifactId>observer</artifactId>
-       <packaging>bundle</packaging>
-       <name>Observer pattern</name>
-       <description>Implementation of the Observer pattern.</description>
-       <dependencies>
-               <dependency>
-                       <groupId>org.apache.log4j</groupId>
-                       
<artifactId>com.springsource.org.apache.log4j</artifactId>
-                       <version>${log4j.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>junit</groupId>
-                       <artifactId>junit</artifactId>
-                       <version>${junit.version}</version>
-                       <scope>test</scope>
-               </dependency>
-       </dependencies>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/observer/src/main/java/net/sf/taverna/t2/lang/observer/MultiCaster.java
----------------------------------------------------------------------
diff --git 
a/observer/src/main/java/net/sf/taverna/t2/lang/observer/MultiCaster.java 
b/observer/src/main/java/net/sf/taverna/t2/lang/observer/MultiCaster.java
deleted file mode 100644
index d563e39..0000000
--- a/observer/src/main/java/net/sf/taverna/t2/lang/observer/MultiCaster.java
+++ /dev/null
@@ -1,93 +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.lang.observer;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-/**
- * Send notifications to registered observers about changes to models
- * 
- * @author Ian Dunlop
- * @author Stian Soiland
- * 
- * @param <Message>
- */
-public class MultiCaster<Message> implements Observable<Message> {
-
-       private static Logger logger = Logger.getLogger(MultiCaster.class);
-
-       private Observable<Message> observable;
-
-       protected List<Observer<Message>> observers = new 
ArrayList<Observer<Message>>();
-
-       /**
-        * Set the {@link #observable} ie. the class that changes are happening 
to
-        * and it's Message for this {@link MultiCaster}
-        * 
-        * @param observable
-        */
-       public MultiCaster(Observable<Message> observable) {
-               this.observable = observable;
-       }
-
-       /**
-        * Tell all the registered observers about the change to the model
-        * 
-        * @param message
-        */
-       @SuppressWarnings("unchecked")
-       public void notify(Message message) {
-               // Use a copy that can be iterated even if register/remove is 
called
-               for (Observer<Message> observer : getObservers()) {
-                       try {
-                               observer.notify(observable, message);
-                       } catch (Exception ex) {
-                               logger.warn("Could not notify " + observer, ex);
-                       }
-               }
-       }
-
-       /**
-        * Register an observer ie. someone who wants informed about changes
-        */
-       public synchronized void addObserver(Observer<Message> observer) {
-               observers.add(observer);
-       }
-
-       /**
-        * Remove the observer and no longer send out any notifications about it
-        */
-       public synchronized void removeObserver(Observer<Message> observer) {
-               observers.remove(observer);
-       }
-
-       /**
-        * A list of all the classes currently registered with this
-        * {@link MultiCaster}
-        */
-       public synchronized List<Observer<Message>> getObservers() {
-               return new ArrayList<Observer<Message>>(observers);
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/observer/src/main/java/net/sf/taverna/t2/lang/observer/Observable.java
----------------------------------------------------------------------
diff --git 
a/observer/src/main/java/net/sf/taverna/t2/lang/observer/Observable.java 
b/observer/src/main/java/net/sf/taverna/t2/lang/observer/Observable.java
deleted file mode 100644
index 1fa7425..0000000
--- a/observer/src/main/java/net/sf/taverna/t2/lang/observer/Observable.java
+++ /dev/null
@@ -1,56 +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.lang.observer;
-
-import java.util.List;
-
-/**
- * Implements this if you want to notify other classes about changes
- * 
- * @author Ian Dunlop
- * @author Stian Soiland
- * 
- * @param <Message>
- */
-public interface Observable<Message> {
-       /**
-        * Register an {@link Observer}
-        * 
-        * @param observer
-        *            the class who wants notified of changes
-        */
-       public void addObserver(Observer<Message> observer);
-
-       /**
-        * Remove a class who is currently observing
-        * 
-        * @param observer
-        *            the class who no longer wants notified
-        */
-       public void removeObserver(Observer<Message> observer);
-
-       /**
-        * A list of all the currently registered {@link Observer}s
-        * 
-        * @return
-        */
-       public List<Observer<Message>> getObservers();
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/observer/src/main/java/net/sf/taverna/t2/lang/observer/Observer.java
----------------------------------------------------------------------
diff --git 
a/observer/src/main/java/net/sf/taverna/t2/lang/observer/Observer.java 
b/observer/src/main/java/net/sf/taverna/t2/lang/observer/Observer.java
deleted file mode 100644
index 81b7c85..0000000
--- a/observer/src/main/java/net/sf/taverna/t2/lang/observer/Observer.java
+++ /dev/null
@@ -1,44 +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.lang.observer;
-
-/**
- * Implement if you want to register with an {@link Observable}
- * 
- * @author Ian Dunlop
- * @author Stian Soiland
- * 
- * @param <Message>
- */
-public interface Observer<Message> {
-       /**
-        * Called by the {@link Observable} to notify the implementing class of
-        * changes
-        * 
-        * @param sender
-        *            the class where the changes have happened
-        * @param message
-        *            what has changed
-        * @throws Exception
-        */
-       public void notify(Observable<Message> sender, Message message)
-                       throws Exception;
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/observer/src/main/java/net/sf/taverna/t2/lang/observer/SwingAwareObserver.java
----------------------------------------------------------------------
diff --git 
a/observer/src/main/java/net/sf/taverna/t2/lang/observer/SwingAwareObserver.java
 
b/observer/src/main/java/net/sf/taverna/t2/lang/observer/SwingAwareObserver.java
deleted file mode 100644
index 39435d7..0000000
--- 
a/observer/src/main/java/net/sf/taverna/t2/lang/observer/SwingAwareObserver.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2012 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.lang.observer;
-
-import javax.swing.SwingUtilities;
-
-/**
- * Implementation of an {@link Observer} that adds calls to notify to the AWT 
event dispatching
- * thread.
- *
- * @author David Withers
- */
-public abstract class SwingAwareObserver<Message> implements Observer<Message> 
{
-
-       @Override
-       public void notify(final Observable<Message> sender, final Message 
message) throws Exception {
-           Runnable runnable = new Runnable() {
-                       @Override
-                       public void run() {
-                               notifySwing(sender, message);
-                       }
-           };
-               if (SwingUtilities.isEventDispatchThread()) {
-                       runnable.run();
-               } else {
-                       // T2-971
-                       SwingUtilities.invokeLater(runnable);
-               }
-       }
-
-       public abstract void notifySwing(Observable<Message> sender, Message 
message);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/observer/src/main/java/net/sf/taverna/t2/lang/observer/package-info.java
----------------------------------------------------------------------
diff --git 
a/observer/src/main/java/net/sf/taverna/t2/lang/observer/package-info.java 
b/observer/src/main/java/net/sf/taverna/t2/lang/observer/package-info.java
deleted file mode 100644
index e9d3ff2..0000000
--- a/observer/src/main/java/net/sf/taverna/t2/lang/observer/package-info.java
+++ /dev/null
@@ -1,73 +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
- 
******************************************************************************/
-/**
- * Implementation of the observer pattern.  {@link Observer}s registers with 
an 
- * {@link Observable} using {@link Observable#addObserver(Observer)}, and will 
receive 
- * notifications as a call to {@link Observer#notify(Observable, Object)}. 
- * <p>
- * Typical implementations of {@link Observable} will be delegating to a 
- * {@link MultiCaster} to do the boring observer registration and message 
- * dispatching.
- * </p>
- * <p>
- * Example of Observable:
- * <pre>
- * public class MyObservable implements Observable<MyEvent> {
- *      public static class MyEvent {
- *             // ..
- *      }
- *      private MultiCaster&lt:MyEvent&gt; multiCaster = new 
MultiCaster&lt:MyEvent&gt;(this);
- * 
- *      public void doStuff() {
- *             multiCaster.notify(new MyEvent());
- *      }
- * 
- *      public void addObserver(Observer<MyEvent> observer) {
- *             multiCaster.addObserver(observer);
- *      }
- * 
- *      public List<Observer<MyEvent>> getObservers() {
- *             return multiCaster.getObservers();
- *      }
- * 
- *      public void removeObserver(Observer<MyEvent> observer) {
- *             multiCaster.removeObserver(observer);
- *      }
- * }
- * </pre>
- * And an observer that is notified when MyObservable.doStuff() is called:
- * <pre>
- * public class MyObserver implements Observer<MyEvent> {
- *      public void notify(Observable<MyEvent> sender, MyEvent message) {
- *             System.out.println("Receieved " + message + " from " + sender);
- *      }
- * }
- * </pre>
- * Example of usage:
- * <pre>
- *             MyObservable observable = new MyObservable();
- *             MyObserver observer = new MyObserver();
- *             observable.addObserver(observer);
- *             observable.doStuff();
- *     </pre>
- */
-package net.sf.taverna.t2.lang.observer;
-

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/observer/src/test/java/net/sf/taverna/t2/lang/observer/ObserverTest.java
----------------------------------------------------------------------
diff --git 
a/observer/src/test/java/net/sf/taverna/t2/lang/observer/ObserverTest.java 
b/observer/src/test/java/net/sf/taverna/t2/lang/observer/ObserverTest.java
deleted file mode 100644
index 661cbbc..0000000
--- a/observer/src/test/java/net/sf/taverna/t2/lang/observer/ObserverTest.java
+++ /dev/null
@@ -1,133 +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.lang.observer;
-
-import static org.junit.Assert.*;
-
-import java.util.List;
-
-import net.sf.taverna.t2.lang.observer.MultiCaster;
-import net.sf.taverna.t2.lang.observer.Observable;
-import net.sf.taverna.t2.lang.observer.Observer;
-
-import org.junit.Test;
-
-public class ObserverTest {
-
-       @Test
-       public void registerObserver() throws Exception {
-               MyObservable observable = new MyObservable();
-               MyObserver observer1 = new MyObserver();
-               MyObserver observer2 = new MyObserver();
-
-               observable.triggerEvent(); // don't notify, but increase count
-               assertNull(observer1.lastMessage);
-               observable.addObserver(observer1);
-               assertNull(observer1.lastMessage);
-               assertNull(observer2.lastMessage);
-               assertNull(observer1.lastSender);
-               assertNull(observer2.lastSender);
-               observable.triggerEvent();
-               assertEquals("This is message 1", observer1.lastMessage);
-               assertSame(observable, observer1.lastSender);
-               assertNull(observer2.lastSender);
-
-               observable.addObserver(observer2);
-               assertNull(observer2.lastMessage);
-               observable.triggerEvent();
-               assertEquals("This is message 2", observer1.lastMessage);
-               assertEquals("This is message 2", observer2.lastMessage);
-               assertSame(observable, observer1.lastSender);
-               assertSame(observable, observer2.lastSender);
-
-               MyObservable otherObservable = new MyObservable();
-               otherObservable.addObserver(observer2);
-               otherObservable.triggerEvent();
-               // New instance, should start from 0
-               assertEquals("This is message 0", observer2.lastMessage);
-               assertSame(otherObservable, observer2.lastSender);
-
-               // observer1 unchanged
-               assertEquals("This is message 2", observer1.lastMessage);
-               assertSame(observable, observer1.lastSender);
-
-       }
-
-       @Test
-       public void concurrencyTest() {
-               MyObservable observable = new MyObservable();
-               MyObserver dummyObserver = new MyObserver();
-               SelvRemovingObserver selfRemoving = new SelvRemovingObserver();
-               observable.addObserver(dummyObserver);
-               observable.addObserver(selfRemoving);
-               assertEquals(2, observable.getObservers().size());
-               observable.triggerEvent();
-               
-               
-       }
-       
-       public class MyObservable implements Observable<String> {
-
-               private int counter = 0;
-               MultiCaster<String> multiCaster = new MultiCaster<String>(this);
-
-               public void addObserver(Observer<String> observer) {
-                       multiCaster.addObserver(observer);
-               }
-
-               public void removeObserver(Observer<String> observer) {
-                       multiCaster.removeObserver(observer);
-               }
-
-               public void triggerEvent() {
-                       multiCaster.notify("This is message " + counter++);
-               }
-
-               public List<Observer<String>> getObservers() {
-                       return multiCaster.getObservers();
-               }
-       }
-
-       public class MyObserver implements Observer<String> {
-               String lastMessage = null;
-               Observable<String> lastSender = null;
-
-               public void notify(Observable<String> sender, String message) {
-                       lastSender = sender;
-                       lastMessage = message;
-               }
-       }
-       
-       public class SelvRemovingObserver implements Observer<String> {
-
-               public int called=0;
-               
-               public void notify(Observable<String> sender, String message) {
-                       called++;
-                       if (called > 1) {
-                               fail("Did not remove itself");
-                       }
-                       sender.removeObserver(this);
-               }
-               
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/partition/pom.xml
----------------------------------------------------------------------
diff --git a/partition/pom.xml b/partition/pom.xml
deleted file mode 100644
index ba5088a..0000000
--- a/partition/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-       <modelVersion>4.0.0</modelVersion>
-       <parent>
-               <groupId>net.sf.taverna.t2</groupId>
-               <artifactId>lang</artifactId>
-               <version>2.0.1-SNAPSHOT</version>
-       </parent>
-       <groupId>net.sf.taverna.t2.lang</groupId>
-       <artifactId>partition</artifactId>
-       <packaging>bundle</packaging>
-       <name>Partition</name>
-       <description>API for recursive subset partitioning</description>
-       <dependencies>
-               <dependency>
-                       <groupId>junit</groupId>
-                       <artifactId>junit</artifactId>
-                       <version>${junit.version}</version>
-                       <scope>test</scope>
-               </dependency>
-       </dependencies>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/partition/src/main/java/net/sf/taverna/t2/partition/HashSetModel.java
----------------------------------------------------------------------
diff --git 
a/partition/src/main/java/net/sf/taverna/t2/partition/HashSetModel.java 
b/partition/src/main/java/net/sf/taverna/t2/partition/HashSetModel.java
deleted file mode 100644
index 3a66eb0..0000000
--- a/partition/src/main/java/net/sf/taverna/t2/partition/HashSetModel.java
+++ /dev/null
@@ -1,116 +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.partition;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Implementation of SetModel based on a HashSet
- * 
- * @author Tom Oinn
- */
-public class HashSetModel<ItemType> extends HashSet<ItemType> implements
-               SetModel<ItemType> {
-
-       /**
-        * 
-        */
-       private static final long serialVersionUID = 5763277571663880941L;
-       // Listeners for set change events
-       private List<SetModelChangeListener<ItemType>> changeListeners;
-
-       /**
-        * Default constructor, creates a set model based on a HashSet
-        */
-       public HashSetModel() {
-               super();
-               changeListeners = new 
ArrayList<SetModelChangeListener<ItemType>>();
-       }
-
-       /**
-        * Implements SetModel
-        */
-       public synchronized void addSetModelChangeListener(
-                       SetModelChangeListener<ItemType> listener) {
-               changeListeners.add(listener);
-       }
-
-       /**
-        * Implements SetModel
-        */
-       public synchronized void removeSetModelChangeListener(
-                       SetModelChangeListener<ItemType> listener) {
-               changeListeners.remove(listener);
-       }
-
-       @SuppressWarnings("unchecked")
-       @Override
-       public synchronized void clear() {
-               notifyRemoval((Set<Object>) this);
-               super.clear();
-       }
-
-       @Override
-       public synchronized boolean add(ItemType item) {
-               if (super.add(item)) {
-                       notifyAddition(Collections.singleton(item));
-                       return true;
-               }
-               return false;
-       }
-
-       @Override
-       public synchronized boolean remove(Object item) {
-               if (super.remove(item)) {
-                       notifyRemoval(Collections.singleton(item));
-                       return true;
-               }
-               return false;
-       }
-
-       /**
-        * Push addition notification to listeners
-        * 
-        * @param itemsAdded
-        */
-       private synchronized void notifyAddition(Set<ItemType> itemsAdded) {
-               for (SetModelChangeListener<ItemType> listener : new 
ArrayList<SetModelChangeListener<ItemType>>(
-                               changeListeners)) {
-                       listener.itemsWereAdded(itemsAdded);
-               }
-       }
-
-       /**
-        * Push removal notification to listeners
-        * 
-        * @param itemsRemoved
-        */
-       private synchronized void notifyRemoval(Set<Object> itemsRemoved) {
-               for (SetModelChangeListener<ItemType> listener : new 
ArrayList<SetModelChangeListener<ItemType>>(
-                               changeListeners)) {
-                       listener.itemsWereRemoved(itemsRemoved);
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/partition/src/main/java/net/sf/taverna/t2/partition/Partition.java
----------------------------------------------------------------------
diff --git a/partition/src/main/java/net/sf/taverna/t2/partition/Partition.java 
b/partition/src/main/java/net/sf/taverna/t2/partition/Partition.java
deleted file mode 100644
index e1e5819..0000000
--- a/partition/src/main/java/net/sf/taverna/t2/partition/Partition.java
+++ /dev/null
@@ -1,441 +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.partition;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import javax.swing.event.TreeModelEvent;
-import javax.swing.tree.TreePath;
-
-/**
- * A partition represents a set of items which can be exclusively classified
- * into one or more distinct subsets along with the algorithm to perform this
- * subset operation.
- * 
- * @author Tom Oinn
- * 
- * @param <ItemType>
- *            all items in the underlying set of which this is a subset are
- *            instances of this type or can be cast to it according to
- *            conventional java language rules.
- * @param <PartitionValueType>
- *            the partition value type used by the parent partition algorithm 
to
- *            create this partition object. As an example, if this partition
- *            object represented all those entries with a particular host
- *            institution this would be a String or possibly URL.
- * @param <ChildPartitionValueType>
- *            the partition value type used by this partition's partition
- *            algorithm to create sub-partitions, it's used in the signature
- *            here because ordering of children is done based on these values.
- *            Any child partition will have a getPartitionValue return type
- *            cast-able to this type.
- */
-public class Partition<ItemType extends Comparable, PartitionValueType, 
ChildPartitionValueType> {
-
-       // A comparator operating over the value type of the child partitions 
and
-       // used to order them as created or to re-order on a change of this 
property
-       private Comparator<ChildPartitionValueType> childPartitionOrder = null;
-
-       // Back reference to the root partition of which this is a direct or
-       // indirect sub-partition. If this *is* the root partition this points 
to
-       // self
-       protected RootPartition<ItemType> root;
-
-       // A subset of the parent's member set containing items which have been
-       // allocated to this partition by the parent's partition algorithm. The
-       // partition is specified by the partitionValue field.
-       private List<ItemType> members;
-
-       // The parent partition of which this is a subset
-       private Partition<ItemType, ?, PartitionValueType> parent;
-
-       // Specification of the partition in terms of the parent's partitioning
-       // algorithm
-       private PartitionValueType partitionValue;
-
-       // List of partitioning algorithms to be applied to this subset to 
create
-       // further partitions, the algorithm at index 0 is the one used for this
-       // partition, all others are passed in to the constructors for
-       // sub-partitions
-       protected List<PartitionAlgorithm<?>> partitionAlgorithms;
-
-       // An initially empty list of sub-partitions created by the head 
element of
-       // the partition algorithm list
-       protected List<Partition<ItemType, ChildPartitionValueType, ?>> 
children;
-
-       // Path from this node back to the root, initialised on first access and
-       // cached
-       private List<Partition<ItemType, ?, ?>> partitionPath = null;
-
-       // For leaf partitions this is equal to the number of items in the 
member
-       // set, for all other partitions it is the sum of the item count of all
-       // child partitions
-       protected int itemCount = 0;
-
-       /**
-        * Construct a new Partition, this is used by the RootPartition and by 
this
-        * class to construct the recursively sub-divided partition structure 
based
-        * on the rules encapsulated by the partition algorithm list.
-        * 
-        * @param parent
-        *            parent partition of which this is a subset
-        * @param pa
-        *            partition algorithm list, with the algorithm used to 
create
-        *            child partitions of this one at position 0, if this list 
is
-        *            empty this is a leaf partition.
-        * @param root
-        *            reference to the RootPartition acting as the externally
-        *            visible front-end to this structure
-        * @param pv
-        *            the value which the parent's partition algorithm has 
assigned
-        *            to this partition. This must be interpreted in the 
context of
-        *            the parent's first partition algorithm for display and 
other
-        *            purposes
-        */
-       protected Partition(Partition<ItemType, ?, PartitionValueType> parent,
-                       List<PartitionAlgorithm<?>> pa, RootPartition<ItemType> 
root,
-                       PartitionValueType pv) {
-               this.root = root;
-               this.members = new ArrayList<ItemType>();
-               this.parent = parent;
-               this.partitionValue = pv;
-               this.partitionAlgorithms = pa;
-               this.children = new ArrayList<Partition<ItemType, 
ChildPartitionValueType, ?>>();
-       }
-
-       /**
-        * Return the number of items below this node in the partition tree; in 
the
-        * case of leaf partitions this is the number of items in the member 
set,
-        * for non-leaf partitions it is the sum of the item count for all 
immediate
-        * child partitions.
-        */
-       public int getItemCount() {
-               return this.itemCount;
-       }
-
-       /**
-        * Sub-partitions of this partition are ordered based on a comparator 
over
-        * the child partition value type.
-        * 
-        * @return a comparator over child partition value types, or null if no
-        *         comparator has been specified (by default this returns null)
-        */
-       public Comparator<ChildPartitionValueType> getChildPartitionOrder() {
-               return this.childPartitionOrder;
-       }
-
-       /**
-        * Set a comparator for child partition ordering - if the supplied
-        * comparator is different to the current one this will also trigger a
-        * re-order of all child partitions and corresponding events in the root
-        * partition's tree view. In the current implementation this is the very
-        * broad 'tree structure changed' event for this node in the tree view.
-        * 
-        * @param order
-        *            a new comparator to order child partitions
-        */
-       public void setChildPartitionOrder(Comparator<ChildPartitionValueType> 
order) {
-               if (!order.equals(childPartitionOrder)) {
-                       childPartitionOrder = order;
-                       sortChildPartitions();
-               }
-       }
-
-       /**
-        * Return the parent partition of which this is a sub-partition, or 
null if
-        * this is the root partition.
-        */
-       public Partition<ItemType, ?, PartitionValueType> getParent() {
-               return this.parent;
-       }
-
-       /**
-        * The parent partition created this partition based on a particular 
value
-        * of a property of the members of the sub-partition. This returns that
-        * value, and is the result returned from the parent partition's first
-        * partition algorithm when run on all members of this partition or its
-        * direct or indirect sub-partitions.
-        */
-       public PartitionValueType getPartitionValue() {
-               return this.partitionValue;
-       }
-
-       @Override
-       public String toString() {
-               if (getParent() != null) {
-                       // query type
-                       String string = 
this.getParent().getPartitionAlgorithms().get(0)
-                                       .toString();
-                       // result of query
-                       String string2 = this.partitionValue.toString();
-                       return string2 + " (" + getItemCount() + ")";
-               } else {
-                       // This is for a root partition, loop through its 
children to return
-                       // the correct number when running a new query
-                       int items = 0;
-                       for (Partition child : children) {
-                               items = items + child.getItemCount();
-                       }
-                       String queryType = 
getPartitionAlgorithms().get(0).toString();
-                       // return "Activities which match query = " + 
getItemCount();
-                       return "Available activities (" + items + ")";
-                       //+ ", query by "
-                               //      + queryType;
-               }
-       }
-
-       /**
-        * Return a list of Partition objects from the root (at index 0) to this
-        * node at the final position in the list. Computes the first time then
-        * caches, as it should be impossible for this to be modified without
-        * recreation of the entire structure from scratch.
-        */
-       public synchronized List<Partition<ItemType, ?, ?>> getPartitionPath() {
-               if (partitionPath == null) {
-                       List<Partition<ItemType, ?, ?>> al = new 
ArrayList<Partition<ItemType, ?, ?>>();
-                       Partition<ItemType, ?, ?> activePartition = this;
-                       al.add(activePartition);
-                       while (activePartition.getParent() != null) {
-                               al.add(0, activePartition.getParent());
-                               activePartition = activePartition.getParent();
-                       }
-                       partitionPath = al;
-               }
-               return partitionPath;
-       }
-
-       /**
-        * If this is a leaf partition, defined as one with an empty list of
-        * partition algorithms, then this method returns the set of all items 
which
-        * have been classified as belonging to this leaf partition. For 
non-leaf
-        * partitions it will return an empty set.
-        */
-       public final List<ItemType> getMembers() {
-               return Collections.unmodifiableList(this.members);
-       }
-
-       /**
-        * The list of partition algorithms applicable to this node (at index 
0) and
-        * subsequent downstream sub-partitions of it. If this is empty then the
-        * partition is a leaf partition.
-        */
-       public final List<PartitionAlgorithm<?>> getPartitionAlgorithms() {
-               return Collections.unmodifiableList(partitionAlgorithms);
-       }
-
-       /**
-        * Sub-partitions of this partition defined by the partition algorithm 
at
-        * index 0 of the list. If this is a leaf partition this will always be
-        * empty.
-        */
-       public final List<Partition<ItemType, ChildPartitionValueType, ?>> 
getChildren() {
-               return Collections.unmodifiableList(children);
-       }
-
-       /**
-        * Inject an item into this partition, if there are partition 
algorithms in
-        * the partition algorithm list (i.e. this is not a leaf) this will
-        * recursively call the same method on child partitions or create new
-        * partitions where there are none that match the value from the 
partition
-        * algorithm. If this is a leaf partition the item is added to the 
member
-        * set. The list is sorted when adding an item and it is inserted in the
-        * appropriate place
-        * 
-        * @param item
-        *            the item to add to the partition structure.
-        */
-       @SuppressWarnings("unchecked")
-       protected synchronized void addItem(ItemType item) {
-               if (partitionAlgorithms.isEmpty()) {
-                       // itemCount = 0;
-                       // Allocate directly to member set, no further 
partitioning
-                       members.add(item);
-                       Collections.sort(members);
-                       int indexOf = members.indexOf(item);
-                       // root.treeNodesInserted(new TreeModelEvent(this, 
getTreePath(),
-                       // new int[] { members.size() - 1 }, new Object[] { 
item }));
-                       root.treeNodesInserted(new TreeModelEvent(this, 
getTreePath(),
-                                       new int[] { indexOf }, new Object[] { 
item }));
-                       // Increment item count for all partitions in the 
partition path
-                       for (Partition<ItemType, ?, ?> p : getPartitionPath()) {
-                               synchronized (p) {
-                                       p.itemCount++;
-                                       root.treeNodesChanged(new 
TreeModelEvent(this, p
-                                                       .getTreePath()));
-                               }
-                       }
-
-                       // Cache the storage of this item to this partition in 
the root
-                       // partition for more efficient removal if required 
(saves having to
-                       // search the entire partition tree, although that 
wouldn't be too
-                       // painful if it was required this is faster at the 
cost of a few
-                       // bytes of memory)
-                       root.itemStoredAt(item, this);
-                       // TODO - when the tree model covers items on the leaf 
nodes we'll
-                       // want to message it here as well.
-               } else {
-                       PartitionAlgorithm<ChildPartitionValueType> pa;
-                       pa = (PartitionAlgorithm<ChildPartitionValueType>) 
partitionAlgorithms
-                                       .get(0);
-                       ChildPartitionValueType pvalue = pa.allocate(item, root
-                                       .getPropertyExtractorRegistry());
-                       // FIXME not sure how to do this since you seem to have 
to add the
-                       // items to the partition if you want to then search 
them again,
-                       // maybe you need a non-showing partition or something?
-                       // //if it is a failed search then don't bother adding 
to the
-                       // partition
-                       // if (pvalue.toString().equalsIgnoreCase("No match")) {
-                       // return;
-                       // }
-                       // See if there's a partition with this value already 
in the child
-                       // partition list
-                       for (Partition<ItemType, ChildPartitionValueType, ?> 
potentialChild : children) {
-                               if 
(potentialChild.getPartitionValue().equals(pvalue)) {
-                                       potentialChild.addItem(item);
-                                       return;
-                               }
-                       }
-                       // If not we have to create a new sub-partition
-                       List<PartitionAlgorithm<?>> tail = new 
ArrayList<PartitionAlgorithm<?>>();
-                       for (int i = 1; i < partitionAlgorithms.size(); i++) {
-                               tail.add(partitionAlgorithms.get(i));
-                       }
-                       Partition<ItemType, ChildPartitionValueType, ?> 
newPartition = new Partition(
-                                       this, tail, this.root, pvalue);
-                       // Insert the new partition in the correct place 
according to the
-                       // comparator currently installed, or at the end if 
none exists or
-                       // the list is empty
-                       if (childPartitionOrder == null || children.isEmpty()) {
-                               children.add(newPartition);
-                               root.treeNodesInserted(new TreeModelEvent(this, 
getTreePath(),
-                                               new int[] { 
children.indexOf(newPartition) },
-                                               new Object[] { newPartition }));
-                       } else {
-                               boolean foundIndex = false;
-                               for (int i = 0; i < children.size(); i++) {
-                                       ChildPartitionValueType 
existingPartitionValue = children
-                                                       
.get(i).getPartitionValue();
-                                       if (childPartitionOrder.compare(pvalue,
-                                                       existingPartitionValue) 
< 0) {
-                                               children.add(i, newPartition);
-                                               root.treeNodesInserted(new 
TreeModelEvent(this,
-                                                               getTreePath(), 
new int[] { i },
-                                                               new Object[] { 
newPartition }));
-                                               if (i != 0) {
-                                                       
root.treeStructureChanged(new TreeModelEvent(this,
-                                                                       
getTreePath()));
-                                               }
-                                               foundIndex = true;
-                                               break;
-                                       }
-                               }
-                               if (!foundIndex) {
-                                       // Fallen off the end of the array 
without finding something
-                                       // with greater index than the new 
partition so we add it at
-                                       // the
-                                       // end (by definition this is the 
largest value according to
-                                       // the
-                                       // comparator)
-                                       children.add(newPartition);
-                                       root.treeNodesInserted(new 
TreeModelEvent(this,
-                                                       getTreePath(), new 
int[] { children
-                                                                       
.indexOf(newPartition) },
-                                                       new Object[] { 
newPartition }));
-                               }
-                       }
-                       // Add the item to the new partition to trigger 
creation of any
-                       // sub-partitions required
-                       newPartition.addItem(item);
-               }
-       }
-
-       /**
-        * Remove an item from the member set
-        * 
-        * @param item
-        *            the item to remove
-        */
-       protected void removeMember(ItemType item) {
-               this.members.remove(item);
-       }
-
-       /**
-        * Re-order the child partitions based on the comparator, if no 
comparator
-        * has been defined this method does nothing. Tree structure changed
-        * messages are fired from this node in the tree view if the comparator 
is
-        * defined even if no nodes have been changed (lazy but not too much of 
an
-        * issue I suspect)
-        */
-       protected synchronized final void sortChildPartitions() {
-               if (this.childPartitionOrder == null) {
-                       // Can't do anything unless the comparator is set 
appropriately
-                       return;
-               }
-               Comparator<Partition<ItemType, ChildPartitionValueType, ?>> 
comparator = new Comparator<Partition<ItemType, ChildPartitionValueType, ?>>() {
-                       public int compare(
-                                       Partition<ItemType, 
ChildPartitionValueType, ?> o1,
-                                       Partition<ItemType, 
ChildPartitionValueType, ?> o2) {
-                               // FIXME is this really safe to do? It's fairly 
specific to our
-                               // case. Doesn't seem very generic
-                               if 
(o1.getPartitionValue().toString().equalsIgnoreCase(
-                                               "no value")) {
-                                       // No value so put it to the end
-                                       return 1;
-                               }
-                               return 
childPartitionOrder.compare(o1.getPartitionValue(), o2
-                                               .getPartitionValue());
-                       }
-               };
-               Collections.<Partition<ItemType, ChildPartitionValueType, ?>> 
sort(
-                               children, comparator);
-               // Message the root that the node structure under this node has 
changed
-               // (this is a bit lazy and we could almost certainly be more 
clever here
-               // as the nodes have been removed and added to re-order them)
-               root.treeStructureChanged(new TreeModelEvent(this, 
getTreePath()));
-       }
-
-       /**
-        * Return a TreePath object with this node as the final entry in the 
path
-        */
-       protected final synchronized TreePath getTreePath() {
-               return new TreePath(getPartitionPath().toArray());
-       }
-
-       // public void sortItems() {
-       // System.out.println("sorting the items");
-       // synchronized (members) {
-       // List<ItemType> oldOrder = new ArrayList<ItemType>(members);
-       // Collections.sort(oldOrder);
-       //
-       // for (ItemType item : oldOrder) {
-       // removeMember(item);
-       // }
-       // for (ItemType item : oldOrder) {
-       // addItem(item);
-       // }
-       // }
-       //
-       // }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/partition/src/main/java/net/sf/taverna/t2/partition/PartitionAlgorithm.java
----------------------------------------------------------------------
diff --git 
a/partition/src/main/java/net/sf/taverna/t2/partition/PartitionAlgorithm.java 
b/partition/src/main/java/net/sf/taverna/t2/partition/PartitionAlgorithm.java
deleted file mode 100644
index b7b80f6..0000000
--- 
a/partition/src/main/java/net/sf/taverna/t2/partition/PartitionAlgorithm.java
+++ /dev/null
@@ -1,47 +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.partition;
-
-/**
- * Interface for classes which can partition a set of objects into subsets 
according
- * to some embedded partitioning rule
- * 
- * @author Tom Oinn
- * @author Stuart Owen
- * 
- * @param ValueType
- *            the java type of values used to represent the distinct partitions
- *            created by this algorithm, in many cases these will be primitive
- *            java types such as String but they could represent ranges of
- *            values in the case of binning of continuous quantities etc.
- */
-public interface PartitionAlgorithm<ValueType> {
-
-       /**
-        * Given an object to classify return the value of the partition into 
which
-        * the object falls.
-        * 
-        * @param newItem
-        * @return
-        */
-       ValueType allocate(Object newItem, PropertyExtractorRegistry reg);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/partition/src/main/java/net/sf/taverna/t2/partition/PartitionAlgorithmSetSPI.java
----------------------------------------------------------------------
diff --git 
a/partition/src/main/java/net/sf/taverna/t2/partition/PartitionAlgorithmSetSPI.java
 
b/partition/src/main/java/net/sf/taverna/t2/partition/PartitionAlgorithmSetSPI.java
deleted file mode 100644
index 330a11a..0000000
--- 
a/partition/src/main/java/net/sf/taverna/t2/partition/PartitionAlgorithmSetSPI.java
+++ /dev/null
@@ -1,36 +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.partition;
-
-import java.util.Set;
-
-/**
- * An SPI interface that provides access to a Set of partition algorithms.
- * 
- * @author Stuart Owen
- *
- */
-public interface PartitionAlgorithmSetSPI {
-       /**
-        * @return a Set of PartitionAlgorithms
-        */
-       public Set<PartitionAlgorithm<?>> getPartitionAlgorithms();
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/partition/src/main/java/net/sf/taverna/t2/partition/PropertyExtractorRegistry.java
----------------------------------------------------------------------
diff --git 
a/partition/src/main/java/net/sf/taverna/t2/partition/PropertyExtractorRegistry.java
 
b/partition/src/main/java/net/sf/taverna/t2/partition/PropertyExtractorRegistry.java
deleted file mode 100644
index 229aa87..0000000
--- 
a/partition/src/main/java/net/sf/taverna/t2/partition/PropertyExtractorRegistry.java
+++ /dev/null
@@ -1,37 +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.partition;
-
-import java.util.Map;
-
-/**
- * Convenience to allow caching of property extractors. Implementations should
- * scan for available PropertyExtractorSPI implementations and use these to get
- * the properties for each target, caching as applicable.
- * 
- * @author Tom Oinn
- * 
- */
-public interface PropertyExtractorRegistry {
-
-       public Map<String, Object> getAllPropertiesFor(Object target);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/partition/src/main/java/net/sf/taverna/t2/partition/PropertyExtractorSPI.java
----------------------------------------------------------------------
diff --git 
a/partition/src/main/java/net/sf/taverna/t2/partition/PropertyExtractorSPI.java 
b/partition/src/main/java/net/sf/taverna/t2/partition/PropertyExtractorSPI.java
deleted file mode 100644
index 130f2b7..0000000
--- 
a/partition/src/main/java/net/sf/taverna/t2/partition/PropertyExtractorSPI.java
+++ /dev/null
@@ -1,44 +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.partition;
-
-import java.util.Map;
-
-/**
- * SPI for classes which can extract or infer a set of named properties from a
- * target object.
- * 
- * @author Tom Oinn
- * 
- */
-public interface PropertyExtractorSPI {
-
-       /**
-        * Given a target object extract or infer the property map from it. If 
the
-        * target is one which this plugin cannot act on then simply return an 
empty
-        * map.
-        * 
-        * @param target
-        * @return
-        */
-       Map<String, Object> extractProperties(Object target);
-       
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/f676ef35/partition/src/main/java/net/sf/taverna/t2/partition/Query.java
----------------------------------------------------------------------
diff --git a/partition/src/main/java/net/sf/taverna/t2/partition/Query.java 
b/partition/src/main/java/net/sf/taverna/t2/partition/Query.java
deleted file mode 100644
index c8f3cb6..0000000
--- a/partition/src/main/java/net/sf/taverna/t2/partition/Query.java
+++ /dev/null
@@ -1,56 +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.partition;
-
-import java.util.Date;
-
-/**
- * Defines a query which can be re-run and which presents a set view on its
- * results. The Query is intended to represent both the old Taverna scavenger
- * class (which were queries in all but name) and new integration with external
- * search-able repositories in which case the term 'query' is a more literal
- * description.
- * 
- * @author Tom Oinn
- * 
- * @param <ItemType>
- *            the parameterised type of the result set of the query
- */
-public interface Query<ItemType> extends SetModel<ItemType> {
-
-       /**
-        * Run the query. The query has internal state from any previous runs
-        * (including the initial empty state) and will notify all listeners 
from
-        * the SetModel interface of any items that are present in the new query
-        * result and not in the old state or vice versa. It also updates the 
query
-        * time to be the current time.
-        */
-       public void doQuery();
-
-       /**
-        * Returns the time at which the query was last invoked, or null if the
-        * query has not been invoked yet.
-        * 
-        * @return time of last call to doQuery or null if this hasn't happened 
yet.
-        */
-       public Date getLastQueryTime();
-
-}

Reply via email to