Author: jsdelfino
Date: Sat Mar 15 14:43:08 2008
New Revision: 637484

URL: http://svn.apache.org/viewvc?rev=637484&view=rev
Log:
Cleaned up code that reloaded composites in a DOM. Added code to return the 
list of dependencies and deployables in contribution ATOM entries.

Modified:
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html
    
incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.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?rev=637484&r1=637483&r2=637484&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java
 Sat Mar 15 14:43:08 2008
@@ -25,31 +25,29 @@
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
-import java.net.URLConnection;
 import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.servlet.Servlet;
 import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.assembly.xml.Constants;
 import org.apache.tuscany.sca.contribution.Contribution;
 import org.apache.tuscany.sca.contribution.ContributionFactory;
@@ -65,7 +63,6 @@
 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;
@@ -114,12 +111,13 @@
     private URLArtifactProcessor<Contribution> contributionInfoProcessor;
     private XMLInputFactory inputFactory;
     private XMLOutputFactory outputFactory;
+    private DocumentBuilder documentBuilder;
     
     /**
      * Initialize the component.
      */
     @Init
-    public void initialize() throws IOException, ContributionReadException, 
XMLStreamException, ParserConfigurationException {
+    public void initialize() throws ParserConfigurationException {
         
         // Create model factories
         ModelFactoryExtensionPoint modelFactories = new 
DefaultModelFactoryExtensionPoint();
@@ -147,18 +145,21 @@
         // Create contribution info processor
         contributionInfoProcessor = new 
ContributionInfoProcessor(modelFactories, modelResolvers, urlProcessor);
 
+        // Create a document builder (used to pretty print XML)
+        documentBuilder = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
     }
     
     public Entry<String, Item>[] getAll() {
 
         // Return all the contributions
         List<Entry<String, Item>> entries = new ArrayList<Entry<String, 
Item>>();
-        Workspace workspace = readWorkspace();
+        Workspace workspace = readContributions(readWorkspace());
+        
         for (Contribution contribution: workspace.getContributions()) {
             if (contribution.getURI().equals(deploymentContributionURI)) {
                 continue;
             }
-            entries.add(entry(contribution));
+            entries.add(entry(workspace, contribution));
         }
         return entries.toArray(new Entry[entries.size()]);
     }
@@ -166,10 +167,10 @@
     public Item get(String key) throws NotFoundException {
 
         // Returns the contribution with the given URI key
-        Workspace workspace = readWorkspace();
+        Workspace workspace = readContributions(readWorkspace());
         for (Contribution contribution: workspace.getContributions()) {
             if (key.equals(contribution.getURI())) {
-                return item(contribution);
+                return item(workspace, contribution);
             }
         }
         throw new NotFoundException(key);
@@ -194,7 +195,7 @@
         }
 
         // Redirect to the actual contribution location
-        response.sendRedirect("/files/" + item.getLink());
+        response.sendRedirect("/files/" + item.getAlternate());
     }
 
     public String post(String key, Item item) {
@@ -251,33 +252,24 @@
 
     public Entry<String, Item>[] query(String queryString) {
         if (queryString.startsWith("dependencies=") || 
queryString.startsWith("alldependencies=")) {
-            
+
             // Return the collection of dependencies of the specified 
contribution
             List<Entry<String, Item>> entries = new 
ArrayList<Entry<String,Item>>();
             
-            // Read the metadata for all the contributions into a temporary 
workspace
-            Workspace workspace = readWorkspace();
-            Workspace dependencyWorkspace = workspaceFactory.createWorkspace();
-            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);
-                }
-            } catch (Exception e) {
-                throw new ServiceRuntimeException(e);
-            }
+            // Extract the contribution URI
+            int eq = queryString.indexOf('=');
+            String key = queryString.substring(eq+1);
+            
+            // Read the metadata for all the contributions
+            Workspace workspace = readContributions(readWorkspace());
             
             // Look for the specified contribution
