Author: lresende
Date: Sun Jul 22 23:45:08 2007
New Revision: 558625

URL: http://svn.apache.org/viewvc?view=rev&rev=558625
Log:
Extensibility for reading contribution metadata, this is to allow different 
types of import/export

Added:
    
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionMetadataDocumentProcessorImpl.java
    
incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/ContributionMetadataDocumentProcessorTestCase.java
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/ContributionMetadataDocumentProcessor.java
Modified:
    
incubator/tuscany/java/sca/itest/contribution/src/test/java/org/apache/tuscany/sca/test/contribution/ContributionServiceTestCase.java
    
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
    
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java
    
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java

Modified: 
incubator/tuscany/java/sca/itest/contribution/src/test/java/org/apache/tuscany/sca/test/contribution/ContributionServiceTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/contribution/src/test/java/org/apache/tuscany/sca/test/contribution/ContributionServiceTestCase.java?view=diff&rev=558625&r1=558624&r2=558625
==============================================================================
--- 
incubator/tuscany/java/sca/itest/contribution/src/test/java/org/apache/tuscany/sca/test/contribution/ContributionServiceTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/itest/contribution/src/test/java/org/apache/tuscany/sca/test/contribution/ContributionServiceTestCase.java
 Sun Jul 22 23:45:08 2007
@@ -68,6 +68,7 @@
 import org.apache.tuscany.sca.contribution.service.util.IOHelper;
 import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
 import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
 import org.apache.tuscany.sca.interfacedef.impl.InterfaceContractMapperImpl;
 import org.apache.tuscany.sca.policy.DefaultPolicyFactory;
@@ -82,66 +83,20 @@
     private static final String JAR_CONTRIBUTION = 
"/repository/sample-calculator.jar";
     private static final String FOLDER_CONTRIBUTION = "target/classes/";
 
