Author: jsdelfino
Date: Thu Feb 28 00:34:05 2008
New Revision: 631891

URL: http://svn.apache.org/viewvc?rev=631891&view=rev
Log:
Improved and simplified the contribution scanners. Integrated the support for 
determining contribution dependencies in the admin app.

Modified:
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/ContributionScanner.java
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java
    incubator/tuscany/java/sca/modules/workspace-admin/pom.xml
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html
    
incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java
    incubator/tuscany/java/sca/modules/workspace-impl/pom.xml
    
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java
    
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
    
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
    
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
    incubator/tuscany/java/sca/modules/workspace-xml/pom.xml
    incubator/tuscany/java/sca/modules/workspace/pom.xml

Modified: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/ContributionScanner.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/ContributionScanner.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/ContributionScanner.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/ContributionScanner.java
 Thu Feb 28 00:34:05 2008
@@ -19,11 +19,10 @@
 package org.apache.tuscany.sca.contribution.scanner;
 
 import java.io.IOException;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.List;
 
-import org.apache.tuscany.sca.contribution.service.ContributionException;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 
 /**
  * Interface for contribution package scanners
@@ -50,7 +49,7 @@
      * @throws ContributionException
      * @throws IOException
      */
-    List<String> getArtifacts(URL contributionURL) throws 
ContributionException, IOException;
+    List<String> getArtifacts(URL contributionURL) throws 
ContributionReadException;
 
     /**
      * Return the URL for an artifact in the contribution.
@@ -62,6 +61,6 @@
      * @param artifact The relative URI for the artifact
      * @return The artifact URL
      */
-    URL getArtifactURL(URL packageSourceURL, String artifact) throws 
MalformedURLException;
+    URL getArtifactURL(URL contributionURL, String artifact) throws 
ContributionReadException;
 
 }

Modified: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/DefaultContributionScannerExtensionPoint.java
 Thu Feb 28 00:34:05 2008
@@ -29,6 +29,7 @@
 import java.util.Set;
 
 import org.apache.tuscany.sca.contribution.service.ContributionException;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import org.apache.tuscany.sca.contribution.util.ServiceDeclaration;
 import org.apache.tuscany.sca.contribution.util.ServiceDiscovery;
 
@@ -98,11 +99,11 @@
             this.contributionType = contributionType;
         }
 
