Author: jsdelfino
Date: Sat Mar  1 08:24:33 2008
New Revision: 632617

URL: http://svn.apache.org/viewvc?rev=632617&view=rev
Log:
Some cleanup and refactoring, and added a service to find deployable composites 
in contributions.

Added:
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionCollection.java
      - copied, changed from r632540, 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/WorkspaceCollection.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/LocalContributionCollection.java
   (with props)
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java
      - copied, changed from r632540, 
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/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
   (with props)
Removed:
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/WorkspaceCollection.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
Modified:
    
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/resources/Admin.composite
    
incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java

Copied: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionCollection.java
 (from r632540, 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/WorkspaceCollection.java)
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionCollection.java?p2=incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionCollection.java&p1=incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/WorkspaceCollection.java&r1=632540&r2=632617&rev=632617&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/WorkspaceCollection.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionCollection.java
 Sat Mar  1 08:24:33 2008
@@ -24,11 +24,11 @@
 import org.osoa.sca.annotations.Remotable;
 
 /**
- * The contribution workspace service interface.
+ * The contribution collection service interface.
  *
  * @version $Rev$ $Date$
  */
 @Remotable
-public interface WorkspaceCollection extends Collection<String, Item>{
+public interface ContributionCollection extends Collection<String, Item>{
 
 }

Added: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/LocalContributionCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/LocalContributionCollection.java?rev=632617&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/LocalContributionCollection.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/LocalContributionCollection.java
 Sat Mar  1 08:24:33 2008
@@ -0,0 +1,32 @@
+/*
+ * 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;
+
+import org.apache.tuscany.sca.implementation.data.collection.Collection;
+import org.apache.tuscany.sca.implementation.data.collection.Item;
+
+/**
+ * A local interface for the contribution collection service interface.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface LocalContributionCollection extends Collection<String, Item>{
+
+}

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

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

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=632617&r1=632616&r2=632617&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
 Sat Mar  1 08:24:33 2008
@@ -46,7 +46,6 @@
 import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
-import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
 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;
@@ -59,7 +58,6 @@
 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. 
@@ -76,7 +74,6 @@
     private Composite compositeCollection;
     private CompositeProcessor compositeProcessor;
     private XMLOutputFactory outputFactory;
-    private DocumentBuilder documentBuilder;
     
     /**
      * Initialize the workspace administration component.
@@ -88,7 +85,6 @@
         ModelFactoryExtensionPoint modelFactories = new 
DefaultModelFactoryExtensionPoint();
         assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
         outputFactory = modelFactories.getFactory(XMLOutputFactory.class);
-        documentBuilder = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
         
         // Read domain.composite
         ContributionFactory contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
@@ -208,6 +204,7 @@
             compositeProcessor.write(compositeCollection, writer);
             
             // Parse again to pretty format the document
+            DocumentBuilder documentBuilder = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
             Document document = documentBuilder.parse(new 
ByteArrayInputStream(bos.toByteArray()));
             OutputFormat format = new OutputFormat();
             format.setIndenting(true);
@@ -218,13 +215,7 @@
             XMLSerializer serializer = new XMLSerializer(os, format);
             serializer.serialize(document);
             
-        } catch (IOException e) {
-            throw new ServiceRuntimeException(e);
-        } catch (ContributionWriteException e) {
-            throw new ServiceRuntimeException(e);
-        } catch (XMLStreamException e) {
-            throw new ServiceRuntimeException(e);
-        } catch (SAXException e) {
+        } catch (Exception e) {
             throw new ServiceRuntimeException(e);
         }
     }

Copied: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java
 (from r632540, 
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/ContributionCollectionImpl.java?p2=incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java&p1=incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java&r1=632540&r2=632617&rev=632617&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/ContributionCollectionImpl.java
 Sat Mar  1 08:24:33 2008
@@ -23,7 +23,6 @@
 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.MalformedURLException;
@@ -55,8 +54,9 @@
 import 
org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
 import 
org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
+import 
org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint;
+import 
org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
-import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
 import 
org.apache.tuscany.sca.contribution.xml.ContributionGeneratedMetadataDocumentProcessor;
 import 
org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor;
 import org.apache.tuscany.sca.contribution.xml.ContributionMetadataProcessor;
@@ -65,7 +65,8 @@
 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.admin.ContributionCollection;
+import org.apache.tuscany.sca.workspace.admin.LocalContributionCollection;
 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;
@@ -75,15 +76,17 @@
 import org.osoa.sca.annotations.Init;
 import org.osoa.sca.annotations.Property;
 import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
 import org.w3c.dom.Document;
 
 /**
- * Implementation of a contribution workspace service component. 
+ * Implementation of a contribution collection service component. 
  *
  * @version $Rev$ $Date$
  */
 @Scope("COMPOSITE")
-public class WorkspaceCollectionImpl implements WorkspaceCollection {
[EMAIL PROTECTED](interfaces={ContributionCollection.class, 
LocalContributionCollection.class})
+public class ContributionCollectionImpl implements ContributionCollection, 
LocalContributionCollection {
 
     @Property
     public String workspaceFileName;
@@ -109,6 +112,9 @@
         contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
         assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
         workspaceFactory = modelFactories.getFactory(WorkspaceFactory.class);
+        
+        // Create model resolvers
+        ModelResolverExtensionPoint modelResolvers = new 
DefaultModelResolverExtensionPoint();
 
         // Create artifact processors
         XMLInputFactory inputFactory = 
modelFactories.getFactory(XMLInputFactory.class);
@@ -122,8 +128,8 @@
         urlProcessors.addArtifactProcessor(new 
ContributionMetadataDocumentProcessor(staxProcessor, inputFactory));
         urlProcessors.addArtifactProcessor(new 
ContributionGeneratedMetadataDocumentProcessor(staxProcessor, inputFactory));
         
-        // Create workspace and contribution artifact processors
-        contributionInfoProcessor = new 
ContributionInfoProcessor(contributionFactory, urlProcessor);
+        // Create contribution info processor
+        contributionInfoProcessor = new 
ContributionInfoProcessor(modelFactories, modelResolvers, urlProcessor);
 
         // Read workspace.xml
         File file = new File(workspaceFileName);
@@ -220,21 +226,15 @@
             
             // 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 = url(c.getLocation());
-                } catch (MalformedURLException e) {
-                    throw new ServiceRuntimeException();
-                }
-                Contribution contribution;
-                try {
-                    contribution = 
(Contribution)contributionInfoProcessor.read(null, uri, url);
-                } catch (ContributionReadException e) {
-                    throw new ServiceRuntimeException(e);
+            try {
+                for (Contribution c: workspace.getContributions()) {
+                    URI uri = URI.create(c.getURI());
+                    URL url = url(c.getLocation());
+                    Contribution contribution = 
(Contribution)contributionInfoProcessor.read(null, uri, url);
+                    dependencyWorkspace.getContributions().add(contribution);
                 }
-                dependencyWorkspace.getContributions().add(contribution);
+            } catch (Exception e) {
+                throw new ServiceRuntimeException(e);
             }
             
             // Calculate the contribution dependencies
@@ -261,6 +261,12 @@
         }
     }
     
+    /**
+     * Returns a URL from a location string.
+     * @param location
+     * @return
+     * @throws MalformedURLException
+     */
     private URL url(String location) throws MalformedURLException {
         URI uri = URI.create(location);
         if (uri.getScheme() == null) {
@@ -308,14 +314,8 @@
             XMLSerializer serializer = new XMLSerializer(os, format);
             serializer.serialize(document);
             
-        } catch (FileNotFoundException e) {
-            throw new ServiceRuntimeException(e);
-        } catch (ContributionWriteException e) {
-            throw new ServiceRuntimeException(e);
-        } catch (XMLStreamException e) {
-            throw new ServiceRuntimeException(e);
         } catch (Exception e) {
-            e.printStackTrace();
+            throw new ServiceRuntimeException(e);
         }
     }
 }

