You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2018/06/29 10:54:55 UTC

[08/27] incubator-taverna-plugin-component git commit: package rename folders

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;
+	}
+}