summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2011-08-03 09:21:41 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2011-08-03 09:21:41 +0000
commit1fb6a28a73ca17dbb8c4b3059db590e2f9620943 (patch)
tree71d9c9a70ce373cecc4597c2880a5047e0353d07 /sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl
parent7ad16a07b4288227c531c485939318768129fb54 (diff)
Correct tag name
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1153404 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl')
-rw-r--r--sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java469
-rw-r--r--sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java640
-rw-r--r--sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImpl.java122
3 files changed, 0 insertions, 1231 deletions
diff --git a/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java b/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java
deleted file mode 100644
index e658054381..0000000000
--- a/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.tuscany.sca.contribution.service.impl;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.tuscany.sca.contribution.Contribution;
-import org.apache.tuscany.sca.contribution.service.ContributionRepository;
-import org.apache.tuscany.sca.contribution.service.util.FileHelper;
-import org.apache.tuscany.sca.contribution.service.util.IOHelper;
-import org.apache.tuscany.sca.monitor.Monitor;
-import org.apache.tuscany.sca.monitor.Problem;
-import org.apache.tuscany.sca.monitor.Problem.Severity;
-import org.apache.tuscany.sca.monitor.impl.ProblemImpl;
-
-/**
- * The default implementation of ContributionRepository
- *
- * @version $Rev$ $Date$
- */
-public class ContributionRepositoryImpl implements ContributionRepository {
- private static final String NS = "http://tuscany.apache.org/xmlns/1.0-SNAPSHOT";
- private static final String DOMAIN_INDEX_FILENAME = "sca-domain.xml";
- private boolean initialized = false;
- private String repository = null;
- private File rootFile = null;
- private Map<String, String> contributionLocations = new HashMap<String, String>();
-
- private Map<String, Contribution> contributionMap = new HashMap<String, Contribution>();
- private List<Contribution> contributions = new ArrayList<Contribution>();
-
- private URI domain;
- private XMLInputFactory factory;
- private Monitor monitor;
-
- /**
- * Marshals warnings into the monitor
- *
- * @param message
- * @param model
- * @param messageParameters
- */
- protected void warning(String message, Object model, String... messageParameters) {
- if (monitor != null){
- Problem problem = new ProblemImpl(this.getClass().getName(), "contribution-impl-validation-messages", Severity.WARNING, model, message, (Object[])messageParameters);
- monitor.problem(problem);
- }
- }
-
- /**
- * Marshals errors into the monitor
- *
- * @param problems
- * @param message
- * @param model
- */
- protected void error(String message, Object model, Object... messageParameters) {
- if (monitor != null) {
- Problem problem = new ProblemImpl(this.getClass().getName(), "contribution-impl-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
- monitor.problem(problem);
- }
- }
-
- /**
- * Marshals exceptions into the monitor
- *
- * @param problems
- * @param message
- * @param model
- */
- protected void error(String message, Object model, Exception ex) {
- if (monitor != null) {
- Problem problem = new ProblemImpl(this.getClass().getName(), "contribution-impl-validation-messages", Severity.ERROR, model, message, ex);
- monitor.problem(problem);
- }
- }
-
- /**
- * Constructor with repository root
- *
- * @param repository
- * @param factory
- */
- public ContributionRepositoryImpl(final String repository, XMLInputFactory factory, Monitor monitor) throws IOException {
- this.monitor = monitor;
- this.repository = repository;
- this.factory = factory;
- }
-
-
- public URI getDomain() {
- return domain;
- }
-
- public URL store(final String contribution, URL sourceURL, InputStream contributionStream) throws IOException {
- if(! initialized) {
- try {
- initializeRepository();
- } catch(Exception e) {
- //ignore
- }
- }
-
-
- // where the file should be stored in the repository
- final File location = mapToFile(sourceURL);
- FileHelper.forceMkdir(location.getParentFile());
-
- copy(contributionStream, location);
-
- // add contribution to repositoryContent
- // Allow ability to read user.dir property. Requires PropertyPermission in security policy.
- URL contributionURL;
- try {
- contributionURL= AccessController.doPrivileged(new PrivilegedExceptionAction<URL>() {
- public URL run() throws IOException {
- URL contributionURL = location.toURL();
- URI relative = rootFile.toURI().relativize(location.toURI());
- contributionLocations.put(contribution, relative.toString());
- return contributionURL;
- }
- });
- } catch (PrivilegedActionException e) {
- error("PrivilegedActionException", location, (IOException)e.getException());
- throw (IOException)e.getException();
- }
- saveMap();
-
- return contributionURL;
- }
-
- public URL store(String contribution, URL sourceURL) throws IOException {
- if(! initialized) {
- try {
- initializeRepository();
- } catch(Exception e) {
- //ignore
- }
- }
-
- // where the file should be stored in the repository
- File location = mapToFile(sourceURL);
- File source = FileHelper.toFile(sourceURL);
- if (source == null || source.isFile()) {
- URLConnection connection = sourceURL.openConnection();
- connection.setUseCaches(false);
- InputStream is = connection.getInputStream();
- try {
- return store(contribution, sourceURL, is);
- } finally {
- IOHelper.closeQuietly(is);
- }
- }
-
- FileHelper.forceMkdir(location);
- FileHelper.copyDirectory(source, location);
-
- // add contribution to repositoryContent
- URI relative = rootFile.toURI().relativize(location.toURI());
- contributionLocations.put(contribution, relative.toString());
- saveMap();
-
- return location.toURL();
- }
-
- public URL find(String contribution) {
- if(! initialized) {
- try {
- initializeRepository();
- } catch(Exception e) {
- //ignore
- }
- }
-
-
- if (contribution == null) {
- return null;
- }
- String location = contributionLocations.get(contribution);
- if (location == null) {
- return null;
- }
- try {
- return new File(rootFile, location).toURL();
- } catch (MalformedURLException e) {
- // Should not happen
- error("MalformedURLException", location, new AssertionError(e));
- throw new AssertionError(e);
- }
- }
-
- public void remove(String contribution) {
- if(! initialized) {
- try {
- initializeRepository();
- } catch(Exception e) {
- //ignore
- }
- }
-
-
- URL contributionURL = this.find(contribution);
- if (contributionURL != null) {
- // remove
- try {
- FileHelper.forceDelete(FileHelper.toFile(contributionURL));
- this.contributionLocations.remove(contribution);
- saveMap();
- } catch (IOException ioe) {
- // handle file could not be removed
- }
- }
- }
-
- public List<String> list() {
- return new ArrayList<String>(contributionLocations.keySet());
- }
-
- /**
- * Contribution Registry methods
- */
-
-
- public void addContribution(Contribution contribution) {
- contributionMap.put(contribution.getURI(), contribution);
- contributions.add(contribution);
- }
-
- public void removeContribution(Contribution contribution) {
- contributionMap.remove(contribution.getURI());
- contributions.remove(contribution);
- }
-
- public void updateContribution(Contribution contribution) {
- Contribution oldContribution = contributionMap.remove(contribution.getURI());
- contributions.remove(oldContribution);
- contributionMap.put(contribution.getURI(), contribution);
- contributions.add(contribution);
- }
-
- public Contribution getContribution(String uri) {
- return contributionMap.get(uri);
- }
-
- public List<Contribution> getContributions() {
- return Collections.unmodifiableList(contributions);
- }
-
-
- /**
- * Resolve contribution location in the repository -> root repository /
- * contribution file -> contribution group id / artifact id / version
- *
- * @param contribution
- * @return
- */
- private File mapToFile(URL sourceURL) {
- String fileName = FileHelper.toFile(sourceURL).getName();
- return new File(rootFile, "contributions" + File.separator + fileName);
- }
-
-
- /**
- * Persist contribution state to xml file in the repository
- */
- private void saveMap() {
- File domainFile = new File(rootFile, DOMAIN_INDEX_FILENAME);
- FileOutputStream os = null;
- try {
- os = new FileOutputStream(domainFile);
- PrintWriter writer = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
- writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- writer.println("<domain uri=\"" + getDomain() + "\" xmlns=\"" + NS + "\">");
- for (Map.Entry<String, String> e : contributionLocations.entrySet()) {
- writer.println(" <contribution uri=\"" + e.getKey() + "\" location=\"" + e.getValue() + "\"/>");
- }
- writer.println("</domain>");
- writer.flush();
- } catch (IOException e) {
- IllegalArgumentException ae = new IllegalArgumentException(e);
- error("IllegalArgumentException", os, ae);
- throw ae;
- } finally {
- IOHelper.closeQuietly(os);
- }
- }
-
- /**
- * Initialize contribution repository
- * @throws IOException
- */
- private void initializeRepository() throws IOException {
- String root = this.repository;
- if (root == null) {
- root = AccessController.doPrivileged(new PrivilegedAction<String>() {
- public String run() {
- // Default to <user.home>/.tuscany/domains/local/
- String userHome = System.getProperty("user.home");
- String slash = File.separator;
- return userHome + slash + ".tuscany" + slash + "domains" + slash + "local" + slash;
- }
- });
- }
-
- // Allow privileged access to File. Requires FilePermission in security policy file.
- final String finalRoot = root;
- this.rootFile = AccessController.doPrivileged(new PrivilegedAction<File>() {
- public File run() {
- return new File(finalRoot);
- }
- });
-
- // Allow privileged access to File. Requires FilePermission in security policy file.
- this.domain = AccessController.doPrivileged(new PrivilegedAction<URI>() {
- public URI run() {
- return rootFile.toURI();
- }
- });
-
- // Allow privileged access to mkdir. Requires FilePermission in security policy file.
- try {
- AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
- public Object run() throws IOException {
- FileHelper.forceMkdir(rootFile);
- return null;
- }
- });
- } catch (PrivilegedActionException e) {
- error("PrivilegedActionException", rootFile, (IOException)e.getException());
- throw (IOException)e.getException();
- }
-
- // Allow privileged access to test file. Requires FilePermissions in security policy file.
- Boolean notDirectory = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
- public Boolean run() {
- return (!rootFile.exists() || !rootFile.isDirectory() || !rootFile.canRead());
- }
- });
- if (notDirectory) {
- error("RootNotDirectory", rootFile, repository);
- throw new IOException("The root is not a directory: " + repository);
- }
-
- }
-
-
- /**
- *
- */
- void init() {
- if(! initialized) {
- try {
- initializeRepository();
- } catch(Exception e) {
- //ignore
- }
- }
-
- File domainFile = new File(rootFile, "sca-domain.xml");
- if (!domainFile.isFile()) {
- return;
- }
- FileInputStream is;
- try {
- is = new FileInputStream(domainFile);
- } catch (FileNotFoundException e) {
- warning("DomainFileNotFound", domainFile, domainFile.getAbsolutePath());
- return;
- }
- try {
- XMLStreamReader reader = factory.createXMLStreamReader(new InputStreamReader(is, "UTF-8"));
- while (reader.hasNext()) {
- switch (reader.getEventType()) {
- case XMLStreamConstants.START_ELEMENT:
- String name = reader.getName().getLocalPart();
- if ("domain".equals(name)) {
- String uri = reader.getAttributeValue(null, "uri");
- if (uri != null) {
- domain = URI.create(uri);
- }
- }
- if ("contribution".equals(name)) {
- String uri = reader.getAttributeValue(null, "uri");
- String location = reader.getAttributeValue(null, "location");
- contributionLocations.put(uri, location);
- }
- break;
- default:
- break;
- }
- reader.next();
- }
- } catch (Exception e) {
- // Ignore
- } finally {
- IOHelper.closeQuietly(is);
- }
- }
-
- /**
- * Utility functions
- */
-
- /**
- * Write a specific source InputStream to a file on disk
- *
- * @param source contents of the file to be written to disk
- * @param target file to be written
- * @throws IOException
- */
- private static void copy(InputStream source, File target) throws IOException {
- BufferedOutputStream out = null;
- BufferedInputStream in = null;
-
- try {
- out = new BufferedOutputStream(new FileOutputStream(target));
- in = new BufferedInputStream(source);
- IOHelper.copy(in, out);
- } finally {
- IOHelper.closeQuietly(out);
- IOHelper.closeQuietly(in);
- }
- }
-
-}
diff --git a/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java b/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
deleted file mode 100644
index 64f61fc6c8..0000000000
--- a/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
+++ /dev/null
@@ -1,640 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tuscany.sca.contribution.service.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.tuscany.sca.assembly.AssemblyFactory;
-import org.apache.tuscany.sca.assembly.Composite;
-import org.apache.tuscany.sca.contribution.Artifact;
-import org.apache.tuscany.sca.contribution.Contribution;
-import org.apache.tuscany.sca.contribution.ContributionFactory;
-import org.apache.tuscany.sca.contribution.ContributionMetadata;
-import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
-import org.apache.tuscany.sca.contribution.processor.PackageProcessor;
-import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
-import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
-import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
-import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
-import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
-import org.apache.tuscany.sca.contribution.service.ContributionException;
-import org.apache.tuscany.sca.contribution.service.ContributionRepository;
-import org.apache.tuscany.sca.contribution.service.ContributionService;
-import org.apache.tuscany.sca.contribution.service.ExtensibleContributionListener;
-import org.apache.tuscany.sca.contribution.service.TypeDescriber;
-import org.apache.tuscany.sca.contribution.service.util.IOHelper;
-import org.apache.tuscany.sca.core.ExtensionPointRegistry;
-import org.apache.tuscany.sca.definitions.SCADefinitions;
-import org.apache.tuscany.sca.monitor.Monitor;
-import org.apache.tuscany.sca.monitor.Problem;
-import org.apache.tuscany.sca.monitor.Problem.Severity;
-import org.apache.tuscany.sca.monitor.impl.ProblemImpl;
-import org.apache.tuscany.sca.policy.Intent;
-import org.apache.tuscany.sca.policy.IntentAttachPointType;
-import org.apache.tuscany.sca.policy.PolicySet;
-
-/**
- * Service interface that manages artifacts contributed to a Tuscany runtime.
- *
- * @version $Rev$ $Date$
- */
-public class ContributionServiceImpl implements ContributionService {
- private ExtensionPointRegistry extensionPoints;
-
- /**
- * Repository where contributions are stored. Usually set by injection.
- */
- private ContributionRepository contributionRepository;
-
- /**
- * Registry of available package processors.
- */
- private PackageProcessor packageProcessor;
-
- /**
- * Registry of available artifact processors
- */
-
- private URLArtifactProcessor artifactProcessor;
-
- /**
- * Registry of available StAX processors,
- * used for loading contribution metadata in a extensible way
- */
- private StAXArtifactProcessor staxProcessor;
-
- /**
- * Event listener for contribution operations
- */
- private ExtensibleContributionListener contributionListener;
-
- /**
- * Registry of available model resolvers
- */
-
- private ModelResolverExtensionPoint modelResolvers;
-
- /**
- * Model factory extension point
- */
-
- private ModelFactoryExtensionPoint modelFactories;
-
- /**
- * XML factory used to create reader instance to load contribution metadata
- */
- private XMLInputFactory xmlFactory;
-
- /**
- * Assembly factory
- */
- private AssemblyFactory assemblyFactory;
-
- /**
- * Contribution model factory
- */
- private ContributionFactory contributionFactory;
-
-
- private ModelResolver policyDefinitionsResolver;
-
- private List policyDefinitions;
-
- private Monitor monitor;
-
- private String COMPOSITE_FILE_EXTN = ".composite";
-
- private TypeDescriber packageTypeDescriber;
-
- public ContributionServiceImpl(ContributionRepository repository,
- PackageProcessor packageProcessor,
- URLArtifactProcessor documentProcessor,
- StAXArtifactProcessor staxProcessor,
- ExtensibleContributionListener contributionListener,
- ModelResolver policyDefinitionsResolver,
- ModelResolverExtensionPoint modelResolvers,
- ModelFactoryExtensionPoint modelFactories,
- AssemblyFactory assemblyFactory,
- ContributionFactory contributionFactory,
- XMLInputFactory xmlFactory,
- List<SCADefinitions> policyDefinitions,
- ExtensionPointRegistry extensionPoints,
- Monitor monitor) {
- super();
- this.extensionPoints = extensionPoints;
- this.contributionRepository = repository;
- this.packageProcessor = packageProcessor;
- this.artifactProcessor = documentProcessor;
- this.staxProcessor = staxProcessor;
- this.contributionListener = contributionListener;
- this.modelResolvers = modelResolvers;
- this.modelFactories = modelFactories;
- this.xmlFactory = xmlFactory;
- this.assemblyFactory = assemblyFactory;
- this.contributionFactory = contributionFactory;
- this.policyDefinitionsResolver = policyDefinitionsResolver;
- this.policyDefinitions = policyDefinitions;
- this.monitor = monitor;
-
- this.packageTypeDescriber = new PackageTypeDescriberImpl();
- }
-
- /**
- * Report a error.
- *
- * @param problems
- * @param message
- * @param model
- */
- private void error(String message, Object model, Object... messageParameters) {
- if (monitor != null) {
- Problem problem = new ProblemImpl(this.getClass().getName(), "contribution-impl-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
- monitor.problem(problem);
- }
- }
-
- public Contribution contribute(String contributionURI, URL sourceURL, boolean storeInRepository)
- throws ContributionException, IOException {
- if (contributionURI == null) {
- error("ContributionURINull", contributionURI);
- throw new IllegalArgumentException("URI for the contribution is null");
- }
- if (sourceURL == null) {
- error("SourceURLNull", sourceURL);
- throw new IllegalArgumentException("Source URL for the contribution is null");
- }
- return addContribution(contributionURI, sourceURL, null, null, storeInRepository);
- }
-
- public Contribution contribute(String contributionURI,
- URL sourceURL,
- ModelResolver modelResolver,
- boolean storeInRepository) throws ContributionException, IOException {
- if (contributionURI == null) {
- error("ContributionURINull", contributionURI);
- throw new IllegalArgumentException("URI for the contribution is null");
- }
- if (sourceURL == null) {
- error("SourceURLNull", sourceURL);
- throw new IllegalArgumentException("Source URL for the contribution is null");
- }
-
- return addContribution(contributionURI, sourceURL, null, modelResolver, storeInRepository);
- }
-
- public Contribution contribute(String contributionURI, URL sourceURL, InputStream input)
- throws ContributionException, IOException {
-
- return addContribution(contributionURI, sourceURL, input, null, true);
- }
-
- public Contribution contribute(String contributionURI, URL sourceURL, InputStream input, ModelResolver modelResolver)
- throws ContributionException, IOException {
-
- return addContribution(contributionURI, sourceURL, input, modelResolver, true);
- }
-
- public Contribution getContribution(String uri) {
- return this.contributionRepository.getContribution(uri);
- }
-
- /**
- * Remove a contribution and notify listener that contribution was removed
- */
- public void remove(String uri) throws ContributionException {
- Contribution contribution = contributionRepository.getContribution(uri);
- this.contributionRepository.removeContribution(contribution);
- this.contributionListener.contributionRemoved(this.contributionRepository, contribution);
- }
-
- /**
- * Add a composite model to the contribution
- */
- public void addDeploymentComposite(Contribution contribution, Composite composite) throws ContributionException {
- Artifact artifact = this.contributionFactory.createArtifact();
- artifact.setURI(composite.getURI());
- artifact.setModel(composite);
-
- contribution.getArtifacts().add(artifact);
-
- contribution.getDeployables().add(composite);
- }
-
- /**
- * Utility/Helper methods for contribution service
- */
-
- /**
- * Perform read of the contribution metadata loader (sca-contribution.xml and sca-contribution-generated.xml)
- * When the two metadata files are available, the information provided are merged, and the sca-contribution has priorities
- *
- * @param sourceURL
- * @return Contribution
- * @throws ContributionException
- */
- /*
- private Contribution readContributionMetadata(URL sourceURL) throws ContributionException {
- Contribution contributionMetadata = contributionFactory.createContribution();
-
- ContributionMetadataDocumentProcessor metadataDocumentProcessor =
- new ContributionMetadataDocumentProcessor(modelFactories, staxProcessor, monitor);
-
- final URL[] urls = {sourceURL};
- // Allow access to create classloader. Requires RuntimePermission in security policy.
- URLClassLoader cl = AccessController.doPrivileged(new PrivilegedAction<URLClassLoader>() {
- public URLClassLoader run() {
- return new URLClassLoader(urls, null);
- }
- });
- for (String path: new String[]{
- Contribution.SCA_CONTRIBUTION_GENERATED_META,
- Contribution.SCA_CONTRIBUTION_META}) {
- URL url = cl.getResource(path);
- if (url != null) {
- ContributionMetadata contribution = metadataDocumentProcessor.read(sourceURL, URI.create(path), url);
- contributionMetadata.getImports().addAll(contribution.getImports());
- contributionMetadata.getExports().addAll(contribution.getExports());
- contributionMetadata.getDeployables().addAll(contribution.getDeployables());
- }
- }
-
- // For debugging purposes, write it back to XML
- // if (contributionMetadata != null) {
- // try {
- // ByteArrayOutputStream bos = new ByteArrayOutputStream();
- // XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
- // outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
- // staxProcessor.write(contributionMetadata, outputFactory.createXMLStreamWriter(bos));
- // Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(bos.toByteArray()));
- // OutputFormat format = new OutputFormat();
- // format.setIndenting(true);
- // format.setIndent(2);
- // XMLSerializer serializer = new XMLSerializer(System.out, format);
- // serializer.serialize(document);
- // } catch (Exception e) {
- // e.printStackTrace();
- // }
- // }
-
- return contributionMetadata;
- }
- */
-
- private static boolean isDirectory(URL url) {
- if ("file".equals(url.getProtocol())) {
- try {
- final URI uri = url.toURI();
- return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
- public Boolean run() {
- return new File(uri).isDirectory();
- }
- });
- } catch (URISyntaxException e) {
- // Ignore
- }
- }
- return false;
- }
-
- /**
- * Note:
- *
- * @param contributionURI ContributionID
- * @param sourceURL contribution location
- * @param contributionStream contribution content
- * @param storeInRepository flag if we store the contribution into the
- * repository or not
- * @return the contribution model representing the contribution
- * @throws IOException
- * @throws DeploymentException
- */
- private Contribution addContribution(String contributionURI,
- URL sourceURL,
- InputStream contributionStream,
- ModelResolver modelResolver,
- boolean storeInRepository) throws IOException, ContributionException {
-
- if (contributionStream == null && sourceURL == null) {
- error("ContributionContentNull", contributionStream);
- throw new IllegalArgumentException("The content of the contribution is null.");
- }
-
- // store the contribution in the contribution repository
- URL locationURL = sourceURL;
- if (contributionRepository != null && storeInRepository) {
- if (contributionStream == null) {
- locationURL = contributionRepository.store(contributionURI, sourceURL);
- } else {
- locationURL = contributionRepository.store(contributionURI, sourceURL, contributionStream);
- }
- }
-
- Contribution contribution = contributionFactory.createContribution();
-
- // Create contribution model resolver
- if (modelResolver == null) {
- //FIXME Remove this domain resolver, visibility of policy declarations should be handled by
- // the contribution import/export mechanism instead of this domainResolver hack.
- modelResolver = new ExtensibleModelResolver(contribution, extensionPoints, modelResolvers, modelFactories, policyDefinitionsResolver);
- }
-
- //set contribution initial information
- contribution.setURI(contributionURI);
- contribution.setLocation(locationURL.toString());
- contribution.setModelResolver(modelResolver);
- contribution.setType(packageTypeDescriber.getType(locationURL, null));
-
- List<URI> contributionArtifacts = null;
-
- //NOTE: if a contribution is stored on the repository
- //the stream would be consumed at this point
- if (storeInRepository || contributionStream == null) {
- if (isDirectory(sourceURL)) {
- // TUSCANY-2702: This is a directory
- contributionStream = null;
- } else {
- URLConnection connection = sourceURL.openConnection();
- connection.setUseCaches(false);
- // Allow access to open URL stream. Add FilePermission to added to security policy file.
- final URLConnection finalConnection = connection;
- try {
- contributionStream = AccessController.doPrivileged(new PrivilegedExceptionAction<InputStream>() {
- public InputStream run() throws IOException {
- return finalConnection.getInputStream();
- }
- });
- } catch (PrivilegedActionException e) {
- throw (IOException)e.getException();
- }
- }
-
- try {
- // process the contribution
- contributionArtifacts = this.packageProcessor.getArtifacts(locationURL, contributionStream);
- } finally {
- IOHelper.closeQuietly(contributionStream);
- contributionStream = null;
- }
- } else {
- // process the contribution
- contributionArtifacts = this.packageProcessor.getArtifacts(locationURL, contributionStream);
- }
-
- // Read all artifacts in the contribution
- try {
- // Allow access to read system properties. Requires PropertyPermission in security policy.
- // Any security exceptions are caught and wrapped as ContributionException.
- processReadPhase(contribution, contributionArtifacts);
- } catch ( Exception e ) {
- throw new ContributionException(e);
- }
-
- readContributionMetadata(contribution);
-
- //
- this.contributionListener.contributionAdded(this.contributionRepository, contribution);
-
- // Resolve them
- processResolvePhase(contribution);
-
- // Add all composites under META-INF/sca-deployables to the
- // list of deployables
- String prefix = Contribution.SCA_CONTRIBUTION_DEPLOYABLES;
- for (Artifact artifact : contribution.getArtifacts()) {
- if (artifact.getModel() instanceof Composite) {
- if (artifact.getURI().startsWith(prefix)) {
- Composite composite = (Composite)artifact.getModel();
- if (!contribution.getDeployables().contains(composite)) {
- contribution.getDeployables().add(composite);
- }
- }
- }
- }
-
- processApplicationComposite(contribution);
-
- // store the contribution on the registry
- this.contributionRepository.addContribution(contribution);
-
- return contribution;
- }
-
- private void readContributionMetadata(Contribution contribution) {
- ContributionMetadata m1 = null, m2 = null;
- for(Artifact a: contribution.getArtifacts()) {
- if(Contribution.SCA_CONTRIBUTION_GENERATED_META.equals(a.getURI())) {
- m1 = (ContributionMetadata) a.getModel();
- }
- if(Contribution.SCA_CONTRIBUTION_META.equals(a.getURI())) {
- m2 = (ContributionMetadata) a.getModel();
- }
- }
- if (m1 != null) {
- contribution.getImports().addAll(m1.getImports());
- contribution.getExports().addAll(m1.getExports());
- contribution.getDeployables().addAll(m1.getDeployables());
- }
- if (m2 != null) {
- contribution.getImports().addAll(m2.getImports());
- contribution.getExports().addAll(m2.getExports());
- contribution.getDeployables().addAll(m2.getDeployables());
- }
- }
-
- /**
- * Process any application composite (eg see 5.1.3 of SCA JEE spec)
- * TODO: see TUSCANY-2581
- */
- private void processApplicationComposite(Contribution contribution) {
-
- Composite composite = findComposite("web-inf/web.composite", contribution);
- if (composite != null) {
- if (!contribution.getDeployables().contains(composite)) {
- contribution.getDeployables().add(createDeploymentComposite(composite));
- }
- }
- }
-
- /**
- * Create a deployment composite for the composite
- * See line 247 section 5.1.3 of SCA JEE spec
- */
- private Composite createDeploymentComposite(Composite composite) {
- // TODO: for now just use as-is
- return composite;
- }
-
- private Composite findComposite(String name, Contribution contribution) {
- for (Artifact artifact : contribution.getArtifacts()) {
- if (artifact.getModel() instanceof Composite) {
- if (name.equalsIgnoreCase(artifact.getURI())) {
- return (Composite)artifact.getModel();
- }
- }
- }
- return null;
- }
-
- /**
- * This utility method process each artifact and delegates to proper
- * artifactProcessor to read the model and generate the in-memory representation
- *
- * @param contribution
- * @param artifacts
- * @throws ContributionException
- * @throws MalformedURLException
- */
- private void processReadPhase(Contribution contribution, List<URI> artifacts) throws ContributionException,
- MalformedURLException, XMLStreamException {
-
- ModelResolver modelResolver = contribution.getModelResolver();
- URL contributionURL = new URL(contribution.getLocation());
-
- List<URI> compositeUris = new ArrayList<URI>();
-
- Object model = null;
- for (URI anArtifactUri : artifacts) {
- if ( anArtifactUri.toString().endsWith(COMPOSITE_FILE_EXTN)) {
- compositeUris.add(anArtifactUri);
- } else {
- URL artifactURL = packageProcessor.getArtifactURL(new URL(contribution.getLocation()), anArtifactUri);
-
- // Add the deployed artifact model to the resolver
- Artifact artifact = this.contributionFactory.createArtifact();
- artifact.setURI(anArtifactUri.toString());
- artifact.setLocation(artifactURL.toString());
- contribution.getArtifacts().add(artifact);
- modelResolver.addModel(artifact);
-
- model = this.artifactProcessor.read(contributionURL, anArtifactUri, artifactURL);
-
- if (model != null) {
- artifact.setModel(model);
-
- // Add the loaded model to the model resolver
- modelResolver.addModel(model);
-
- // Add policy definitions to the list of policy definitions
- if (model instanceof SCADefinitions) {
- policyDefinitions.add(model);
-
- SCADefinitions definitions = (SCADefinitions)model;
- for (Intent intent : definitions.getPolicyIntents() ) {
- policyDefinitionsResolver.addModel(intent);
- }
-
- for (PolicySet policySet : definitions.getPolicySets() ) {
- policyDefinitionsResolver.addModel(policySet);
- }
-
- for (IntentAttachPointType attachPointType : definitions.getBindingTypes() ) {
- policyDefinitionsResolver.addModel(attachPointType);
- }
-
- for (IntentAttachPointType attachPointType : definitions.getImplementationTypes() ) {
- policyDefinitionsResolver.addModel(attachPointType);
- }
- for (Object binding : definitions.getBindings() ) {
- policyDefinitionsResolver.addModel(binding);
- }
- }
- }
- }
- }
-
- for (URI anArtifactUri : compositeUris) {
- URL artifactURL = packageProcessor.getArtifactURL(new URL(contribution.getLocation()), anArtifactUri);
-
- // Add the deployed artifact model to the resolver
- Artifact artifact = this.contributionFactory.createArtifact();
- artifact.setURI(anArtifactUri.toString());
- artifact.setLocation(artifactURL.toString());
- contribution.getArtifacts().add(artifact);
- modelResolver.addModel(artifact);
-
- model = this.artifactProcessor.read(contributionURL, anArtifactUri, artifactURL);
- if (model != null) {
- artifact.setModel(model);
- // Add the loaded model to the model resolver
- modelResolver.addModel(model);
- }
- }
- }
-
- /**
- * This utility method process each artifact and delegates to proper
- * artifactProcessor to resolve the model references
- *
- * @param contribution
- * @throws ContributionException
- */
- @SuppressWarnings("unchecked")
- private void processResolvePhase(Contribution contribution) throws ContributionException {
- List<Artifact> composites = new ArrayList<Artifact>();
-
- // for each artifact that was processed on the contribution
- for (Artifact artifact : contribution.getArtifacts()) {
- //leave the composites to be resolved at the end
- if (artifact.getURI().endsWith(".composite")) {
- composites.add(artifact);
- } else {
- // resolve the model object
- if (artifact.getModel() != null) {
- // System.out.println("Processing Resolve Phase : " + artifact.getURI());
- this.artifactProcessor.resolve(artifact.getModel(), contribution.getModelResolver());
- }
- }
- }
-
- //process each composite file
- for (Artifact artifact : composites) {
- // resolve the model object
- if (artifact.getModel() != null) {
- this.artifactProcessor.resolve(artifact.getModel(), contribution.getModelResolver());
- }
- }
-
- //resolve deployables from contribution metadata
- List<Composite> resolvedDeployables = new ArrayList<Composite>();
- for (Composite deployableComposite : contribution.getDeployables()) {
- Composite resolvedDeployable =
- contribution.getModelResolver().resolveModel(Composite.class, deployableComposite);
-
- resolvedDeployables.add(resolvedDeployable);
- }
- contribution.getDeployables().clear();
- contribution.getDeployables().addAll(resolvedDeployables);
- }
-}
diff --git a/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImpl.java b/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImpl.java
deleted file mode 100644
index a052e43356..0000000000
--- a/sca-java-1.x/tags/1.6.1-TUSCANY-3909/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImpl.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.tuscany.sca.contribution.service.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tuscany.sca.contribution.PackageType;
-import org.apache.tuscany.sca.contribution.service.TypeDescriber;
-import org.apache.tuscany.sca.contribution.service.util.FileHelper;
-
-/**
- * Implementation of the content describer for contribution packages
- *
- * @version $Rev$ $Date$
- */
-public class PackageTypeDescriberImpl implements TypeDescriber {
- private final Map<String, String> contentTypeRegistry = new HashMap<String, String>();
-
- public PackageTypeDescriberImpl() {
- super();
- init();
- }
-
- /**
- * Initialize contentType registry with know types based on known file extensions
- */
- private void init() {
- contentTypeRegistry.put("EAR", PackageType.EAR);
- contentTypeRegistry.put("JAR", PackageType.JAR);
- contentTypeRegistry.put("WAR", PackageType.WAR);
- contentTypeRegistry.put("ZIP", PackageType.ZIP);
- }
-
- protected String resolveContentyTypeByExtension(URL resourceURL) {
- String artifactExtension = FileHelper.getExtension(resourceURL.getPath());
- if (artifactExtension == null) {
- return null;
- }
- return contentTypeRegistry.get(artifactExtension.toUpperCase());
- }
-
- /**
- * Build contentType for a specific resource. We first check if the file is a supported one
- * (looking into our registry based on resource extension) If not found, we try to check file
- * contentType Or we return defaultContentType provided
- *
- * @param resourceURL The artifact URL
- * @param defaultContentType The default content type if we can't find the correct one
- * @return The content type
- */
- public String getType(URL resourceURL, String defaultContentType) {
- URLConnection connection = null;
- String contentType = defaultContentType;
- final String urlProtocol = resourceURL.getProtocol();
-
- if (urlProtocol.equals("file")) {
- final File fileOrDir = FileHelper.toFile(resourceURL);
- // Allow privileged access to test file. Requires FilePermissions in security policy.
- Boolean isDirectory = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
- public Boolean run() {
- return fileOrDir.isDirectory();
- }
- });
- if (isDirectory) {
- // Special case : contribution is a folder
- contentType = PackageType.FOLDER;
- }
-
- String type = resolveContentyTypeByExtension(resourceURL);
- if (type != null) {
- return type;
- }
- } else if (urlProtocol.equals("bundle") || urlProtocol.equals("bundleresource")) {
- contentType = PackageType.BUNDLE;
- } else {
- contentType = resolveContentyTypeByExtension(resourceURL);
- if (contentType == null) {
- try {
- connection = resourceURL.openConnection();
- connection.setUseCaches(false);
- contentType = connection.getContentType();
-
- if (contentType == null || contentType.equals("content/unknown")) {
- // here we couldn't figure out from our registry or from URL and it's not a
- // special file
- // return defaultContentType if provided
- contentType = defaultContentType;
- }
- } catch (IOException io) {
- // could not access artifact, just ignore and we will return
- // null contentType
- }
- }
- }
- return contentType == null ? defaultContentType : contentType;
- }
-
-}