http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentRegistryTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentRegistryTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentRegistryTest.java
deleted file mode 100644
index f5328cc..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentRegistryTest.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package io.github.taverna_extras.component.registry;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.net.URL;
-import java.util.List;
-
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.Family;
-import io.github.taverna_extras.component.api.profile.Profile;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-/**
- * 
- * 
- * @author David Withers
- */
-@Ignore
-public abstract class ComponentRegistryTest extends Harness {
-       private Profile componentProfile;
-
-       @Before
-       public void setup() throws Exception {
-               URL componentProfileUrl = 
getClass().getClassLoader().getResource(
-                               "ValidationComponent.xml");
-               assertNotNull(componentProfileUrl);
-               componentProfile = util.getProfile(componentProfileUrl);
-       }
-
-       @After
-       public void tearDown() throws Exception {
-               for (Family componentFamily : 
componentRegistry.getComponentFamilies()) {
-                       
componentRegistry.removeComponentFamily(componentFamily);
-               }
-       }
-
-       @Test
-       public void testGetComponentFamilies() throws Exception {
-               assertEquals(0, 
componentRegistry.getComponentFamilies().size());
-               assertEquals(0, 
componentRegistry.getComponentFamilies().size());
-               Family componentFamily = 
componentRegistry.createComponentFamily(
-                               "TestComponentFamily", componentProfile, "Some 
description",
-                               null, null);
-               assertEquals(1, 
componentRegistry.getComponentFamilies().size());
-               assertTrue(componentRegistry.getComponentFamilies().contains(
-                               componentFamily));
-               componentRegistry.removeComponentFamily(componentFamily);
-               assertEquals(0, 
componentRegistry.getComponentFamilies().size());
-       }
-
-       @Test
-       public void testGetComponentFamily() throws Exception {
-               
assertNull(componentRegistry.getComponentFamily("TestComponentFamily"));
-               
assertNull(componentRegistry.getComponentFamily("TestComponentFamily"));
-               Family componentFamily = 
componentRegistry.createComponentFamily(
-                               "TestComponentFamily", componentProfile, "Some 
description",
-                               null, null);
-               assertNotNull(componentRegistry
-                               .getComponentFamily("TestComponentFamily"));
-               assertNotNull(componentRegistry
-                               .getComponentFamily("TestComponentFamily"));
-               assertEquals(componentFamily,
-                               
componentRegistry.getComponentFamily("TestComponentFamily"));
-               componentRegistry.removeComponentFamily(componentFamily);
-               
assertNull(componentRegistry.getComponentFamily("TestComponentFamily"));
-       }
-
-       @Test
-       public void testCreateComponentFamily() throws Exception {
-               assertEquals(0, 
componentRegistry.getComponentFamilies().size());
-               
assertNull(componentRegistry.getComponentFamily("TestComponentFamily"));
-               Family componentFamily = 
componentRegistry.createComponentFamily(
-                               "TestComponentFamily", componentProfile, "Some 
description",
-                               null, null);
-               assertEquals("TestComponentFamily", componentFamily.getName());
-               assertEquals(componentRegistry, 
componentFamily.getComponentRegistry());
-               assertEquals(0, componentFamily.getComponents().size());
-               // assertEquals(componentProfile,
-               // componentFamily.getComponentProfile());
-               assertEquals(1, 
componentRegistry.getComponentFamilies().size());
-               assertNotNull(componentRegistry
-                               .getComponentFamily("TestComponentFamily"));
-               assertEquals(componentFamily,
-                               
componentRegistry.getComponentFamily("TestComponentFamily"));
-       }
-
-       @Test(expected = ComponentException.class)
-       public void testCreateComponentFamilyDuplicate() throws Exception {
-               componentRegistry.createComponentFamily("TestComponentFamily",
-                               componentProfile, "Some description", null, 
null);
-               componentRegistry.createComponentFamily("TestComponentFamily",
-                               componentProfile, "Some description", null, 
null);
-       }
-
-       @Test(expected = ComponentException.class)
-       public void testCreateComponentFamilyNullProfile() throws Exception {
-               componentRegistry.createComponentFamily("TestComponentFamily", 
null,
-                               "Some description", null, null);
-       }
-
-       @Test(expected = ComponentException.class)
-       public void testCreateComponentFamilyNullName() throws Exception {
-               componentRegistry.createComponentFamily(null, componentProfile,
-                               "Some description", null, null);
-       }
-
-       @Test
-       public void testRemoveComponentFamily() throws Exception {
-               assertEquals(0, 
componentRegistry.getComponentFamilies().size());
-               
assertNull(componentRegistry.getComponentFamily("TestComponentFamily"));
-               Family componentFamily = 
componentRegistry.createComponentFamily(
-                               "TestComponentFamily", componentProfile, "Some 
description",
-                               null, null);
-               assertEquals(1, 
componentRegistry.getComponentFamilies().size());
-               assertNotNull(componentRegistry
-                               .getComponentFamily("TestComponentFamily"));
-               assertEquals(componentFamily,
-                               
componentRegistry.getComponentFamily("TestComponentFamily"));
-               componentRegistry.removeComponentFamily(componentFamily);
-               assertEquals(0, 
componentRegistry.getComponentFamilies().size());
-               
assertNull(componentRegistry.getComponentFamily("TestComponentFamily"));
-       }
-
-       @Test
-       public void testGetResistryBase() throws Exception {
-               assertEquals(componentRegistryUrl, 
componentRegistry.getRegistryBase());
-       }
-
-       @Test
-       public void testGetComponentProfiles() throws Exception {
-               assertNotNull(componentRegistry.getComponentProfiles());
-       }
-
-       @Test
-       public void testAddComponentProfile() throws Exception {
-               List<Profile> componentProfiles = componentRegistry
-                               .getComponentProfiles();
-               boolean contained = false;
-               for (Profile p : componentProfiles) {
-                       if (p.getId().equals(componentProfile.getId())) {
-                               contained = true;
-                       }
-               }
-               assertFalse(contained);
-               int componentProfileCount = componentProfiles.size();
-               componentRegistry.addComponentProfile(componentProfile, null, 
null);
-               int newSize = componentRegistry.getComponentProfiles().size();
-               assertEquals(componentProfileCount + 1, newSize);
-       }
-
-       @Test(expected = ComponentException.class)
-       public void testAddComponentProfileNullProfile() throws Exception {
-               componentRegistry.addComponentProfile(null, null, null);
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentTest.java
deleted file mode 100644
index 0ced0c8..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package io.github.taverna_extras.component.registry;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.net.URL;
-
-import io.github.taverna_extras.component.api.Component;
-import io.github.taverna_extras.component.api.Family;
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.api.profile.Profile;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-
-/**
- * 
- * 
- * @author David Withers
- */
-@Ignore
-public class ComponentTest extends Harness {
-       private Family componentFamily;
-       private Component component;
-       private WorkflowBundle bundle;
-
-       @Before
-       public void setUp() throws Exception {
-               URL dataflowUrl = getClass().getClassLoader().getResource(
-                               "beanshell_test.t2flow");
-               assertNotNull(dataflowUrl);
-               bundle = new WorkflowBundleIO().readBundle(dataflowUrl, null);
-               URL componentProfileUrl = 
getClass().getClassLoader().getResource(
-                               "ValidationComponent.xml");
-               assertNotNull(componentProfileUrl);
-               Profile componentProfile = util
-                               .getProfile(componentProfileUrl);
-               componentFamily = componentRegistry.createComponentFamily(
-                               "Test Component Family", componentProfile, 
"Some description",
-                               null, null);
-               component = componentFamily.createComponentBasedOn("Test 
Component",
-                               "Some description", bundle).getComponent();
-       }
-
-       @After
-       public void tearDown() throws Exception {
-               componentRegistry.removeComponentFamily(componentFamily);
-       }
-
-       @Test
-       public void testGetName() throws Exception {
-               assertEquals("Test Component", component.getName());
-               assertEquals("Test Component", component.getName());
-       }
-
-       @Test
-       public void testGetComponentVersionMap() throws Exception {
-               assertNotNull(component.getComponentVersionMap());
-               assertEquals(1, component.getComponentVersionMap().size());
-               assertEquals(component, 
component.getComponentVersionMap().get(1)
-                               .getComponent());
-       }
-
-       @Test
-       public void testGetComponentVersion() throws Exception {
-               assertNotNull(component.getComponentVersion(1));
-               assertNull(component.getComponentVersion(2));
-       }
-
-       @Test
-       public void testAddVersionBasedOn() throws Exception {
-               assertNotNull(component.getComponentVersion(1));
-               assertNull(component.getComponentVersion(2));
-               Version componentVersion = component.addVersionBasedOn(bundle,
-                               "Some description");
-               assertNotNull(componentVersion);
-               assertEquals(component, componentVersion.getComponent());
-               assertEquals(2, componentVersion.getVersionNumber().intValue());
-               assertEquals(bundle.getIdentifier(), 
componentVersion.getImplementation()
-                               .getIdentifier());
-       }
-
-       @Test
-       public void testGetComponentURL() throws Exception {
-               assertNotNull(component.getComponentURL());
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentVersionTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentVersionTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentVersionTest.java
deleted file mode 100644
index 48b320b..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/ComponentVersionTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package io.github.taverna_extras.component.registry;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.net.URL;
-
-import io.github.taverna_extras.component.api.Family;
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.api.profile.Profile;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-
-/**
- * 
- * 
- * @author David Withers
- */
-@Ignore
-public class ComponentVersionTest extends Harness {
-       private Family componentFamily;
-       private WorkflowBundle bundle;
-       private Version componentVersion;
-
-       @Before
-       public void setUp() throws Exception {
-               URL dataflowUrl = getClass().getClassLoader().getResource(
-                               "beanshell_test.t2flow");
-               assertNotNull(dataflowUrl);
-               bundle = new WorkflowBundleIO().readBundle(dataflowUrl, null);
-               URL componentProfileUrl = 
getClass().getClassLoader().getResource(
-                               "ValidationComponent.xml");
-               assertNotNull(componentProfileUrl);
-               Profile componentProfile = util.getProfile(componentProfileUrl);
-               componentFamily = componentRegistry.createComponentFamily(
-                               "Test Component Family", componentProfile, 
"Some description",
-                               null, null);
-               componentVersion = componentFamily.createComponentBasedOn(
-                               "Test Component", "Some description", bundle);
-       }
-
-       @After
-       public void tearDown() throws Exception {
-               componentRegistry.removeComponentFamily(componentFamily);
-       }
-
-       @Test
-       public void testGetVersionNumber() throws Exception {
-               assertNotNull(componentVersion.getVersionNumber());
-               assertEquals(componentVersion.getVersionNumber(),
-                               componentVersion.getVersionNumber());
-       }
-
-       @Test
-       public void testGetDescription() throws Exception {
-               assertNotNull(componentVersion.getDescription());
-       }
-
-       @Test
-       public void testGetDataflow() throws Exception {
-               assertNotNull(componentVersion.getImplementation());
-               assertEquals(bundle.getIdentifier(), 
componentVersion.getImplementation()
-                               .getIdentifier());
-       }
-
-       @Test
-       public void testGetComponent() throws Exception {
-               assertNotNull(componentVersion.getComponent());
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/Harness.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/Harness.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/Harness.java
deleted file mode 100644
index 663704c..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/Harness.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package io.github.taverna_extras.component.registry;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.net.URL;
-
-import io.github.taverna_extras.component.api.Registry;
-import io.github.taverna_extras.component.registry.ComponentUtil;
-
-public class Harness {
-       public static URL componentRegistryUrl;
-       public static Registry componentRegistry;
-       public static ComponentUtil util;
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentFamilyTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentFamilyTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentFamilyTest.java
deleted file mode 100644
index b5791e8..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentFamilyTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package io.github.taverna_extras.component.registry.local;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import io.github.taverna_extras.component.registry.ComponentFamilyTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-
-/**
- * 
- * 
- * @author David Withers
- */
-public class LocalComponentFamilyTest extends ComponentFamilyTest {
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-               RegistrySupport.pre();
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-               RegistrySupport.post();
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentRegistryTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentRegistryTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentRegistryTest.java
deleted file mode 100644
index 2a57e1c..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentRegistryTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package io.github.taverna_extras.component.registry.local;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static org.junit.Assert.assertSame;
-
-import io.github.taverna_extras.component.api.Registry;
-import io.github.taverna_extras.component.registry.ComponentRegistryTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-
-/**
- * 
- * 
- * @author David Withers
- */
-public class LocalComponentRegistryTest extends ComponentRegistryTest {
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-               RegistrySupport.pre();
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-               RegistrySupport.post();
-       }
-
-       @Test
-       public void testGetComponentRegistry() throws Exception {
-               Registry getAgain = RegistrySupport.factory
-                               .getComponentRegistry(componentRegistryUrl);
-               assertSame(componentRegistry, getAgain);
-       }
-
-       @Test
-       @Ignore("broken")
-       @Override
-       public void testAddComponentProfile() throws Exception {
-               super.testAddComponentProfile();
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentTest.java
deleted file mode 100644
index f82e591..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package io.github.taverna_extras.component.registry.local;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import io.github.taverna_extras.component.registry.ComponentTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-
-/**
- * 
- * 
- * @author David Withers
- */
-public class LocalComponentTest extends ComponentTest {
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-               RegistrySupport.pre();
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-               RegistrySupport.post();
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentVersionTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentVersionTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentVersionTest.java
deleted file mode 100644
index f08425e..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/LocalComponentVersionTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package io.github.taverna_extras.component.registry.local;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import io.github.taverna_extras.component.registry.ComponentVersionTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-
-/**
- *
- *
- * @author David Withers
- */
-public class LocalComponentVersionTest extends ComponentVersionTest {
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-               RegistrySupport.pre();
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-               RegistrySupport.post();
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/RegistrySupport.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/RegistrySupport.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/RegistrySupport.java
deleted file mode 100644
index cac3eff..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/local/RegistrySupport.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package io.github.taverna_extras.component.registry.local;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static java.lang.System.getProperty;
-import static org.apache.commons.io.FileUtils.deleteDirectory;
-import static 
io.github.taverna_extras.component.registry.Harness.componentRegistry;
-import static 
io.github.taverna_extras.component.registry.Harness.componentRegistryUrl;
-
-import java.io.File;
-
-import 
io.github.taverna_extras.component.registry.local.LocalComponentRegistryFactory;
-
-class RegistrySupport {
-       private static File testRegistry;
-       final static LocalComponentRegistryFactory factory = new 
LocalComponentRegistryFactory();
-
-       public static void pre() throws Exception {
-               testRegistry = new File(getProperty("java.io.tmpdir"), 
"TestRegistry");
-               testRegistry.mkdir();
-               componentRegistryUrl = testRegistry.toURI().toURL();
-               componentRegistry = 
factory.getComponentRegistry(componentRegistryUrl);
-       }
-
-       public static void post() throws Exception {
-               deleteDirectory(testRegistry);
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentFamilyTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentFamilyTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentFamilyTest.java
deleted file mode 100644
index bb06af5..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentFamilyTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package io.github.taverna_extras.component.registry.standard;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import io.github.taverna_extras.component.registry.ComponentFamilyTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-
-/**
- *
- *
- * @author David Withers
- */
-@Ignore
-public class NewComponentFamilyTest extends ComponentFamilyTest {
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-               RegistrySupport.pre();
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-               RegistrySupport.post();
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentRegistryTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentRegistryTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentRegistryTest.java
deleted file mode 100644
index 86417d5..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentRegistryTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package io.github.taverna_extras.component.registry.standard;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-
-import java.net.URL;
-
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.registry.ComponentRegistryTest;
-import io.github.taverna_extras.component.registry.standard.NewComponent;
-import 
io.github.taverna_extras.component.registry.standard.NewComponentRegistry;
-import io.github.taverna_extras.component.registry.standard.Policy;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-
-/**
- * 
- * 
- * @author David Withers
- */
-@Ignore("affects remote service")
-public class NewComponentRegistryTest extends ComponentRegistryTest {
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-               RegistrySupport.pre();
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-               RegistrySupport.post();
-       }
-
-       @Test
-       public void testGetComponentRegistry() throws Exception {
-               assertSame(componentRegistry,
-                               
RegistrySupport.factory.getComponentRegistry(componentRegistryUrl));
-       }
-
-       @Test
-       public void testUploadWorkflow() throws Exception {
-               URL dataflowUrl = getClass().getClassLoader().getResource(
-                               "beanshell_test.t2flow");
-               WorkflowBundle bundle = new 
WorkflowBundleIO().readBundle(dataflowUrl, null);
-
-               NewComponentRegistry registry = (NewComponentRegistry) 
RegistrySupport.factory.getComponentRegistry(componentRegistryUrl);
-               Version v = registry.createComponentFrom(null, "Test Workflow",
-                               "test description", bundle, null, 
Policy.PRIVATE);
-               assertEquals("test description", v.getDescription());
-               registry.deleteComponent((NewComponent) v.getComponent());
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentTest.java
deleted file mode 100644
index 2281cb0..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package io.github.taverna_extras.component.registry.standard;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import io.github.taverna_extras.component.registry.ComponentTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-
-/**
- *
- *
- * @author David Withers
- */
-@Ignore
-public class NewComponentTest extends ComponentTest {
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-               RegistrySupport.pre();
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-               RegistrySupport.post();
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentVersionTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentVersionTest.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentVersionTest.java
deleted file mode 100644
index cad04eb..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/NewComponentVersionTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package io.github.taverna_extras.component.registry.standard;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import io.github.taverna_extras.component.registry.ComponentVersionTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-
-/**
- *
- *
- * @author David Withers
- */
-@Ignore
-public class NewComponentVersionTest extends ComponentVersionTest {
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-               RegistrySupport.pre();
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-               RegistrySupport.post();
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/RegistrySupport.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/RegistrySupport.java
 
b/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/RegistrySupport.java
deleted file mode 100644
index a1d0fef..0000000
--- 
a/taverna-component-activity/src/test/java/org/apache/taverna/component/registry/standard/RegistrySupport.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package io.github.taverna_extras.component.registry.standard;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static 
io.github.taverna_extras.component.registry.Harness.componentRegistry;
-import static 
io.github.taverna_extras.component.registry.Harness.componentRegistryUrl;
-
-import java.net.URL;
-
-import io.github.taverna_extras.component.api.Component;
-import io.github.taverna_extras.component.api.Family;
-import io.github.taverna_extras.component.api.profile.Profile;
-import io.github.taverna_extras.component.registry.standard.NewComponent;
-import io.github.taverna_extras.component.registry.standard.NewComponentFamily;
-import 
io.github.taverna_extras.component.registry.standard.NewComponentRegistry;
-import 
io.github.taverna_extras.component.registry.standard.NewComponentRegistryFactory;
-
-class RegistrySupport {
-       static final String DEPLOYMENT = "http://aeon.cs.man.ac.uk:3006";;
-       static final NewComponentRegistryFactory factory = new 
NewComponentRegistryFactory();// FIXME
-
-       public static void pre() throws Exception {
-               componentRegistryUrl = new URL(DEPLOYMENT);
-               componentRegistry = 
factory.getComponentRegistry(componentRegistryUrl);
-       }
-
-       public static void post() throws Exception {
-               NewComponentRegistry registry = (NewComponentRegistry) factory
-                               .getComponentRegistry(componentRegistryUrl);
-               for (Profile p : registry.getComponentProfiles())
-                       registry.client.delete("/file.xml", "id=" + p.getId());
-               for (Family f : registry.getComponentFamilies()) {
-                       for (Component c : f.getComponents())
-                               registry.deleteComponent((NewComponent) c);
-                       registry.client.delete("/pack.xml", "id="
-                                       + ((NewComponentFamily) f).getId());
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Component.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Component.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Component.java
new file mode 100644
index 0000000..e014fb9
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Component.java
@@ -0,0 +1,89 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.URL;
+import java.util.SortedMap;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+
+/**
+ * The abstract interface supported by a component.
+ * 
+ * @author Donal Fellows
+ * @author David Withers
+ */
+public interface Component extends NamedItem {
+       /**
+        * @return the name of the Component.
+        */
+       @Override
+       String getName();
+
+       /**
+        * Returns the URL for the Component.
+        * 
+        * @return the URL for the Component.
+        */
+       URL getComponentURL();
+
+       /**
+        * Creates a new version of this Component.
+        * 
+        * @param bundle
+        *            the workflow that the new ComponentVersion will use.
+        * @return a new version of this Component.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       Version addVersionBasedOn(WorkflowBundle bundle, String revisionComment)
+                       throws ComponentException;
+
+       /**
+        * Returns the ComponentVersion that has the specified version number.
+        * 
+        * @param version
+        *            the version number of the ComponentVersion to return.
+        * @return the ComponentVersion that has the specified version number.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       Version getComponentVersion(Integer version) throws ComponentException;
+
+       /**
+        * @return the description of the Component.
+        */
+       @Override
+       String getDescription();
+
+       /**
+        * Returns a SortedMap of version number to ComponentVersion.
+        * <p>
+        * The returned map is sorted increasing numeric order.
+        * 
+        * @return a SortedMap of version number to ComponentVersion.
+        */
+       SortedMap<Integer, Version> getComponentVersionMap();
+
+       Registry getRegistry();
+
+       Family getFamily();
+
+       void delete() throws ComponentException;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/ComponentException.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/ComponentException.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/ComponentException.java
new file mode 100644
index 0000000..044903e
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/ComponentException.java
@@ -0,0 +1,48 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Thrown when there is a problem interacting with a ComponentRegistry.
+ *
+ * @author David Withers
+ */
+public class ComponentException extends Exception {
+       private static final long serialVersionUID = -5222074350812438467L;
+
+       public ComponentException() {
+               super();
+       }
+
+       public ComponentException(String message, Throwable cause) {
+               super(message, cause);
+       }
+
+       public ComponentException(String message) {
+               super(message);
+       }
+
+       public ComponentException(Throwable cause) {
+               super(cause);
+       }
+
+       public ComponentException(String messageTemplate, Object...parameters) {
+               super(String.format(messageTemplate, parameters));
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/ComponentFactory.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/ComponentFactory.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/ComponentFactory.java
new file mode 100644
index 0000000..5b69b61
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/ComponentFactory.java
@@ -0,0 +1,45 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.URL;
+
+import io.github.taverna_extras.component.api.profile.Profile;
+
+public interface ComponentFactory {
+       public Registry getRegistry(URL registryBase) throws ComponentException;
+
+       public Family getFamily(URL registryBase, String familyName)
+                       throws ComponentException;
+
+       public Component getComponent(URL registryBase, String familyName,
+                       String componentName) throws ComponentException;
+
+       public Version getVersion(URL registryBase, String familyName,
+                       String componentName, Integer componentVersion)
+                       throws ComponentException;
+
+       public Version getVersion(Version.ID ident) throws ComponentException;
+
+       public Component getComponent(Version.ID ident) throws 
ComponentException;
+
+       public Profile getProfile(URL url) throws ComponentException;
+
+       public Profile getBaseProfile() throws ComponentException;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Family.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Family.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Family.java
new file mode 100644
index 0000000..ca4ec54
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Family.java
@@ -0,0 +1,117 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import io.github.taverna_extras.component.api.profile.Profile;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+
+public interface Family extends NamedItem {
+       /**
+        * Creates a new Component and adds it to this ComponentFamily.
+        * 
+        * @param componentName
+        *            the name of the Component to create. Must not be null.
+        * @param bundle
+        *            the workflow for the Component. Must not be null.
+        * @return the new Component.
+        * @throws ComponentException
+        *             <ul>
+        *             <li>if componentName is null,
+        *             <li>if dataflow is null,
+        *             <li>if a Component with this name already exists,
+        *             <li>if there is a problem accessing the 
ComponentRegistry.
+        *             </ul>
+        */
+       Version createComponentBasedOn(String componentName, String description,
+                       WorkflowBundle bundle) throws ComponentException;
+
+       /**
+        * Returns the Component with the specified name.
+        * <p>
+        * If this ComponentFamily does not contain a Component with the 
specified
+        * name <code>null</code> is returned.
+        * 
+        * @param componentName
+        *            the name of the Component to return. Must not be null.
+        * @return the Component with the specified name.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       Component getComponent(String componentName) throws ComponentException;
+
+       /**
+        * Removes the specified Component from this ComponentFamily.
+        * <p>
+        * If this ComponentFamily does not contain the Component this method 
has no
+        * effect.
+        * 
+        * @param component
+        *            the Component to remove.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       void removeComponent(Component component) throws ComponentException;
+
+       /**
+        * Returns all the Components in this ComponentFamily.
+        * <p>
+        * If this ComponentFamily does not contain any Components an empty 
list is
+        * returned.
+        * 
+        * @return all the Components in this ComponentFamilies.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       List<Component> getComponents() throws ComponentException;
+
+       /**
+        * Returns the ComponentProfile for this ComponentFamily.
+        * 
+        * @return the ComponentProfile for this ComponentFamily.
+        * @throws ComponentException
+        */
+       Profile getComponentProfile() throws ComponentException;
+
+       /**
+        * Returns the ComponentRegistry that contains this ComponentFamily.
+        * 
+        * @return the ComponentRegistry that contains this ComponentFamily.
+        */
+       Registry getComponentRegistry();
+
+       /**
+        * @return the name of the component Family.
+        */
+       @Override
+       String getName();
+
+       /**
+        * @return the description of the component Family.
+        */
+       @Override
+       String getDescription();
+
+       /**
+        * Delete this family from its registry.
+        * @throws ComponentException
+        */
+       void delete() throws ComponentException;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/License.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/License.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/License.java
new file mode 100644
index 0000000..2906288
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/License.java
@@ -0,0 +1,23 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public interface License extends NamedItem {
+       public String getAbbreviation();
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/NamedItem.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/NamedItem.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/NamedItem.java
new file mode 100644
index 0000000..775e515
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/NamedItem.java
@@ -0,0 +1,26 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public interface NamedItem {
+       /** Name this entity. */
+       public String getName();
+       /** Describe this entity. */
+       public String getDescription();
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Registry.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Registry.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Registry.java
new file mode 100644
index 0000000..e6d1e23
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Registry.java
@@ -0,0 +1,158 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.net.URL;
+import java.util.List;
+import java.util.Set;
+
+import io.github.taverna_extras.component.api.profile.Profile;
+
+public interface Registry {
+
+       License getPreferredLicense() throws ComponentException;
+
+       Set<Version.ID> searchForComponents(String prefixString, String text)
+                       throws ComponentException;
+
+       /**
+        * Returns all the ComponentFamilies in this ComponetRegistry.
+        * <p>
+        * If this ComponentRegistry does not contain any ComponentFamilies an 
empty
+        * list is returned.
+        * 
+        * @return all the ComponentFamilies in this ComponetRegistry.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       List<Family> getComponentFamilies() throws ComponentException;
+
+       List<License> getLicenses() throws ComponentException;
+
+       List<SharingPolicy> getPermissions() throws ComponentException;
+
+       /**
+        * Adds a ComponentProfile to this ComponentRegistry.
+        * 
+        * @param componentProfile
+        *            the ComponentProfile to add. Must not be null.
+        * @param sharingPolicy
+        * @param license
+        * @return the ComponentProfile added to this ComponentRegistry.
+        * @throws ComponentException
+        *             <ul>
+        *             <li>if componentProfile is null,
+        *             <li>if there is a problem accessing the 
ComponentRegistry.
+        *             </ul>
+        */
+       Profile addComponentProfile(Profile componentProfile, License license,
+                       SharingPolicy sharingPolicy) throws ComponentException;
+
+       /**
+        * Returns all the ComponentProfiles in this ComponetRegistry.
+        * <p>
+        * If this ComponentRegistry does not contain any ComponentProfiles an 
empty
+        * list is returned.
+        * 
+        * @return all the ComponentProfiles in this ComponetRegistry.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       List<Profile> getComponentProfiles() throws ComponentException;
+
+       /**
+        * Returns the ComponentProfile with the given ID in this 
ComponetRegistry.
+        * <p>
+        * If this ComponentRegistry does not contain the ComponentProfile, a
+        * <tt>null</tt> is returned.
+        * 
+        * @return the matching ComponentProfile in this ComponetRegistry, or
+        *         <tt>null</tt> if there is no such thing.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       Profile getComponentProfile(String id) throws ComponentException;
+
+       String getRegistryBaseString();
+
+       /**
+        * Returns the location of this ComponentRepository.
+        * 
+        * @return the location of this ComponentRepository
+        */
+       URL getRegistryBase();
+
+       /**
+        * Removes a the ComponentFamily with the specified name from this
+        * ComponentRegistry.
+        * <p>
+        * If this ComponentRegistry does not contain a ComponentFamily with the
+        * specified name this method has no effect.
+        * 
+        * @param componentFamily
+        *            the ComponentFamily to remove.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       void removeComponentFamily(Family componentFamily) throws 
ComponentException;
+
+       /**
+        * Creates a new ComponentFamily and adds it to this ComponentRegistry.
+        * 
+        * @param familyName
+        *            the name of the ComponentFamily to create. Must not be 
null.
+        * @param componentProfile
+        *            the ComponentProfile for the new ComponentFamily. Must 
not be
+        *            null.
+        * @param sharingPolicy
+        *            the SharingPolicy to use for the new ComponentFamily.
+        * @return the new ComponentFamily
+        * @throws ComponentException
+        *             <ul>
+        *             <li>if familyName is null,
+        *             <li>if componentProfile is null,
+        *             <li>if a ComponentFamily with this name already exists,
+        *             <li>if there is a problem accessing the 
ComponentRegistry.
+        *             </ul>
+        */
+       Family createComponentFamily(String familyName, Profile 
componentProfile,
+                       String description, License license, SharingPolicy 
sharingPolicy)
+                       throws ComponentException;
+
+       /**
+        * Returns the ComponentFamily with the specified name.
+        * <p>
+        * If this ComponentRegistry does not contain a ComponentFamily with the
+        * specified name <code>null</code> is returned.
+        * 
+        * @param familyName
+        *            the name of the ComponentFamily to return. Must not be 
null.
+        * @return the ComponentFamily with the specified name in this
+        *         ComponentRepository or null if none exists.
+        * @throws ComponentException
+        *             if there is a problem accessing the ComponentRegistry.
+        */
+       Family getComponentFamily(String familyName) throws ComponentException;
+
+       /**
+        * @return A description of the type of registry this is.
+        */
+       String getRegistryTypeName();
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/SharingPolicy.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/SharingPolicy.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/SharingPolicy.java
new file mode 100644
index 0000000..9965339
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/SharingPolicy.java
@@ -0,0 +1,32 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author alanrw
+ *
+ */
+public interface SharingPolicy {
+       
+       /**
+        * @return The user-relevant name of the permission
+        */
+       public abstract String getName();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Version.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Version.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Version.java
new file mode 100644
index 0000000..2929ed0
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/Version.java
@@ -0,0 +1,224 @@
+package io.github.taverna_extras.component.api;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+import java.net.URL;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+
+public interface Version {
+       /** @return The version number of this version */
+       Integer getVersionNumber();
+
+       /** @return The description of this version */
+       String getDescription();
+
+       /** @return The implementation for this version */
+       WorkflowBundle getImplementation() throws ComponentException;
+
+       /** @return The component of which this is a version */
+       Component getComponent();
+
+       /** @return The identification token for this version */
+       ID getID();
+
+       URL getHelpURL();
+
+       interface ID extends Serializable {
+               /** @return The name of the family of the component to which we 
refer to */
+               String getFamilyName();
+
+               /** @return The base URL of the registry containing the 
component */
+               URL getRegistryBase();
+
+               /**
+                * @return The name of the component referred to, unique within 
its
+                *         family
+                */
+               String getComponentName();
+
+               /**
+                * @return The version number of the version of the component 
referred
+                *         to
+                */
+               Integer getComponentVersion();
+
+               /**
+                * Tests whether this ID is equal to the given one, 
<i>excluding</i> the
+                * version.
+                * 
+                * @param id
+                *            The ID to compare to.
+                * @return A boolean
+                */
+               boolean mostlyEqualTo(ID id);
+
+               /**
+                * Tests whether this ID is equal to the given component,
+                * <i>excluding</i> the version.
+                * 
+                * @param component
+                *            The component to compare to.
+                * @return A boolean
+                */
+               boolean mostlyEqualTo(Component component);
+       }
+
+       class Identifier implements ID {
+               private static final long serialVersionUID = 
1139928258250264997L;
+
+               private final URL registryBase;
+               private final String familyName;
+               private final String componentName;
+               private final Integer componentVersion;
+
+               public Identifier(URL registryBase, String familyName,
+                               String componentName, Integer componentVersion) 
{
+                       super();
+                       this.registryBase = registryBase;
+                       this.familyName = familyName;
+                       this.componentName = componentName;
+                       this.componentVersion = componentVersion;
+               }
+
+               /**
+                * @return the registryBase
+                */
+               @Override
+               public URL getRegistryBase() {
+                       return registryBase;
+               }
+
+               /**
+                * @return the familyName
+                */
+               @Override
+               public String getFamilyName() {
+                       return familyName;
+               }
+
+               /**
+                * @return the componentName
+                */
+               @Override
+               public String getComponentName() {
+                       return componentName;
+               }
+
+               /**
+                * @return the componentVersion
+                */
+               @Override
+               public Integer getComponentVersion() {
+                       return componentVersion;
+               }
+
+               @Override
+               public int hashCode() {
+                       final int prime = 31;
+                       int result = 1;
+                       result *= prime;
+                       result += (componentName == null) ? 0 : 
componentName.hashCode();
+                       result *= prime;
+                       result += (componentVersion == null) ? 0 : 
componentVersion
+                                       .hashCode();
+                       result *= prime;
+                       result += (familyName == null) ? 0 : 
familyName.hashCode();
+                       result *= prime;
+                       result += (registryBase == null) ? 0 : 
registryBase.hashCode();
+                       return result;
+               }
+
+               @Override
+               public boolean equals(Object obj) {
+                       if (this == obj)
+                               return true;
+                       if (obj == null)
+                               return false;
+                       if (!ID.class.isAssignableFrom(obj.getClass()))
+                               return false;
+                       ID other = (ID) obj;
+                       if (componentName == null) {
+                               if (other.getComponentName() != null)
+                                       return false;
+                       } else if 
(!componentName.equals(other.getComponentName()))
+                               return false;
+                       if (componentVersion == null) {
+                               if (other.getComponentVersion() != null)
+                                       return false;
+                       } else if 
(!componentVersion.equals(other.getComponentVersion()))
+                               return false;
+                       if (familyName == null) {
+                               if (other.getFamilyName() != null)
+                                       return false;
+                       } else if (!familyName.equals(other.getFamilyName()))
+                               return false;
+                       if (registryBase == null) {
+                               if (other.getRegistryBase() != null)
+                                       return false;
+                       } else if (!registryBase.toString().equals(
+                                       other.getRegistryBase().toString()))
+                               // NB: Comparison of URLs is on their string 
form!
+                               return false;
+                       return true;
+               }
+
+               @Override
+               public String toString() {
+                       return getComponentName() + " V. " + 
getComponentVersion()
+                                       + " in family " + getFamilyName() + " 
on "
+                                       + getRegistryBase().toExternalForm();
+               }
+
+               @Override
+               public boolean mostlyEqualTo(ID id) {
+                       if (this == id)
+                               return true;
+                       if (id == null)
+                               return false;
+                       if (getClass() != id.getClass())
+                               return false;
+                       if (componentName == null) {
+                               if (id.getFamilyName() != null)
+                                       return false;
+                       } else if (!componentName.equals(id.getComponentName()))
+                               return false;
+                       if (familyName == null) {
+                               if (id.getFamilyName() != null)
+                                       return false;
+                       } else if (!familyName.equals(id.getFamilyName()))
+                               return false;
+                       if (registryBase == null) {
+                               if (id.getRegistryBase() != null)
+                                       return false;
+                       } else if (!registryBase.toString().equals(
+                                       id.getRegistryBase().toString()))
+                               // NB: Comparison of URLs is on their string 
form!
+                               return false;
+                       return true;
+               }
+
+               @Override
+               public boolean mostlyEqualTo(Component c) {
+                       return mostlyEqualTo(new Identifier(c.getRegistry()
+                                       .getRegistryBase(), 
c.getFamily().getName(), c.getName(), 0));
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/config/ComponentConfig.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/config/ComponentConfig.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/config/ComponentConfig.java
new file mode 100644
index 0000000..7de348c
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/config/ComponentConfig.java
@@ -0,0 +1,23 @@
+package io.github.taverna_extras.component.api.config;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public interface ComponentConfig {
+       String URI = "http://ns.taverna.org.uk/2010/activity/component";;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/config/ComponentPropertyNames.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/config/ComponentPropertyNames.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/config/ComponentPropertyNames.java
new file mode 100644
index 0000000..457161d
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/config/ComponentPropertyNames.java
@@ -0,0 +1,32 @@
+package io.github.taverna_extras.component.api.config;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * The names of properties used in JSON configurations associated with
+ * components.
+ * 
+ * @author Donal Fellows
+ */
+public interface ComponentPropertyNames {
+       String REGISTRY_BASE = "registryBase";
+       String FAMILY_NAME = "familyName";
+       String COMPONENT_NAME = "componentName";
+       String COMPONENT_VERSION = "componentVersion";
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/package-info.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/package-info.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/package-info.java
new file mode 100644
index 0000000..a0b3e2f
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/package-info.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * An abstract API for working with components in a registry.
+ * @author Donal Fellows
+ * @author David Withers
+ */
+package io.github.taverna_extras.component.api;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ActivityProfile.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ActivityProfile.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ActivityProfile.java
new file mode 100644
index 0000000..8795c8a
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ActivityProfile.java
@@ -0,0 +1,23 @@
+package io.github.taverna_extras.component.api.profile;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public interface ActivityProfile extends AnnotatedElement {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/AnnotatedElement.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/AnnotatedElement.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/AnnotatedElement.java
new file mode 100644
index 0000000..0ad0da4
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/AnnotatedElement.java
@@ -0,0 +1,28 @@
+package io.github.taverna_extras.component.api.profile;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import io.github.taverna_extras.component.api.ComponentException;
+
+public interface AnnotatedElement {
+       List<SemanticAnnotationProfile> getSemanticAnnotations()
+                       throws ComponentException;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ExceptionHandling.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ExceptionHandling.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ExceptionHandling.java
new file mode 100644
index 0000000..ee5810d
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ExceptionHandling.java
@@ -0,0 +1,47 @@
+package io.github.taverna_extras.component.api.profile;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author alanrw
+ * 
+ */
+public class ExceptionHandling {
+       private final boolean failLists;
+       private final List<HandleException> remapped = new 
ArrayList<HandleException>();
+
+       public ExceptionHandling(
+                       
io.github.taverna_extras.component.api.profile.doc.ExceptionHandling proxied) {
+               for 
(io.github.taverna_extras.component.api.profile.doc.HandleException he : proxied
+                               .getHandleException())
+                       remapped.add(new HandleException(he));
+               this.failLists = proxied.getFailLists() != null;
+       }
+
+       public boolean failLists() {
+               return failLists;
+       }
+
+       public List<HandleException> getHandleExceptions() {
+               return remapped;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ExceptionReplacement.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ExceptionReplacement.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ExceptionReplacement.java
new file mode 100644
index 0000000..69163cf
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/ExceptionReplacement.java
@@ -0,0 +1,43 @@
+package io.github.taverna_extras.component.api.profile;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import io.github.taverna_extras.component.api.profile.doc.Replacement;
+
+/**
+ * @author alanrw
+ * 
+ */
+public class ExceptionReplacement {
+       private final String id, message;
+
+       public ExceptionReplacement(Replacement replacement) {
+               id = replacement.getReplacementId();
+               message = replacement.getReplacementMessage();
+       }
+
+       public String getReplacementId() {
+               return id;
+       }
+
+       public String getReplacementMessage() {
+               return message;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/HandleException.java
----------------------------------------------------------------------
diff --git 
a/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/HandleException.java
 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/HandleException.java
new file mode 100644
index 0000000..fb29cd6
--- /dev/null
+++ 
b/taverna-component-repository-api/src/main/java/io/github/taverna_extras/component/api/profile/HandleException.java
@@ -0,0 +1,55 @@
+package io.github.taverna_extras.component.api.profile;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import static java.util.regex.Pattern.DOTALL;
+import static java.util.regex.Pattern.compile;
+
+import java.util.regex.Pattern;
+
+/**
+ * @author alanrw
+ * 
+ */
+public class HandleException {
+       private final Pattern pattern;
+       private ExceptionReplacement replacement;
+       private final boolean pruneStack;
+
+       public HandleException(
+                       
io.github.taverna_extras.component.api.profile.doc.HandleException proxied) {
+               pruneStack = proxied.getPruneStack() != null;
+               pattern = compile(proxied.getPattern(), DOTALL);
+               if (proxied.getReplacement() != null)
+                       replacement = new 
ExceptionReplacement(proxied.getReplacement());
+       }
+
+       public boolean matches(String s) {
+               return pattern.matcher(s).matches();
+       }
+
+       public boolean pruneStack() {
+               return pruneStack;
+       }
+
+       public ExceptionReplacement getReplacement() {
+               return replacement;
+       }
+}


Reply via email to