-        public URL getArtifactURL(URL contributionSourceURL, String artifact) 
throws MalformedURLException {
+        public URL getArtifactURL(URL contributionSourceURL, String artifact) 
throws ContributionReadException {
             return getScanner().getArtifactURL(contributionSourceURL, 
artifact);
         }
 
-        public List<String> getArtifacts(URL contributionSourceURL) throws 
ContributionException, IOException {
+        public List<String> getArtifacts(URL contributionSourceURL) throws 
ContributionReadException {
             return getScanner().getArtifacts(contributionSourceURL);
         }
 

Modified: incubator/tuscany/java/sca/modules/workspace-admin/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/pom.xml?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/pom.xml Thu Feb 28 
00:34:05 2008
@@ -26,7 +26,7 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>tuscany-workspace-admin</artifactId>
-    <name>Apache Tuscany SCA Contribution Workspace Administration 
Application</name>
+    <name>Apache Tuscany SCA Workspace Administration</name>
 
     <dependencies>
         <dependency>

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java
 Thu Feb 28 00:34:05 2008
@@ -100,7 +100,7 @@
         
         // Read domain.composite
         compositeProcessor = new CompositeProcessor(contributionFactory, 
assemblyFactory, policyFactory, contractMapper, null);
-        File file = new File(URI.create(compositeFileName));
+        File file = new File(compositeFileName);
         if (file.exists()) {
             XMLInputFactory inputFactory = XMLInputFactory.newInstance();
             FileInputStream is = new FileInputStream(file);
@@ -220,7 +220,7 @@
             format.setIndent(2);
             
             // Write to domain.composite
-            FileOutputStream os = new FileOutputStream(new 
File(URI.create(compositeFileName)));
+            FileOutputStream os = new FileOutputStream(new 
File(compositeFileName));
             XMLSerializer serializer = new XMLSerializer(os, format);
             serializer.serialize(document);
             

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java
 Thu Feb 28 00:34:05 2008
@@ -23,7 +23,6 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.net.URI;
 import java.util.List;
 
 import javax.servlet.ServletException;
@@ -61,7 +60,7 @@
     public void initialize() throws IOException {
         upload = new ServletFileUpload(new DiskFileItemFactory());
         
-        files = new File(URI.create(directoryName));
+        files = new File(directoryName);
         if (!files.exists()) {
             files.mkdirs();
         }

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
 Thu Feb 28 00:34:05 2008
@@ -117,8 +117,7 @@
         contributionProcessor = new 
ContributionInfoProcessor(contributionFactory, metadataDocumentProcessor);
 
         // Read workspace.xml
-        URI uri = URI.create(workspaceFileName);
-        File file = new File(uri);
+        File file = new File(workspaceFileName);
         if (file.exists()) {
             XMLInputFactory inputFactory = XMLInputFactory.newInstance();
             FileInputStream is = new FileInputStream(file);
@@ -216,7 +215,7 @@
                 URI uri = URI.create(c.getURI());
                 URL url;
                 try {
-                    url = new URL(c.getLocation());
+                    url = url(c.getLocation());
                 } catch (MalformedURLException e) {
                     throw new ServiceRuntimeException();
                 }
@@ -231,8 +230,9 @@
             
             // Calculate the contribution dependencies
             String key = queryString.substring(11);
-            for (Contribution contribution: workspace.getContributions()) {
+            for (Contribution contribution: 
dependencyWorkspace.getContributions()) {
                 if (key.equals(contribution.getURI())) {
+                    entries.add(entry(contribution));
                     
                     ContributionDependencyAnalyzer analyzer = new 
ContributionDependencyAnalyzer();
                     Set<Contribution> dependencies = 
analyzer.calculateContributionDependencies(dependencyWorkspace, contribution);
@@ -241,6 +241,7 @@
                     for (Contribution dependency: dependencies) {
                         entries.add(entry(dependency));
                     }
+                    break;
                 }
             }
 
@@ -250,6 +251,16 @@
             throw new UnsupportedOperationException();
         }
     }
+    
+    private URL url(String location) throws MalformedURLException {
+        URI uri = URI.create(location);
+        if (uri.getScheme() == null) {
+            File file = new File(location);
+            return file.toURI().toURL();
+        } else {
+            return uri.toURL();
+        }
+    }
 
     /**
      * Returns an entry representing a contribution
@@ -284,8 +295,7 @@
             format.setIndent(2);
             
             // Write to workspace.xml
-            URI uri = URI.create(workspaceFileName);
-            FileOutputStream os = new FileOutputStream(new File(uri));
+            FileOutputStream os = new FileOutputStream(new 
File(workspaceFileName));
             XMLSerializer serializer = new XMLSerializer(os, format);
             serializer.serialize(document);
             

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite
 Thu Feb 28 00:34:05 2008
@@ -64,7 +64,7 @@
     
     <component name="WorkspaceCollectionComponent">
         <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.WorkspaceCollectionImpl"/>   
          
-        <property name="workspaceFileName">workspace</property>             
+        <property name="workspaceFileName">workspace.xml</property>            
 
                <service name="WorkspaceCollection">
                        <t:binding.atom uri="http://localhost:9990/workspace"/>
                </service>
@@ -88,7 +88,7 @@
 
     <component name="DomainCompositeCollectionComponent">
         <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.CompositeCollectionImpl"/>
-        <property name="compositeFileName">domain</property>
+        <property name="compositeFileName">domain.composite</property>
                <service name="CompositeCollection">
                        <t:binding.atom uri="http://localhost:9990/composite"/>
                </service>
@@ -96,7 +96,7 @@
 
     <component name="CloudCollectionComponent">
         <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.CompositeCollectionImpl"/>
-        <property name="compositeFileName">cloud</property>
+        <property name="compositeFileName">cloud.composite</property>
                <service name="CompositeCollection">
                        <t:binding.atom uri="http://localhost:9990/cloud"/>
                </service>

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
 Thu Feb 28 00:34:05 2008
@@ -35,11 +35,11 @@
                if (feed != null) {
                        var entries = feed.getElementsByTagName("entry");       
       
                        var composites = "";
-                       composites += '<table border="0">';
+                       composites += '<table border="0" valign="bottom">';
                        for (var i=0; i<entries.length; i++) {
                                var id = 
entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
                                var location = 
entries[i].getElementsByTagName("link")[0].getAttribute("href");
-                               composites += '<tr>'
+                               composites += '<tr valign="bottom">'
                                composites += '<td><input name="composites" 
type="checkbox" value="' + id + '">' +
                                                                                
        '<a href=\"' + location + '\">' + id + '</a></td>';
                                composites += '</tr>';

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
 Thu Feb 28 00:34:05 2008
@@ -39,7 +39,7 @@
                        for (var i=0; i<entries.length; i++) {
                                var id = 
entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
                                var location = 
entries[i].getElementsByTagName("link")[0].getAttribute("href");
-                               composites += '<tr>'
+                               composites += '<tr valign="bottom">'
                                composites += '<td><input name="composites" 
type="checkbox" value="' + id + '">' +
                                                                                
        '<a href=\"' + location + '\">' + id + '</a></td>';
                                composites += '</tr>';

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html
 Thu Feb 28 00:34:05 2008
@@ -39,7 +39,7 @@
                        for (var i=0; i<entries.length; i++) {
                                var id = 
entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
                                var location = 
entries[i].getElementsByTagName("link")[0].getAttribute("href");
-                               contributions += '<tr>'
+                               contributions += '<tr valign="bottom">'
                                contributions += '<td><input 
name="contributions" type="checkbox" value="' + id + '">' +
                                                                                
        '<a href=\"' + location + '\">' + id + '</a></td>';
                                contributions += '<td>&nbsp;&nbsp;&nbsp;<a 
href=\"/workspace/?importedBy=' + id + '\">dependencies</a></td>';
@@ -100,7 +100,7 @@
   
   <b>Add Contribution</b>
   <form name="newContributionForm">
-    <table border="0">
+    <table border="0" >
     <tr><td>Contribution URI:</td><td><input type="text" name="contributionID" 
/></td></tr> 
     <tr><td>Address:</td><td><input type="text" name="contributionLocation" 
/></td></tr>
     </table>

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java
 Thu Feb 28 00:34:05 2008
@@ -59,7 +59,7 @@
         
         // Create a workspace collection component
         workspaceCollection = new WorkspaceCollectionImpl();
-        workspaceCollection.workspaceFileName = url.toString();
+        workspaceCollection.workspaceFileName = url.getFile();
         workspaceCollection.init();
         
         // Populate the workspace with test data
@@ -81,11 +81,15 @@
         assertTrue(item.getLink().endsWith("contributions/assets"));
     }
     
-    public void testQuery() {
+    public void testQuery1() {
         Entry<String, Item>[] entries = 
workspaceCollection.query("importedBy=store");
-        for (Entry<String, Item> entry: entries) {
-            System.out.println(entry.getKey());
-        }
+        assertEquals(2, entries.length);
+    }
+    
+    public void testQuery2() {
+        Entry<String, Item>[] entries = 
workspaceCollection.query("importedBy=assets");
+        assertEquals(1, entries.length);
+        assertEquals("assets", entries[0].getKey());
     }
     
 }

Modified: incubator/tuscany/java/sca/modules/workspace-impl/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-impl/pom.xml?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-impl/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/workspace-impl/pom.xml Thu Feb 28 
00:34:05 2008
@@ -26,7 +26,7 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>tuscany-workspace-impl</artifactId>
-    <name>Apache Tuscany SCA Contribution Workspace Implementation</name>
+    <name>Apache Tuscany SCA Workspace Implementation</name>
 
     <dependencies>
         <dependency>

Modified: 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java
 Thu Feb 28 00:34:05 2008
@@ -51,6 +51,7 @@
         Set<Contribution> dependencies = new HashSet<Contribution>();
 
         addContributionDependencies(workspace, contribution, dependencies);
+        dependencies.remove(contribution);
         
         return dependencies;
     }

Modified: 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
 Thu Feb 28 00:34:05 2008
@@ -18,17 +18,20 @@
  */
 package org.apache.tuscany.sca.workspace.processor.impl;
 
+import java.io.File;
 import java.net.URI;
 import java.net.URL;
-import java.net.URLClassLoader;
 
 import org.apache.tuscany.sca.contribution.Contribution;
 import org.apache.tuscany.sca.contribution.ContributionFactory;
 import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.scanner.ContributionScanner;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import 
org.apache.tuscany.sca.contribution.service.ContributionResolveException;
 import 
org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor;
+import 
org.apache.tuscany.sca.workspace.scanner.impl.DirectoryContributionScanner;
+import org.apache.tuscany.sca.workspace.scanner.impl.JarContributionScanner;
 
 /**
  * URLArtifactProcessor that handles contribution files and returns a 
contribution
@@ -60,12 +63,19 @@
         contribution.setURI(contributionURI.toString());
         contribution.setUnresolved(true);
 
+        // Create a contribution scanner
+        ContributionScanner scanner;
+        if ("file".equals(contributionURL.getProtocol()) && new 
File(contributionURL.getFile()).isDirectory()) {
+            scanner = new DirectoryContributionScanner();
+        } else {
+            scanner = new JarContributionScanner();
+        }
+        
         // Read generated and user sca-contribution.xml files
-        URLClassLoader cl = new URLClassLoader(new URL[]{contributionURL}, 
null);
         for (String path: new String[]{
                                        
Contribution.SCA_CONTRIBUTION_GENERATED_META,
                                        Contribution.SCA_CONTRIBUTION_META}) {
-            URL url = cl.getResource(path);
+            URL url = scanner.getArtifactURL(contributionURL, path);
             if (url != null) {
                 Contribution c = metadataProcessor.read(contributionURL, 
URI.create(path), url);
                 contribution.getImports().addAll(c.getImports());

Modified: 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
 Thu Feb 28 00:34:05 2008
@@ -28,7 +28,6 @@
 import java.util.List;
 
 import org.apache.tuscany.sca.contribution.scanner.ContributionScanner;
-import org.apache.tuscany.sca.contribution.service.ContributionException;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 
 /**
@@ -45,34 +44,28 @@
         return "application/vnd.tuscany.folder";
     }
 
-    public URL getArtifactURL(URL sourceURL, String artifact) throws 
MalformedURLException {
-        return new URL(sourceURL, artifact);
-    }
-
-    public List<String> getArtifacts(URL packageSourceURL) throws 
ContributionException,
-        IOException {
-        if (packageSourceURL == null) {
-            throw new IllegalArgumentException("Invalid null package source 
URL.");
+    public URL getArtifactURL(URL contributionURL, String artifact) throws 
ContributionReadException {
+        File directory = directory(contributionURL);
+        File file = new File(directory, artifact);
+        if (file.exists()) {
+            try {
+                return file.toURI().toURL();
+            } catch (MalformedURLException e) {
+                throw new ContributionReadException(e);
+            }
+        } else {
+            return null;
         }
+    }
 
+    public List<String> getArtifacts(URL contributionURL) throws 
ContributionReadException {
+        File directory = directory(contributionURL);
         List<String> artifacts = new ArrayList<String>();
-
-        // Assume the root is a directory
-        File rootFolder;
-
         try {
-            rootFolder = new File(packageSourceURL.toURI());
-        } catch (URISyntaxException e) {
-            throw new ContributionException(e);
+            traverse(artifacts, directory, directory);
+        } catch (IOException e) {
+            throw new ContributionReadException(e);
         }
-        if (rootFolder.isDirectory()) {
-            if (!rootFolder.exists()) {
-                throw new 
ContributionReadException(rootFolder.getAbsolutePath());
-            }
-
-            traverse(artifacts, rootFolder, rootFolder);
-        }
-
         return artifacts;
     }
 
@@ -102,5 +95,17 @@
             }
         }
     }
-    
+
+    private static File directory(URL url) throws ContributionReadException {
+        File file;
+        try {
+            file = new File(url.toURI());
+        } catch (URISyntaxException e) {
+            throw new ContributionReadException(e);
+        }
+        if (!file.exists() || !file.isDirectory()) {
+            throw new ContributionReadException(url.toString());
+        }
+        return file;
+    }
 }

Modified: 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
 Thu Feb 28 00:34:05 2008
@@ -20,6 +20,7 @@
 package org.apache.tuscany.sca.workspace.scanner.impl;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -30,7 +31,7 @@
 import java.util.jar.JarInputStream;
 
 import org.apache.tuscany.sca.contribution.scanner.ContributionScanner;
-import org.apache.tuscany.sca.contribution.service.ContributionException;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 
 /**
  * JAR Contribution processor.
@@ -46,63 +47,79 @@
         return "application/x-compressed";
     }
 
-    public URL getArtifactURL(URL sourceURL, String artifact) throws 
MalformedURLException {
-        if (sourceURL.toString().startsWith("jar:")) {
-            return new URL(sourceURL, artifact.toString());
-        } else {
-            return new URL("jar:" + sourceURL.toExternalForm() + "!/" + 
artifact);
+    public URL getArtifactURL(URL contributionURL, String artifact) throws 
ContributionReadException {
+        try {
+            URL url;
+            if (contributionURL.toString().startsWith("jar:")) {
+                url = new URL(contributionURL, artifact.toString());
+            } else {
+                url = new URL("jar:" + contributionURL.toExternalForm() + "!/" 
+ artifact);
+            }
+            try {
+                InputStream is = url.openStream();
+                is.close();
+            } catch (IOException e) {
+                return null;
+            }
+            return url;
+        } catch (MalformedURLException e) {
+            throw new ContributionReadException(e);
         }
     }
 
-    public List<String> getArtifacts(URL contributionURL) throws 
ContributionException, IOException {
+    public List<String> getArtifacts(URL contributionURL) throws 
ContributionReadException {
 
-        // Assume the root is a jar file
-        JarInputStream jar = new JarInputStream(contributionURL.openStream());
+        // Assume the URL references a JAR file
         try {
-            Set<String> names = new HashSet<String>();
-            while (true) {
-                JarEntry entry = jar.getNextJarEntry();
-                if (entry == null) {
-                    // EOF
-                    break;
-                }
-
-                String name = entry.getName(); 
-                if (!name.startsWith(".")) {
-                    
-                    // Trim trailing /
-                    if (name.endsWith("/")) {
-                        name = name.substring(0, name.length() - 1);
+            JarInputStream jar = new 
JarInputStream(contributionURL.openStream());
+            try {
+                Set<String> names = new HashSet<String>();
+                while (true) {
+                    JarEntry entry = jar.getNextJarEntry();
+                    if (entry == null) {
+                        // EOF
+                        break;
                     }
 
-                    // Add the entry name
-                    if (!names.contains(name)) {
-                        names.add(name);
+                    String name = entry.getName(); 
+                    if (!name.startsWith(".")) {
                         
-                        // Add parent folder names to the list too
-                        for (;;) {
-                            int s = name.lastIndexOf('/');
-                            if (s == -1) {
-                                name = "";
-                            } else {
-                                name = name.substring(0, s);
-                            }
-                            if (!names.contains(name)) {
-                                names.add(name);
-                            } else {
-                                break;
+                        // Trim trailing /
+                        if (name.endsWith("/")) {
+                            name = name.substring(0, name.length() - 1);
+                        }
+
+                        // Add the entry name
+                        if (!names.contains(name)) {
+                            names.add(name);
+                            
+                            // Add parent folder names to the list too
+                            for (;;) {
+                                int s = name.lastIndexOf('/');
+                                if (s == -1) {
+                                    name = "";
+                                } else {
+                                    name = name.substring(0, s);
+                                }
+                                if (!names.contains(name)) {
+                                    names.add(name);
+                                } else {
+                                    break;
+                                }
                             }
                         }
                     }
                 }
+                
+                // Return list of URIs
+                List<String> artifacts = new ArrayList<String>(names);
+                return artifacts;
+                
+            } finally {
+                jar.close();
             }
-            
-            // Return list of URIs
-            List<String> artifacts = new ArrayList<String>(names);
-            return artifacts;
-            
-        } finally {
-            jar.close();
+        } catch (IOException e) {
+            throw new ContributionReadException(e);
         }
     }
 }

Modified: incubator/tuscany/java/sca/modules/workspace-xml/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-xml/pom.xml?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-xml/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/workspace-xml/pom.xml Thu Feb 28 
00:34:05 2008
@@ -26,7 +26,7 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>tuscany-workspace-xml</artifactId>
-    <name>Apache Tuscany SCA XML Contribution Workspace Model</name>
+    <name>Apache Tuscany SCA XML Workspace Model</name>
 
     <dependencies>
         <dependency>

Modified: incubator/tuscany/java/sca/modules/workspace/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace/pom.xml?rev=631891&r1=631890&r2=631891&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/workspace/pom.xml Thu Feb 28 00:34:05 
2008
@@ -26,7 +26,7 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>tuscany-workspace</artifactId>
-    <name>Apache Tuscany SCA Contribution Workspace Model</name>
+    <name>Apache Tuscany SCA Workspace Model</name>
 
     <dependencies>
         <dependency>



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

Reply via email to