-            int e = queryString.indexOf('=');
-            String key = queryString.substring(e+1);
-            for (Contribution contribution: 
dependencyWorkspace.getContributions()) {
+            for (Contribution contribution: workspace.getContributions()) {
                 if (key.equals(contribution.getURI())) {
 
                     // Compute the contribution dependencies
                     ContributionDependencyAnalyzer analyzer = new 
ContributionDependencyAnalyzer();
-                    List<Contribution> dependencies = 
analyzer.calculateContributionDependencies(dependencyWorkspace, contribution);
+                    List<Contribution> dependencies = 
analyzer.calculateContributionDependencies(workspace, contribution);
                     
                     // Returns entries for the dependencies
                     // optionally skip the specified contribution
@@ -287,7 +279,7 @@
                             // Skip the specified contribution
                             continue;
                         }
-                        entries.add(entry(dependency));
+                        entries.add(entry(workspace, dependency));
                     }
                     break;
                 }
@@ -325,10 +317,10 @@
      * @param contribution
      * @return
      */
-    private static Entry<String, Item> entry(Contribution contribution) {
+    private static Entry<String, Item> entry(Workspace workspace, Contribution 
contribution) {
         Entry<String, Item> entry = new Entry<String, Item>();
         entry.setKey(contribution.getURI());
-        entry.setData(item(contribution));
+        entry.setData(item(workspace, contribution));
         return entry;
     }
     
@@ -338,22 +330,104 @@
      * @param contribution
      * @return
      */
-    private static Item item(Contribution contribution) {
+    private static Item item(Workspace workspace, Contribution contribution) {
+        String contributionURI = contribution.getURI();
         Item item = new Item();
-        item.setTitle(title(contribution));
-        item.setLink(contribution.getLocation());
+        item.setTitle(title(contributionURI));
+        item.setLink(link(contributionURI));
+        item.setAlternate(contribution.getLocation());
+        
+        // List the contribution dependencies in the item contents
+        StringBuffer sb = new StringBuffer();
+        ContributionDependencyAnalyzer analyzer = new 
ContributionDependencyAnalyzer();
+        List<Contribution> dependencies = 
analyzer.calculateContributionDependencies(workspace, contribution);
+        if (dependencies.size() > 1) {
+            sb.append("Dependencies: <span id=\"dependencies\">");
+            for (int i = 0, n = dependencies.size(); i < n ; i++) {
+                if (i > 0) {
+                    sb.append("&nbsp;&nbsp");
+                }
+                Contribution dependency = dependencies.get(i);
+                if (dependency != contribution) {
+                    String dependencyURI = dependency.getURI();
+                    sb.append("<a href=\""+ link(dependencyURI) +"\">" + 
title(dependencyURI) + "</a>");
+                }
+            }
+            sb.append("</span><br>");
+        }
+        
+        // List the deployables
+        List<Composite> deployables = contribution.getDeployables();
+        if (!deployables.isEmpty()) {
+            sb.append("Deployables: <span id=\"deployables\">");
+            for (int i = 0, n = deployables.size(); i < n ; i++) {
+                if (i > 0) {
+                    sb.append("&nbsp;&nbsp");
+                }
+                Composite deployable = deployables.get(i);
+                QName qname = deployable.getName();
+                sb.append("<a href=\""+ compositeSourceLink(contributionURI, 
qname) +"\">" + compositeTitle(contributionURI, qname) + "</a>");
+            }
+            sb.append("</span><br>");
+        }
+        
+        // Store the two lists in the item contents
+        item.setContents(sb.toString());
+        
         return item;
     }
+
+    /**
+     * Returns a link to a contribution.
+     * @param contributionURI
+     * @return
+     */
+    private static String link(String contributionURI) {
+        return "/contribution/" + contributionURI;
+    }
     
     /**
+     * Returns a composite title expressed as contributionURI - 
namespace;localpart.
+     * @param qname
+     * @return
+     */
+    private static String compositeTitle(String uri, QName qname) {
+        if (uri.equals(deploymentContributionURI)) {
+            return qname.getLocalPart();
+        } else {
+            return qname.getNamespaceURI() + ";" + qname.getLocalPart();
+        }
+    }
+
+    /**
+     * Returns a link to the source of a composite
+     * @param contributionURI
+     * @param qname
+     * @return
+     */
+    private static String compositeSourceLink(String contributionURI, QName 
qname) {
+        return "/composite-source/" + compositeKey(contributionURI, qname);
+    }
+    
+    /**
+     * Returns a composite key expressed as 
contributionURI;namespace;localpart.
+     * @param qname
+     * @return
+     */
+    private static String compositeKey(String uri, QName qname) {
+        return "composite:" + uri + ';' + qname.getNamespaceURI() + ';' + 
qname.getLocalPart();
+    }
+
+    /**
      * Returns a title for the given contribution
      * 
-     * @param contribution
+     * @param contributionURI
      * @return
      */
-    private static String title(Contribution contribution) {
-        return contribution.getURI();
+    private static String title(String contributionURI) {
+        return contributionURI;
     }
+
     
     /**
      * Read the workspace.
@@ -408,7 +482,6 @@
             staxProcessor.write(workspace, 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);
@@ -423,4 +496,27 @@
             throw new ServiceRuntimeException(e);
         }
     }
+
+    /**
+     * Returns a workspace populated with the contribution info read from
+     * the contributions.
+     * 
+     * @param workspace
+     * @return
+     */
+    private Workspace readContributions(Workspace workspace) {
+        Workspace dependencyWorkspace = workspaceFactory.createWorkspace();
+        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);
+            }
+        } catch (Exception e) {
+            throw new ServiceRuntimeException(e);
+        }
+        return dependencyWorkspace;
+    }
+    
 }