Added: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java?rev=632617&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
 Sat Mar  1 08:24:33 2008
@@ -0,0 +1,248 @@
+/*
+ * 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.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.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.DefaultURLArtifactProcessorExtensionPoint;
+import 
org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
+import 
org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import 
org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import 
org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
+import 
org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint;
+import 
org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import 
org.apache.tuscany.sca.contribution.xml.ContributionGeneratedMetadataDocumentProcessor;
+import 
org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor;
+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.admin.CompositeCollection;
+import org.apache.tuscany.sca.workspace.admin.LocalContributionCollection;
+import 
org.apache.tuscany.sca.workspace.processor.impl.ContributionInfoProcessor;
+import org.osoa.sca.ServiceRuntimeException;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+
+/**
+ * Implementation of a deployable composite collection service. 
+ *
+ * @version $Rev$ $Date$
+ */
[EMAIL PROTECTED]("COMPOSITE")
+public class DeployableCompositeCollectionImpl implements CompositeCollection {
+    
+    @Reference
+    public LocalContributionCollection contributionCollection;
+
+    private AssemblyFactory assemblyFactory;
+    private URLArtifactProcessor<Contribution> contributionInfoProcessor;
+    
+    /**
+     * Initialize the workspace administration component.
+     */
+    @Init
+    public void init() throws IOException, ContributionReadException, 
XMLStreamException, ParserConfigurationException {
+        
+        // Create factories
+        ModelFactoryExtensionPoint modelFactories = new 
DefaultModelFactoryExtensionPoint();
+        assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+        XMLInputFactory inputFactory = 
modelFactories.getFactory(XMLInputFactory.class);
+        XMLOutputFactory outputFactory = 
modelFactories.getFactory(XMLOutputFactory.class);
+        ContributionFactory contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
+
+        // Create model resolvers
+        ModelResolverExtensionPoint modelResolvers = new 
DefaultModelResolverExtensionPoint();
+
+        // Create artifact processors
+        StAXArtifactProcessorExtensionPoint staxProcessors = new 
DefaultStAXArtifactProcessorExtensionPoint(modelFactories);
+        StAXArtifactProcessor<Object> staxProcessor = new 
ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory);
+        staxProcessors.addArtifactProcessor(new 
ContributionMetadataProcessor(assemblyFactory, contributionFactory, 
staxProcessor));
+
+        URLArtifactProcessorExtensionPoint urlProcessors = new 
DefaultURLArtifactProcessorExtensionPoint(modelFactories);
+        URLArtifactProcessor<Object> urlProcessor = new 
ExtensibleURLArtifactProcessor(urlProcessors);
+        urlProcessors.addArtifactProcessor(new 
ContributionMetadataDocumentProcessor(staxProcessor, inputFactory));
+        urlProcessors.addArtifactProcessor(new 
ContributionGeneratedMetadataDocumentProcessor(staxProcessor, inputFactory));
+        
+        // Create contribution info processor
+        contributionInfoProcessor = new 
ContributionInfoProcessor(modelFactories, modelResolvers, urlProcessor);
+
+    }
+    
+    public Entry<String, Item>[] getAll() {
+        // Return all the deployable composites in the contributions
+        List<Entry<String, Item>> entries = new ArrayList<Entry<String, 
Item>>();
+        
+        // Get the list of contributions in the workspace
+        Entry<String, Item>[] contributionEntries = 
contributionCollection.getAll();
+
+        // Read contribution metadata
+        for (Entry<String, Item> contributionEntry: contributionEntries) {
+            Contribution contribution;
+            try {
+                URI uri = URI.create(contributionEntry.getKey());
+                URL url = url(contributionEntry.getData().getLink());
+                contribution = 
(Contribution)contributionInfoProcessor.read(null, uri, url);
+            } catch (Exception e) {
+                throw new ServiceRuntimeException(e);
+            }
+
+            // Create entries for the deployable composites
+            for (Composite deployable: contribution.getDeployables()) {
+                Entry<String, Item> entry = new Entry<String, Item>();
+                entry.setKey(name(deployable.getName()));
+                Item item = new Item();
+                item.setTitle(name(deployable.getName()));
+                item.setLink("/workspace/" + contribution.getURI());
+                entry.setData(item);
+                entries.add(entry);
+            }
+            
+        }
+        return entries.toArray(new Entry[entries.size()]);
+    }
+
+    public Item get(String key) throws NotFoundException {
+        throw new UnsupportedOperationException();
+    }
+
+    public String post(String key, Item item) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void put(String key, Item item) throws NotFoundException {
+        throw new UnsupportedOperationException();
+    }
+
+    public void delete(String key) throws NotFoundException {
+        throw new UnsupportedOperationException();
+    }
+
+    public Entry<String, Item>[] query(String queryString) {
+        if (queryString.startsWith("contribution=")) {
+
+            // Return all the deployable composites in the specified
+            // contribution
+            List<Entry<String, Item>> entries = new ArrayList<Entry<String, 
Item>>();
+
+            // Get the specified contribution info 
+            String key = queryString.substring(13);
+            Item contributionItem;
+            try {
+                contributionItem = contributionCollection.get(key);
+            } catch (NotFoundException e) {
+                return null;
+            }
+
+            Contribution contribution;
+            try {
+                URI uri = URI.create(key);
+                URL url = url(contributionItem.getLink());
+                contribution = 
(Contribution)contributionInfoProcessor.read(null, uri, url);
+            } catch (Exception e) {
+                throw new ServiceRuntimeException(e);
+            }
+
+            // Create entries for the deployable composites
+            for (Composite deployable: contribution.getDeployables()) {
+                Entry<String, Item> entry = new Entry<String, Item>();
+                entry.setKey(name(deployable.getName()));
+                Item item = new Item();
+                item.setTitle(name(deployable.getName()));
+                item.setLink("/workspace/" + deployable.getURI());
+                entry.setData(item);
+                entries.add(entry);
+            }
+
+            return entries.toArray(new Entry[entries.size()]);
+            
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    }
+    
+    /**
+     * Returns a qname object from its expression as namespace#localpart.
+     * @param name
+     * @return
+     */
+    private static QName qname(String name) {
+        int i = name.indexOf('}');
+        if (i != -1) {
+            return new QName(name.substring(1, i), name.substring(i + 1));
+        } else {
+            return new QName(name);
+        }
+    }
+    
+    /**
+     * Returns a qname expressed as namespace#localpart.
+     * @param qname
+     * @return
+     */
+    private static String name(QName qname) {
+        String ns = qname.getNamespaceURI();
+        if (ns != null) {
+            return '{' + ns + '}' + qname.getLocalPart();
+        } else {
+            return qname.getLocalPart();
+        }
+    }
+
+    /**
+     * Returns a URL from a location string.
+     * @param location
+     * @return
+     * @throws MalformedURLException
+     */
+    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();
+        }
+    }
+
+}

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

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

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=632617&r1=632616&r2=632617&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
 Sat Mar  1 08:24:33 2008
