You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2008/02/28 06:42:03 UTC

svn commit: r631857 - in /incubator/tuscany/java/sca/modules/workspace-impl/src: main/java/org/ main/java/org/apache/ main/java/org/apache/tuscany/ main/java/org/apache/tuscany/sca/ main/java/org/apache/tuscany/sca/workspace/ main/java/org/apache/tusca...

Author: jsdelfino
Date: Wed Feb 27 21:42:01 2008
New Revision: 631857

URL: http://svn.apache.org/viewvc?rev=631857&view=rev
Log:
Implemented a contribution info processor and contribution scanners. Implemented logic to calculate contribution dependencies.

Added:
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java   (with props)
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java   (with props)
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java   (with props)
    incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java   (with props)
    incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/
    incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/
    incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/
    incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/
    incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/
    incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/
    incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/impl/
    incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzerTestCase.java   (with props)

Added: 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=631857&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java (added)
+++ incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java Wed Feb 27 21:42:01 2008
@@ -0,0 +1,88 @@
+/*
+ * 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.workspace.dependency.impl;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.workspace.Workspace;
+
+/**
+ * A contribution dependency analyzer.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ContributionDependencyAnalyzer {
+    
+    /**
+     * Constructs a new WorkspaceDependencyAnalyzer.
+     */
+    public ContributionDependencyAnalyzer() {
+        // TODO Auto-generated constructor stub
+    }
+    
+    /**
+     * Calculate the set of contributions that a contribution depends on.
+     * @param workspace
+     * @param contribution
+     * @return
+     */
+    public Set<Contribution> calculateContributionDependencies(Workspace workspace, Contribution contribution) {
+        Set<Contribution> dependencies = new HashSet<Contribution>();
+
+        addContributionDependencies(workspace, contribution, dependencies);
+        
+        return dependencies;
+    }
+    
+    /**
+     * Analyze a contribution and add its dependencies to the given dependency set.
+     * @param workspace
+     * @param contribution
+     * @param dependencies
+     */
+    private void addContributionDependencies(Workspace workspace, Contribution contribution, Set<Contribution> dependencies) {
+        
+        // Go through the contribution imports
+        for (Import import_: contribution.getImports()) {
+            
+            // Go through all contribution candidates and their exports
+            for (Contribution dependency: workspace.getContributions()) {
+                for (Export export: dependency.getExports()) {
+                    
+                    // If an export from a contribution matches the import in hand
+                    // add that contribution to the dependency set
+                    if (import_.match(export)) {
+                        if (!dependencies.contains(dependency)) {
+                            dependencies.add(dependency);
+                            
+                            // Now add the dependencies of that contribution
+                            addContributionDependencies(workspace, dependency, dependencies);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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=631857&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java Wed Feb 27 21:42:01 2008
@@ -0,0 +1,84 @@
+/*
+ * 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.workspace.processor.impl;
+
+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.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor;
+
+/**
+ * URLArtifactProcessor that handles contribution files and returns a contribution
+ * info model.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ContributionInfoProcessor implements URLArtifactProcessor<Contribution>{
+    private ContributionMetadataDocumentProcessor metadataProcessor;
+    private ContributionFactory contributionFactory;
+
+    public ContributionInfoProcessor(ContributionFactory contributionFactory, ContributionMetadataDocumentProcessor metadataProcessor) {
+        this.contributionFactory = contributionFactory;
+        this.metadataProcessor = metadataProcessor; 
+    }
+    
+    public String getArtifactType() {
+        return null;
+    }
+    
+    public Class<Contribution> getModelType() {
+        return Contribution.class;
+    }
+    
+    public Contribution read(URL parentURL, URI contributionURI, URL contributionURL) throws ContributionReadException {
+        
+        // Create contribution model
+        Contribution contribution = contributionFactory.createContribution();
+        contribution.setURI(contributionURI.toString());
+        contribution.setUnresolved(true);
+
+        // 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);
+            if (url != null) {
+                Contribution c = metadataProcessor.read(contributionURL, URI.create(path), url);
+                contribution.getImports().addAll(c.getImports());
+                contribution.getExports().addAll(c.getExports());
+                contribution.getDeployables().addAll(c.getDeployables());
+            }
+        }
+        
+        return contribution;
+    }
+    
+    public void resolve(Contribution contribution, ModelResolver resolver) throws ContributionResolveException {
+        metadataProcessor.resolve(contribution, resolver);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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=631857&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java (added)
+++ incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java Wed Feb 27 21:42:01 2008
@@ -0,0 +1,106 @@
+/*
+ * 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.workspace.scanner.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+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;
+
+/**
+ * Folder contribution processor.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class DirectoryContributionScanner implements ContributionScanner {
+
+    public DirectoryContributionScanner() {
+    }
+
+    public String getContributionType() {
+        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.");
+        }
+
+        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);
+        }
+        if (rootFolder.isDirectory()) {
+            if (!rootFolder.exists()) {
+                throw new ContributionReadException(rootFolder.getAbsolutePath());
+            }
+
+            traverse(artifacts, rootFolder, rootFolder);
+        }
+
+        return artifacts;
+    }
+
+    /**
+     * Recursively traverse a root directory
+     * 
+     * @param fileList
+     * @param file
+     * @param root
+     * @throws IOException
+     */
+    private static void traverse(List<String> fileList, File file, File root) throws IOException {
+        if (file.isFile()) {
+            fileList.add(root.toURI().relativize(file.toURI()).toString());
+        } else if (file.isDirectory()) {
+            String uri = root.toURI().relativize(file.toURI()).toString();
+            if (uri.endsWith("/")) {
+                uri = uri.substring(0, uri.length() - 1);
+            }
+            fileList.add(uri);
+            
+            File[] files = file.listFiles();
+            for (File f: files) {
+                if (!f.getName().startsWith(".")) {
+                    traverse(fileList, f, root);
+                }
+            }
+        }
+    }
+    
+}

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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=631857&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java (added)
+++ incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java Wed Feb 27 21:42:01 2008
@@ -0,0 +1,108 @@
+/*
+ * 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.workspace.scanner.impl;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+
+import org.apache.tuscany.sca.contribution.scanner.ContributionScanner;
+import org.apache.tuscany.sca.contribution.service.ContributionException;
+
+/**
+ * JAR Contribution processor.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class JarContributionScanner implements ContributionScanner {
+
+    public JarContributionScanner() {
+    }
+
+    public String getContributionType() {
+        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 List<String> getArtifacts(URL contributionURL) throws ContributionException, IOException {
+
+        // Assume the root is a jar file
+        JarInputStream jar = new JarInputStream(contributionURL.openStream());
+        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);
+                    }
+
+                    // 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();
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzerTestCase.java?rev=631857&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzerTestCase.java (added)
+++ incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzerTestCase.java Wed Feb 27 21:42:01 2008
@@ -0,0 +1,99 @@
+/*
+ * 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.workspace.dependency.impl;
+
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.DefaultContributionFactory;
+import org.apache.tuscany.sca.contribution.namespace.NamespaceExport;
+import org.apache.tuscany.sca.contribution.namespace.NamespaceImport;
+import org.apache.tuscany.sca.contribution.namespace.NamespaceImportExportFactory;
+import org.apache.tuscany.sca.contribution.namespace.impl.NamespaceImportExportFactoryImpl;
+import org.apache.tuscany.sca.workspace.DefaultWorkspaceFactory;
+import org.apache.tuscany.sca.workspace.Workspace;
+import org.apache.tuscany.sca.workspace.WorkspaceFactory;
+
+/**
+ * Test the contribution dependency analyzer.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ContributionDependencyAnalyzerTestCase extends TestCase {
+
+    private ContributionFactory contributionFactory;
+    private WorkspaceFactory workspaceFactory;
+    private NamespaceImportExportFactory importExportFactory;
+
+    @Override
+    public void setUp() throws Exception {
+        contributionFactory = new DefaultContributionFactory();
+        workspaceFactory = new DefaultWorkspaceFactory();
+        importExportFactory = new NamespaceImportExportFactoryImpl();
+    }
+
+    @Override
+    public void tearDown() throws Exception {
+    }
+
+    public void testAnalyze() {
+        Workspace workspace = workspaceFactory.createWorkspace();
+        Contribution importer = contributionFactory.createContribution();
+        importer.setURI("importer");
+        workspace.getContributions().add(importer);
+        NamespaceImport import_ = importExportFactory.createNamespaceImport();
+        import_.setNamespace("http://foo");
+        importer.getImports().add(import_);
+
+        Contribution imported = contributionFactory.createContribution();
+        imported.setURI("imported");
+        workspace.getContributions().add(imported);
+        NamespaceExport export = importExportFactory.createNamespaceExport();
+        export.setNamespace("http://foo");
+        imported.getExports().add(export);
+        import_ = importExportFactory.createNamespaceImport();
+        import_.setNamespace("http://bar");
+        imported.getImports().add(import_);
+        
+        Contribution imported2 = contributionFactory.createContribution();
+        imported2.setURI("imported2");
+        workspace.getContributions().add(imported2);
+        export = importExportFactory.createNamespaceExport();
+        export.setNamespace("http://bar");
+        imported2.getExports().add(export);
+        
+        Contribution another = contributionFactory.createContribution();
+        another.setURI("another");
+        workspace.getContributions().add(another);
+        export = importExportFactory.createNamespaceExport();
+        export.setNamespace("http://another");
+        another.getExports().add(export);
+        
+        ContributionDependencyAnalyzer analyzer = new ContributionDependencyAnalyzer();
+        Set<Contribution> dependencies = analyzer.calculateContributionDependencies(workspace, importer);
+        assertTrue(dependencies.size() == 2);
+        assertTrue(dependencies.contains(imported));
+        assertTrue(dependencies.contains(imported2));
+    }
+    
+}

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzerTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/workspace-impl/src/test/java/org/apache/tuscany/sca/workspace/dependency/impl/ContributionDependencyAnalyzerTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org