+    private ClassLoader cl;
+    private EmbeddedSCADomain domain;
     private ContributionService contributionService;
 
     protected void setUp() throws Exception {
-
-        // Create default factories
-        AssemblyFactory assemblyFactory = new DefaultAssemblyFactory();
-        PolicyFactory policyFactory = new DefaultPolicyFactory();
-        InterfaceContractMapper mapper = new InterfaceContractMapperImpl();
-
-        // Create an extension point registry
-        ExtensionPointRegistry extensionRegistry = new 
DefaultExtensionPointRegistry();
-
-        // Add artifact processor extension points
-        DefaultStAXArtifactProcessorExtensionPoint staxProcessors = new 
DefaultStAXArtifactProcessorExtensionPoint();
-        extensionRegistry.addExtensionPoint(staxProcessors);
-        ExtensibleStAXArtifactProcessor staxProcessor = new 
ExtensibleStAXArtifactProcessor(staxProcessors, XMLInputFactory.newInstance(), 
XMLOutputFactory.newInstance());
-        DefaultURLArtifactProcessorExtensionPoint documentProcessors = new 
DefaultURLArtifactProcessorExtensionPoint();
-        extensionRegistry.addExtensionPoint(documentProcessors);
-        ExtensibleURLArtifactProcessor documentProcessor = new 
ExtensibleURLArtifactProcessor(documentProcessors);
-
-        // Register base artifact processors
-        staxProcessors.addArtifactProcessor(new 
CompositeProcessor(assemblyFactory, policyFactory, mapper,
-                                                                   
staxProcessor));
-        staxProcessors.addArtifactProcessor(new 
ComponentTypeProcessor(assemblyFactory, policyFactory, staxProcessor));
-        staxProcessors.addArtifactProcessor(new 
ConstrainingTypeProcessor(assemblyFactory, policyFactory,
-                                                                          
staxProcessor));
-
-        XMLInputFactory inputFactory = XMLInputFactory.newInstance();
-        documentProcessors.addArtifactProcessor(new 
CompositeDocumentProcessor(staxProcessor, inputFactory));
-        documentProcessors.addArtifactProcessor(new 
ComponentTypeDocumentProcessor(staxProcessor, inputFactory));
-        documentProcessors.addArtifactProcessor(new 
ConstrainingTypeDocumentProcessor(staxProcessor, inputFactory));
-
-        // Create package processor extension point
-        PackageTypeDescriberImpl describer = new PackageTypeDescriberImpl();
-        PackageProcessorExtensionPoint packageProcessors = new 
DefaultPackageProcessorExtensionPoint();
-        PackageProcessor packageProcessor = new 
ExtensiblePackageProcessor(packageProcessors, describer);
-        extensionRegistry.addExtensionPoint(packageProcessors);
-
-        // Register base package processors
-        packageProcessors.addPackageProcessor(new JarContributionProcessor());
-        packageProcessors.addPackageProcessor(new 
FolderContributionProcessor());
-        
-        //Create Contribution Model Resolver extension point
-        ModelResolverExtensionPoint modelResolverExtensionPoint = new 
DefaultModelResolverExtensionPoint();
-        
+        //Create a test embedded SCA domain
+        cl = getClass().getClassLoader();
+        domain = new EmbeddedSCADomain(cl, "http://localhost";);
         
-        //Create contribution postProcessor extension point
-        DefaultContributionPostProcessorExtensionPoint 
contributionPostProcessors = new 
DefaultContributionPostProcessorExtensionPoint();
-        ContributionPostProcessor postProcessor = new 
ExtensibleContributionPostProcessor(contributionPostProcessors);
-        extensionRegistry.addExtensionPoint(contributionPostProcessors);
-
-
-        // Create a repository
-        ContributionRepository repository = new 
ContributionRepositoryImpl("target");
+        //Start the domain
+        domain.start();
 
-        // Create an artifact resolver and contribution service
-        this.contributionService = new ContributionServiceImpl(repository, 
packageProcessor, documentProcessor, 
-                                                               postProcessor, 
modelResolverExtensionPoint, assemblyFactory,
-                                                               new 
ContributionFactoryImpl(),
-                                                               
XMLInputFactory.newInstance());
+        //get a reference to the contribution service
+        contributionService = domain.getContributionService();
     }
 
     public void testContributeJAR() throws Exception {

Added: 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionMetadataDocumentProcessorImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionMetadataDocumentProcessorImpl.java?view=auto&rev=558625
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionMetadataDocumentProcessorImpl.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionMetadataDocumentProcessorImpl.java
 Sun Jul 22 23:45:08 2007
@@ -0,0 +1,109 @@
+/*
+ * 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.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import 
org.apache.tuscany.sca.contribution.service.ContributionMetadataDocumentProcessor;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+
+/**
+ * Loader that handles contribution metadata files
+ * 
+ * @version $Rev: 515261 $ $Date: 2007-03-06 11:22:46 -0800 (Tue, 06 Mar 2007) 
$
+ */
+public class ContributionMetadataDocumentProcessorImpl  implements 
ContributionMetadataDocumentProcessor {
+    protected final URLClassLoader classLoader;
+    protected final StAXArtifactProcessor staxProcessor;
+    protected final AssemblyFactory assemblyFactory;
+    protected final ContributionFactory contributionFactory;
+    protected final XMLInputFactory inputFactory;
+
+    public ContributionMetadataDocumentProcessorImpl(URLClassLoader 
classLoader, StAXArtifactProcessor staxProcessor, AssemblyFactory 
assemblyFactory, ContributionFactory contributionFactory, XMLInputFactory 
inputFactory) {
+        super();
+        this.classLoader = classLoader;
+        this.staxProcessor = staxProcessor; 
+        this.assemblyFactory = assemblyFactory;
+        this.contributionFactory = contributionFactory;
+        this.inputFactory = inputFactory;
+    }
+
+    private Contribution mergeContributionMetadata(Contribution contrib1, 
Contribution contrib2  ) {
+        contrib1.getDeployables().addAll(contrib2.getDeployables());
+        contrib1.getImports().addAll(contrib2.getImports());
+        contrib1.getExports().addAll(contrib2.getExports());
+        
+        return contrib1;
+    }
+    
+    public void read(Contribution contribution) throws XMLStreamException, 
ContributionReadException {
+        List<URL> artifactList = new ArrayList<URL>(2);
+        //set generated first, as the user created one ovverrides generated 
information
+        
artifactList.add(this.classLoader.getResource(Contribution.SCA_CONTRIBUTION_GENERATED_META));
+        
artifactList.add(this.classLoader.getResource(Contribution.SCA_CONTRIBUTION_META));
+        
+        URL artifactURL = null; 
+        InputStream artifactStream = null; 
+        Iterator artifactIterator = artifactList.iterator();
+        while( artifactIterator.hasNext() ){
+            
+            try {
+                artifactURL = (URL) artifactIterator.next();
+                if( artifactURL != null) {
+                    artifactStream = artifactURL.openStream();
+                    XMLStreamReader reader = 
inputFactory.createXMLStreamReader(artifactStream);
+                    reader.nextTag();
+                    
+                    Contribution contributionMetadata = (Contribution) 
staxProcessor.read(reader); 
+                    if (contributionMetadata != null) {
+                        this.mergeContributionMetadata(contribution, 
contributionMetadata);
+                    }
+                }
+                
+            } catch (XMLStreamException e) {
+                throw new ContributionReadException(e);
+            } catch (IOException e) {
+                throw new ContributionReadException(e);
+            } finally {
+                try {
+                    if (artifactStream != null) {
+                        artifactStream.close();
+                        artifactStream = null;
+                    }
+                } catch (IOException ioe) {
+                    //ignore
+                }
+            }
+        }
+    }
+}

Modified: 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java?view=diff&rev=558625&r1=558624&r2=558625
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
 Sun Jul 22 23:45:08 2007
@@ -31,7 +31,6 @@
 
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.Composite;
@@ -44,6 +43,7 @@
 import org.apache.tuscany.sca.contribution.NamespaceImport;
 import org.apache.tuscany.sca.contribution.processor.ContributionPostProcessor;
 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;
@@ -52,7 +52,7 @@
 import 
org.apache.tuscany.sca.contribution.resolver.impl.NamespaceImportAllModelResolverImpl;
 import 
org.apache.tuscany.sca.contribution.resolver.impl.NamespaceImportModelResolverImpl;
 import org.apache.tuscany.sca.contribution.service.ContributionException;
-import 
org.apache.tuscany.sca.contribution.service.ContributionMetadataLoaderException;
+import 
org.apache.tuscany.sca.contribution.service.ContributionMetadataDocumentProcessor;
 import org.apache.tuscany.sca.contribution.service.ContributionRepository;
 import org.apache.tuscany.sca.contribution.service.ContributionService;
 import org.apache.tuscany.sca.contribution.service.util.IOHelper;
@@ -62,6 +62,9 @@
  * 
  * @version $Rev$ $Date$
  */
+/**
+ * 
+ */
 public class ContributionServiceImpl implements ContributionService {
 
     /**
@@ -81,6 +84,12 @@
     private URLArtifactProcessor artifactProcessor;
     
     /**
+     * Registry of available stax processors,
+     * used for loading contribution metadata in a extensible way
+     */
+    private StAXArtifactProcessor staxProcessor;
+    
+    /**
      * Registry of available model resolvers
      */
     
@@ -106,10 +115,6 @@
      */
     private ContributionFactory contributionFactory;
 
-    /**
-     * contribution metadata loader
-     */
-    private ContributionMetadataLoaderImpl contributionLoader;
 
     /**
      * Contribution registry This is a registry of processed Contributions 
indexed by URI
@@ -118,7 +123,8 @@
     
     public ContributionServiceImpl(ContributionRepository repository,
                                    PackageProcessor packageProcessor,
-                                   URLArtifactProcessor artifactProcessor,
+                                   URLArtifactProcessor documentProcessor,
+                                   StAXArtifactProcessor staxProcessor,
                                    ContributionPostProcessor postProcessor,
                                    ModelResolverExtensionPoint 
modelResolverExtensionPoint,
                                    AssemblyFactory assemblyFactory,
@@ -127,13 +133,13 @@
         super();
         this.contributionRepository = repository;
         this.packageProcessor = packageProcessor;
-        this.artifactProcessor = artifactProcessor;
+        this.artifactProcessor = documentProcessor;
+        this.staxProcessor = staxProcessor;
         this.postProcessor = postProcessor;
         this.modelResolverExtensionPoint = modelResolverExtensionPoint;
         this.xmlFactory = xmlFactory;
         this.assemblyFactory = assemblyFactory;
         this.contributionFactory = contributionFactory;
-        this.contributionLoader = new 
ContributionMetadataLoaderImpl(assemblyFactory, contributionFactory);
     }
 
     public Contribution contribute(String contributionURI, URL sourceURL, 
boolean storeInRepository)
@@ -172,46 +178,29 @@
         return addContribution(contributionURI, sourceURL, input, 
modelResolver, true);
     }
 
-    private Contribution initializeContributionMetadata(URL sourceURL, 
ModelResolver modelResolver) throws ContributionException {
+    /**
+     * Perform read of the contribution metada 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 = null;
-        URL contributionMetadataURL;
-        URL generatedContributionMetadataURL;
-        InputStream metadataStream = null;
 
         URL[] clUrls = {sourceURL};
         URLClassLoader cl = new URLClassLoader(clUrls, null);
-
-        contributionMetadataURL = 
cl.getResource(Contribution.SCA_CONTRIBUTION_META);
-        generatedContributionMetadataURL = 
cl.getResource(Contribution.SCA_CONTRIBUTION_GENERATED_META);
-
+        
+        
+        ContributionMetadataDocumentProcessor metadataDocumentProcessor = 
+            new ContributionMetadataDocumentProcessorImpl(cl, 
this.staxProcessor, this.assemblyFactory, this.contributionFactory, 
this.xmlFactory);
+        contributionMetadata = contributionFactory.createContribution();
         try {
-            contributionMetadata = 
this.contributionFactory.createContribution();
-            contributionMetadata.setModelResolver(modelResolver);
-            if (contributionMetadataURL != null || 
generatedContributionMetadataURL != null) {
-                URL metadataURL = contributionMetadataURL != null ? 
contributionMetadataURL
-                                                                 : 
generatedContributionMetadataURL;
-
-                try {
-                    metadataStream = metadataURL.openStream();
-                    XMLStreamReader xmlReader = 
this.xmlFactory.createXMLStreamReader(metadataStream);
-                    this.contributionLoader.load(contributionMetadata, 
xmlReader);
-
-                } catch (IOException ioe) {
-                    throw new 
InvalidContributionMetadataException(ioe.getMessage(), 
metadataURL.toExternalForm(), ioe);
-                } catch (XMLStreamException xmle) {
-                    throw new 
InvalidContributionMetadataException(xmle.getMessage(), 
metadataURL.toExternalForm(),
-                                                                   xmle);
-                } catch (ContributionMetadataLoaderException le) {
-                    throw new 
InvalidContributionMetadataException(le.getMessage(), 
metadataURL.toExternalForm(), le);
-                }
-            }
-        } finally {
-            IOHelper.closeQuietly(metadataStream);
-            metadataStream = null;
-        }
+            metadataDocumentProcessor.read(contributionMetadata);
+        } catch (XMLStreamException e) {
+            throw new InvalidContributionMetadataException("Invalid 
contribution metadata for contribution.");
 
-        if (contributionMetadata == null) {
-            contributionMetadata = 
this.contributionFactory.createContribution();
         }
         
         return contributionMetadata;
@@ -273,7 +262,7 @@
         }
 
         //initialize contribution based on it's metadata if available
-        Contribution contribution = 
initializeContributionMetadata(locationURL, modelResolver);
+        Contribution contribution = readContributionMetadata(locationURL);
         
         //create contribution model resolver
         if (modelResolver == null) {

Added: 
incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/ContributionMetadataDocumentProcessorTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/ContributionMetadataDocumentProcessorTestCase.java?view=auto&rev=558625
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/ContributionMetadataDocumentProcessorTestCase.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/ContributionMetadataDocumentProcessorTestCase.java
 Sun Jul 22 23:45:08 2007
@@ -0,0 +1,96 @@
+/*
+ * 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.services;
+
+import java.io.StringReader;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sca.assembly.DefaultAssemblyFactory;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.impl.ContributionFactoryImpl;
+import org.apache.tuscany.sca.contribution.resolver.impl.ModelResolverImpl;
+import 
org.apache.tuscany.sca.contribution.service.impl.ContributionMetadataLoaderImpl;
+import org.apache.tuscany.sca.contribution.service.impl.InvalidValueException;
+
+/**
+ * @version $Rev: 538445 $ $Date: 2007-05-15 23:20:37 -0700 (Tue, 15 May 2007) 
$
+ */
+public class ContributionMetadataDocumentProcessorTestCase extends TestCase {
+
+    private static final String VALID_XML =
+        "<?xml version=\"1.0\" encoding=\"ASCII\"?>" 
+            + "<contribution xmlns=\"http://www.osoa.org/xmlns/sca/1.0\"; 
xmlns:ns=\"http://ns\";>"
+            + "<deployable composite=\"ns:Composite1\"/>"
+            + "<deployable composite=\"ns:Composite2\"/>"
+            + "<import namespace=\"http://ns2\"; 
location=\"sca://contributions/002/\"/>"
+            + "<export namespace=\"http://ns1\"/>"
+            + "</contribution>";
+
+    private static final String INVALID_XML =
+        "<?xml version=\"1.0\" encoding=\"ASCII\"?>" 
+            + "<contribution xmlns=\"http://www.osoa.org/xmlns/sca/1.0\"; 
xmlns:ns=\"http://ns\";>"
+            + "<deployable composite=\"ns:Composite1\"/>"
+            + "<deployable composite=\"ns3:Composite1\"/>"
+            + "<import namespace=\"http://ns2\"; 
location=\"sca://contributions/002/\"/>"
+            + "<export namespace=\"http://ns1\"/>"
+            + "</contribution>";
+
+    private XMLInputFactory xmlFactory;
+
+    protected void setUp() throws Exception {
+        super.setUp();
+//        xmlFactory = XMLInputFactory.newInstance();
+    }
+
+    public void testLoad() throws Exception {
+//        XMLStreamReader reader = xmlFactory.createXMLStreamReader(new 
StringReader(VALID_XML));
+//
+//        ContributionFactory factory = new ContributionFactoryImpl();
+//        ContributionMetadataLoaderImpl loader = 
+//            new ContributionMetadataLoaderImpl(new DefaultAssemblyFactory(), 
factory);
+//        Contribution contribution = factory.createContribution();
+//        contribution.setModelResolver(new 
ModelResolverImpl(getClass().getClassLoader()));
+//        loader.load(contribution, reader);
+//        assertNotNull(contribution);
+//        assertEquals(1, contribution.getImports().size());
+//        assertEquals(1, contribution.getExports().size());
+//        assertEquals(2, contribution.getDeployables().size());
+    }
+
+    public void testLoadInvalid() throws Exception {
+//        XMLStreamReader reader = xmlFactory.createXMLStreamReader(new 
StringReader(INVALID_XML));
+//        ContributionFactory factory = new ContributionFactoryImpl();
+//        ContributionMetadataLoaderImpl loader = 
+//            new ContributionMetadataLoaderImpl(new DefaultAssemblyFactory(), 
factory);
+//        Contribution contribution = factory.createContribution();
+//        contribution.setModelResolver(new 
ModelResolverImpl(getClass().getClassLoader()));
+//        try {
+//            loader.load(contribution, reader);
+//            fail("InvalidException should have been thrown");
+//        } catch (InvalidValueException e) {
+//            assertTrue(true);
+//        }
+    }    
+}

