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