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:43:14 UTC

svn commit: r631858 - in /incubator/tuscany/java/sca/modules/workspace-admin: ./ src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ src/main/resources/ src/test/java/org/ src/test/java/org/apache/ src/test/java/org/apache/tuscany/ src/test/java...

Author: jsdelfino
Date: Wed Feb 27 21:43:13 2008
New Revision: 631858

URL: http://svn.apache.org/viewvc?rev=631858&view=rev
Log:
Changed components to be more configurable. Added a test case. Integrated call to contribution dependency analyzer.

Added:
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java   (with props)
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/META-INF/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/META-INF/sca-contribution.xml   (with props)
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/META-INF/
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/META-INF/sca-contribution.xml   (with props)
    incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/workspace.xml   (with props)
Modified:
    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/ContributionFileCollectionImpl.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

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=631858&r1=631857&r2=631858&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/pom.xml Wed Feb 27 21:43:13 2008
@@ -110,7 +110,6 @@
             <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-contribution-xml</artifactId>
             <version>1.2-incubating-SNAPSHOT</version>
-            <scope>runtime</scope>
         </dependency>
         
         <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=631858&r1=631857&r2=631858&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 Wed Feb 27 21:43:13 2008
@@ -23,9 +23,9 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -62,6 +62,7 @@
 import org.osoa.sca.annotations.Property;
 import org.osoa.sca.annotations.Scope;
 import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
 
 /**
  * Implementation of a composite collection service. 
@@ -72,7 +73,7 @@
 public class CompositeCollectionImpl implements CompositeCollection {
     
     @Property
-    public String compositeCollectionName;
+    public String compositeFileName;
 
     private AssemblyFactory assemblyFactory;
     private ContributionFactory contributionFactory;
@@ -99,7 +100,7 @@
         
         // Read domain.composite
         compositeProcessor = new CompositeProcessor(contributionFactory, assemblyFactory, policyFactory, contractMapper, null);
-        File file = new File(compositeCollectionName + ".composite");
+        File file = new File(URI.create(compositeFileName));
         if (file.exists()) {
             XMLInputFactory inputFactory = XMLInputFactory.newInstance();
             FileInputStream is = new FileInputStream(file);
@@ -107,7 +108,7 @@
             compositeCollection = compositeProcessor.read(reader);
         } else {
             compositeCollection = assemblyFactory.createComposite();
-            compositeCollection.setName(new QName(Constants.SCA10_TUSCANY_NS, compositeCollectionName));
+            compositeCollection.setName(new QName(Constants.SCA10_TUSCANY_NS, compositeFileName));
         }
     }
     
@@ -219,18 +220,18 @@
             format.setIndent(2);
             
             // Write to domain.composite
-            FileOutputStream os = new FileOutputStream(compositeCollectionName + ".composite");
+            FileOutputStream os = new FileOutputStream(new File(URI.create(compositeFileName)));
             XMLSerializer serializer = new XMLSerializer(os, format);
             serializer.serialize(document);
             
-        } catch (FileNotFoundException e) {
+        } catch (IOException e) {
             throw new ServiceRuntimeException(e);
         } catch (ContributionWriteException e) {
             throw new ServiceRuntimeException(e);
         } catch (XMLStreamException e) {
             throw new ServiceRuntimeException(e);
-        } catch (Exception e) {
-            e.printStackTrace();
+        } catch (SAXException e) {
+            throw new ServiceRuntimeException(e);
         }
     }
     

Modified: incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java?rev=631858&r1=631857&r2=631858&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java Wed Feb 27 21:43:13 2008
@@ -29,6 +29,7 @@
 import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
 import org.apache.tuscany.sca.workspace.admin.ContributionFileCollection;
 import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
 import org.osoa.sca.annotations.Scope;
 
 /**
@@ -38,6 +39,9 @@
  */
 @Scope("COMPOSITE")
 public class ContributionFileCollectionImpl implements ContributionFileCollection {
+    
+    @Property
+    public String directoryName;
 
     private File files;
     
@@ -46,7 +50,7 @@
      */
     @Init
     public void init() throws IOException {
-        files = new File("contributions");
+        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/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=631858&r1=631857&r2=631858&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 Wed Feb 27 21:43:13 2008
@@ -23,6 +23,7 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.net.URI;
 import java.util.List;
 
 import javax.servlet.ServletException;
@@ -35,6 +36,7 @@
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
 import org.osoa.sca.annotations.Scope;
 
 /**
@@ -46,6 +48,9 @@
 public class ContributionFileServiceImpl extends HttpServlet {
     private static final long serialVersionUID = -4560385595481971616L;
     
+    @Property
+    public String directoryName;
+    
     private ServletFileUpload upload;
     private File files;
     
@@ -56,7 +61,7 @@
     public void initialize() throws IOException {
         upload = new ServletFileUpload(new DiskFileItemFactory());
         
-        files = new File("contributions");
+        files = new File(URI.create(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=631858&r1=631857&r2=631858&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 Wed Feb 27 21:43:13 2008
@@ -26,8 +26,12 @@
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -38,27 +42,32 @@
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
+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.DefaultModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
 import org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor;
-import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
-import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.contribution.xml.ContributionMetadataProcessor;
 import org.apache.tuscany.sca.implementation.data.collection.Entry;
 import org.apache.tuscany.sca.implementation.data.collection.Item;
 import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
 import org.apache.tuscany.sca.workspace.Workspace;
 import org.apache.tuscany.sca.workspace.WorkspaceFactory;
 import org.apache.tuscany.sca.workspace.admin.WorkspaceCollection;
+import org.apache.tuscany.sca.workspace.dependency.impl.ContributionDependencyAnalyzer;
+import org.apache.tuscany.sca.workspace.processor.impl.ContributionInfoProcessor;
 import org.apache.tuscany.sca.workspace.xml.WorkspaceProcessor;
 import org.apache.xml.serialize.OutputFormat;
 import org.apache.xml.serialize.XMLSerializer;
 import org.osoa.sca.ServiceRuntimeException;
 import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
 import org.osoa.sca.annotations.Scope;
 import org.w3c.dom.Document;
 
@@ -70,13 +79,17 @@
 @Scope("COMPOSITE")
 public class WorkspaceCollectionImpl implements WorkspaceCollection {
 
+    @Property
+    public String workspaceFileName;
+    
     private ContributionFactory contributionFactory;
+    private AssemblyFactory assemblyFactory;
     private WorkspaceFactory workspaceFactory;
     private Workspace workspace;
     private WorkspaceProcessor workspaceProcessor;
     private XMLOutputFactory outputFactory;
     private XMLInputFactory inputFactory;
-    private ContributionMetadataDocumentProcessor contributionMetadataProcessor; 
+    private ContributionInfoProcessor contributionProcessor;
     
     /**
      * Initialize the workspace administration component.
@@ -84,27 +97,28 @@
     @Init
     public void init() throws IOException, ContributionReadException, XMLStreamException, ParserConfigurationException {
         
-        // Create Tuscany extension point registry
-        ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
-
-        // Get extension points
-        ModelFactoryExtensionPoint factories = registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
-        StAXArtifactProcessorExtensionPoint staxProcessors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        // Create extension points
+        ModelFactoryExtensionPoint factories = new DefaultModelFactoryExtensionPoint();
+        StAXArtifactProcessorExtensionPoint staxProcessors = new DefaultStAXArtifactProcessorExtensionPoint(factories);
+        inputFactory = factories.getFactory(XMLInputFactory.class);
+        outputFactory = factories.getFactory(XMLOutputFactory.class);
+        outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
+        ExtensibleStAXArtifactProcessor extensionProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory);
         
         // Create factories
         contributionFactory = factories.getFactory(ContributionFactory.class);
+        assemblyFactory = factories.getFactory(AssemblyFactory.class);
         workspaceFactory = factories.getFactory(WorkspaceFactory.class);
-        inputFactory = factories.getFactory(XMLInputFactory.class);
-        outputFactory = factories.getFactory(XMLOutputFactory.class);
-        outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
 
-        // Create artifact processors
-        workspaceProcessor = new WorkspaceProcessor(workspaceFactory, contributionFactory, null);
-        ExtensibleStAXArtifactProcessor staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory);
-        contributionMetadataProcessor = new ContributionMetadataDocumentProcessor(staxProcessor, inputFactory);
+        // Create workspace and contribution artifact processors
+        workspaceProcessor = new WorkspaceProcessor(workspaceFactory, contributionFactory, extensionProcessor);
+        ContributionMetadataProcessor metadataProcessor = new ContributionMetadataProcessor(assemblyFactory, contributionFactory, extensionProcessor);
+        ContributionMetadataDocumentProcessor metadataDocumentProcessor = new ContributionMetadataDocumentProcessor(metadataProcessor, inputFactory); 
+        contributionProcessor = new ContributionInfoProcessor(contributionFactory, metadataDocumentProcessor);
 
         // Read workspace.xml
-        File file = new File("workspace.xml");
+        URI uri = URI.create(workspaceFileName);
+        File file = new File(uri);
         if (file.exists()) {
             XMLInputFactory inputFactory = XMLInputFactory.newInstance();
             FileInputStream is = new FileInputStream(file);
@@ -120,13 +134,7 @@
         // Return all the contributions
         List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>();
         for (Contribution contribution: workspace.getContributions()) {
-            Entry<String, Item> entry = new Entry<String, Item>();
-            entry.setKey(contribution.getURI());
-            Item item = new Item();
-            item.setTitle(contribution.getURI());
-            item.setLink(contribution.getLocation());
-            entry.setData(item);
-            entries.add(entry);
+            entries.add(entry(contribution));
         }
         return entries.toArray(new Entry[entries.size()]);
     }
@@ -199,13 +207,64 @@
     public Entry<String, Item>[] query(String queryString) {
         if (queryString.startsWith("importedBy=")) {
             
-            // Read the contribution metadata documents
-            return null;
+            // Return the collection of dependencies of the specified contribution
+            List<Entry<String, Item>> entries = new ArrayList<Entry<String,Item>>();
+            
+            // Read the contribution metadata into a temporary workspace
+            Workspace dependencyWorkspace = workspaceFactory.createWorkspace();
+            for (Contribution c: workspace.getContributions()) {
+                URI uri = URI.create(c.getURI());
+                URL url;
+                try {
+                    url = new URL(c.getLocation());
+                } catch (MalformedURLException e) {
+                    throw new ServiceRuntimeException();
+                }
+                Contribution contribution;
+                try {
+                    contribution = contributionProcessor.read(null, uri, url);
+                } catch (ContributionReadException e) {
+                    throw new ServiceRuntimeException(e);
+                }
+                dependencyWorkspace.getContributions().add(contribution);
+            }
+            
+            // Calculate the contribution dependencies
+            String key = queryString.substring(11);
+            for (Contribution contribution: workspace.getContributions()) {
+                if (key.equals(contribution.getURI())) {
+                    
+                    ContributionDependencyAnalyzer analyzer = new ContributionDependencyAnalyzer();
+                    Set<Contribution> dependencies = analyzer.calculateContributionDependencies(dependencyWorkspace, contribution);
+                    
+                    // Build the collection of dependencies
+                    for (Contribution dependency: dependencies) {
+                        entries.add(entry(dependency));
+                    }
+                }
+            }
+
+            return entries.toArray(new Entry[entries.size()]);
             
         } else {
             throw new UnsupportedOperationException();
         }
     }
+
+    /**
+     * Returns an entry representing a contribution
+     * @param contribution
+     * @return
+     */
+    private static Entry<String, Item> entry(Contribution contribution) {
+        Entry<String, Item> entry = new Entry<String, Item>();
+        entry.setKey(contribution.getURI());
+        Item item = new Item();
+        item.setTitle(contribution.getURI());
+        item.setLink(contribution.getLocation());
+        entry.setData(item);
+        return entry;
+    }
     
     /**
      * Write the workspace back to disk
@@ -225,7 +284,8 @@
             format.setIndent(2);
             
             // Write to workspace.xml
-            FileOutputStream os = new FileOutputStream("workspace.xml");
+            URI uri = URI.create(workspaceFileName);
+            FileOutputStream os = new FileOutputStream(new File(uri));
             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=631858&r1=631857&r2=631858&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 Wed Feb 27 21:43:13 2008
@@ -64,6 +64,7 @@
     
     <component name="WorkspaceCollectionComponent">
         <implementation.java class="org.apache.tuscany.sca.workspace.admin.impl.WorkspaceCollectionImpl"/>             
+        <property name="workspaceFileName">workspace</property>             
    		<service name="WorkspaceCollection">
    	 		<t:binding.atom uri="http://localhost:9990/workspace"/>
    		</service>
@@ -71,13 +72,15 @@
 
     <component name="ContributionFileCollectionComponent">
         <implementation.java class="org.apache.tuscany.sca.workspace.admin.impl.ContributionFileCollectionImpl"/>             
+        <property name="directoryName">contributions</property>             
    		<service name="ContributionFileCollection">
    	 		<t:binding.atom uri="http://localhost:9990/feed/files"/>
    		</service>
     </component>
 
     <component name="ContributionFileServiceComponent">
-        <implementation.java class="org.apache.tuscany.sca.workspace.admin.impl.ContributionFileServiceImpl"/>             
+        <implementation.java class="org.apache.tuscany.sca.workspace.admin.impl.ContributionFileServiceImpl"/>
+        <property name="directoryName">contributions</property>             
    		<service name="ContributionFileServiceImpl">
    	 		<t:binding.http uri="http://localhost:9990/files"/>
    		</service>
@@ -85,7 +88,7 @@
 
     <component name="DomainCompositeCollectionComponent">
         <implementation.java class="org.apache.tuscany.sca.workspace.admin.impl.CompositeCollectionImpl"/>
-        <property name="compositeCollectionName">domain</property>
+        <property name="compositeFileName">domain</property>
    		<service name="CompositeCollection">
    	 		<t:binding.atom uri="http://localhost:9990/composite"/>
    		</service>
@@ -93,7 +96,7 @@
 
     <component name="CloudCollectionComponent">
         <implementation.java class="org.apache.tuscany.sca.workspace.admin.impl.CompositeCollectionImpl"/>
-        <property name="compositeCollectionName">cloud</property>
+        <property name="compositeFileName">cloud</property>
    		<service name="CompositeCollection">
    	 		<t:binding.atom uri="http://localhost:9990/cloud"/>
    		</service>

Added: 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=631858&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java (added)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java Wed Feb 27 21:43:13 2008
@@ -0,0 +1,91 @@
+/*
+ * 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.admin.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sca.implementation.data.collection.Entry;
+import org.apache.tuscany.sca.implementation.data.collection.Item;
+import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
+
+/**
+ * Test case for the workspace admin services.
+ *
+ * @version $Rev$ $Date$
+ */
+public class AdminTestCase extends TestCase {
+    
+    private WorkspaceCollectionImpl workspaceCollection;
+    
+    private final static String WORKSPACE_XML =
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+        "<workspace xmlns=\"http://tuscany.apache.org/xmlns/sca/1.0\" " +
+        "xmlns:ns1=\"http://tuscany.apache.org/xmlns/sca/1.0\">\n" +
+        "</workspace>";
+    
+    @Override
+    protected void setUp() throws Exception {
+        ClassLoader cl = getClass().getClassLoader();
+
+        // Make sure we start with a clean workspace.xml file
+        URL url = cl.getResource("workspace.xml");
+        FileOutputStream os = new FileOutputStream(new File(url.toURI()));
+        Writer writer = new OutputStreamWriter(os);
+        writer.write(WORKSPACE_XML);
+        writer.flush();
+        
+        // Create a workspace collection component
+        workspaceCollection = new WorkspaceCollectionImpl();
+        workspaceCollection.workspaceFileName = url.toString();
+        workspaceCollection.init();
+        
+        // Populate the workspace with test data
+        Item item = new Item();
+        item.setLink(cl.getResource("contributions/store").toString());
+        workspaceCollection.post("store", item);
+        item.setLink(cl.getResource("contributions/assets").toString());
+        workspaceCollection.post("assets", item);
+    }
+    
+    public void testGetAll() {
+        Entry<String, Item>[] entries = workspaceCollection.getAll();
+        assertEquals(2, entries.length);
+        assertEquals(entries[0].getKey(), "store");
+    }
+
+    public void testGet() throws NotFoundException {
+        Item item = workspaceCollection.get("assets");
+        assertTrue(item.getLink().endsWith("contributions/assets"));
+    }
+    
+    public void testQuery() {
+        Entry<String, Item>[] entries = workspaceCollection.query("importedBy=store");
+        for (Entry<String, Item> entry: entries) {
+            System.out.println(entry.getKey());
+        }
+    }
+    
+}

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

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

Added: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/META-INF/sca-contribution.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/META-INF/sca-contribution.xml?rev=631858&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/META-INF/sca-contribution.xml (added)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/META-INF/sca-contribution.xml Wed Feb 27 21:43:13 2008
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    * 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.    
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+    targetNamespace="http://assets">
+   <export.java package="services"/>
+   <export.java package="services.merger"/>
+   <export.java package="services.db"/>
+   <import.java package="org.apache.tuscany.sca.implementation.data.collection"/>
+   <import.java package="org.apache.derby.*"/>
+</contribution>
\ No newline at end of file

Propchange: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/META-INF/sca-contribution.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/assets/META-INF/sca-contribution.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/META-INF/sca-contribution.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/META-INF/sca-contribution.xml?rev=631858&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/META-INF/sca-contribution.xml (added)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/META-INF/sca-contribution.xml Wed Feb 27 21:43:13 2008
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    * 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.    
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+	          targetNamespace="http://store"
+              xmlns:s="http://store">
+   <deployable composite="s:store"/>
+   <import.java package="services"/>
+</contribution>
\ No newline at end of file

Propchange: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/META-INF/sca-contribution.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/contributions/store/META-INF/sca-contribution.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/workspace.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/workspace.xml?rev=631858&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/workspace.xml (added)
+++ incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/workspace.xml Wed Feb 27 21:43:13 2008
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    * 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.    
+-->
+<workspace xmlns="http://tuscany.apache.org/xmlns/sca/1.0" xmlns:ns1="http://tuscany.apache.org/xmlns/sca/1.0">
+</workspace>

Propchange: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/workspace.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/workspace-admin/src/test/resources/workspace.xml
------------------------------------------------------------------------------
    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