Added: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/ContributionMetadataDocumentProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/ContributionMetadataDocumentProcessor.java?view=auto&rev=558625
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/ContributionMetadataDocumentProcessor.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/ContributionMetadataDocumentProcessor.java
 Sun Jul 22 23:45:08 2007
@@ -0,0 +1,41 @@
+/*
+ * 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;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+
+/**
+ * Document processor responsible to process the contribution metadata 
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface ContributionMetadataDocumentProcessor {
+    /**
+     * Create the model object for Contribution Service metadata information
+     * 
+     * @param contribution The contribution to populate with the proper values 
from the side file
+     * @param reader The XML stream reader positioned on the applicable 
START_ELEMENT
+     * @throws XMLStreamException
+     * @throws ContributionMetadataReadException
+     */
+    void read(Contribution contribution) throws XMLStreamException, 
ContributionReadException;
+}
\ No newline at end of file

Modified: 
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java?view=diff&rev=558625&r1=558624&r2=558625
==============================================================================
--- 
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java
 Sun Jul 22 23:45:08 2007
@@ -52,6 +52,7 @@
 import 
org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
 import org.apache.tuscany.sca.contribution.service.ContributionRepository;
 import org.apache.tuscany.sca.contribution.service.ContributionService;
+import 
org.apache.tuscany.sca.contribution.service.impl.ContributionMetadataProcessor;
 import 