Modified: 
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=637484&r1=637483&r2=637484&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
 Sat Mar 15 14:43:08 2008
@@ -19,8 +19,6 @@
 
 package org.apache.tuscany.sca.workspace.admin.impl;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -41,12 +39,9 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
@@ -97,14 +92,11 @@
 import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import 
org.apache.tuscany.sca.workspace.processor.impl.ContributionContentProcessor;
-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.Reference;
 import org.osoa.sca.annotations.Scope;
 import org.osoa.sca.annotations.Service;
-import org.w3c.dom.Document;
 
 /**
  * Implementation of a deployable composite collection service. 
@@ -143,73 +135,67 @@
      * Initialize the component.
      */
     @Init
-    public void initialize() throws IOException, ContributionReadException, 
XMLStreamException, ParserConfigurationException {
+    public void initialize() throws ParserConfigurationException {
         
-        try {
-
-            // FIXME Remove this later
-            // Bootstrap a registry
-            ExtensionPointRegistry registry = registry();
-            
-            // Get model factories
-            modelFactories = 
registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
-            assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
-            XMLInputFactory inputFactory = 
modelFactories.getFactory(XMLInputFactory.class);
-            outputFactory = modelFactories.getFactory(XMLOutputFactory.class);
-            
outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
-            ContributionFactory contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
-            PolicyFactory policyFactory = 
modelFactories.getFactory(PolicyFactory.class);
-            
-            // Get and initialize artifact processors
-            StAXArtifactProcessorExtensionPoint staxProcessors = 
registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
-            StAXArtifactProcessor<Object> staxProcessor = new 
ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory);
-            staxProcessors.addArtifactProcessor(new 
ContributionMetadataProcessor(assemblyFactory, contributionFactory, 
staxProcessor));
-            compositeProcessor = 
(StAXArtifactProcessor<Composite>)staxProcessors.getProcessor(Composite.class);
-    
-            URLArtifactProcessorExtensionPoint urlProcessors = 
registry.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
-            URLArtifactProcessor<Object> urlProcessor = new 
ExtensibleURLArtifactProcessor(urlProcessors);
-            urlProcessors.addArtifactProcessor(new 
ContributionMetadataDocumentProcessor(staxProcessor, inputFactory));
-            urlProcessors.addArtifactProcessor(new 
ContributionGeneratedMetadataDocumentProcessor(staxProcessor, inputFactory));
-            
-            // Create contribution processor
-            modelResolvers = 
registry.getExtensionPoint(ModelResolverExtensionPoint.class);
-            contributionContentProcessor = new 
ContributionContentProcessor(modelFactories, modelResolvers, urlProcessor);
-            contributionListeners = 
registry.getExtensionPoint(ContributionListenerExtensionPoint.class).getContributionListeners();
-    
-            // Create composite builder
-            SCABindingFactory scaBindingFactory = 
modelFactories.getFactory(SCABindingFactory.class);
-            IntentAttachPointTypeFactory intentAttachPointTypeFactory = 
modelFactories.getFactory(IntentAttachPointTypeFactory.class);
-            InterfaceContractMapper contractMapper = new 
InterfaceContractMapperImpl();
-            
-            // TODO need to get these messages back to the browser
-            CompositeBuilderMonitor monitor = new CompositeBuilderMonitor() {
-                public void problem(Problem problem) {
-                    if (problem.getSeverity() == Severity.INFO) {
-                        logger.info(problem.toString());
-                    } else if (problem.getSeverity() == Severity.WARNING) {
-                        logger.warning(problem.toString());
-                    } else if (problem.getSeverity() == Severity.ERROR) {
-                        if (problem.getCause() != null) {
-                            logger.log(Level.SEVERE, problem.toString(), 
problem.getCause());
-                        } else {
-                            logger.severe(problem.toString());
-                        }
+        // FIXME Remove this later
+        // Bootstrap a registry
+        ExtensionPointRegistry registry = registry();
+        
+        // Get model factories
+        modelFactories = 
registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
+        assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+        XMLInputFactory inputFactory = 
modelFactories.getFactory(XMLInputFactory.class);
+        outputFactory = modelFactories.getFactory(XMLOutputFactory.class);
+        outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, 
true);
+        ContributionFactory contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
+        PolicyFactory policyFactory = 
modelFactories.getFactory(PolicyFactory.class);
+        
+        // Get and initialize artifact processors
+        StAXArtifactProcessorExtensionPoint staxProcessors = 
registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        StAXArtifactProcessor<Object> staxProcessor = new 
ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory);
+        staxProcessors.addArtifactProcessor(new 
ContributionMetadataProcessor(assemblyFactory, contributionFactory, 
staxProcessor));
+        compositeProcessor = 
(StAXArtifactProcessor<Composite>)staxProcessors.getProcessor(Composite.class);
+
+        URLArtifactProcessorExtensionPoint urlProcessors = 
registry.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+        URLArtifactProcessor<Object> urlProcessor = new 
ExtensibleURLArtifactProcessor(urlProcessors);
+        urlProcessors.addArtifactProcessor(new 
ContributionMetadataDocumentProcessor(staxProcessor, inputFactory));
+        urlProcessors.addArtifactProcessor(new 
ContributionGeneratedMetadataDocumentProcessor(staxProcessor, inputFactory));
+        
+        // Create contribution processor
+        modelResolvers = 
registry.getExtensionPoint(ModelResolverExtensionPoint.class);
+        contributionContentProcessor = new 
ContributionContentProcessor(modelFactories, modelResolvers, urlProcessor);
+        contributionListeners = 
registry.getExtensionPoint(ContributionListenerExtensionPoint.class).getContributionListeners();
+
+        // Create composite builder
+        SCABindingFactory scaBindingFactory = 
modelFactories.getFactory(SCABindingFactory.class);
+        IntentAttachPointTypeFactory intentAttachPointTypeFactory = 
modelFactories.getFactory(IntentAttachPointTypeFactory.class);
+        InterfaceContractMapper contractMapper = new 
InterfaceContractMapperImpl();
+        
+        // TODO need to get these messages back to the browser
+        CompositeBuilderMonitor monitor = new CompositeBuilderMonitor() {
+            public void problem(Problem problem) {
+                if (problem.getSeverity() == Severity.INFO) {
+                    logger.info(problem.toString());
+                } else if (problem.getSeverity() == Severity.WARNING) {
+                    logger.warning(problem.toString());
+                } else if (problem.getSeverity() == Severity.ERROR) {
+                    if (problem.getCause() != null) {
+                        logger.log(Level.SEVERE, problem.toString(), 
problem.getCause());
+                    } else {
+                        logger.severe(problem.toString());
                     }
                 }
-            };
-            
-            compositeBuilder = new CompositeBuilderImpl(assemblyFactory, 
scaBindingFactory, intentAttachPointTypeFactory,
-                                                        contractMapper, 
monitor);
-            
-            compositeConfigurationBuilder = new 
CompositeConfigurationBuilderImpl(assemblyFactory, 
-                                                                               
  scaBindingFactory, 
-                                                                               
  intentAttachPointTypeFactory,
-                                                                               
  contractMapper,
-                                                                               
  monitor);
-            
-        } catch (Exception e) {
-            throw new ContributionReadException(e); 
-        }
+            }
+        };
+        
+        compositeBuilder = new CompositeBuilderImpl(assemblyFactory, 
scaBindingFactory, intentAttachPointTypeFactory,
+                                                    contractMapper, monitor);
+        
+        compositeConfigurationBuilder = new 
CompositeConfigurationBuilderImpl(assemblyFactory, 
+                                                                             
scaBindingFactory, 
+                                                                             
intentAttachPointTypeFactory,
+                                                                             
contractMapper,
+                                                                             
monitor);
     }
     
     public Entry<String, Item>[] getAll() {
@@ -221,9 +207,10 @@
 
         // Read contribution metadata
         for (Entry<String, Item> contributionEntry: contributionEntries) {
+            Item contributionItem = contributionEntry.getData();
             Contribution contribution;
             try {
-                contribution = contribution(contributionEntry.getKey(), 
contributionEntry.getData().getLink());
+                contribution = contribution(contributionEntry.getKey(), 
contributionItem.getAlternate());
             } catch (ContributionReadException e) {
                 continue;
             }
@@ -246,7 +233,7 @@
         // Read the contribution
         Contribution contribution;
         try {
-            contribution = contribution(contributionURI, 
contributionItem.getLink());
+            contribution = contribution(contributionURI, 
contributionItem.getAlternate());
         } catch (ContributionReadException e) {
             throw new NotFoundException(key);
         }
@@ -295,7 +282,7 @@
             // Read the contribution
             Contribution contribution;
             try {
-                contribution = contribution(contributionURI, 
contributionItem.getLink());
+                contribution = contribution(contributionURI, 
contributionItem.getAlternate());
             } catch (ContributionReadException e) {
                 return entries.toArray(new Entry[entries.size()]);
             }
@@ -354,7 +341,7 @@
                     // Read the contribution
                     Contribution c;
                     try {
-                        c = contribution(loadedContributions, entry.getKey(), 
contributionItem.getLink());
+                        c = contribution(loadedContributions, entry.getKey(), 
contributionItem.getAlternate());
                     } catch (ContributionReadException e) {
                         continue;
                     }
@@ -459,22 +446,9 @@
         
         // Write the deployable composite
         try {
-            // First write to a byte stream
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            XMLStreamWriter writer = outputFactory.createXMLStreamWriter(bos);
+            response.setContentType("text/xml");
+            XMLStreamWriter writer = 
outputFactory.createXMLStreamWriter(response.getOutputStream());
             compositeProcessor.write(compositeImage, 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);
-            format.setIndent(2);
-            
-            // Write to the response stream
-            XMLSerializer serializer = new 
XMLSerializer(response.getOutputStream(), format);
-            serializer.serialize(document);
-            
         } catch (Exception e) {
             response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
e.toString());
         }
@@ -508,7 +482,7 @@
                 
                 // Read the contribution
                 try {
-                    contribution = contribution(loadedContributions, 
contributionURI, contributionItem.getLink());
+                    contribution = contribution(loadedContributions, 
contributionURI, contributionItem.getAlternate());
                 } catch (ContributionReadException e) {
                     continue;
                 }
@@ -531,15 +505,17 @@
     /**
      * Returns the contribution with the given URI.
      * 
+     * @param contributions
      * @param contributionURI
+     * @param contributionLocation
      * @return
      * @throws NotFoundException
      */
-    private Contribution contribution(List<Contribution> contributions, String 
contributionURI, String contributionURL) throws ContributionReadException {
+    private Contribution contribution(List<Contribution> contributions, String 
contributionURI, String contributionLocation) throws ContributionReadException {
         try {
             URI uri = URI.create(contributionURI);
-            URL url = url(contributionURL);
-            Contribution contribution = 
(Contribution)contributionContentProcessor.read(null, uri, url);
+            URL location = url(contributionLocation);
+            Contribution contribution = 
(Contribution)contributionContentProcessor.read(null, uri, location);
             
             // FIXME simplify this later
             // Fix up contribution imports
@@ -571,8 +547,16 @@
         }
     }
 
-    private Contribution contribution(String contributionURI, String 
contributionURL) throws ContributionReadException {
-        return contribution(new ArrayList<Contribution>(), contributionURI, 
contributionURL);
+    /**
+     * Returns the contribution with the given URI.
+     * 
+     * @param contributionURI
+     * @param contributionLocation
+     * @return
+     * @throws NotFoundException
+     */
+    private Contribution contribution(String contributionURI, String 
contributionLocation) throws ContributionReadException {
+        return contribution(new ArrayList<Contribution>(), contributionURI, 
contributionLocation);
     }
     
     /**
@@ -607,6 +591,12 @@
         }
     }
     
+    /**
+     * Returns a link to the source of a composite
+     * @param contributionURI
+     * @param qname
+     * @return
+     */
     private static String sourceLink(String contributionURI, QName qname) {
         return "/composite-source/" + key(contributionURI, qname);
     }

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java?rev=637484&r1=637483&r2=637484&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java
 Sat Mar 15 14:43:08 2008
@@ -45,6 +45,7 @@
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamReader;
@@ -98,12 +99,13 @@
     private AssemblyFactory assemblyFactory;
     private CompositeProcessor compositeProcessor;
     private XMLOutputFactory outputFactory;
+    private DocumentBuilder documentBuilder;
     
     /**
      * Initialize the component.
      */
     @Init
-    public void initialize() {
+    public void initialize() throws ParserConfigurationException {
         
         // Create factories
         modelFactories = new DefaultModelFactoryExtensionPoint();
@@ -115,6 +117,9 @@
         ContributionFactory contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
         PolicyFactory policyFactory = 
modelFactories.getFactory(PolicyFactory.class);
         compositeProcessor = new CompositeProcessor(contributionFactory, 
assemblyFactory, policyFactory, null);
+
+        // Create a document builder (used to pretty print XML)
+        documentBuilder = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
     }
     
     public Entry<String, Item>[] getAll() {
@@ -178,7 +183,8 @@
             }
         }
         
-        // Read the composite file and write to response 
+        // Read the composite file and write to response
+        response.setContentType("text/xml");
         URLConnection connection = new URL(uri).openConnection();
         connection.setUseCaches(false);
         connection.connect();
@@ -330,7 +336,6 @@
             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);

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html?rev=637484&r1=637483&r2=637484&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html
 Sat Mar 15 14:43:08 2008
@@ -37,15 +37,35 @@
                        var entries = feed.getElementsByTagName("entry");       
       
                        var contributions = "";
                        contributions += '<table width="100%">';
-                       contributions += 
'<tr><th>Contribution</th><th>Dependencies</td><th>Deployables</th></tr>';
+                       contributions += 
'<tr><th>Contribution</th><th>Dependencies</td><th>Deployable 
Composites</th></tr>';
                        for (var i=0; i<entries.length; i++) {
                                var id = 
entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
                                var location = 
entries[i].getElementsByTagName("link")[0].getAttribute("href");
+                               var content = '';
+                               if 
(entries[i].getElementsByTagName("content")[0].firstChild != null) {
+                                       content = 
entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
+                               }
+                               
                                contributions += '<tr>';
                                contributions += '<td><input 
name="contributions" type="checkbox" value="' + id + '">' +
                                                                                
        '<a href=\"' + location + '\">' + id + '</a></td>';
-                               contributions += '<td><a 
href=\"/workspace/?dependencies=' + id + '\"><img src="icons/feed-icon.png" 
border="0"></a></td>';
-                               contributions += '<td><a 
href=\"/deployable/?contribution=' + id + '\"><img src="icons/feed-icon.png" 
border="0"></a></td>';
+
+                               var dependencies = '';
+                               var bs = content.indexOf('<span 
id="dependencies">');
+                               if (bs != -1) {
+                                       var es = content.indexOf('</span>', 
bs); 
+                                       dependencies = content.substring(bs, es 
+ 7);
+                               }
+                                                                               
        
+                               var deployables = '';
+                               var bs = content.indexOf('<span 
id="deployables">');
+                               if (bs != -1) {
+                                       var es = content.indexOf('</span>', 
bs); 
+                                       deployables = content.substring(bs, es 
+ 7);
+                               }
+                                                                               
        
+                               contributions += '<td class=tdw>' + 
dependencies +' </td>';
+                               contributions += '<td class=tdw>' + deployables 
+ '</td>';
                                contributions += '</tr>';
                        }
                        contributions += '</table>';

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/test/java/org/apache/tuscany/sca/workspace/admin/impl/AdminTestCase.java?rev=637484&r1=637483&r2=637484&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 15 14:43:08 2008
@@ -84,7 +84,7 @@
 
     public void testGet() throws NotFoundException {
         Item item = contributionCollection.get("assets");
-        assertTrue(item.getLink().endsWith("contributions/assets"));
+        assertTrue(item.getAlternate().endsWith("contributions/assets/"));
     }
     
     public void testDependencies1() {



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

Reply via email to