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/LocalComponentRegistry.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentRegistry.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentRegistry.java deleted file mode 100644 index fd0285d..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentRegistry.java +++ /dev/null @@ -1,220 +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.writeStringToFile; -import static org.apache.log4j.Logger.getLogger; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.util.Set; - -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.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; -import io.github.taverna_extras.component.profile.ComponentProfileImpl; -import io.github.taverna_extras.component.registry.ComponentRegistry; -import io.github.taverna_extras.component.registry.ComponentUtil; -import io.github.taverna_extras.component.utils.SystemUtils; - -/** - * A component registry implemented using the local file system. Note that the - * components it contains are <i>not</i> shareable. - * - * @author alanrw - */ -class LocalComponentRegistry extends ComponentRegistry { - private static final Logger logger = getLogger(LocalComponentRegistry.class); - static final String ENC = "utf-8"; - private ComponentUtil util; - private SystemUtils system; - private File baseDir; - - public LocalComponentRegistry(File registryDir, ComponentUtil util, - SystemUtils system) throws ComponentException { - super(registryDir); - baseDir = registryDir; - this.util = util; - this.system = system; - } - - @Override - public Family internalCreateComponentFamily(String name, - Profile componentProfile, String description, License license, - SharingPolicy sharingPolicy) throws ComponentException { - File newFamilyDir = new File(getComponentFamiliesDir(), name); - newFamilyDir.mkdirs(); - File profileFile = new File(newFamilyDir, "profile"); - try { - writeStringToFile(profileFile, componentProfile.getName(), ENC); - } catch (IOException e) { - throw new ComponentException("Could not write out profile", e); - } - File descriptionFile = new File(newFamilyDir, "description"); - try { - writeStringToFile(descriptionFile, description, ENC); - } catch (IOException e) { - throw new ComponentException("Could not write out description", e); - } - return new LocalComponentFamily(this, newFamilyDir, util, system); - } - - @Override - protected void populateFamilyCache() throws ComponentException { - File familiesDir = getComponentFamiliesDir(); - for (File subFile : familiesDir.listFiles()) { - if (!subFile.isDirectory()) - continue; - LocalComponentFamily newFamily = new LocalComponentFamily(this, - subFile, util, system); - familyCache.put(newFamily.getName(), newFamily); - } - } - - @Override - protected void populateProfileCache() throws ComponentException { - File profilesDir = getComponentProfilesDir(); - for (File subFile : profilesDir.listFiles()) - if (subFile.isFile() && (!subFile.isHidden()) - && subFile.getName().endsWith(".xml")) - try { - profileCache.add(new LocalComponentProfile(subFile)); - } catch (MalformedURLException e) { - logger.error("Unable to read profile", e); - } - } - - @Override - protected void internalRemoveComponentFamily(Family componentFamily) - throws ComponentException { - try { - deleteDirectory(new File(getComponentFamiliesDir(), - componentFamily.getName())); - } catch (IOException e) { - throw new ComponentException("Unable to delete component family", e); - } - } - - private File getBaseDir() { - baseDir.mkdirs(); - return baseDir; - } - - private File getComponentFamiliesDir() { - File componentFamiliesDir = new File(getBaseDir(), "componentFamilies"); - componentFamiliesDir.mkdirs(); - return componentFamiliesDir; - } - - private File getComponentProfilesDir() { - File componentProfilesDir = new File(getBaseDir(), "componentProfiles"); - componentProfilesDir.mkdirs(); - return componentProfilesDir; - } - - @Override - public Profile internalAddComponentProfile(Profile componentProfile, - License license, SharingPolicy sharingPolicy) - throws ComponentException { - String name = componentProfile.getName().replaceAll("\\W+", "") - + ".xml"; - String inputString = componentProfile.getXML(); - File outputFile = new File(getComponentProfilesDir(), name); - try { - writeStringToFile(outputFile, inputString); - } catch (IOException e) { - throw new ComponentException("Unable to save profile", e); - } - - try { - return new LocalComponentProfile(outputFile); - } catch (MalformedURLException e) { - throw new ComponentException("Unable to create profile", e); - } - } - - @Override - public int hashCode() { - return 31 + ((baseDir == null) ? 0 : baseDir.hashCode()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - LocalComponentRegistry other = (LocalComponentRegistry) obj; - if (baseDir == null) - return (other.baseDir == null); - return baseDir.equals(other.baseDir); - } - - @Override - public void populatePermissionCache() { - return; - } - - @Override - public void populateLicenseCache() { - return; - } - - @Override - public License getPreferredLicense() { - return null; - } - - @Override - public Set<Version.ID> searchForComponents(String prefixString, String text) - throws ComponentException { - throw new ComponentException("Local registries cannot be searched yet"); - } - - @Override - public String getRegistryTypeName() { - return "File System"; - } - - class LocalComponentProfile extends ComponentProfileImpl { - URI uri; - - LocalComponentProfile(File file) throws MalformedURLException, - ComponentException { - super(LocalComponentRegistry.this, file.toURI(), util - .getBaseProfileLocator()); - uri = file.toURI(); - } - - @Override - public String toString() { - return "Local Component Profile[" + uri + "]"; - } - } -}
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/LocalComponentRegistryFactory.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentRegistryFactory.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentRegistryFactory.java deleted file mode 100644 index f2625d1..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentRegistryFactory.java +++ /dev/null @@ -1,62 +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 java.io.File; -import java.net.URL; -import java.net.URLDecoder; -import java.util.HashMap; -import java.util.Map; - -import io.github.taverna_extras.component.api.ComponentException; -import io.github.taverna_extras.component.api.Registry; -import io.github.taverna_extras.component.registry.ComponentUtil; -import io.github.taverna_extras.component.utils.SystemUtils; -import org.springframework.beans.factory.annotation.Required; - -public class LocalComponentRegistryFactory { - private final Map<File, Registry> registries = new HashMap<>(); - private ComponentUtil util; - private SystemUtils system; - - @Required - public void setComponentUtil(ComponentUtil util) { - this.util = util; - } - - @Required - public void setSystemUtils(SystemUtils system) { - this.system = system; - } - - public synchronized Registry getComponentRegistry(File registryDir) - throws ComponentException { - if (!registries.containsKey(registryDir)) - registries.put(registryDir, new LocalComponentRegistry(registryDir, - util, system)); - return registries.get(registryDir); - } - - public Registry getComponentRegistry(URL componentRegistryBase) - throws ComponentException { - @SuppressWarnings("deprecation") - String hackedPath = URLDecoder.decode(componentRegistryBase.getPath()); - return getComponentRegistry(new File(hackedPath)); - } -} 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/LocalComponentVersion.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentVersion.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentVersion.java deleted file mode 100644 index 976aa8b..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/local/LocalComponentVersion.java +++ /dev/null @@ -1,108 +0,0 @@ -package io.github.taverna_extras.component.registry.local; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static java.lang.Integer.parseInt; -import static org.apache.commons.io.FileUtils.readFileToString; -import static org.apache.log4j.Logger.getLogger; -import static io.github.taverna_extras.component.registry.local.LocalComponent.COMPONENT_FILENAME; - -import java.io.File; -import java.io.IOException; -import java.net.URL; - -import org.apache.log4j.Logger; -import io.github.taverna_extras.component.api.ComponentException; -import io.github.taverna_extras.component.registry.ComponentVersion; -import io.github.taverna_extras.component.utils.SystemUtils; - -import org.apache.taverna.scufl2.api.container.WorkflowBundle; - -/** - * @author alanrw - * - */ -class LocalComponentVersion extends ComponentVersion { - private static Logger logger = getLogger(LocalComponentVersion.class); - - private final File componentVersionDir; - private SystemUtils system; - - protected LocalComponentVersion(LocalComponent component, - File componentVersionDir, SystemUtils system) { - super(component); - this.componentVersionDir = componentVersionDir; - this.system = system; - } - - @Override - protected final String internalGetDescription() { - File descriptionFile = new File(componentVersionDir, "description"); - try { - if (descriptionFile.isFile()) - return readFileToString(descriptionFile); - } catch (IOException e) { - logger.error("failed to get description from " + descriptionFile, e); - } - return ""; - } - - @Override - protected final Integer internalGetVersionNumber() { - return parseInt(componentVersionDir.getName()); - } - - @Override - protected final WorkflowBundle internalGetImplementation() - throws ComponentException { - File filename = new File(componentVersionDir, COMPONENT_FILENAME); - try { - return system.getBundle(filename); - } catch (Exception e) { - logger.error( - "failed to get component realization from " + filename, e); - throw new ComponentException("Unable to open dataflow", e); - } - } - - @Override - public int hashCode() { - return 31 + ((componentVersionDir == null) ? 0 : componentVersionDir - .hashCode()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - LocalComponentVersion other = (LocalComponentVersion) obj; - if (componentVersionDir == null) - return (other.componentVersionDir == null); - return componentVersionDir.equals(other.componentVersionDir); - } - - @Override - public URL getHelpURL() { - 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/standard/Client.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/Client.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/Client.java deleted file mode 100644 index 87b99b1..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/Client.java +++ /dev/null @@ -1,654 +0,0 @@ -package io.github.taverna_extras.component.registry.standard; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static java.lang.Math.min; -import static java.lang.String.format; -import static java.lang.System.getProperty; -import static java.net.HttpURLConnection.HTTP_BAD_REQUEST; -import static java.net.HttpURLConnection.HTTP_FORBIDDEN; -import static java.net.HttpURLConnection.HTTP_NOT_FOUND; -import static java.net.HttpURLConnection.HTTP_NO_CONTENT; -import static java.net.HttpURLConnection.HTTP_OK; -import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; -import static java.net.URLEncoder.encode; -import static javax.xml.bind.DatatypeConverter.printBase64Binary; -import static org.apache.commons.io.IOUtils.copy; -import static org.apache.log4j.Logger.getLogger; -import static io.github.taverna_extras.component.registry.ClientVersion.VERSION; - -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -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.registry.standard.Client.MyExperimentConnector.ServerResponse; -import io.github.taverna_extras.component.registry.standard.annotations.Unused; -import org.apache.taverna.security.credentialmanager.CMException; -import org.apache.taverna.security.credentialmanager.CredentialManager; -import org.apache.taverna.security.credentialmanager.UsernamePassword; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.xml.sax.SAXException; - -class Client { - private static final String API_VERIFICATION_RESOURCE = "/component-profiles.xml"; - private static final String WHOAMI = "/whoami.xml"; - private static final String PLUGIN_USER_AGENT = "Taverna2-Component-plugin/" - + VERSION + " Java/" + getProperty("java.version"); - private static final int MESSAGE_TRIM_LENGTH = 512; - private static final Logger logger = getLogger(Client.class); - private final MyExperimentConnector http; - private final URL registryBase; - private final JAXBContext jaxbContext; - private final CredentialManager cm; - - Client(JAXBContext context, URL repository, CredentialManager cm) - throws ComponentException { - this(context, repository, true, cm); - } - - Client(JAXBContext context, URL repository, boolean tryLogIn, - CredentialManager cm) throws ComponentException { - this.cm = cm; - this.registryBase = repository; - this.jaxbContext = context; - this.http = new MyExperimentConnector(tryLogIn); - logger.info("instantiated client connection engine to " + repository); - } - - public boolean verify() { - try { - String url = url(API_VERIFICATION_RESOURCE); - logger.info("API verification: HEAD for " + url); - return http.HEAD(url).getCode() == HTTP_OK; - } catch (Exception e) { - logger.info("failed to connect to " + registryBase, e); - return false; - } - } - - private String url(String uri, String... arguments) - throws MalformedURLException, UnsupportedEncodingException { - StringBuilder uriBuilder = new StringBuilder(uri); - for (String queryElement : arguments) { - String[] bits = queryElement.split("=", 2); - uriBuilder.append(uriBuilder.indexOf("?") < 0 ? "?" : "&") - .append(bits[0]).append('=') - .append(encode(bits[1], "UTF-8")); - } - return new URL(registryBase, uriBuilder.toString()).toString(); - } - - private Marshaller getMarshaller() throws JAXBException { - return jaxbContext.createMarshaller(); - } - - /** - * Does an HTTP GET against the configured repository. - * - * @param clazz - * The JAXB-annotated class that the result is supposed to be - * instantiated into. - * @param uri - * The path part of the URI within the repository. - * @param query - * The strings to put into the query part. Each should be in - * <tt>key=value</tt> form. - * @return The deserialized response object. - * @throws ComponentException - * If anything goes wrong. - */ - public <T> T get(Class<T> clazz, String uri, String... query) - throws ComponentException { - try { - int redirectCounter = 0; - - String url = url(uri, query); - ServerResponse response; - do { - if (redirectCounter++ > 5) - throw new ComponentException("too many redirects!"); - logger.info("GET of " + url); - response = http.GET(url); - if (response.isFailure()) - throw new ComponentException( - "Unable to perform request (%d): %s", - response.getCode(), response.getError()); - } while ((url = response.getLocation()) != null); - return response.getResponse(clazz); - - } catch (ComponentException e) { - throw e; - } catch (MalformedURLException e) { - throw new ComponentException("Problem constructing resource URL", e); - } catch (JAXBException e) { - throw new ComponentException("Problem when unmarshalling response", - e); - } catch (Exception e) { - throw new ComponentException("Problem when sending request", e); - } - } - - /** - * Does an HTTP POST against the configured repository. - * - * @param clazz - * The JAXB-annotated class that the result is supposed to be - * instantiated into. - * @param elem - * The JAXB element to post to the resource. - * @param uri - * The path part of the URI within the repository. - * @param query - * The strings to put into the query part. Each should be in - * <tt>key=value</tt> form. - * @return The deserialized response object. - * @throws ComponentException - * If anything goes wrong. - */ - public <T> T post(Class<T> clazz, JAXBElement<?> elem, String uri, - String... query) throws ComponentException { - try { - - String url = url(uri, query); - logger.info("POST to " + url); - StringWriter sw = new StringWriter(); - getMarshaller().marshal(elem, sw); - if (logger.isDebugEnabled()) - logger.info("About to post XML document:\n" + sw); - ServerResponse response = http.POST(url, sw); - if (response.isFailure()) - throw new ComponentException( - "Unable to perform request (%d): %s", - response.getCode(), response.getError()); - if (response.getLocation() != null) - return get(clazz, response.getLocation()); - return response.getResponse(clazz); - - } catch (ComponentException e) { - throw e; - } catch (MalformedURLException e) { - throw new ComponentException("Problem constructing resource URL", e); - } catch (JAXBException e) { - throw new ComponentException("Problem when marshalling request", e); - } catch (Exception e) { - throw new ComponentException("Problem when sending request", e); - } - } - - /** - * Does an HTTP PUT against the configured repository. - * - * @param clazz - * The JAXB-annotated class that the result is supposed to be - * instantiated into. - * @param elem - * The JAXB element to post to the resource. - * @param uri - * The path part of the URI within the repository. - * @param query - * The strings to put into the query part. Each should be in - * <tt>key=value</tt> form. - * @return The deserialized response object. - * @throws ComponentException - * If anything goes wrong. - */ - @Unused - public <T> T put(Class<T> clazz, JAXBElement<?> elem, String uri, - String... query) throws ComponentException { - try { - - String url = url(uri, query); - logger.info("PUT to " + url); - StringWriter sw = new StringWriter(); - getMarshaller().marshal(elem, sw); - if (logger.isDebugEnabled()) - logger.info("About to put XML document:\n" + sw); - ServerResponse response = http.PUT(url, sw); - if (response.isFailure()) - throw new ComponentException( - "Unable to perform request (%d): %s", - response.getCode(), response.getError()); - if (response.getLocation() != null) - return get(clazz, response.getLocation()); - return response.getResponse(clazz); - - } catch (ComponentException e) { - throw e; - } catch (MalformedURLException e) { - throw new ComponentException("Problem constructing resource URL", e); - } catch (JAXBException e) { - throw new ComponentException("Problem when marshalling request", e); - } catch (Exception e) { - throw new ComponentException("Problem when sending request", e); - } - } - - /** - * Does an HTTP DELETE against the configured repository. - * - * @param uri - * The path part of the URI within the repository. - * @param query - * The strings to put into the query part. Each should be in - * <tt>key=value</tt> form. - * @throws ComponentException - * If anything goes wrong. - */ - public void delete(String uri, String... query) throws ComponentException { - ServerResponse response; - try { - - String url = url(uri, query); - logger.info("DELETE of " + url); - response = http.DELETE(url); - - } catch (MalformedURLException e) { - throw new ComponentException("Problem constructing resource URL", e); - } catch (Exception e) { - throw new ComponentException("Unable to perform request", e); - } - if (response.isFailure()) - throw new ComponentException("Unable to perform request (%d): %s", - response.getCode(), response.getError()); - } - - private String getCredentials(String urlString, boolean mandatory) - throws CMException, UnsupportedEncodingException { - final URI serviceURI = URI.create(urlString); - - if (mandatory || cm.hasUsernamePasswordForService(serviceURI)) { - UsernamePassword userAndPass = cm.getUsernameAndPasswordForService( - serviceURI, true, null); - // Check for user didn't log in... - if (userAndPass == null) - return null; - return printBase64Binary(format("%s:%s", userAndPass.getUsername(), - userAndPass.getPasswordAsString()).getBytes("UTF-8")); - } - return null; - } - - private void clearCredentials(String baseURL) throws CMException { - for (URI uri : cm.getServiceURIsForAllUsernameAndPasswordPairs()) - if (uri.toString().startsWith(baseURL)) - cm.deleteUsernameAndPasswordForService(uri); - } - - private static Document getDocumentFromStream(InputStream inputStream) - throws SAXException, IOException, ParserConfigurationException { - DocumentBuilder db = DocumentBuilderFactory.newInstance() - .newDocumentBuilder(); - Document doc; - try (InputStream is = new BufferedInputStream(inputStream)) { - if (!logger.isDebugEnabled()) - doc = db.parse(is); - else { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - copy(is, baos); - String response = baos.toString("UTF-8"); - logger.info("response message follows\n" - + response.substring(0, - min(MESSAGE_TRIM_LENGTH, response.length()))); - doc = db.parse(new ByteArrayInputStream(baos.toByteArray())); - } - } - return doc; - } - - class MyExperimentConnector { - // authentication settings (and the current user) - private String authString = null; - - private void tryLogIn(boolean mandatory) throws ComponentException { - // check if the stored credentials are valid - ServerResponse response = null; - try { - String userPass = getCredentials(registryBase.toString(), - mandatory); - if (userPass == null) - logger.debug("no credentials available for " + registryBase); - else { - // set the system to the "logged in" state from INI file properties - authString = userPass; - response = GET(registryBase.toString() + WHOAMI); - } - } catch (Exception e) { - authString = null; - logger.debug("failed when verifying login credentials", e); - } - - if (response == null || response.getCode() != HTTP_OK) - try { - if (response != null) - throw new ComponentException("failed to log in: " - + response.getError()); - } finally { - try { - authString = null; - clearCredentials(registryBase.toString()); - } catch (Exception e) { - logger.debug("failed to clear credentials", e); - } - } - if (authString != null) - logger.debug("logged in to repository successfully"); - } - - MyExperimentConnector(boolean tryLogIn) throws ComponentException { - if (tryLogIn) - tryLogIn(false); - } - - // getter for the current status - private boolean isLoggedIn() { - return authString != null; - } - - private HttpURLConnection connect(String method, String strURL) - throws MalformedURLException, IOException { - HttpURLConnection conn = (HttpURLConnection) new URL(strURL) - .openConnection(); - conn.setRequestMethod(method); - if (method.equals("POST") || method.equals("PUT")) - conn.setDoOutput(true); - conn.setRequestProperty("User-Agent", PLUGIN_USER_AGENT); - if (authString != null) - conn.setRequestProperty("Authorization", "Basic " + authString); - return conn; - } - - private boolean elevate() throws ComponentException { - tryLogIn(true); - return isLoggedIn(); - } - - /** - * Generic method to execute GET requests to myExperiment server. - * - * @param url - * The URL on myExperiment to issue GET request to. - * @return An object containing XML Document with server's response body - * and a response code. Response body XML document might be null - * if there was an error or the user wasn't authorised to - * perform a certain action. Response code will always be set. - * @throws Exception - */ - public ServerResponse GET(String url) throws Exception { - if (!isLoggedIn()) - logger.warn("not logged in"); - return receiveServerResponse(connect("GET", url), url, true, false); - } - - /** - * Generic method to execute GET requests to myExperiment server. - * - * @param url - * The URL on myExperiment to issue GET request to. - * @return An object containing XML Document with server's response body - * and a response code. Response body XML document might be null - * if there was an error or the user wasn't authorised to - * perform a certain action. Response code will always be set. - * @throws Exception - */ - public ServerResponse HEAD(String url) throws Exception { - if (!isLoggedIn()) - logger.warn("not logged in"); - return receiveServerResponse(connect("HEAD", url), url, false, true); - } - - /** - * Generic method to execute GET requests to myExperiment server. - * - * @param url - * The URL on myExperiment to POST to. - * @param xmlDataBody - * Body of the XML data to be POSTed to strURL. - * @return An object containing XML Document with server's response body - * and a response code. Response body XML document might be null - * if there was an error or the user wasn't authorised to - * perform a certain action. Response code will always be set. - * @throws Exception - */ - public ServerResponse POST(String url, Object xmlDataBody) - throws Exception { - if (!isLoggedIn() && !elevate()) - return null; - - HttpURLConnection conn = connect("POST", url); - sendXmlBody(xmlDataBody, conn); - return receiveServerResponse(conn, url, false, false); - } - - /** - * Generic method to execute DELETE requests to myExperiment server. - * This is only to be called when a user is logged in. - * - * @param url - * The URL on myExperiment to direct DELETE request to. - * @return An object containing XML Document with server's response body - * and a response code. Response body XML document might be null - * if there was an error or the user wasn't authorised to - * perform a certain action. Response code will always be set. - * @throws Exception - */ - public ServerResponse DELETE(String url) throws Exception { - if (!isLoggedIn() && !elevate()) - return null; - return receiveServerResponse(connect("DELETE", url), url, true, - false); - } - - @Unused - public ServerResponse PUT(String url, Object xmlDataBody) - throws Exception { - if (!isLoggedIn() && !elevate()) - return null; - - HttpURLConnection conn = connect("PUT", url); - sendXmlBody(xmlDataBody, conn); - return receiveServerResponse(conn, url, false, false); - } - - /** - * Factoring out of how to write a body. - * - * @param xmlDataBody - * What to write (an {@link InputStream}, a {@link Reader} or - * an object that will have it's {@link Object#toString() - * toString()} method called. - * @param conn - * Where to write it to. - * @throws IOException - * If anything goes wrong. The <code>conn</code> will be - * disconnected in the case of a failure. - */ - private void sendXmlBody(Object xmlDataBody, HttpURLConnection conn) - throws IOException { - try { - conn.setRequestProperty("Content-Type", "application/xml"); - if (xmlDataBody instanceof InputStream) - copy((InputStream) xmlDataBody, conn.getOutputStream()); - else - try (OutputStreamWriter out = new OutputStreamWriter( - conn.getOutputStream())) { - if (xmlDataBody instanceof Reader) - copy((Reader) xmlDataBody, out); - else - out.write(xmlDataBody.toString()); - } - } catch (IOException e) { - conn.disconnect(); - throw e; - } - } - - /** - * A common method for retrieving myExperiment server's response for all - * types of requests. - * - * @param conn - * Instance of the established URL connection to poll for - * server's response. - * @param url - * The URL on myExperiment with which the connection is - * established. - * @param isGETrequest - * Flag for identifying type of the request. True when the - * current connection executes GET request; false when it - * executes a POST request. - * @return An object containing XML Document with server's response body - * and a response code. Response body XML document might be null - * if there was an error or the user wasn't authorised to - * perform a certain action. Response code will always be set. - */ - private ServerResponse receiveServerResponse(HttpURLConnection conn, - String url, boolean isGETrequest, boolean isHEADrequest) - throws Exception { - try { - switch (conn.getResponseCode()) { - case HTTP_OK: - /* - * data retrieval was successful - parse the response XML - * and return it along with response code - */ - if (isHEADrequest) - return new ServerResponse(conn.getResponseCode(), null, - null); - return new ServerResponse(conn.getResponseCode(), null, - getDocumentFromStream(conn.getInputStream())); - case HTTP_NO_CONTENT: - return new ServerResponse(HTTP_OK, null, null); - - case HttpURLConnection.HTTP_CREATED: - case HttpURLConnection.HTTP_MOVED_PERM: - case HttpURLConnection.HTTP_MOVED_TEMP: - case HttpURLConnection.HTTP_SEE_OTHER: - case HttpURLConnection.HTTP_USE_PROXY: - return new ServerResponse(conn.getResponseCode(), - conn.getHeaderField("Location"), null); - - case HTTP_BAD_REQUEST: - case HTTP_FORBIDDEN: - /* - * this was a bad XML request - need full XML response to - * retrieve the error message from it; Java throws - * IOException if getInputStream() is used when non HTTP_OK - * response code was received - hence can use - * getErrorStream() straight away to fetch the error - * document - */ - return new ServerResponse(conn.getResponseCode(), null, - getDocumentFromStream(conn.getErrorStream())); - - case HTTP_UNAUTHORIZED: - // this content is not authorised for current user - logger.warn("non-authorised request to " + url + "\n" - + IOUtils.toString(conn.getErrorStream())); - return new ServerResponse(conn.getResponseCode(), null, - null); - - case HTTP_NOT_FOUND: - if (isHEADrequest) - return new ServerResponse(conn.getResponseCode(), null, - null); - throw new FileNotFoundException("no such resource: " + url); - default: - // unexpected response code - raise an exception - throw new IOException( - format("Received unexpected HTTP response code (%d) while %s %s", - conn.getResponseCode(), - (isGETrequest ? "fetching data at" - : "posting data to"), url)); - } - } finally { - conn.disconnect(); - } - } - - class ServerResponse { - private final int responseCode; - private final String responseLocation; - private final Document responseBody; - - ServerResponse(int responseCode, String responseLocation, - Document responseBody) { - this.responseCode = responseCode; - this.responseBody = responseBody; - this.responseLocation = responseLocation; - } - - public int getCode() { - return responseCode; - } - - public boolean isFailure() { - return responseCode >= HTTP_BAD_REQUEST; - } - - public String getLocation() { - return responseLocation; - } - - public <T> T getResponse(Class<T> clazz) throws JAXBException { - return jaxbContext.createUnmarshaller() - .unmarshal(responseBody.getDocumentElement(), clazz) - .getValue(); - } - - /** - * Returns contents of the "reason" field of the error message. - */ - public String getError() { - if (responseBody != null) { - Node reasonElement = responseBody.getDocumentElement() - .getElementsByTagName("reason").item(0); - if (reasonElement != null) { - String reason = reasonElement.getTextContent(); - if (!reason.isEmpty()) - return reason; - } - } - return format("unknown reason (%d)", responseCode); - } - } - } -} 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/standard/NewComponent.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponent.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponent.java deleted file mode 100644 index 44de963..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponent.java +++ /dev/null @@ -1,239 +0,0 @@ -package io.github.taverna_extras.component.registry.standard; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static java.lang.String.format; -import static io.github.taverna_extras.component.registry.standard.NewComponentRegistry.logger; -import static io.github.taverna_extras.component.registry.standard.Policy.getPolicy; -import static io.github.taverna_extras.component.utils.SystemUtils.getElementString; -import static io.github.taverna_extras.component.utils.SystemUtils.getValue; - -import java.lang.ref.SoftReference; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.IllegalFormatException; - -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.Registry; -import io.github.taverna_extras.component.api.SharingPolicy; -import io.github.taverna_extras.component.registry.Component; -import io.github.taverna_extras.component.registry.ComponentVersion; -import io.github.taverna_extras.component.registry.api.ComponentType; -import io.github.taverna_extras.component.registry.api.Description; -import io.github.taverna_extras.component.utils.SystemUtils; - -import org.apache.taverna.scufl2.api.container.WorkflowBundle; - -class NewComponent extends Component { - static final String ELEMENTS = "title,description"; - static final String EXTRA = "license-type,permissions"; - - private final SystemUtils system; - final NewComponentRegistry registry; - final NewComponentFamily family; - private final String id; - private final String title; - private final String description; - private final String resource; - - NewComponent(NewComponentRegistry registry, NewComponentFamily family, - Description cd, SystemUtils system) throws ComponentException { - super(cd.getUri()); - this.system = system; - this.registry = registry; - this.family = family; - id = cd.getId().trim(); - title = getElementString(cd, "title"); - description = getElementString(cd, "description"); - resource = cd.getResource(); - } - - NewComponent(NewComponentRegistry registry, NewComponentFamily family, - ComponentType ct, SystemUtils system) { - super(ct.getUri()); - this.system = system; - this.registry = registry; - this.family = family; - id = ct.getId().trim(); - title = ct.getTitle().trim(); - description = ct.getDescription().trim(); - resource = ct.getResource(); - } - - public ComponentType getCurrent(String elements) throws ComponentException { - return registry.getComponentById(id, null, elements); - } - - @Override - protected String internalGetName() { - return title; - } - - @Override - protected String internalGetDescription() { - return description; - } - - @Override - protected void populateComponentVersionMap() { - try { - for (Description d : getCurrent("versions").getVersions() - .getWorkflow()) - versionMap.put(d.getVersion(), new Version(d.getVersion(), - getValue(d))); - } catch (ComponentException e) { - logger.warn("failed to retrieve version list: " + e.getMessage()); - } - } - - @Override - protected Version internalAddVersionBasedOn(WorkflowBundle bundle, - String revisionComment) throws ComponentException { - /* - * Only fetch the license and sharing policy now; user might have - * updated them on the site and we want to duplicate. - */ - ComponentType ct = getCurrent(EXTRA); - License license = registry.getLicense(getValue(ct.getLicenseType()) - .trim()); - SharingPolicy sharingPolicy = getPolicy(ct.getPermissions()); - - return (Version) registry.createComponentVersionFrom(this, title, - revisionComment, bundle, license, sharingPolicy); - } - - public String getId() { - return id; - } - - @Override - public boolean equals(Object o) { - if (o instanceof NewComponent) { - NewComponent other = (NewComponent) o; - return registry.equals(other.registry) && id.equals(other.id); - } - return false; - } - - public String getResourceLocation() { - return resource; - } - - private static final int BASEHASH = NewComponent.class.hashCode(); - - @Override - public int hashCode() { - return BASEHASH ^ registry.hashCode() ^ id.hashCode(); - } - - class Version extends ComponentVersion { - private int version; - private String description; - private String location; - private SoftReference<WorkflowBundle> bundleRef; - - private static final String htmlPageTemplate = "%1$s/workflows/%2$s/versions/%3$s.html"; - - protected Version(Integer version, String description, WorkflowBundle bundle) { - super(NewComponent.this); - this.version = version; - this.description = description; - this.bundleRef = new SoftReference<>(bundle); - } - - protected Version(Integer version, String description) { - super(NewComponent.this); - this.version = version; - this.description = description; - } - - @Override - public boolean equals(Object o) { - if (o instanceof Version) { - Version other = (Version) o; - return version == other.version - && NewComponent.this.equals(other.getComponent()); - } - return false; - } - - @Override - public int hashCode() { - return NewComponent.this.hashCode() ^ (version << 16) - ^ (version >> 16); - } - - @Override - protected Integer internalGetVersionNumber() { - return version; - } - - @Override - protected String internalGetDescription() { - return description; - } - - private String getLocationUri() throws ComponentException { - if (location == null) - location = registry.getComponentById(id, version, - "content-uri").getContentUri(); - return location; - } - - @Override - protected synchronized WorkflowBundle internalGetImplementation() - throws ComponentException { - if (bundleRef == null || bundleRef.get() == null) { - String contentUri = getLocationUri(); - try { - WorkflowBundle result = system.getBundleFromUri(contentUri - + "?version=" + version); - bundleRef = new SoftReference<>(result); - return result; - } catch (Exception e) { - throw new ComponentException("Unable to open dataflow", e); - } - } - return bundleRef.get(); - } - - @Override - public URL getHelpURL() { - try { - return new URL(format(htmlPageTemplate, - registry.getRegistryBaseString(), getId(), version)); - } catch (IllegalFormatException | MalformedURLException e) { - logger.error(e); - return null; - } - } - } - - @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/standard/NewComponentFamily.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentFamily.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentFamily.java deleted file mode 100644 index 1c16b1e..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentFamily.java +++ /dev/null @@ -1,151 +0,0 @@ -package io.github.taverna_extras.component.registry.standard; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static io.github.taverna_extras.component.utils.SystemUtils.getElementString; - -import java.util.List; - -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.registry.api.ComponentFamilyType; -import io.github.taverna_extras.component.registry.api.Description; - -import org.apache.taverna.scufl2.api.container.WorkflowBundle; - -/** - * A family of components in the new-interface registry. - * - * @author Donal Fellows - */ -class NewComponentFamily extends ComponentFamily { - static final String ELEMENTS = "title,description"; - - private final NewComponentRegistry registry; - private final NewComponentProfile profile; - private final String id; - private final String name; - private final String description; - private final String uri; - private final String resource; - - NewComponentFamily(NewComponentRegistry componentRegistry, - NewComponentProfile profile, Description familyDesc, - ComponentUtil util) throws ComponentException { - super(componentRegistry, util); - uri = familyDesc.getUri(); - registry = componentRegistry; - this.profile = profile; - id = familyDesc.getId().trim(); - name = getElementString(familyDesc, "title"); - description = getElementString(familyDesc, "description"); - resource = familyDesc.getResource(); - } - - public NewComponentFamily(NewComponentRegistry componentRegistry, - NewComponentProfile profile, ComponentFamilyType cft, - ComponentUtil util) { - super(componentRegistry, util); - uri = cft.getUri(); - registry = componentRegistry; - this.profile = profile; - id = cft.getId(); - name = cft.getTitle(); - description = cft.getDescription(); - resource = cft.getResource(); - } - - @Override - protected String internalGetName() { - return name; - } - - @Override - protected String internalGetDescription() { - return description; - } - - @Override - protected Profile internalGetComponentProfile() throws ComponentException { - return profile; - } - - public List<Component> getMemberComponents() throws ComponentException { - return registry.listComponents(this); - } - - @Override - protected void populateComponentCache() throws ComponentException { - for (Component c : getMemberComponents()) { - NewComponent component = (NewComponent) c; - componentCache.put(component.getName(), component); - } - } - - @Override - protected Version internalCreateComponentBasedOn(String componentName, - String description, WorkflowBundle bundle) throws ComponentException { - if (componentName == null) - componentName = registry.annUtils.getTitle(bundle, "Untitled"); - if (description == null) - componentName = registry.annUtils.getDescription(bundle, - "Undescribed"); - return registry.createComponentFrom(this, componentName, description, - bundle, registry.getPreferredLicense(), - registry.getDefaultSharingPolicy()); - } - - @Override - protected void internalRemoveComponent(Component component) - throws ComponentException { - registry.deleteComponent((NewComponent) component); - } - - String getId() { - return id; - } - - public String getUri() { - return uri; - } - - @Override - public boolean equals(Object o) { - if (o instanceof NewComponentFamily) { - NewComponentFamily other = (NewComponentFamily) o; - return registry.equals(other.registry) && id.equals(other.id); - } - return false; - } - - private static final int BASEHASH = NewComponentFamily.class.hashCode(); - - @Override - public int hashCode() { - return BASEHASH ^ registry.hashCode() ^ id.hashCode(); - } - - public String getResourceLocation() { - return resource; - } -} 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/standard/NewComponentLicense.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentLicense.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentLicense.java deleted file mode 100644 index 5e08b4b..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentLicense.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.github.taverna_extras.component.registry.standard; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import io.github.taverna_extras.component.api.License; -import io.github.taverna_extras.component.registry.api.LicenseType; - -class NewComponentLicense implements License { - private NewComponentRegistry registry; - private String id; - private String title; - private String description; - private String abbreviation; - - static final String ELEMENTS = "title,description,unique-name"; - - NewComponentLicense(NewComponentRegistry newComponentRegistry, - LicenseType lt) { - registry = newComponentRegistry; - id = lt.getId(); - title = lt.getTitle(); - description = lt.getDescription(); - abbreviation = lt.getUniqueName(); - } - - String getId() { - return id; - } - - @Override - public boolean equals(Object o) { - if (!(o instanceof NewComponentLicense)) - return false; - NewComponentLicense other = (NewComponentLicense) o; - return registry.equals(other.registry) && id.equals(other.id); - } - - private static final int BASEHASH = NewComponentLicense.class.hashCode(); - - @Override - public int hashCode() { - return BASEHASH ^ registry.hashCode() ^ id.hashCode(); - } - - @Override - public String getName() { - return title; - } - - @Override - public String getDescription() { - return description; - } - - @Override - public String getAbbreviation() { - return abbreviation; - } - -} 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/standard/NewComponentProfile.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentProfile.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentProfile.java deleted file mode 100644 index 372c853..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentProfile.java +++ /dev/null @@ -1,121 +0,0 @@ -package io.github.taverna_extras.component.registry.standard; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static io.github.taverna_extras.component.utils.SystemUtils.getElementString; - -import java.net.MalformedURLException; -import java.net.URL; - -import io.github.taverna_extras.component.api.ComponentException; -import io.github.taverna_extras.component.profile.BaseProfileLocator; -import io.github.taverna_extras.component.profile.ComponentProfileImpl; -import io.github.taverna_extras.component.registry.api.ComponentProfileType; -import io.github.taverna_extras.component.registry.api.Description; - -/** - * Profiles managed by the new-interface component registry. - * - * @author Donal Fellows - */ -class NewComponentProfile extends ComponentProfileImpl { - private static final String LOCATION = "content-uri"; - static final String ELEMENTS = LOCATION; - - private final NewComponentRegistry registry; - private String id; - private String location; - private String resource; - private final String uri; - - private static URL contentUrl(ComponentProfileType cpt) - throws ComponentException { - try { - return new URL(cpt.getContentUri()); - } catch (MalformedURLException e) { - throw new ComponentException("bad profile location", e); - } - } - - private static URL getLocationURL(Description cpd) throws ComponentException { - try { - return new URL(getElementString(cpd, LOCATION)); - } catch (MalformedURLException e) { - throw new ComponentException("bad profile location", e); - } - } - - NewComponentProfile(NewComponentRegistry registry, - ComponentProfileType profile, BaseProfileLocator base) - throws ComponentException { - super(registry, contentUrl(profile), base); - this.registry = registry; - uri = profile.getUri(); - id = profile.getId(); - location = profile.getContentUri(); - resource = profile.getResource(); - } - - NewComponentProfile(NewComponentRegistry registry, Description cpd, - BaseProfileLocator base) throws ComponentException { - super(registry, getLocationURL(cpd), base); - this.registry = registry; - uri = cpd.getUri(); - id = cpd.getId(); - location = getElementString(cpd, LOCATION); - resource = cpd.getResource(); - } - - public String getLocation() { - return location; - } - - public String getID() { - return id; - } - - public String getUri() { - return uri; - } - - @Override - public boolean equals(Object o) { - if (o instanceof NewComponentProfile) { - NewComponentProfile other = (NewComponentProfile) o; - return registry.equals(other.registry) && id.equals(other.id); - } - return false; - } - - private static final int BASEHASH = NewComponentProfile.class.hashCode(); - - @Override - public int hashCode() { - return BASEHASH ^ registry.hashCode() ^ id.hashCode(); - } - - @Override - public String toString() { - return "Remote Component Profile[" + location + "]"; - } - - public String getResourceLocation() { - return resource; - } -} 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/standard/NewComponentRegistry.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentRegistry.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentRegistry.java deleted file mode 100644 index 00a549e..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentRegistry.java +++ /dev/null @@ -1,485 +0,0 @@ -package io.github.taverna_extras.component.registry.standard; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import static org.apache.log4j.Logger.getLogger; -import static io.github.taverna_extras.component.registry.standard.Policy.PRIVATE; -import static io.github.taverna_extras.component.utils.SystemUtils.getElementString; - -import java.net.URL; -import java.nio.charset.Charset; -import java.nio.charset.UnsupportedCharsetException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; - -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.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.Version.ID; -import io.github.taverna_extras.component.api.profile.Profile; -import io.github.taverna_extras.component.registry.ComponentRegistry; -import io.github.taverna_extras.component.registry.ComponentUtil; -import io.github.taverna_extras.component.registry.ComponentVersionIdentification; -import io.github.taverna_extras.component.registry.api.ComponentDescriptionList; -import io.github.taverna_extras.component.registry.api.ComponentFamilyList; -import io.github.taverna_extras.component.registry.api.ComponentFamilyType; -import io.github.taverna_extras.component.registry.api.ComponentProfileList; -import io.github.taverna_extras.component.registry.api.ComponentProfileType; -import io.github.taverna_extras.component.registry.api.ComponentType; -import io.github.taverna_extras.component.registry.api.Content; -import io.github.taverna_extras.component.registry.api.Description; -import io.github.taverna_extras.component.registry.api.LicenseList; -import io.github.taverna_extras.component.registry.api.LicenseType; -import io.github.taverna_extras.component.registry.api.ObjectFactory; -import io.github.taverna_extras.component.registry.api.Permissions; -import io.github.taverna_extras.component.registry.api.PolicyList; -import io.github.taverna_extras.component.utils.AnnotationUtils; -import io.github.taverna_extras.component.utils.SystemUtils; - -import org.apache.taverna.scufl2.api.container.WorkflowBundle; -import org.apache.taverna.security.credentialmanager.CredentialManager; - -class NewComponentRegistry extends ComponentRegistry { - private static final String PROFILE_MIME_TYPE = "application/vnd.taverna.component-profile+xml"; - private static final String T2FLOW_MIME_TYPE = "application/vnd.taverna.t2flow+xml"; - static final Logger logger = getLogger(NewComponentRegistry.class); - static final JAXBContext jaxbContext; - static final Charset utf8; - private static final ObjectFactory objectFactory = new ObjectFactory(); - - // service URIs - private static final String COMPONENT_SERVICE = "/component.xml"; - private static final String COMPONENT_FAMILY_SERVICE = "/component-family.xml"; - private static final String COMPONENT_PROFILE_SERVICE = "/component-profile.xml"; - private static final String COMPONENT_LIST = "/components.xml"; - private static final String COMPONENT_FAMILY_LIST = "/component-families.xml"; - private static final String COMPONENT_PROFILE_LIST = "/component-profiles.xml"; - private static final String WORKFLOW_SERVICE = "/workflow.xml"; - private static final String PACK_SERVICE = "/pack.xml"; - private static final String FILE_SERVICE = "/file.xml"; - private static final String LICENSE_LIST = "/licenses.xml"; - private static final String POLICY_LIST = "/policies.xml"; - - static { - JAXBContext c = null; - Charset cs = null; - try { - c = JAXBContext.newInstance(ComponentDescriptionList.class, - ComponentFamilyList.class, ComponentProfileList.class, - ComponentType.class, ComponentFamilyType.class, - ComponentProfileType.class, PolicyList.class, - LicenseList.class); - cs = Charset.forName("UTF-8"); - } catch (JAXBException e) { - throw new Error("failed to build context", e); - } catch (UnsupportedCharsetException e) { - throw new Error("failed to find charset", e); - } finally { - jaxbContext = c; - utf8 = cs; - } - } - - Client client; - private final CredentialManager cm; - private final ComponentUtil util; - private final SystemUtils system; - final AnnotationUtils annUtils; - - protected NewComponentRegistry(CredentialManager cm, URL registryBase, - ComponentUtil util, SystemUtils system, AnnotationUtils annUtils) throws ComponentException { - super(registryBase); - this.cm = cm; - this.util = util; - this.system = system; - this.annUtils = annUtils; - } - - private void checkClientCreated() throws ComponentException { - try { - if (client == null) - client = new Client(jaxbContext, super.getRegistryBase(), cm); - } catch (Exception e) { - throw new ComponentException("Unable to access registry", e); - } - } - - private List<Description> listComponentFamilies(String profileUri) - throws ComponentException { - checkClientCreated(); - return client.get(ComponentFamilyList.class, COMPONENT_FAMILY_LIST, - "component-profile=" + profileUri, - "elements=" + NewComponentFamily.ELEMENTS).getPack(); - } - - ComponentType getComponentById(String id, Integer version, String elements) - throws ComponentException { - checkClientCreated(); - - if (version != null) { - return client.get(ComponentType.class, WORKFLOW_SERVICE, - "id=" + id, "version=" + version, "elements=" + elements); - } - return client.get(ComponentType.class, WORKFLOW_SERVICE, "id=" + id, - "elements=" + elements); - } - - @SuppressWarnings("unused") - private ComponentFamilyType getComponentFamilyById(String id, - String elements) throws ComponentException { - checkClientCreated(); - - return client.get(ComponentFamilyType.class, PACK_SERVICE, "id=" + id, - "elements=" + elements); - } - - private ComponentProfileType getComponentProfileById(String id, - String elements) throws ComponentException { - checkClientCreated(); - - return client.get(ComponentProfileType.class, FILE_SERVICE, "id=" + id, - "elements=" + elements); - } - - @Override - protected void populateFamilyCache() throws ComponentException { - for (Profile pr : getComponentProfiles()) { - NewComponentProfile p = (NewComponentProfile) pr; - for (Description cfd : listComponentFamilies(p - .getResourceLocation())) - familyCache.put(getElementString(cfd, "title"), - new NewComponentFamily(this, p, cfd, util)); - } - } - - @Override - protected Family internalCreateComponentFamily(String familyName, - Profile componentProfile, String description, License license, - SharingPolicy sharingPolicy) throws ComponentException { - NewComponentProfile profile = (NewComponentProfile) componentProfile; - - checkClientCreated(); - - return new NewComponentFamily(this, profile, client.post( - ComponentFamilyType.class, - objectFactory.createPack(makeComponentFamilyCreateRequest( - profile, familyName, description, license, - sharingPolicy)), COMPONENT_FAMILY_SERVICE, "elements=" - + NewComponentFamily.ELEMENTS), util); - } - - @Override - protected void internalRemoveComponentFamily(Family componentFamily) - throws ComponentException { - NewComponentFamily ncf = (NewComponentFamily) componentFamily; - checkClientCreated(); - - client.delete(WORKFLOW_SERVICE, "id=" + ncf.getId()); - } - - @Override - protected void populateProfileCache() throws ComponentException { - checkClientCreated(); - - for (Description cpd : client.get(ComponentProfileList.class, - COMPONENT_PROFILE_LIST, - "elements=" + NewComponentProfile.ELEMENTS).getFile()) - if (cpd.getUri() != null && !cpd.getUri().isEmpty()) - profileCache.add(new NewComponentProfile(this, cpd, util - .getBaseProfileLocator())); - } - - @Override - protected Profile internalAddComponentProfile(Profile componentProfile, - License license, SharingPolicy sharingPolicy) - throws ComponentException { - if (componentProfile == null) - throw new ComponentException("component profile must not be null"); - try { - if (componentProfile instanceof NewComponentProfile) { - NewComponentProfile profile = (NewComponentProfile) componentProfile; - if (profile.getComponentRegistry().equals(this)) - return new NewComponentProfile(this, - getComponentProfileById(profile.getId(), - NewComponentProfile.ELEMENTS), - util.getBaseProfileLocator()); - } - } catch (ComponentException e) { - // Do nothing but fall through - } - checkClientCreated(); - - return new NewComponentProfile(this, client.post( - ComponentProfileType.class, objectFactory - .createFile(makeComponentProfileCreateRequest( - componentProfile.getName(), - componentProfile.getDescription(), - componentProfile.getXML(), license, - sharingPolicy)), COMPONENT_PROFILE_SERVICE, - "elements=" + NewComponentProfile.ELEMENTS), - util.getBaseProfileLocator()); - } - - public Permissions getPermissions(SharingPolicy userSharingPolicy) { - if (userSharingPolicy == null) - userSharingPolicy = getDefaultSharingPolicy(); - return ((Policy) userSharingPolicy).getPermissionsElement(); - } - - private ComponentProfileType makeComponentProfileCreateRequest( - String title, String description, String content, License license, - SharingPolicy sharingPolicy) throws ComponentException { - ComponentProfileType profile = new ComponentProfileType(); - - profile.setFilename(title + ".xml"); - profile.setTitle(title); - profile.setTitle(description); - profile.setContentType(PROFILE_MIME_TYPE); - profile.setContent(new Content()); - profile.getContent().setEncoding("base64"); - profile.getContent().setType("binary"); - profile.getContent().setValue(content.getBytes(utf8)); - if (license == null) - license = getPreferredLicense(); - profile.setLicenseType(new Description()); - profile.getLicenseType().getContent().add(license.getAbbreviation()); - profile.setPermissions(getPermissions(sharingPolicy)); - - return profile; - } - - private ComponentFamilyType makeComponentFamilyCreateRequest( - NewComponentProfile profile, String familyName, String description, - License license, SharingPolicy sharingPolicy) - throws ComponentException { - ComponentFamilyType familyDoc = new ComponentFamilyType(); - - familyDoc.setComponentProfile(profile.getResourceLocation()); - familyDoc.setDescription(description); - familyDoc.setTitle(familyName); - if (license == null) - license = getPreferredLicense(); - familyDoc.setLicenseType(new Description()); - familyDoc.getLicenseType().getContent().add(license.getAbbreviation()); - familyDoc.setPermissions(getPermissions(sharingPolicy)); - - return familyDoc; - } - - private ComponentType makeComponentVersionCreateRequest(String title, - String description, WorkflowBundle content, NewComponentFamily family, - License license, SharingPolicy sharingPolicy) - throws ComponentException { - ComponentType comp = new ComponentType(); - - comp.setTitle(title); - comp.setDescription(description); - if (family != null) - comp.setComponentFamily(family.getResourceLocation()); - comp.setContentType(T2FLOW_MIME_TYPE); - comp.setContent(new Content()); - comp.getContent().setEncoding("base64"); - comp.getContent().setType("binary"); - comp.getContent().setValue(system.serializeBundle(content)); - if (license == null) - license = getPreferredLicense(); - if (license != null) { - comp.setLicenseType(new Description()); - comp.getLicenseType().getContent().add(license.getAbbreviation()); - } - comp.setPermissions(getPermissions(sharingPolicy)); - - return comp; - } - - private static final boolean DO_LIST_POLICIES = false; - - private List<Description> listPolicies() throws ComponentException { - checkClientCreated(); - return client.get(PolicyList.class, POLICY_LIST, "type=group") - .getPolicy(); - } - - @Override - protected void populatePermissionCache() { - permissionCache.add(Policy.PUBLIC); - permissionCache.add(Policy.PRIVATE); - try { - if (DO_LIST_POLICIES) - for (Description d : listPolicies()) - permissionCache.add(new Policy.Group(d.getId())); - } catch (ComponentException e) { - logger.warn("failed to fetch sharing policies", e); - } - } - - private List<LicenseType> listLicenses() throws ComponentException { - checkClientCreated(); - - return client.get(LicenseList.class, LICENSE_LIST, - "elements=" + NewComponentLicense.ELEMENTS).getLicense(); - } - - @Override - protected void populateLicenseCache() { - try { - for (LicenseType lt : listLicenses()) - licenseCache.add(new NewComponentLicense(this, lt)); - } catch (ComponentException e) { - logger.warn("failed to fetch licenses", e); - } - } - - @Override - public License getPreferredLicense() throws ComponentException { - return getLicenseByAbbreviation(getNameOfPreferredLicense()); - } - - public String getNameOfPreferredLicense() { - return "by-nd"; - } - - public SharingPolicy getDefaultSharingPolicy() { - return PRIVATE; - } - - private List<Description> listComponents(String query, String prefixes) - throws ComponentException { - checkClientCreated(); - - return client.get(ComponentDescriptionList.class, COMPONENT_LIST, - "query=" + query, "prefixes=" + prefixes, - "elements=" + NewComponent.ELEMENTS).getWorkflow(); - } - - @Override - public Set<ID> searchForComponents(String prefixes, String text) - throws ComponentException { - HashSet<ID> versions = new HashSet<>(); - for (Description cd : listComponents(text, prefixes)) { - NewComponent nc = null; - for (Family f : getComponentFamilies()) { - nc = (NewComponent) ((NewComponentFamily) f) - .getComponent(getElementString(cd, "title")); - if (nc != null) - break; - } - if (nc != null) - versions.add(new ComponentVersionIdentification( - getRegistryBase(), nc.getFamily().getName(), nc - .getName(), cd.getVersion())); - else - logger.warn("could not construct component for " + cd.getUri()); - } - return versions; - } - - private List<Description> listComponents(String familyUri) - throws ComponentException { - checkClientCreated(); - - return client.get(ComponentDescriptionList.class, COMPONENT_LIST, - "component-family=" + familyUri, - "elements=" + NewComponent.ELEMENTS).getWorkflow(); - } - - protected List<Component> listComponents(NewComponentFamily family) - throws ComponentException { - List<Component> result = new ArrayList<>(); - for (Description cd : listComponents(family.getResourceLocation())) - result.add(new NewComponent(this, family, cd, system)); - return result; - } - - protected void deleteComponent(NewComponent component) - throws ComponentException { - checkClientCreated(); - - client.delete(WORKFLOW_SERVICE, "id=" + component.getId()); - } - - protected Version createComponentFrom(NewComponentFamily family, - String componentName, String description, - WorkflowBundle implementation, License license, - SharingPolicy sharingPolicy) throws ComponentException { - checkClientCreated(); - - ComponentType ct = client.post(ComponentType.class, objectFactory - .createWorkflow(makeComponentVersionCreateRequest( - componentName, description, implementation, family, - license, sharingPolicy)), COMPONENT_SERVICE, - "elements=" + NewComponent.ELEMENTS); - NewComponent nc = new NewComponent(this, family, ct, system); - return nc.new Version(ct.getVersion(), description, implementation); - } - - protected Version createComponentVersionFrom(NewComponent component, - String componentName, String description, - WorkflowBundle implementation, License license, - SharingPolicy sharingPolicy) throws ComponentException { - checkClientCreated(); - - ComponentType ct = client.post(ComponentType.class, objectFactory - .createWorkflow(makeComponentVersionCreateRequest( - componentName, description, implementation, - component.family, license, sharingPolicy)), - COMPONENT_SERVICE, "id=" + component.getId(), "elements=" - + NewComponent.ELEMENTS); - return component.new Version(ct.getVersion(), description, - implementation); - } - - public License getLicense(String name) throws ComponentException { - for (License l : getLicenses()) - if (l.getAbbreviation().equals(name)) - return l; - return null; - } - - @Override - public boolean equals(Object o) { - // Careful! Java's URL equality IS BROKEN! - if (o != null && o instanceof NewComponentRegistry) { - NewComponentRegistry other = (NewComponentRegistry) o; - return getRegistryBaseString() - .equals(other.getRegistryBaseString()); - } - return false; - } - - private static final int BASEHASH = NewComponentRegistry.class.hashCode(); - - @Override - public int hashCode() { - return BASEHASH ^ getRegistryBaseString().hashCode(); - } - - @Override - public String getRegistryTypeName() { - return "Component API"; - } -} 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/standard/NewComponentRegistryFactory.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentRegistryFactory.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentRegistryFactory.java deleted file mode 100644 index 43dc37d..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/NewComponentRegistryFactory.java +++ /dev/null @@ -1,83 +0,0 @@ -package io.github.taverna_extras.component.registry.standard; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static io.github.taverna_extras.component.registry.standard.NewComponentRegistry.jaxbContext; -import static io.github.taverna_extras.component.registry.standard.NewComponentRegistry.logger; - -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import io.github.taverna_extras.component.api.ComponentException; -import io.github.taverna_extras.component.registry.ComponentRegistry; -import io.github.taverna_extras.component.registry.ComponentUtil; -import io.github.taverna_extras.component.utils.AnnotationUtils; -import io.github.taverna_extras.component.utils.SystemUtils; -import org.apache.taverna.security.credentialmanager.CredentialManager; -import org.springframework.beans.factory.annotation.Required; - -public class NewComponentRegistryFactory { - private final Map<String, NewComponentRegistry> componentRegistries = new HashMap<>(); - private CredentialManager cm; - private ComponentUtil util; - private SystemUtils system; - private AnnotationUtils annUtils; - - @Required - public void setCredentialManager(CredentialManager cm) { - this.cm = cm; - } - - @Required - public void setComponentUtil(ComponentUtil util) { - this.util = util; - } - - @Required - public void setSystemUtils(SystemUtils system) { - this.system = system; - } - - @Required - public void setAnnotationUtils(AnnotationUtils annUtils) { - this.annUtils = annUtils; - } - - public synchronized ComponentRegistry getComponentRegistry(URL registryBase) - throws ComponentException { - if (!componentRegistries.containsKey(registryBase.toExternalForm())) { - logger.debug("constructing registry instance for " + registryBase); - componentRegistries.put(registryBase.toExternalForm(), - new NewComponentRegistry(cm, registryBase, util, system, - annUtils)); - } - return componentRegistries.get(registryBase.toExternalForm()); - } - - public boolean verifyBase(URL registryBase) { - try { - return new Client(jaxbContext, registryBase, false, cm).verify(); - } catch (Exception e) { - logger.info("failed to construct connection client to " - + registryBase, e); - return false; - } - } -} 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/standard/Policy.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/Policy.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/Policy.java deleted file mode 100644 index 3b521af..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/Policy.java +++ /dev/null @@ -1,136 +0,0 @@ -package io.github.taverna_extras.component.registry.standard; - -import static java.lang.System.identityHashCode; -import static io.github.taverna_extras.component.registry.api.Privilege.DOWNLOAD; -import static io.github.taverna_extras.component.registry.api.Privilege.VIEW; - -import io.github.taverna_extras.component.api.SharingPolicy; -import io.github.taverna_extras.component.registry.api.Permissions; -import io.github.taverna_extras.component.registry.api.Permissions.Permission; - -abstract class Policy implements SharingPolicy { - public static final SharingPolicy PUBLIC = new Public(); - public static final SharingPolicy PRIVATE = new Private(); - - Policy() { - } - - public abstract Permissions getPermissionsElement(); - - public static SharingPolicy getPolicy(Permissions perm) { - if (perm == null) - return PRIVATE; - if (perm.getGroupPolicyId() != null) - return new Group(perm.getGroupPolicyId()); - for (Permission p : perm.getPermission()) - if (p.getId() != null) - return new Group(p.getId().toString(), perm); - return PUBLIC; - } - - @Override - public boolean equals(Object o) { - if (o == null || !(o instanceof Policy)) - return false; - return equals((Policy) o); - } - - @Override - public abstract int hashCode(); - - protected abstract boolean equals(Policy p); - - static class Public extends Policy { - @Override - public String getName() { - return "Public"; - } - - @Override - public Permissions getPermissionsElement() { - Permission.Privilege privView = new Permission.Privilege(); - privView.setType(VIEW); - Permission.Privilege privDownload = new Permission.Privilege(); - privDownload.setType(DOWNLOAD); - Permission perm = new Permission(); - perm.setCategory("public"); - perm.getPrivilege().add(privView); - perm.getPrivilege().add(privDownload); - Permissions result = new Permissions(); - result.getPermission().add(perm); - return result; - } - - @Override - protected boolean equals(Policy p) { - return p instanceof Public; - } - - @Override - public int hashCode() { - return identityHashCode(PUBLIC); - } - } - - static class Private extends Policy { - @Override - public String getName() { - return "Private"; - } - - @Override - public Permissions getPermissionsElement() { - return null; - } - - @Override - protected boolean equals(Policy p) { - return p instanceof Private; - } - - @Override - public int hashCode() { - return identityHashCode(PRIVATE); - } - } - - static class Group extends Policy { - private String id; - private Permissions p; - - public Group(String id) { - this.id = id; - } - - public Group(String id, Permissions p) { - this.id = id; - this.p = p; - } - - @Override - public String getName() { - return "Group(" + id + ")"; - } - - @Override - public Permissions getPermissionsElement() { - if (p != null) - return p; - Permissions result = new Permissions(); - result.setGroupPolicyId(id); - return result; - } - - @Override - protected boolean equals(Policy p) { - return (p instanceof Group) && id.equals(((Group) p).id); - } - - private static final int BASEHASH = Group.class.hashCode(); - - @Override - public int hashCode() { - return BASEHASH ^ id.hashCode(); - } - } -} 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/standard/annotations/Unused.java ---------------------------------------------------------------------- diff --git a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/annotations/Unused.java b/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/annotations/Unused.java deleted file mode 100644 index e6a709b..0000000 --- a/taverna-component-activity/src/main/java/org/apache/taverna/component/registry/standard/annotations/Unused.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.github.taverna_extras.component.registry.standard.annotations; -/* - * 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.annotation.ElementType.CONSTRUCTOR; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.CLASS; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -/** - * Marks a constructor, field, method or parameter as unused. Unused members - * exist for the purpose of documentation or completeness. - * - * @author Donal Fellows - */ -@Documented -@Target({ CONSTRUCTOR, FIELD, METHOD, PARAMETER, TYPE }) -@Retention(CLASS) -public @interface Unused { - -}