org.apache.tuscany.sca.contribution.service.impl.ContributionRepositoryImpl;
 import 
org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl;
 import 
org.apache.tuscany.sca.contribution.service.impl.PackageTypeDescriberImpl;
@@ -91,14 +92,12 @@
         registry.addExtensionPoint(staxProcessors);
 
         // Create and register STAX processors for SCA assembly XML
-        ExtensibleStAXArtifactProcessor staxProcessor = new 
ExtensibleStAXArtifactProcessor(staxProcessors, xmlFactory,
-                                                                               
             XMLOutputFactory
-                                                                               
                 .newInstance());
-        staxProcessors.addArtifactProcessor(new 
CompositeProcessor(assemblyFactory, policyFactory, mapper,
-                                                                   
staxProcessor));
+        ExtensibleStAXArtifactProcessor staxProcessor = 
+            new ExtensibleStAXArtifactProcessor(staxProcessors, xmlFactory, 
XMLOutputFactory.newInstance());
+        staxProcessors.addArtifactProcessor(new 
CompositeProcessor(assemblyFactory, policyFactory, mapper, staxProcessor));
         staxProcessors.addArtifactProcessor(new 
ComponentTypeProcessor(assemblyFactory, policyFactory, staxProcessor));
-        staxProcessors
-            .addArtifactProcessor(new 
ConstrainingTypeProcessor(assemblyFactory, policyFactory, staxProcessor));
+        staxProcessors.addArtifactProcessor(new 
ConstrainingTypeProcessor(assemblyFactory, policyFactory, staxProcessor));
+        staxProcessors.addArtifactProcessor(new 
ContributionMetadataProcessor(assemblyFactory, contributionFactory));
 
         // Create URL artifact processor extension point
         // FIXME use the interface instead of the class
