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:58 UTC

[11/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/main/java/org/apache/taverna/component/profile/ComponentProfileImpl.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/ComponentProfileImpl.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/ComponentProfileImpl.java
deleted file mode 100644
index 6c7a5b0..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/ComponentProfileImpl.java
+++ /dev/null
@@ -1,683 +0,0 @@
-package io.github.taverna_extras.component.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 org.apache.jena.rdf.model.ModelFactory.createOntologyModel;
-import static java.lang.System.identityHashCode;
-import static java.util.Collections.emptyList;
-import static java.util.Collections.emptyMap;
-import static org.apache.log4j.Logger.getLogger;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.Registry;
-import io.github.taverna_extras.component.api.profile.ActivityProfile;
-import io.github.taverna_extras.component.api.profile.ExceptionHandling;
-import io.github.taverna_extras.component.api.profile.PortProfile;
-import io.github.taverna_extras.component.api.profile.SemanticAnnotationProfile;
-
-import io.github.taverna_extras.component.api.profile.doc.Activity;
-import io.github.taverna_extras.component.api.profile.doc.Ontology;
-import io.github.taverna_extras.component.api.profile.doc.Port;
-import io.github.taverna_extras.component.api.profile.doc.Profile;
-import io.github.taverna_extras.component.api.profile.doc.SemanticAnnotation;
-
-import org.apache.jena.ontology.OntClass;
-import org.apache.jena.ontology.OntModel;
-import org.apache.jena.ontology.OntProperty;
-import static org.apache.taverna.workflowmodel.health.HealthCheck.NO_PROBLEM;
-import org.apache.taverna.workflowmodel.health.RemoteHealthChecker;
-
-/**
- * A ComponentProfile specifies the inputs, outputs and semantic annotations
- * that a Component must contain.
- * 
- * @author David Withers
- */
-public class ComponentProfileImpl implements
-		io.github.taverna_extras.component.api.profile.Profile {
-	private static final Logger logger = getLogger(ComponentProfileImpl.class);
-	private static final Map<String, OntModel> ontologyModels = new HashMap<>();
-	private static final JAXBContext jaxbContext;
-	private BaseProfileLocator base;
-	static {
-		try {
-			jaxbContext = JAXBContext.newInstance(Profile.class);
-		} catch (JAXBException e) {
-			// Should never happen! Represents a critical error
-			throw new Error(
-					"Failed to initialize profile deserialization engine", e);
-		}
-	}
-	private io.github.taverna_extras.component.api.profile.Profile parent;
-	private Profile profileDoc;
-	private ExceptionHandling exceptionHandling;
-	private Registry parentRegistry = null;
-	private final Object lock = new Object();
-	private Exception loaderException = null;
-	protected volatile boolean loaded = false;
-
-	public ComponentProfileImpl(URL profileURL, BaseProfileLocator base)
-			throws ComponentException {
-		this(null, profileURL, base);
-	}
-
-	public ComponentProfileImpl(String profileString, BaseProfileLocator base)
-			throws ComponentException {
-		this(null, profileString, base);
-	}
-
-	public ComponentProfileImpl(Registry registry, URI profileURI,
-			BaseProfileLocator base) throws ComponentException,
-			MalformedURLException {
-		this(registry, profileURI.toURL(), base);
-	}
-
-	public ComponentProfileImpl(Registry registry, URL profileURL,
-			BaseProfileLocator base) throws ComponentException {
-		logger.info("Loading profile in " + identityHashCode(this) + " from "
-				+ profileURL);
-		this.base = base;
-		try {
-			URL url = profileURL;
-			if (url.getProtocol().startsWith("http"))
-				url = new URI(url.getProtocol(), url.getAuthority(),
-						url.getPath(), url.getQuery(), url.getRef()).toURL();
-			loadProfile(this, url, base);
-		} catch (MalformedURLException e) {
-			logger.warn("Malformed URL? " + profileURL);
-		} catch (URISyntaxException e) {
-			logger.warn("Malformed URL? " + profileURL);
-		}
-		parentRegistry = registry;
-	}
-
-	public ComponentProfileImpl(Registry registry, String profileString,
-			BaseProfileLocator base) throws ComponentException {
-		logger.info("Loading profile in " + identityHashCode(this)
-				+ " from string");
-		this.base = base;
-		loadProfile(this, profileString, base);
-		this.parentRegistry = registry;
-	}
-
-	private static void loadProfile(final ComponentProfileImpl profile,
-			final Object source, BaseProfileLocator base) {
-		Runnable r = new Runnable() {
-			@Override
-			public void run() {
-				Date start = new Date();
-				if (source instanceof URL)
-					loadProfileFromURL(profile, (URL) source);
-				else if (source instanceof String)
-					loadProfileFromString(profile, (String) source);
-				else
-					throw new IllegalArgumentException(
-							"Bad type of profile source: " + source.getClass());
-				Date end = new Date();
-				logger.info("Loaded profile in " + identityHashCode(profile)
-						+ " (in " + (end.getTime() - start.getTime())
-						+ " msec)");
-			}
-		};
-		if (base.getProfile() == null)
-			// Must load the base profile synchronously, to avoid deadlock
-			r.run();
-		else
-			new Thread(r).start();
-	}
-
-	private static void loadProfileFromURL(ComponentProfileImpl profile, URL source) {
-		try {
-			URLConnection conn = source.openConnection();
-			try {
-				conn.addRequestProperty("Accept", "application/xml,*/*;q=0.1");
-			} catch (Exception e) {
-			}
-			try (InputStream is = conn.getInputStream()) {
-				profile.profileDoc = jaxbContext.createUnmarshaller()
-						.unmarshal(new StreamSource(is), Profile.class)
-						.getValue();
-			}
-		} catch (FileNotFoundException e) {
-			profile.loaderException = e;
-			logger.warn("URL not readable: " + source);
-		} catch (Exception e) {
-			profile.loaderException = e;
-			logger.warn("Failed to load profile.", e);
-		}
-		synchronized (profile.lock) {
-			profile.loaded = true;
-			profile.lock.notifyAll();
-		}
-	}
-
-	private static void loadProfileFromString(ComponentProfileImpl profile,
-			String source) {
-		try {
-			profile.profileDoc = jaxbContext
-					.createUnmarshaller()
-					.unmarshal(new StreamSource(new StringReader(source)),
-							Profile.class).getValue();
-		} catch (Exception e) {
-			profile.loaderException = e;
-			logger.warn("Failed to load profile.", e);
-		}
-		synchronized (profile.lock) {
-			profile.loaded = true;
-			profile.lock.notifyAll();
-		}
-	}
-
-	@Override
-	public Registry getComponentRegistry() {
-		return parentRegistry;
-	}
-
-	@Override
-	public String getXML() throws ComponentException {
-		try {
-			StringWriter stringWriter = new StringWriter();
-			jaxbContext.createMarshaller().marshal(getProfileDocument(),
-					stringWriter);
-			return stringWriter.toString();
-		} catch (JAXBException e) {
-			throw new ComponentException("Unable to serialize profile.", e);
-		}
-	}
-
-	@Override
-	public Profile getProfileDocument() throws ComponentException {
-		try {
-			synchronized (lock) {
-				while (!loaded)
-					lock.wait();
-				if (loaderException != null) {
-					if (loaderException instanceof FileNotFoundException)
-						throw new ComponentException(
-								"Profile not found/readable: "
-										+ loaderException.getMessage(),
-								loaderException);
-					throw new ComponentException(
-							"Problem loading profile definition: "
-									+ loaderException.getMessage(),
-							loaderException);
-				}
-				return profileDoc;
-			}
-		} catch (InterruptedException e) {
-			logger.info("Interrupted during wait for lock.", e);
-			return null;
-		}
-	}
-
-	@Override
-	public String getId() {
-		try {
-			return getProfileDocument().getId();
-		} catch (ComponentException e) {
-			return null;
-		}
-	}
-
-	@Override
-	public String getName() {
-		try {
-			return getProfileDocument().getName();
-		} catch (ComponentException e) {
-			return null;
-		}
-	}
-
-	@Override
-	public String getDescription() {
-		try {
-			return getProfileDocument().getDescription();
-		} catch (ComponentException e) {
-			return null;
-		}
-	}
-
-	/**
-	 * @return Is this the base profile?
-	 */
-	private boolean isBase() {
-		if (base == null)
-			return true;
-		Object o = base.getProfile();
-		return o == null || o == this;
-	}
-
-	private synchronized io.github.taverna_extras.component.api.profile.Profile parent()
-			throws ComponentException {
-		if (parent == null) {
-			try {
-				if (!isBase() && getProfileDocument().getExtends() != null
-						&& parentRegistry != null) {
-					parent = parentRegistry
-							.getComponentProfile(getProfileDocument()
-									.getExtends().getProfileId());
-					if (parent != null)
-						return parent;
-				}
-			} catch (ComponentException e) {
-			}
-			parent = new EmptyProfile();
-		}
-		return parent;
-	}
-
-	@Override
-	public String getOntologyLocation(String ontologyId) {
-		String ontologyURI = null;
-		try {
-			for (Ontology ontology : getProfileDocument().getOntology())
-				if (ontology.getId().equals(ontologyId))
-					ontologyURI = ontology.getValue();
-		} catch (ComponentException e) {
-		}
-		if ((ontologyURI == null) && !isBase())
-			ontologyURI = base.getProfile().getOntologyLocation(ontologyId);
-		return ontologyURI;
-	}
-
-	private Map<String, String> internalGetPrefixMap()
-			throws ComponentException {
-		Map<String, String> result = new TreeMap<>();
-		try {
-			for (Ontology ontology : getProfileDocument().getOntology())
-				result.put(ontology.getId(), ontology.getValue());
-		} catch (ComponentException e) {
-		}
-		result.putAll(parent().getPrefixMap());
-		return result;
-	}
-
-	@Override
-	public Map<String, String> getPrefixMap() throws ComponentException {
-		Map<String, String> result = internalGetPrefixMap();
-		if (!isBase())
-			result.putAll(base.getProfile().getPrefixMap());
-		return result;
-	}
-
-	private OntModel readOntologyFromURI(String ontologyId, String ontologyURI) {
-		logger.info("Reading ontology for " + ontologyId + " from "
-				+ ontologyURI);
-		OntModel model = createOntologyModel();
-		try {
-			URL url = new URL(ontologyURI);
-			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-			// CRITICAL: must be retrieved as correct content type
-			conn.addRequestProperty("Accept",
-					"application/rdf+xml,application/xml;q=0.9");
-			try (InputStream in = conn.getInputStream()) {
-				// TODO Consider whether the encoding is handled right
-				// ontologyModel.read(in, url.toString());
-				model.read(new StringReader(IOUtils.toString(in, "UTF-8")),
-						url.toString());
-			}
-		} catch (MalformedURLException e) {
-			logger.error("Problem reading ontology " + ontologyId, e);
-			return null;
-		} catch (IOException e) {
-			logger.error("Problem reading ontology " + ontologyId, e);
-			return null;
-		} catch (NullPointerException e) {
-			// TODO Why is this different?
-			logger.error("Problem reading ontology " + ontologyId, e);
-			model = createOntologyModel();
-		}
-		return model;
-	}
-
-	private boolean isAccessible(String ontologyURI) {
-		return RemoteHealthChecker.contactEndpoint(null, ontologyURI).getResultId() == NO_PROBLEM;
-	}
-
-	@Override
-	public OntModel getOntology(String ontologyId) {
-		String ontologyURI = getOntologyLocation(ontologyId);
-		synchronized (ontologyModels) {
-			if (ontologyModels.containsKey(ontologyURI))
-				return ontologyModels.get(ontologyURI);
-		}
-
-		// Drop out of critical section while we do I/O
-		if (!isAccessible(ontologyURI)) {
-			logger.warn("Catastrophic problem contacting ontology source.");
-			// Catastrophic problem?!
-			synchronized (ontologyModels) {
-				ontologyModels.put(ontologyURI, null);
-			}
-			return null;
-		}
-		OntModel model = readOntologyFromURI(ontologyId, ontologyURI);
-
-		synchronized (ontologyModels) {
-			if (model != null && !ontologyModels.containsKey(ontologyURI)) {
-				ontologyModels.put(ontologyURI, model);
-			}
-			return ontologyModels.get(ontologyURI);
-		}
-	}
-
-	@Override
-	public List<PortProfile> getInputPortProfiles() {
-		List<PortProfile> portProfiles = new ArrayList<>();
-		try {
-			for (Port port : getProfileDocument().getComponent().getInputPort())
-				portProfiles.add(new PortProfileImpl(this, port));
-		} catch (ComponentException e) {
-		}
-		if (!isBase())
-			portProfiles.addAll(base.getProfile().getInputPortProfiles());
-		return portProfiles;
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getInputSemanticAnnotationProfiles()
-			throws ComponentException {
-		List<SemanticAnnotationProfile> saProfiles = new ArrayList<>();
-		List<PortProfile> portProfiles = getInputPortProfiles();
-		portProfiles.addAll(parent().getInputPortProfiles());
-		for (PortProfile portProfile : portProfiles)
-			saProfiles.addAll(portProfile.getSemanticAnnotations());
-		if (!isBase())
-			saProfiles.addAll(base.getProfile()
-					.getInputSemanticAnnotationProfiles());
-		return getUniqueSemanticAnnotationProfiles(saProfiles);
-	}
-
-	@Override
-	public List<PortProfile> getOutputPortProfiles() {
-		List<PortProfile> portProfiles = new ArrayList<>();
-		try {
-			for (Port port : getProfileDocument().getComponent()
-					.getOutputPort())
-				portProfiles.add(new PortProfileImpl(this, port));
-		} catch (ComponentException e) {
-		}
-		if (!isBase())
-			portProfiles.addAll(base.getProfile().getOutputPortProfiles());
-		return portProfiles;
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getOutputSemanticAnnotationProfiles()
-			throws ComponentException {
-		List<SemanticAnnotationProfile> saProfiles = new ArrayList<>();
-		List<PortProfile> portProfiles = getOutputPortProfiles();
-		portProfiles.addAll(parent().getOutputPortProfiles());
-		for (PortProfile portProfile : portProfiles)
-			saProfiles.addAll(portProfile.getSemanticAnnotations());
-		if (!isBase())
-			saProfiles.addAll(base.getProfile()
-					.getOutputSemanticAnnotationProfiles());
-		return getUniqueSemanticAnnotationProfiles(saProfiles);
-	}
-
-	@Override
-	public List<io.github.taverna_extras.component.api.profile.ActivityProfile> getActivityProfiles() {
-		List<io.github.taverna_extras.component.api.profile.ActivityProfile> activityProfiles = new ArrayList<>();
-		try {
-			for (Activity activity : getProfileDocument().getComponent()
-					.getActivity())
-				activityProfiles.add(new ActivityProfileImpl(this, activity));
-		} catch (ComponentException e) {
-		}
-		return activityProfiles;
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getActivitySemanticAnnotationProfiles()
-			throws ComponentException {
-		List<SemanticAnnotationProfile> saProfiles = new ArrayList<>();
-		List<ActivityProfile> activityProfiles = getActivityProfiles();
-		activityProfiles.addAll(parent().getActivityProfiles());
-		for (ActivityProfile activityProfile : activityProfiles)
-			saProfiles.addAll(activityProfile.getSemanticAnnotations());
-		if (!isBase())
-			saProfiles.addAll(base.getProfile()
-					.getActivitySemanticAnnotationProfiles());
-		return getUniqueSemanticAnnotationProfiles(saProfiles);
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getSemanticAnnotations()
-			throws ComponentException {
-		List<SemanticAnnotationProfile> saProfiles = getComponentProfiles();
-		saProfiles.addAll(parent().getSemanticAnnotations());
-		if (!isBase())
-			saProfiles.addAll(base.getProfile().getSemanticAnnotations());
-		return saProfiles;
-	}
-
-	private List<SemanticAnnotationProfile> getComponentProfiles() {
-		List<SemanticAnnotationProfile> saProfiles = new ArrayList<>();
-		try {
-			for (SemanticAnnotation semanticAnnotation : getProfileDocument()
-					.getComponent().getSemanticAnnotation())
-				saProfiles.add(new SemanticAnnotationProfileImpl(this,
-						semanticAnnotation));
-		} catch (ComponentException e) {
-		}
-		return saProfiles;
-	}
-
-	private List<SemanticAnnotationProfile> getUniqueSemanticAnnotationProfiles(
-			List<SemanticAnnotationProfile> semanticAnnotationProfiles) {
-		List<SemanticAnnotationProfile> uniqueSemanticAnnotations = new ArrayList<>();
-		Set<OntProperty> predicates = new HashSet<>();
-		for (SemanticAnnotationProfile semanticAnnotationProfile : semanticAnnotationProfiles) {
-			OntProperty prop = semanticAnnotationProfile.getPredicate();
-			if (prop != null && !predicates.contains(prop)) {
-				predicates.add(prop);
-				uniqueSemanticAnnotations.add(semanticAnnotationProfile);
-			}
-		}
-		return uniqueSemanticAnnotations;
-	}
-
-	@Override
-	public ExceptionHandling getExceptionHandling() {
-		try {
-			if (exceptionHandling == null
-					&& getProfileDocument().getComponent()
-							.getExceptionHandling() != null)
-				exceptionHandling = new ExceptionHandling(getProfileDocument()
-						.getComponent().getExceptionHandling());
-		} catch (ComponentException e) {
-		}
-		return exceptionHandling;
-	}
-
-	@Override
-	public String toString() {
-		return "ComponentProfile" + "\n  Name : " + getName()
-				+ "\n  Description : " + getDescription()
-				+ "\n  InputPortProfiles : " + getInputPortProfiles()
-				+ "\n  OutputPortProfiles : " + getOutputPortProfiles();
-	}
-
-	@Override
-	public int hashCode() {
-		return 31 + ((getId() == null) ? 0 : getId().hashCode());
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		ComponentProfileImpl other = (ComponentProfileImpl) obj;
-		if (!loaded || !other.loaded)
-			return false;
-		if (getId() == null)
-			return other.getId() == null;
-		return getId().equals(other.getId());
-	}
-
-	public OntClass getClass(String className) {
-		try {
-			for (Ontology ontology : getProfileDocument().getOntology()) {
-				OntModel ontModel = getOntology(ontology.getId());
-				if (ontModel != null) {
-					OntClass result = ontModel.getOntClass(className);
-					if (result != null)
-						return result;
-				}
-			}
-		} catch (ComponentException e) {
-		}
-		return null;
-	}
-
-	@Override
-	public void delete() throws ComponentException {
-		throw new ComponentException("Deletion not supported.");
-	}
-}
-
-/**
- * A simple do-nothing implementation of a profile. Used when there's no other
- * option for what a <i>real</i> profile extends.
- * 
- * @author Donal Fellows
- */
-final class EmptyProfile implements
-		io.github.taverna_extras.component.api.profile.Profile {
-	@Override
-	public String getName() {
-		return "";
-	}
-
-	@Override
-	public String getDescription() {
-		return "";
-	}
-
-	@Override
-	public Registry getComponentRegistry() {
-		return null;
-	}
-
-	@Override
-	public String getXML() throws ComponentException {
-		throw new ComponentException("No document.");
-	}
-
-	@Override
-	public Profile getProfileDocument() {
-		return new Profile();
-	}
-
-	@Override
-	public String getId() {
-		return "";
-	}
-
-	@Override
-	public String getOntologyLocation(String ontologyId) {
-		return "";
-	}
-
-	@Override
-	public Map<String, String> getPrefixMap() {
-		return emptyMap();
-	}
-
-	@Override
-	public OntModel getOntology(String ontologyId) {
-		return null;
-	}
-
-	@Override
-	public List<PortProfile> getInputPortProfiles() {
-		return emptyList();
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getInputSemanticAnnotationProfiles() {
-		return emptyList();
-	}
-
-	@Override
-	public List<PortProfile> getOutputPortProfiles() {
-		return emptyList();
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getOutputSemanticAnnotationProfiles() {
-		return emptyList();
-	}
-
-	@Override
-	public List<io.github.taverna_extras.component.api.profile.ActivityProfile> getActivityProfiles() {
-		return emptyList();
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getActivitySemanticAnnotationProfiles() {
-		return emptyList();
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getSemanticAnnotations() {
-		return emptyList();
-	}
-
-	@Override
-	public ExceptionHandling getExceptionHandling() {
-		return null;
-	}
-
-	@Override
-	public void delete() throws ComponentException {
-		throw new ComponentException("Deletion forbidden.");
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/PortProfileImpl.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/PortProfileImpl.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/PortProfileImpl.java
deleted file mode 100644
index 53a1190..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/PortProfileImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package io.github.taverna_extras.component.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;
-
-import io.github.taverna_extras.component.api.profile.PortProfile;
-import io.github.taverna_extras.component.api.profile.SemanticAnnotationProfile;
-
-import io.github.taverna_extras.component.api.profile.doc.Port;
-import io.github.taverna_extras.component.api.profile.doc.SemanticAnnotation;
-
-/**
- * Specifies the semantic annotations that a port must have.
- * 
- * @author David Withers
- */
-public class PortProfileImpl implements PortProfile {
-	private final ComponentProfileImpl componentProfile;
-	private final Port port;
-
-	public PortProfileImpl(ComponentProfileImpl componentProfile, Port port) {
-		this.componentProfile = componentProfile;
-		this.port = port;
-	}
-
-	@Override
-	public List<SemanticAnnotationProfile> getSemanticAnnotations() {
-		List<SemanticAnnotationProfile> saProfiles = new ArrayList<>();
-		for (SemanticAnnotation annotation : port.getSemanticAnnotation())
-			saProfiles.add(new SemanticAnnotationProfileImpl(componentProfile,
-					annotation));
-		return saProfiles;
-	}
-
-	@Override
-	public String toString() {
-		return "PortProfile \n  SemanticAnnotations : "
-				+ getSemanticAnnotations();
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/SemanticAnnotationProfileImpl.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/SemanticAnnotationProfileImpl.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/SemanticAnnotationProfileImpl.java
deleted file mode 100644
index a3b5afa..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/profile/SemanticAnnotationProfileImpl.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package io.github.taverna_extras.component.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.io.File.createTempFile;
-import static org.apache.commons.io.FileUtils.writeStringToFile;
-import static org.apache.log4j.Logger.getLogger;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-import io.github.taverna_extras.component.api.profile.SemanticAnnotationProfile;
-
-import io.github.taverna_extras.component.api.profile.doc.SemanticAnnotation;
-
-import org.apache.jena.ontology.Individual;
-import org.apache.jena.ontology.OntClass;
-import org.apache.jena.ontology.OntModel;
-import org.apache.jena.ontology.OntProperty;
-import org.apache.jena.ontology.OntResource;
-
-/**
- * Definition of a semantic annotation for a component element.
- * 
- * @author David Withers
- */
-public class SemanticAnnotationProfileImpl implements SemanticAnnotationProfile {
-	private static final Logger log = getLogger(SemanticAnnotationProfileImpl.class);
-	private final ComponentProfileImpl componentProfile;
-	private final SemanticAnnotation semanticAnnotation;
-
-	public SemanticAnnotationProfileImpl(ComponentProfileImpl componentProfile,
-			SemanticAnnotation semanticAnnotation) {
-		this.componentProfile = componentProfile;
-		this.semanticAnnotation = semanticAnnotation;
-	}
-
-	/**
-	 * Returns the ontology that defines semantic annotation.
-	 * 
-	 * @return the ontology that defines semantic annotation
-	 */
-	@Override
-	public OntModel getOntology() {
-		String ontology = semanticAnnotation.getOntology();
-		if (ontology == null)
-			return null;
-		return componentProfile.getOntology(ontology);
-	}
-
-	/**
-	 * Returns the predicate for the semantic annotation.
-	 * 
-	 * @return the predicate for the semantic annotation
-	 */
-	@Override
-	public OntProperty getPredicate() {
-		OntModel ontology = getOntology();
-		if (ontology == null)
-			return null;
-		String predicate = semanticAnnotation.getPredicate();
-		if (predicate == null)
-			return null;
-		if (predicate.contains("foaf")) {
-			StringWriter sw = new StringWriter();
-			ontology.writeAll(sw, null, "RDF/XML");
-			try {
-				writeStringToFile(createTempFile("foaf", null), sw.toString());
-			} catch (IOException e) {
-				log.info("failed to write foaf ontology to temporary file", e);
-			}
-		}
-
-		return ontology.getOntProperty(predicate);
-	}
-
-	@Override
-	public String getPredicateString() {
-		return semanticAnnotation.getPredicate();
-	}
-
-	@Override
-	public String getClassString() {
-		return semanticAnnotation.getClazz();
-	}
-
-	/**
-	 * Returns the individual that the semantic annotation must use.
-	 * 
-	 * May be null if no explicit individual is required.
-	 * 
-	 * @return the individual that the semantic annotation must use
-	 */
-	@Override
-	public Individual getIndividual() {
-		String individual = semanticAnnotation.getValue();
-		if (individual == null || individual.isEmpty())
-			return null;
-		return getOntology().getIndividual(individual);
-	}
-
-	/**
-	 * Returns the individuals in the range of the predicate defined in the
-	 * ontology.
-	 * 
-	 * @return the individuals in the range of the predicate defined in the
-	 *         ontology
-	 */
-	@Override
-	public List<Individual> getIndividuals() {
-		OntModel ontology = getOntology();
-		OntProperty prop = getPredicate();
-		if (ontology == null || prop == null)
-			return new ArrayList<>();
-		OntResource range = prop.getRange();
-		if (range == null)
-			return new ArrayList<>();
-		return ontology.listIndividuals(range).toList();
-	}
-
-	@Override
-	public Integer getMinOccurs() {
-		return semanticAnnotation.getMinOccurs().intValue();
-	}
-
-	@Override
-	public Integer getMaxOccurs() {
-		try {
-			return Integer.valueOf(semanticAnnotation.getMaxOccurs());
-		} catch (NumberFormatException e) {
-			return null;
-		}
-	}
-
-	@Override
-	public String toString() {
-		return "SemanticAnnotation " + "\n Predicate : " + getPredicate()
-				+ "\n Individual : " + getIndividual() + "\n Individuals : "
-				+ getIndividuals();
-	}
-
-	@Override
-	public OntClass getRangeClass() {
-		String clazz = this.getClassString();
-		if (clazz != null)
-			return componentProfile.getClass(clazz);
-
-		OntProperty prop = getPredicate();
-		if (prop == null)
-			return null;
-		OntResource range = prop.getRange();
-		if (range != null && range.isClass())
-			return range.asClass();
-		return null;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ClientVersion.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ClientVersion.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ClientVersion.java
deleted file mode 100644
index c9fda59..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ClientVersion.java
+++ /dev/null
@@ -1,51 +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.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-public class ClientVersion {
-	private static final String DEFAULT_VERSION = "1.1.0";
-	public static final String VERSION;
-
-	private ClientVersion() {
-	}
-
-	static {
-		InputStream is = ClientVersion.class
-				.getResourceAsStream("version.properties");
-		String version = DEFAULT_VERSION;
-		if (is != null)
-			try {
-				Properties p = new Properties();
-				p.load(is);
-				version = p.getProperty("project.version", DEFAULT_VERSION);
-			} catch (IOException e) {
-			} finally {
-				try {
-					is.close();
-				} catch (IOException e) {
-				}
-			}
-		VERSION = version;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/Component.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/Component.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/Component.java
deleted file mode 100644
index afdf2b8..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/Component.java
+++ /dev/null
@@ -1,161 +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 java.util.Collections.synchronizedSortedMap;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.Version;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-
-/**
- * A Component is a building block for creating Taverna workflows. Components
- * and must comply with the ComponentProfile of their ComponentFamily.
- * 
- * @author David Withers
- */
-public abstract class Component implements
-		io.github.taverna_extras.component.api.Component {
-	private String name;
-	private String description;
-	private URL url;
-	/**
-	 * Mapping from version numbers to version implementations.
-	 */
-	protected SortedMap<Integer, Version> versionMap = new TreeMap<>();
-
-	protected Component(URL url) {
-		this.url = url;
-	}
-	
-	protected Component(String url) {
-		try {
-			this.url = new URL(url);
-		} catch (MalformedURLException e) {
-			// nothing
-		}
-	}
-
-	protected Component(File fileDir) {
-		try {
-			this.url = fileDir.toURI().toURL();
-		} catch (MalformedURLException e) {
-			// nothing
-		}
-	}
-
-	@Override
-	public final synchronized String getName() {
-		if (name == null)
-			name = internalGetName();
-		return name;
-	}
-
-	/**
-	 * The real implementation of the name fetching. Caching already handled.
-	 * 
-	 * @return The name of the component.
-	 */
-	protected abstract String internalGetName();
-
-	@Override
-	public final synchronized String getDescription() {
-		if (description == null)
-			description = internalGetDescription();
-		return description;
-	}
-
-	/**
-	 * The real implementation of the description fetching. Caching already
-	 * handled.
-	 * 
-	 * @return The description of the component.
-	 */
-	protected abstract String internalGetDescription();
-
-	@Override
-	public final SortedMap<Integer, Version> getComponentVersionMap() {
-		synchronized (versionMap) {
-			checkComponentVersionMap();
-			return synchronizedSortedMap(versionMap);
-		}
-	}
-
-	private void checkComponentVersionMap() {
-		if (versionMap.isEmpty())
-			populateComponentVersionMap();
-	}
-
-	/**
-	 * Create the contents of the {@link #versionMap} field.
-	 */
-	protected abstract void populateComponentVersionMap();
-
-	@Override
-	public final Version getComponentVersion(Integer version)
-			throws ComponentException {
-		synchronized (versionMap) {
-			checkComponentVersionMap();
-			return versionMap.get(version);
-		}
-	}
-
-	@Override
-	public final Version addVersionBasedOn(WorkflowBundle bundle,
-			String revisionComment) throws ComponentException {
-		Version result = internalAddVersionBasedOn(bundle, revisionComment);
-		synchronized (versionMap) {
-			checkComponentVersionMap();
-			versionMap.put(result.getVersionNumber(), result);
-		}
-		return result;
-	}
-
-	/**
-	 * Manufacture a new version of a component. Does not add to the overall
-	 * version map.
-	 * 
-	 * @param bundle
-	 *            The definition of the component.
-	 * @param revisionComment
-	 *            The description of the version.
-	 * @return The new version of the component.
-	 * @throws RegistryException
-	 */
-	protected abstract Version internalAddVersionBasedOn(WorkflowBundle bundle,
-			String revisionComment) throws ComponentException;
-
-	@Override
-	public final URL getComponentURL() {
-		return url;
-	}
-
-	@Override
-	public void delete() throws ComponentException {
-		getFamily().removeComponent(this);
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentFamily.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentFamily.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentFamily.java
deleted file mode 100644
index ce8a782..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentFamily.java
+++ /dev/null
@@ -1,161 +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.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import io.github.taverna_extras.component.api.Component;
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.Registry;
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.api.profile.Profile;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-
-/**
- * A ComponentFamily is a collection of Components that share the same
- * ComponentProfile.
- * 
- * @author David Withers
- */
-public abstract class ComponentFamily implements
-		io.github.taverna_extras.component.api.Family {
-	private Registry parentRegistry;
-	private String name;
-	private String description;
-	private Profile componentProfile;
-	private ComponentUtil util;
-
-	protected Map<String, Component> componentCache = new HashMap<>();
-
-	public ComponentFamily(Registry componentRegistry, ComponentUtil util) {
-		this.parentRegistry = componentRegistry;
-		this.util = util;
-	}
-
-	@Override
-	public Registry getComponentRegistry() {
-		return parentRegistry;
-	}
-
-	@Override
-	public final synchronized String getName() {
-		if (name == null) {
-			name = internalGetName();
-		}
-		return name;
-	}
-
-	protected abstract String internalGetName();
-
-	@Override
-	public final synchronized String getDescription() {
-		if (description == null) {
-			description = internalGetDescription();
-		}
-		return description;
-	}
-
-	protected abstract String internalGetDescription();
-
-	@Override
-	public final synchronized Profile getComponentProfile()
-			throws ComponentException {
-		if (componentProfile == null)
-			componentProfile = internalGetComponentProfile();
-		if (componentProfile == null) {
-			Profile baseProfile = util.getBaseProfile();
-			if (baseProfile != null) {
-				return baseProfile;
-			}
-		}
-		return componentProfile;
-	}
-
-	protected abstract Profile internalGetComponentProfile()
-			throws ComponentException;
-
-	@Override
-	public final List<Component> getComponents() throws ComponentException {
-		checkComponentCache();
-		return new ArrayList<>(componentCache.values());
-	}
-
-	private void checkComponentCache() throws ComponentException {
-		synchronized (componentCache) {
-			if (componentCache.isEmpty())
-				populateComponentCache();
-		}
-	}
-
-	protected abstract void populateComponentCache() throws ComponentException;
-
-	@Override
-	public final Component getComponent(String componentName)
-			throws ComponentException {
-		checkComponentCache();
-		return componentCache.get(componentName);
-	}
-
-	@Override
-	public final Version createComponentBasedOn(String componentName,
-			String description, WorkflowBundle bundle) throws ComponentException {
-		if (componentName == null)
-			throw new ComponentException("Component name must not be null");
-		if (bundle == null)
-			throw new ComponentException("workflow must not be null");
-		checkComponentCache();
-		if (componentCache.containsKey(componentName))
-			throw new ComponentException("Component name already used");
-		Version version = internalCreateComponentBasedOn(componentName,
-				description, bundle);
-		synchronized (componentCache) {
-			Component c = version.getComponent();
-			componentCache.put(componentName, c);
-		}
-		return version;
-	}
-
-	protected abstract Version internalCreateComponentBasedOn(
-			String componentName, String description, WorkflowBundle bundle)
-			throws ComponentException;
-
-	@Override
-	public final void removeComponent(Component component)
-			throws ComponentException {
-		if (component != null) {
-			checkComponentCache();
-			synchronized (componentCache) {
-				componentCache.remove(component.getName());
-			}
-			internalRemoveComponent(component);
-		}
-	}
-
-	protected abstract void internalRemoveComponent(Component component)
-			throws ComponentException;
-
-	@Override
-	public void delete() throws ComponentException {
-		getComponentRegistry().removeComponentFamily(this);
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentImplementationCache.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentImplementationCache.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentImplementationCache.java
deleted file mode 100644
index 91846a3..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentImplementationCache.java
+++ /dev/null
@@ -1,75 +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 java.lang.System.currentTimeMillis;
-import static org.apache.log4j.Logger.getLogger;
-
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import org.apache.log4j.Logger;
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.Version;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-
-public class ComponentImplementationCache {
-	private class Entry {
-		WorkflowBundle implementation;
-		long timestamp;
-	}
-	private final long VALIDITY = 15 * 60 * 1000;
-	private final Logger logger = getLogger(ComponentImplementationCache.class);
-	private final Map<Version.ID, Entry> cache = new WeakHashMap<>();
-	private ComponentUtil utils;
-
-	public void setComponentUtil(ComponentUtil utils) {
-		this.utils = utils;
-	}
-
-	public WorkflowBundle getImplementation(Version.ID id) throws ComponentException {
-		long now = currentTimeMillis();
-		synchronized (id) {
-			Entry entry = cache.get(id);
-			if (entry != null && entry.timestamp >= now)
-				return entry.implementation;
-			logger.info("before calculate component version for " + id);
-			Version componentVersion;
-			try {
-				componentVersion = utils.getVersion(id);
-			} catch (RuntimeException e) {
-				if (entry != null)
-					return entry.implementation;
-				throw new ComponentException(e.getMessage(), e);
-			}
-			logger.info("calculated component version for " + id + " as "
-					+ componentVersion.getVersionNumber() + "; retrieving dataflow");
-			WorkflowBundle implementation = componentVersion.getImplementation();
-			//DataflowValidationReport report = implementation.checkValidity();
-			//logger.info("component version " + id + " incomplete:"
-			//		+ report.isWorkflowIncomplete() + " valid:"
-			//		+ report.isValid());
-			entry = new Entry();
-			entry.implementation = implementation;
-			entry.timestamp = now + VALIDITY;
-			return cache.put(id, entry).implementation;
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentRegistry.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentRegistry.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentRegistry.java
deleted file mode 100644
index 325da27..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentRegistry.java
+++ /dev/null
@@ -1,242 +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.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.Family;
-import io.github.taverna_extras.component.api.License;
-import io.github.taverna_extras.component.api.SharingPolicy;
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.api.profile.Profile;
-
-/**
- * A ComponentRegistry contains ComponentFamilies and ComponentProfiles.
- * 
- * @author David Withers
- */
-public abstract class ComponentRegistry implements
-		io.github.taverna_extras.component.api.Registry {
-	protected Map<String, Family> familyCache = new HashMap<>();
-	protected List<Profile> profileCache = new ArrayList<>();
-	protected List<SharingPolicy> permissionCache = new ArrayList<>();
-	protected List<License> licenseCache = new ArrayList<>();
-
-	private URL registryBase;
-
-	protected ComponentRegistry(URL registryBase) throws ComponentException {
-		this.registryBase = registryBase;
-	}
-
-	protected ComponentRegistry(File fileDir) throws ComponentException {
-		try {
-			this.registryBase = fileDir.toURI().toURL();
-		} catch (MalformedURLException e) {
-			throw new ComponentException(e);
-		}
-	}
-
-	@Override
-	public final List<Family> getComponentFamilies() throws ComponentException {
-		checkFamilyCache();
-		return new ArrayList<Family>(familyCache.values());
-	}
-
-	private void checkFamilyCache() throws ComponentException {
-		synchronized (familyCache) {
-			if (familyCache.isEmpty())
-				populateFamilyCache();
-		}
-	}
-
-	protected abstract void populateFamilyCache() throws ComponentException;
-
-	@Override
-	public final Family getComponentFamily(String familyName)
-			throws ComponentException {
-		checkFamilyCache();
-		return familyCache.get(familyName);
-	}
-
-	@Override
-	public final Family createComponentFamily(String familyName,
-			Profile componentProfile, String description, License license,
-			SharingPolicy sharingPolicy) throws ComponentException {
-		if (familyName == null)
-			throw new ComponentException(
-					"Component family name must not be null");
-		if (componentProfile == null)
-			throw new ComponentException("Component profile must not be null");
-		if (getComponentFamily(familyName) != null)
-			throw new ComponentException("Component family already exists");
-
-		Family result = internalCreateComponentFamily(familyName,
-				componentProfile, description, license, sharingPolicy);
-		checkFamilyCache();
-		synchronized (familyCache) {
-			familyCache.put(familyName, result);
-		}
-		return result;
-	}
-
-	protected abstract Family internalCreateComponentFamily(String familyName,
-			Profile componentProfile, String description, License license,
-			SharingPolicy sharingPolicy) throws ComponentException;
-
-	@Override
-	public final void removeComponentFamily(Family componentFamily)
-			throws ComponentException {
-		if (componentFamily != null) {
-			checkFamilyCache();
-			synchronized (familyCache) {
-				familyCache.remove(componentFamily.getName());
-			}
-		  internalRemoveComponentFamily(componentFamily);
-		}
-	}
-
-	protected abstract void internalRemoveComponentFamily(Family componentFamily)
-			throws ComponentException;
-
-	@Override
-	public final URL getRegistryBase() {
-		return registryBase;
-	}
-
-	@Override
-	public final String getRegistryBaseString() {
-		String urlString = getRegistryBase().toString();
-		if (urlString.endsWith("/"))
-			urlString = urlString.substring(0, urlString.length() - 1);
-		return urlString;
-	}
-
-	private void checkProfileCache() throws ComponentException {
-		synchronized (profileCache) {
-			if (profileCache.isEmpty())
-				populateProfileCache();
-		}
-	}
-
-	protected abstract void populateProfileCache() throws ComponentException;
-
-	@Override
-	public final List<Profile> getComponentProfiles() throws ComponentException {
-		checkProfileCache();
-		return profileCache;
-	}
-
-	@Override
-	public final Profile getComponentProfile(String id)
-			throws ComponentException {
-		// TODO use a map instead of a *linear search*...
-		for (Profile p : getComponentProfiles())
-			if (p.getId().equals(id))
-				return p;
-		return null;
-	}
-
-	@Override
-	public final Profile addComponentProfile(Profile componentProfile,
-			License license, SharingPolicy sharingPolicy)
-			throws ComponentException {
-		if (componentProfile == null) {
-			throw new ComponentException("componentProfile is null");
-		}
-		Profile result = null;
-		checkProfileCache();
-		for (Profile p : getComponentProfiles())
-			if (p.getId().equals(componentProfile.getId())) {
-				result = p;
-				break;
-			}
-
-		if (result == null) {
-			result = internalAddComponentProfile(componentProfile, license,
-					sharingPolicy);
-			synchronized (profileCache) {
-				profileCache.add(result);
-			}
-		}
-		return result;
-	}
-
-	protected abstract Profile internalAddComponentProfile(
-			Profile componentProfile, License license,
-			SharingPolicy sharingPolicy) throws ComponentException;
-
-	private void checkPermissionCache() {
-		synchronized (permissionCache) {
-			if (permissionCache.isEmpty())
-				populatePermissionCache();
-		}
-	}
-
-	protected abstract void populatePermissionCache();
-
-	@Override
-	public final List<SharingPolicy> getPermissions() throws ComponentException {
-		checkPermissionCache();
-		return permissionCache;
-	}
-
-	private void checkLicenseCache() {
-		synchronized (licenseCache) {
-			if (licenseCache.isEmpty())
-				populateLicenseCache();
-		}
-	}
-
-	protected abstract void populateLicenseCache();
-
-	@Override
-	public final List<License> getLicenses() throws ComponentException {
-		checkLicenseCache();
-		return licenseCache;
-	}
-
-	protected License getLicenseByAbbreviation(String licenseString)
-			throws ComponentException {
-		checkLicenseCache();
-		for (License l : getLicenses())
-			if (l.getAbbreviation().equals(licenseString))
-				return l;
-		return null;
-	}
-
-	@Override
-	public abstract License getPreferredLicense() throws ComponentException;
-
-	@Override
-	public abstract Set<Version.ID> searchForComponents(String prefixString,
-			String text) throws ComponentException;
-
-	@Override
-	public String toString() {
-		String[] names = getClass().getName().split("\\.");
-		return names[names.length-1] + ": " + registryBase;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentUtil.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentUtil.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentUtil.java
deleted file mode 100644
index cc31f05..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentUtil.java
+++ /dev/null
@@ -1,130 +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 java.util.HashMap;
-import java.util.Map;
-
-import io.github.taverna_extras.component.api.Component;
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.ComponentFactory;
-import io.github.taverna_extras.component.api.Family;
-import io.github.taverna_extras.component.api.Registry;
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.api.profile.Profile;
-import io.github.taverna_extras.component.profile.BaseProfileLocator;
-import io.github.taverna_extras.component.profile.ComponentProfileImpl;
-import io.github.taverna_extras.component.registry.local.LocalComponentRegistryFactory;
-import io.github.taverna_extras.component.registry.standard.NewComponentRegistryFactory;
-import org.springframework.beans.factory.annotation.Required;
-
-/**
- * @author alanrw
- * @author dkf
- */
-public class ComponentUtil implements ComponentFactory {
-	private NewComponentRegistryFactory netLocator;
-	private BaseProfileLocator base;
-	private LocalComponentRegistryFactory fileLocator;
-
-	private final Map<String, Registry> cache = new HashMap<>();
-
-	@Required
-	public void setNetworkLocator(NewComponentRegistryFactory locator) {
-		this.netLocator = locator;
-	}
-
-	@Required
-	public void setFileLocator(LocalComponentRegistryFactory fileLocator) {
-		this.fileLocator = fileLocator;
-	}
-
-	@Required
-	public void setBaseLocator(BaseProfileLocator base) {
-		this.base = base;
-	}
-
-	@Override
-	public Registry getRegistry(URL registryBase) throws ComponentException {
-		Registry registry = cache.get(registryBase.toString());
-		if (registry != null)
-			return registry;
-
-		if (registryBase.getProtocol().startsWith("http")) {
-			if (!netLocator.verifyBase(registryBase))
-				throw new ComponentException(
-						"Unable to establish credentials for " + registryBase);
-			registry = netLocator.getComponentRegistry(registryBase);
-		} else
-			registry = fileLocator.getComponentRegistry(registryBase);
-		cache.put(registryBase.toString(), registry);
-		return registry;
-	}
-
-	@Override
-	public Family getFamily(URL registryBase, String familyName)
-			throws ComponentException {
-		return getRegistry(registryBase).getComponentFamily(familyName);
-	}
-
-	@Override
-	public Component getComponent(URL registryBase, String familyName,
-			String componentName) throws ComponentException {
-		return getRegistry(registryBase).getComponentFamily(familyName)
-				.getComponent(componentName);
-	}
-
-	@Override
-	public Version getVersion(URL registryBase, String familyName,
-			String componentName, Integer componentVersion)
-			throws ComponentException {
-		return getRegistry(registryBase).getComponentFamily(familyName)
-				.getComponent(componentName)
-				.getComponentVersion(componentVersion);
-	}
-
-	@Override
-	public Version getVersion(Version.ID ident) throws ComponentException {
-		return getVersion(ident.getRegistryBase(), ident.getFamilyName(),
-				ident.getComponentName(), ident.getComponentVersion());
-	}
-
-	@Override
-	public Component getComponent(Version.ID ident) throws ComponentException {
-		return getComponent(ident.getRegistryBase(), ident.getFamilyName(),
-				ident.getComponentName());
-	}
-
-	@Override
-	public Profile getProfile(URL url) throws ComponentException {
-		Profile p = new ComponentProfileImpl(url, base);
-		p.getProfileDocument(); // force immediate loading
-		return p;
-	}
-
-	@Override
-	public Profile getBaseProfile() throws ComponentException {
-		return base.getProfile();
-	}
-
-	public BaseProfileLocator getBaseProfileLocator() {
-		return base;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentVersion.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentVersion.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentVersion.java
deleted file mode 100644
index ab95218..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentVersion.java
+++ /dev/null
@@ -1,77 +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 io.github.taverna_extras.component.api.Component;
-import io.github.taverna_extras.component.api.ComponentException;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-
-public abstract class ComponentVersion implements
-		io.github.taverna_extras.component.api.Version {
-	private Integer versionNumber;
-	private String description;
-	private Component component;
-
-	protected ComponentVersion(Component component) {
-		this.component = component;
-	}
-
-	@Override
-	public final synchronized Integer getVersionNumber() {
-		if (versionNumber == null)
-			versionNumber = internalGetVersionNumber();
-		return versionNumber;
-	}
-
-	protected abstract Integer internalGetVersionNumber();
-
-	@Override
-	public final synchronized String getDescription() {
-		if (description == null)
-			description = internalGetDescription();
-
-		return description;
-	}
-
-	protected abstract String internalGetDescription();
-
-	@Override
-	public final synchronized WorkflowBundle getImplementation()
-			throws ComponentException {
-		// Cached in dataflow cache
-		return internalGetImplementation();
-	}
-
-	protected abstract WorkflowBundle internalGetImplementation()
-			throws ComponentException;
-
-	@Override
-	public final Component getComponent() {
-		return component;
-	}
-
-	@Override
-	public ID getID() {
-		Component c = getComponent();
-		return new ComponentVersionIdentification(c.getRegistry()
-				.getRegistryBase(), c.getFamily().getName(), c.getName(),
-				getVersionNumber());
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentVersionIdentification.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentVersionIdentification.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentVersionIdentification.java
deleted file mode 100644
index 4cecab5..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/ComponentVersionIdentification.java
+++ /dev/null
@@ -1,212 +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.Family;
-import io.github.taverna_extras.component.api.Registry;
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.api.Version.ID;
-
-/**
- * @author alanrw
- * 
- */
-public class ComponentVersionIdentification implements
-		io.github.taverna_extras.component.api.Version.ID {
-	private static final long serialVersionUID = 1768548650702925916L;
-	private URL registryBase;
-	private String familyName;
-	private String componentName;
-	private Integer componentVersion;
-
-	public ComponentVersionIdentification(URL registryBase, String familyName,
-			String componentName, Integer componentVersion) {
-		super();
-		this.registryBase = registryBase;
-		this.familyName = familyName;
-		this.componentName = componentName;
-		this.componentVersion = componentVersion;
-	}
-
-	public ComponentVersionIdentification(Registry registry, Family family,
-			io.github.taverna_extras.component.api.Component component, Integer version) {
-		this(registry.getRegistryBase(), family.getName(), component.getName(), version);
-	}
-
-	public ComponentVersionIdentification(Version.ID toBeCopied) {
-		this.registryBase = toBeCopied.getRegistryBase();
-		this.familyName = toBeCopied.getFamilyName();
-		this.componentName = toBeCopied.getComponentName();
-		this.componentVersion = toBeCopied.getComponentVersion();
-	}
-
-	/**
-	 * @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;
-	}
-
-	/**
-	 * @param componentVersion
-	 *            the componentVersion to set
-	 */
-	public void setComponentVersion(Integer componentVersion) {
-		this.componentVersion = componentVersion;
-	}
-
-	/**
-	 * @param registryBase
-	 *            the registryBase to set
-	 */
-	public void setRegistryBase(URL registryBase) {
-		this.registryBase = registryBase;
-	}
-
-	/**
-	 * @param familyName
-	 *            the familyName to set
-	 */
-	public void setFamilyName(String familyName) {
-		this.familyName = familyName;
-	}
-
-	/**
-	 * @param componentName
-	 *            the componentName to set
-	 */
-	public void setComponentName(String componentName) {
-		this.componentName = componentName;
-	}
-
-	@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 (getClass() != obj.getClass())
-			return false;
-		ComponentVersionIdentification other = (ComponentVersionIdentification) obj;
-		if (componentName == null) {
-			if (other.componentName != null)
-				return false;
-		} else if (!componentName.equals(other.componentName))
-			return false;
-		if (componentVersion == null) {
-			if (other.componentVersion != null)
-				return false;
-		} else if (!componentVersion.equals(other.componentVersion))
-			return false;
-		if (familyName == null) {
-			if (other.familyName != null)
-				return false;
-		} else if (!familyName.equals(other.familyName))
-			return false;
-		if (registryBase == null) {
-			if (other.registryBase != null)
-				return false;
-		} else if (!registryBase.toString().equals(other.registryBase.toString()))
-			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;
-		ComponentVersionIdentification other = (ComponentVersionIdentification) id;
-		if (componentName == null) {
-			if (other.componentName != null)
-				return false;
-		} else if (!componentName.equals(other.componentName))
-			return false;
-		if (familyName == null) {
-			if (other.familyName != null)
-				return false;
-		} else if (!familyName.equals(other.familyName))
-			return false;
-		if (registryBase == null) {
-			if (other.registryBase != null)
-				return false;
-		} else if (!registryBase.toString().equals(other.registryBase.toString()))
-			return false;
-		return true;
-	}
-
-	@Override
-	public boolean mostlyEqualTo(io.github.taverna_extras.component.api.Component c) {
-		return mostlyEqualTo(new ComponentVersionIdentification(c.getRegistry(), c.getFamily(), c, 0));
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponent.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponent.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponent.java
deleted file mode 100644
index 697f57f..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponent.java
+++ /dev/null
@@ -1,149 +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.apache.commons.io.FileUtils.readFileToString;
-import static org.apache.commons.io.FileUtils.writeStringToFile;
-import static org.apache.log4j.Logger.getLogger;
-import static io.github.taverna_extras.component.registry.local.LocalComponentRegistry.ENC;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.NoSuchElementException;
-
-import org.apache.log4j.Logger;
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.Family;
-import io.github.taverna_extras.component.api.Registry;
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.registry.Component;
-import io.github.taverna_extras.component.utils.SystemUtils;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-
-/**
- * @author alanrw
- * 
- */
-class LocalComponent extends Component {
-	static final String COMPONENT_FILENAME = "dataflow.t2flow";
-	private final File componentDir;
-	private final LocalComponentRegistry registry;
-	private final LocalComponentFamily family;
-	private static Logger logger = getLogger(LocalComponent.class);
-	private SystemUtils system;
-
-	public LocalComponent(File componentDir, LocalComponentRegistry registry,
-			LocalComponentFamily family, SystemUtils system) {
-		super(componentDir);
-		this.system = system;
-		this.componentDir = componentDir;
-		this.registry = registry;
-		this.family = family;
-	}
-
-	@Override
-	protected final Version internalAddVersionBasedOn(WorkflowBundle bundle,
-			String revisionComment) throws ComponentException {
-		Integer nextVersionNumber = 1;
-		try {
-			nextVersionNumber = getComponentVersionMap().lastKey() + 1;
-		} catch (NoSuchElementException e) {
-			// This is OK
-		}
-		File newVersionDir = new File(componentDir,
-				nextVersionNumber.toString());
-		newVersionDir.mkdirs();
-		LocalComponentVersion newComponentVersion = new LocalComponentVersion(
-				this, newVersionDir, system);
-		try {
-			system.saveBundle(bundle, new File(newVersionDir,
-					COMPONENT_FILENAME));
-		} catch (Exception e) {
-			throw new ComponentException("Unable to save component version", e);
-		}
-		File revisionCommentFile = new File(newVersionDir, "description");
-		try {
-			writeStringToFile(revisionCommentFile, revisionComment, ENC);
-		} catch (IOException e) {
-			throw new ComponentException("Could not write out description", e);
-		}
-
-		return newComponentVersion;
-	}
-
-	@Override
-	protected final String internalGetName() {
-		return componentDir.getName();
-	}
-
-	@Override
-	protected final void populateComponentVersionMap() {
-		for (File subFile : componentDir.listFiles())
-			try {
-				if (subFile.isDirectory())
-					versionMap.put(Integer.valueOf(subFile.getName()),
-							new LocalComponentVersion(this, subFile, system));
-			} catch (NumberFormatException e) {
-				// Ignore
-			}
-	}
-
-	@Override
-	public int hashCode() {
-		return 31 + ((componentDir == null) ? 0 : componentDir.hashCode());
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		LocalComponent other = (LocalComponent) obj;
-		if (componentDir == null)
-			return (other.componentDir == null);
-		return componentDir.equals(other.componentDir);
-	}
-
-	@Override
-	protected final String internalGetDescription() {
-		File descriptionFile = new File(componentDir, "description");
-		try {
-			if (descriptionFile.isFile())
-				return readFileToString(descriptionFile);
-		} catch (IOException e) {
-			logger.error("failed to get description from " + descriptionFile, e);
-		}
-		return "";
-	}
-
-	@Override
-	public Registry getRegistry() {
-		return registry;
-	}
-
-	@Override
-	public Family getFamily() {
-		return family;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-component/blob/b7b61e71/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentFamily.java
----------------------------------------------------------------------
diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentFamily.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentFamily.java
deleted file mode 100644
index b9a692c..0000000
--- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentFamily.java
+++ /dev/null
@@ -1,155 +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.apache.commons.io.FileUtils.deleteDirectory;
-import static org.apache.commons.io.FileUtils.readFileToString;
-import static org.apache.commons.io.FileUtils.writeStringToFile;
-import static org.apache.log4j.Logger.getLogger;
-import static io.github.taverna_extras.component.registry.local.LocalComponentRegistry.ENC;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.log4j.Logger;
-import io.github.taverna_extras.component.api.Component;
-import io.github.taverna_extras.component.api.ComponentException;
-import io.github.taverna_extras.component.api.Version;
-import io.github.taverna_extras.component.api.profile.Profile;
-import io.github.taverna_extras.component.registry.ComponentFamily;
-import io.github.taverna_extras.component.registry.ComponentUtil;
-import io.github.taverna_extras.component.utils.SystemUtils;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-
-/**
- * @author alanrw
- * 
- */
-class LocalComponentFamily extends ComponentFamily {
-	private static Logger logger = getLogger(LocalComponentFamily.class);
-	private static final String PROFILE = "profile";
-
-	private final File componentFamilyDir;
-	private SystemUtils system;
-
-	public LocalComponentFamily(LocalComponentRegistry parentRegistry,
-			File componentFamilyDir, ComponentUtil util, SystemUtils system) {
-		super(parentRegistry, util);
-		this.componentFamilyDir = componentFamilyDir;
-		this.system = system;
-	}
-
-	@Override
-	protected final Profile internalGetComponentProfile()
-			throws ComponentException {
-		LocalComponentRegistry parentRegistry = (LocalComponentRegistry) getComponentRegistry();
-		File profileFile = new File(componentFamilyDir, PROFILE);
-		String profileName;
-		try {
-			profileName = readFileToString(profileFile, ENC);
-		} catch (IOException e) {
-			throw new ComponentException("Unable to read profile name", e);
-		}
-		for (Profile p : parentRegistry.getComponentProfiles())
-			if (p.getName().equals(profileName))
-				return p;
-		return null;
-	}
-
-	@Override
-	protected void populateComponentCache() throws ComponentException {
-		for (File subFile : componentFamilyDir.listFiles()) {
-			if (!subFile.isDirectory())
-				continue;
-			LocalComponent newComponent = new LocalComponent(subFile,
-					(LocalComponentRegistry) getComponentRegistry(), this,
-					system);
-			componentCache.put(newComponent.getName(), newComponent);
-		}
-	}
-
-	@Override
-	protected final String internalGetName() {
-		return componentFamilyDir.getName();
-	}
-
-	@Override
-	protected final Version internalCreateComponentBasedOn(
-			String componentName, String description, WorkflowBundle bundle)
-			throws ComponentException {
-		File newSubFile = new File(componentFamilyDir, componentName);
-		if (newSubFile.exists())
-			throw new ComponentException("Component already exists");
-		newSubFile.mkdirs();
-		File descriptionFile = new File(newSubFile, "description");
-		try {
-			writeStringToFile(descriptionFile, description, ENC);
-		} catch (IOException e) {
-			throw new ComponentException("Could not write out description", e);
-		}
-		LocalComponent newComponent = new LocalComponent(newSubFile,
-				(LocalComponentRegistry) getComponentRegistry(), this, system);
-
-		return newComponent.addVersionBasedOn(bundle, "Initial version");
-	}
-
-	@Override
-	public int hashCode() {
-		return 31 + ((componentFamilyDir == null) ? 0 : componentFamilyDir
-				.hashCode());
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		LocalComponentFamily other = (LocalComponentFamily) obj;
-		if (componentFamilyDir == null)
-			return (other.componentFamilyDir == null);
-		return componentFamilyDir.equals(other.componentFamilyDir);
-	}
-
-	@Override
-	protected final String internalGetDescription() {
-		File descriptionFile = new File(componentFamilyDir, "description");
-		try {
-			if (descriptionFile.isFile())
-				return readFileToString(descriptionFile);
-		} catch (IOException e) {
-			logger.error("failed to get description from " + descriptionFile, e);
-		}
-		return "";
-	}
-
-	@Override
-	protected final void internalRemoveComponent(Component component)
-			throws ComponentException {
-		File componentDir = new File(componentFamilyDir, component.getName());
-		try {
-			deleteDirectory(componentDir);
-		} catch (IOException e) {
-			throw new ComponentException("Unable to delete component", e);
-		}
-	}
-}