@@ -22,12 +22,12 @@
        targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0";
     name="Admin">
 
-    <component name="WorkspaceUI">
+    <component name="ContributionUI">
         <t:implementation.widget location="workspace.html"/>
         <service name="Widget">
                <t:binding.http uri="http://localhost:9990/ui/workspace"/>
         </service>
-                <reference name="workspace" 
target="WorkspaceCollectionComponent">
+                <reference name="workspace" 
target="ContributionCollectionComponent/ContributionCollection">
                        <t:binding.atom/>
                 </reference>
     </component>
@@ -62,10 +62,10 @@
                 </reference>
     </component>
     
-    <component name="WorkspaceCollectionComponent">
-        <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.WorkspaceCollectionImpl"/>   
          
+    <component name="ContributionCollectionComponent">
+        <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.ContributionCollectionImpl"/>
             
         <property name="workspaceFileName">workspace.xml</property>            
 
-               <service name="WorkspaceCollection">
+               <service name="ContributionCollection">
                        <t:binding.atom uri="http://localhost:9990/workspace"/>
                </service>
     </component>
@@ -92,6 +92,14 @@
                <service name="CompositeCollection">
                        <t:binding.atom uri="http://localhost:9990/composite"/>
                </service>
+    </component>
+
+    <component name="DeployableCompositeCollectionComponent">
+        <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.DeployableCompositeCollectionImpl"/>
+               <service name="CompositeCollection">
+                       <t:binding.atom uri="http://localhost:9990/deployable"/>
+               </service>
+               <reference name="contributionCollection" 
target="ContributionCollectionComponent/LocalContributionCollection"/>
     </component>
 
     <component name="CloudCollectionComponent">

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=632617&r1=632616&r2=632617&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
 Sat Mar  1 08:24:33 2008
@@ -38,7 +38,7 @@
  */
 public class AdminTestCase extends TestCase {
     
-    private WorkspaceCollectionImpl workspaceCollection;
+    private ContributionCollectionImpl workspaceCollection;
     
     private final static String WORKSPACE_XML =
         "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
@@ -58,7 +58,7 @@
         writer.flush();
         
         // Create a workspace collection component
-        workspaceCollection = new WorkspaceCollectionImpl();
+        workspaceCollection = new ContributionCollectionImpl();
         workspaceCollection.workspaceFileName = url.getFile();
         workspaceCollection.init();
         



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

Reply via email to