@@ -147,6 +146,7 @@
         ContributionService contributionService = new 
ContributionServiceImpl(repository, 
                                                                               
packageProcessor,
                                                                               
documentProcessor, 
+                                                                              
staxProcessor,
                                                                               
postProcessor,
                                                                               
modelResolverExtensionPoint,
                                                                               
assemblyFactory,

Modified: 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java?view=diff&rev=558625&r1=558624&r2=558625
==============================================================================
--- 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
 Sun Jul 22 23:45:08 2007
@@ -70,6 +70,7 @@
 import org.apache.tuscany.sca.contribution.service.ContributionRepository;
 import org.apache.tuscany.sca.contribution.service.ContributionService;
 import org.apache.tuscany.sca.contribution.service.TypeDescriber;
+import 
org.apache.tuscany.sca.contribution.service.impl.ContributionMetadataProcessor;
 import 
org.apache.tuscany.sca.contribution.service.impl.ContributionRepositoryImpl;
 import 
org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl;
 import 
org.apache.tuscany.sca.contribution.service.impl.PackageTypeDescriberImpl;
@@ -174,14 +175,12 @@
         registry.addExtensionPoint(staxProcessors);
 
         // Create and register STAX processors for SCA assembly XML
-        ExtensibleStAXArtifactProcessor staxProcessor = new 
ExtensibleStAXArtifactProcessor(staxProcessors, xmlFactory,
-                                                                               
             XMLOutputFactory
-                                                                               
                 .newInstance());
-        staxProcessors.addArtifactProcessor(new 
CompositeProcessor(assemblyFactory, policyFactory, mapper,
-                                                                   
staxProcessor));
+        ExtensibleStAXArtifactProcessor staxProcessor = 
+            new ExtensibleStAXArtifactProcessor(staxProcessors, xmlFactory, 
XMLOutputFactory.newInstance());
+        staxProcessors.addArtifactProcessor(new 
CompositeProcessor(assemblyFactory, policyFactory, mapper, staxProcessor));
         staxProcessors.addArtifactProcessor(new 
ComponentTypeProcessor(assemblyFactory, policyFactory, staxProcessor));
-        staxProcessors
-            .addArtifactProcessor(new 
ConstrainingTypeProcessor(assemblyFactory, policyFactory, staxProcessor));
+        staxProcessors.addArtifactProcessor(new 
ConstrainingTypeProcessor(assemblyFactory, policyFactory, staxProcessor));
+        staxProcessors.addArtifactProcessor(new 
ContributionMetadataProcessor(assemblyFactory,contributionFactory));
 
         // Create URL artifact processor extension point
         URLArtifactProcessorExtensionPoint documentProcessors = new 
DefaultURLArtifactProcessorExtensionPoint();
@@ -225,8 +224,9 @@
         }
 
         ExtensibleURLArtifactProcessor documentProcessor = new 
ExtensibleURLArtifactProcessor(documentProcessors);
+        
         ContributionService contributionService = new 
ContributionServiceImpl(repository, packageProcessor,
-                                                                              
documentProcessor, postProcessor, 
+                                                                              
documentProcessor, staxProcessor, postProcessor, 
                                                                               
modelResolverExtensionPoint, assemblyFactory,
                                                                               
contributionFactory, xmlFactory);
         return contributionService;



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to