Author: jsdelfino
Date: Sun Mar 16 10:59:33 2008
New Revision: 637620

URL: http://svn.apache.org/viewvc?rev=637620&view=rev
Log:
Factor common functions in a single class. Multiple bug fixes in the admin 
components, fixed creation of cloud directory, only consider node composites 
included in cloud.composite, delete node composite files in delete method. 
Fixed name of file server directory. Minor UI fixes.

Added:
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/AdminCommons.java
   (with props)
Modified:
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java
    
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/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/NodeProcessCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html

Added: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/AdminCommons.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/AdminCommons.java?rev=637620&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/AdminCommons.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/AdminCommons.java
 Sun Mar 16 10:59:33 2008
@@ -0,0 +1,125 @@
+/*
+ * 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.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Common functions and constants used by the admin components.
+ *
+ * @version $Rev$ $Date$
+ */
+public final class AdminCommons {
+
+    static final String DEPLOYMENT_CONTRIBUTION_URI = 
"http://tuscany.apache.org/xmlns/sca/1.0/cloud";;
+
+    /**
+     * Extracts a qname from a key expressed as 
contributionURI;namespace;localpart.
+     * @param key
+     * @return
+     */
+    static QName compositeQName(String key) {
+        int i = key.indexOf(';');
+        key = key.substring(i + 1);
+        i = key.indexOf(';');
+        return new QName(key.substring(0, i), key.substring(i + 1));
+    }
+
+    /**
+     * Returns a composite title expressed as contributionURI - 
namespace;localpart.
+     * @param qname
+     * @return
+     */
+    static String compositeTitle(String uri, QName qname) {
+        if (uri.equals(DEPLOYMENT_CONTRIBUTION_URI)) {
+            return qname.getLocalPart();
+        } else {
+            return uri + " - " + qname.getNamespaceURI() + ";" + 
qname.getLocalPart();
+        }
+    }
+
+    /**
+     * Extracts a contribution uri from a key expressed as 
contributionURI;namespace;localpart.
+     * @param key
+     * @return
+     */
+    static String contributionURI(String key) {
+        int i = key.indexOf(';');
+        return key.substring("composite:".length(), i);
+    }
+
+    /**
+     * Returns a composite key expressed as 
contributionURI;namespace;localpart.
+     * @param qname
+     * @return
+     */
+    static String compositeKey(String uri, QName qname) {
+        return "composite:" + uri + ';' + qname.getNamespaceURI() + ';' + 
qname.getLocalPart();
+    }
+
+    /**
+     * Returns a link to the source of a composite
+     * @param contributionURI
+     * @param qname
+     * @return
+     */
+    static String compositeSourceLink(String contributionURI, QName qname) {
+        return "/composite-source/" + compositeKey(contributionURI, qname);
+    }
+
+    /**
+     * Returns a composite title expressed as contributionURI - 
namespace;localpart.
+     * @param qname
+     * @return
+     */
+    static String compositeSimpleTitle(String uri, QName qname) {
+        if (uri.equals(AdminCommons.DEPLOYMENT_CONTRIBUTION_URI)) {
+            return qname.getLocalPart();
+        } else {
+            return qname.getNamespaceURI() + ";" + qname.getLocalPart();
+        }
+    }
+
+    /**
+     * Returns a URL from a location string.
+     * @param location
+     * @return
+     * @throws MalformedURLException
+     */
+    static URL locationURL(String location) throws MalformedURLException {
+        URI uri = URI.create(location);
+        String scheme = uri.getScheme();
+        if (scheme == null) {
+            File file = new File(location);
+            return file.toURI().toURL();
+        } else if (scheme.equals("file")) {
+            File file = new File(location.substring(5));
+            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/AdminCommons.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java?rev=637620&r1=637619&r2=637620&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java
 Sun Mar 16 10:59:33 2008
@@ -19,6 +19,10 @@
 
 package org.apache.tuscany.sca.workspace.admin.impl;
 
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeQName;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeTitle;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.contributionURI;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -80,8 +84,8 @@
             // composite:contributionURI;namespace;localName
             int e = queryString.indexOf('=');
             String key = queryString.substring(e + 1);
-            String contributionURI = uri(key);
-            QName qname = qname(key);
+            String contributionURI = contributionURI(key);
+            QName qname = compositeQName(key);
             
             // Return a collection containing the following entries:
             // the resolved version of the specified composite
@@ -91,7 +95,7 @@
             // Add the resolved composite entry
             Entry<String, Item> compositeEntry = new Entry<String, Item>();
             Item compositeItem = new Item();
-            compositeItem.setTitle(title(contributionURI, qname));
+            compositeItem.setTitle(compositeTitle(contributionURI, qname));
             compositeItem.setLink("/composite-resolved/" + key);
             compositeEntry.setKey(key);
             compositeEntry.setData(compositeItem);
@@ -108,37 +112,6 @@
         } else {
             throw new UnsupportedOperationException();
         }
-    }
-    
-    /**
-     * Extracts a qname from a key expressed as 
contributionURI;namespace;localpart.
-     * @param key
-     * @return
-     */
-    private static QName qname(String key) {
-        int i = key.indexOf(';');
-        key = key.substring(i + 1);
-        i = key.indexOf(';');
-        return new QName(key.substring(0, i), key.substring(i + 1));
-    }
-    
-    /**
-     * Extracts a contribution uri from a key expressed as 
contributionURI;namespace;localpart.
-     * @param key
-     * @return
-     */
-    private static String uri(String key) {
-        int i = key.indexOf(';');
-        return key.substring("composite:".length(), i);
-    }
-    
-    /**
-     * Returns a composite title expressed as contributionURI - 
namespace;localpart.
-     * @param qname
-     * @return
-     */
-    private static String title(String uri, QName qname) {
-        return uri + " - " + qname.getNamespaceURI() + ";" + 
qname.getLocalPart();
     }
 
 }

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=637620&r1=637619&r2=637620&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
 Sun Mar 16 10:59:33 2008
@@ -19,13 +19,17 @@
 
 package org.apache.tuscany.sca.workspace.admin.impl;
 
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.DEPLOYMENT_CONTRIBUTION_URI;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeSimpleTitle;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeSourceLink;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.locationURL;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
 import java.net.URLDecoder;
@@ -48,7 +52,6 @@
 
 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;
 import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint;
@@ -101,8 +104,6 @@
     @Property
     public String deploymentContributionDirectory;
     
-    private static final String deploymentContributionURI = 
Constants.SCA10_TUSCANY_NS + "/cloud";
-    
     private ContributionFactory contributionFactory;
     private AssemblyFactory assemblyFactory;
     private WorkspaceFactory workspaceFactory;
@@ -156,7 +157,7 @@
         Workspace workspace = readContributions(readWorkspace());
         
         for (Contribution contribution: workspace.getContributions()) {
-            if (contribution.getURI().equals(deploymentContributionURI)) {
+            if (contribution.getURI().equals(DEPLOYMENT_CONTRIBUTION_URI)) {
                 continue;
             }
             entries.add(entry(workspace, contribution));
@@ -293,26 +294,6 @@
     }
     
     /**
-     * Returns a URL from a location string.
-     * @param location
-     * @return
-     * @throws MalformedURLException
-     */
-    private static URL url(String location) throws MalformedURLException {
-        URI uri = URI.create(location);
-        String scheme = uri.getScheme();
-        if (scheme == null) {
-            File file = new File(location);
-            return file.toURI().toURL();
-        } else if (scheme.equals("file")) {
-            File file = new File(location.substring(5));
-            return file.toURI().toURL();
-        } else {
-            return uri.toURL();
-        }
-    }
-
-    /**
      * Returns an entry representing a contribution
      * @param contribution
      * @return
@@ -345,7 +326,7 @@
             sb.append("Dependencies: <span id=\"dependencies\">");
             for (int i = 0, n = dependencies.size(); i < n ; i++) {
                 if (i > 0) {
-                    sb.append("&nbsp;&nbsp");
+                    sb.append("  ");
                 }
                 Contribution dependency = dependencies.get(i);
                 if (dependency != contribution) {
@@ -362,11 +343,11 @@
             sb.append("Deployables: <span id=\"deployables\">");
             for (int i = 0, n = deployables.size(); i < n ; i++) {
                 if (i > 0) {
-                    sb.append("&nbsp;&nbsp");
+                    sb.append("  ");
                 }
                 Composite deployable = deployables.get(i);
                 QName qname = deployable.getName();
-                sb.append("<a href=\""+ compositeSourceLink(contributionURI, 
qname) +"\">" + compositeTitle(contributionURI, qname) + "</a>");
+                sb.append("<a href=\""+ compositeSourceLink(contributionURI, 
qname) +"\">" + compositeSimpleTitle(contributionURI, qname) + "</a>");
             }
             sb.append("</span><br>");
         }
@@ -387,38 +368,6 @@
     }
     
     /**
-     * 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 contributionURI
@@ -455,13 +404,13 @@
         // SCA nodes declared in the cloud
         Contribution cloudContribution = null;
         for (Contribution contribution: workspace.getContributions()) {
-            if (contribution.getURI().equals(deploymentContributionURI)) {
+            if (contribution.getURI().equals(DEPLOYMENT_CONTRIBUTION_URI)) {
                 cloudContribution = contribution;
             }
         }
         if (cloudContribution == null) {
             Contribution contribution = 
contributionFactory.createContribution();
-            contribution.setURI(deploymentContributionURI);
+            contribution.setURI(DEPLOYMENT_CONTRIBUTION_URI);
             File cloudDirectory = new File(deploymentContributionDirectory);
             contribution.setLocation(cloudDirectory.toURI().toString());
             workspace.getContributions().add(contribution);
@@ -509,7 +458,7 @@
         try {
             for (Contribution c: workspace.getContributions()) {
                 URI uri = URI.create(c.getURI());
-                URL url = url(c.getLocation());
+                URL url = locationURL(c.getLocation());
                 Contribution contribution = 
(Contribution)contributionInfoProcessor.read(null, uri, url);
                 dependencyWorkspace.getContributions().add(contribution);
             }

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=637620&r1=637619&r2=637620&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
 Sun Mar 16 10:59:33 2008
@@ -19,6 +19,14 @@
 
 package org.apache.tuscany.sca.workspace.admin.impl;
 
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.DEPLOYMENT_CONTRIBUTION_URI;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeKey;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeQName;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeSourceLink;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeTitle;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.contributionURI;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.locationURL;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -110,8 +118,6 @@
     
     private final static Logger logger = 
Logger.getLogger(DeployableCompositeCollectionImpl.class.getName());    
 
-    private static final String deploymentContributionURI = 
Constants.SCA10_TUSCANY_NS + "/cloud";
-    
     @Reference
     public LocalItemCollection contributionCollection;
     
@@ -227,7 +233,7 @@
     public Item get(String key) throws NotFoundException {
 
         // Get the specified contribution info 
-        String contributionURI = uri(key);
+        String contributionURI = contributionURI(key);
         Item contributionItem = contributionCollection.get(contributionURI);
         
         // Read the contribution
@@ -239,7 +245,7 @@
         }
 
         // Find the specified deployable composite
-        QName qname = qname(key);
+        QName qname = compositeQName(key);
         for (Composite deployable: contribution.getDeployables()) {
             if (qname.equals(deployable.getName())) {
                 
@@ -311,7 +317,7 @@
         String key = path.startsWith("/")? path.substring(1) : path;
         
         // Extract the composite qname from the key
-        QName qname = qname(key);
+        QName qname = compositeQName(key);
         
         // Somewhere to store the composite we expect to write out at the end
         Composite compositeImage = null;
@@ -329,7 +335,7 @@
         for (Entry<String, Item> domainEntry: domainEntries) {
             
             // Load the required contributions
-            String contributionURI = uri(domainEntry.getKey());
+            String contributionURI = contributionURI(domainEntry.getKey());
             Contribution contribution = contributionMap.get(contributionURI);
             if (contribution == null) {
                 
@@ -354,13 +360,13 @@
             }
             
             if (contribution == null) {
-                response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                response.sendError(HttpServletResponse.SC_NOT_FOUND, 
contributionURI);
                 return;
             }
             
             // Find the specified deployable composite in the contribution
             Composite deployable = null;
-            QName qn = qname(domainEntry.getKey());
+            QName qn = compositeQName(domainEntry.getKey());
             for (Composite d: contribution.getDeployables()) {
                 if (qn.equals(d.getName())) {
                     deployable = d;
@@ -380,6 +386,12 @@
                 compositeImage = deployable;
             }
         }
+        
+        // Composite not found
+        if (compositeImage == null) {
+            response.sendError(HttpServletResponse.SC_NOT_FOUND, key);
+            return;
+        }
 
         // Get the clouds composite
         Composite cloudsComposite;
@@ -395,7 +407,7 @@
         for (int i = 0, n =domainIncludes.size(); i < n; i++) {
             Composite composite = domainIncludes.get(i);
             QName compositeName = composite.getName();
-            String contributionURI = uri(domainEntries[i].getKey());
+            String contributionURI = 
contributionURI(domainEntries[i].getKey());
             
             // find the node that will run this composite and the default
             // bindings that it configures
@@ -451,6 +463,7 @@
             compositeProcessor.write(compositeImage, writer);
         } catch (Exception e) {
             response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
e.toString());
+            return;
         }
                
     }
@@ -463,8 +476,8 @@
     private Composite cloud() throws NotFoundException {
 
         // Create a new composite for the clouds
-        Composite clouds = assemblyFactory.createComposite();
-        clouds.setName(new QName(Constants.SCA10_TUSCANY_NS, "cloud"));
+        Composite cloudComposite = assemblyFactory.createComposite();
+        cloudComposite.setName(new QName(Constants.SCA10_TUSCANY_NS, "cloud"));
         
         // Get the collection of cloud composites
         Entry<String, Item>[] cloudEntries = cloudCollection.getAll();
@@ -472,10 +485,12 @@
         // Load the cloud composites
         List<Contribution> loadedContributions = new ArrayList<Contribution>();
         Map<String, Contribution> contributionMap = new HashMap<String, 
Contribution>(); 
-        for (int i=0; i < cloudEntries.length; i++) {
+        for (Entry<String, Item> cloudEntry: cloudEntries) {
+            String key = cloudEntry.getKey();
+            String contributionURI = contributionURI(key);
+            QName qname = compositeQName(key);
 
-            // load the contribution
-            String contributionURI = uri(cloudEntries[i].getKey());
+            // Load the contribution
             Contribution contribution = contributionMap.get(contributionURI);
             if (contribution == null) {
                 Item contributionItem = 
contributionCollection.get(contributionURI);
@@ -494,12 +509,14 @@
             for (Artifact artifact : contribution.getArtifacts()) {
                 if (artifact.getModel() instanceof Composite) {
                     Composite composite = (Composite)artifact.getModel();
-                    clouds.getIncludes().add(composite);
+                    if (composite.getName().equals(qname)) {
+                        cloudComposite.getIncludes().add(composite);
+                    }
                 }
             } 
         }
         
-        return clouds;
+        return cloudComposite;
     }
 
     /**
@@ -514,7 +531,7 @@
     private Contribution contribution(List<Contribution> contributions, String 
contributionURI, String contributionLocation) throws ContributionReadException {
         try {
             URI uri = URI.create(contributionURI);
-            URL location = url(contributionLocation);
+            URL location = locationURL(contributionLocation);
             Contribution contribution = 
(Contribution)contributionContentProcessor.read(null, uri, location);
             
             // FIXME simplify this later
@@ -527,9 +544,9 @@
             ModelResolver modelResolver = new 
ExtensibleModelResolver(contribution, modelResolvers, modelFactories);
             contributionContentProcessor.resolve(contribution, modelResolver);
             
-            // Special processing for the cloud contribution, make all the
-            // composites deployable
-            if (contribution.getURI().equals(deploymentContributionURI)) {
+            // Special processing for the cloud contribution, mark all its
+            // composites as deployable
+            if (contribution.getURI().equals(DEPLOYMENT_CONTRIBUTION_URI)) {
                 for (Artifact artifact: contribution.getArtifacts()) {
                     if (artifact.getModel() instanceof Composite) {
                         
contribution.getDeployables().add((Composite)artifact.getModel());
@@ -592,16 +609,6 @@
     }
     
     /**
-     * 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);
-    }
-    
-    /**
      * Returns the list of components in a composite.
      * 
      * @param composite
@@ -609,11 +616,17 @@
      */
     private static String components(Composite composite) {
         StringBuffer sb = new StringBuffer();
-        for (Component component: composite.getComponents()) {
-            if (sb.length() != 0) {
-                sb.append(" ");
+        List<Component> components = composite.getComponents();
+        if (!components.isEmpty()) {
+            sb.append("Components: <span id=\"components\">");
+            for (int i = 0, n = components.size(); i < n; i++) {
+                Component component = components.get(i);
+                if (i != 0) {
+                    sb.append(" ");
+                }
+                sb.append(component.getName());
             }
-            sb.append(component.getName());
+            sb.append("</span>");
         }
         return sb.toString();
     }
@@ -631,7 +644,7 @@
                 Composite deployable = nodeImplementation.getComposite();
                 String contributionURI = deployable.getURI();
                 QName qname = deployable.getName();
-                String key = key(contributionURI, qname);
+                String key = compositeKey(contributionURI, qname);
                 return "/composite-source/" + key;
             }
         }
@@ -647,7 +660,7 @@
      */
     private static Entry<String, Item> entry(Contribution contribution, 
Composite deployable) {
         Entry<String, Item> entry = new Entry<String, Item>();
-        entry.setKey(key(contribution.getURI(), deployable.getName()));
+        entry.setKey(AdminCommons.compositeKey(contribution.getURI(), 
deployable.getName()));
         entry.setData(item(contribution, deployable));
         return entry;
     }
@@ -665,76 +678,12 @@
         QName qname = deployable.getName();
         String deployableURI = deployable.getURI();
         Item item = new Item();
-        item.setTitle(title(contributionURI, qname));
+        item.setTitle(compositeTitle(contributionURI, qname));
         item.setContents(components(deployable));
-        item.setLink(sourceLink(contributionURI, qname));
+        item.setLink(compositeSourceLink(contributionURI, qname));
         item.setAlternate(alternateLink(contributionLocation, deployableURI));
         item.setRelated(relatedLink(deployable));
         return item;
-    }
-
-    /**
-     * Extracts a qname from a key expressed as 
contributionURI;namespace;localpart.
-     * @param key
-     * @return
-     */
-    private static QName qname(String key) {
-        int i = key.indexOf(';');
-        key = key.substring(i + 1);
-        i = key.indexOf(';');
-        return new QName(key.substring(0, i), key.substring(i + 1));
-    }
-    
-    /**
-     * Extracts a contribution uri from a key expressed as 
contributionURI;namespace;localpart.
-     * @param key
-     * @return
-     */
-    private static String uri(String key) {
-        int i = key.indexOf(';');
-        return key.substring("composite:".length(), i);
-    }
-    
-    /**
-     * Returns a composite key expressed as 
contributionURI;namespace;localpart.
-     * @param qname
-     * @return
-     */
-    private static String key(String uri, QName qname) {
-        return "composite:" + uri + ';' + qname.getNamespaceURI() + ';' + 
qname.getLocalPart();
-    }
-
-    /**
-     * Returns a composite title expressed as contributionURI - 
namespace;localpart.
-     * @param qname
-     * @return
-     */
-    private static String title(String uri, QName qname) {
-        if (uri.equals(deploymentContributionURI)) {
-            return qname.getLocalPart();
-        } else {
-            return uri + " - " + qname.getNamespaceURI() + ";" + 
qname.getLocalPart();
-        }
-    }
-
-    /**
-     * Returns a URL from a location string.
-     * @param location
-     * @return
-     * @throws MalformedURLException
-     */
-    private static URL url(String location) throws MalformedURLException {
-        URI uri = URI.create(location);
-        String scheme = uri.getScheme();
-        if (scheme == null) {
-            File file = new File(location);
-            return file.toURI().toURL();
-        } else if (scheme.equals("file")) {
-            File file = new File(location.substring(5));
-            return file.toURI().toURL();
-        } else {
-            return uri.toURL();
-        }
     }
 
     /**

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=637620&r1=637619&r2=637620&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
 Sun Mar 16 10:59:33 2008
@@ -19,15 +19,20 @@
 
 package org.apache.tuscany.sca.workspace.admin.impl;
 
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.DEPLOYMENT_CONTRIBUTION_URI;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeKey;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeQName;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.contributionURI;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeTitle;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeSourceLink;
+
 import java.io.ByteArrayInputStream;
 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.io.InputStream;
-import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.net.URL;
@@ -84,8 +89,6 @@
 public class DeployedCompositeCollectionImpl extends HttpServlet implements 
ItemCollection, LocalItemCollection {
     private static final long serialVersionUID = -3477992129462720901L;
 
-    private static final String deploymentContributionURI = 
Constants.SCA10_TUSCANY_NS + "/cloud";
-    
     @Property
     public String compositeFile;
     
@@ -130,13 +133,15 @@
         for (Composite composite: compositeCollection.getIncludes()) {
             String contributionURI = composite.getURI();
             QName qname = composite.getName();
-            String key = key(contributionURI, qname);
+            String key = compositeKey(contributionURI, qname);
             Item item;
             try {
                 item = deployableCollection.get(key);
             } catch (NotFoundException e) {
                 item = new Item();
-                item.setContents("<span style=\"color: red\">Problem: 
Composite not found</span>");
+                item.setTitle(compositeTitle(contributionURI, qname));
+                item.setLink(compositeSourceLink(contributionURI, qname));
+                item.setContents("<span id=\"problem\" style=\"color: 
red\">Problem: Composite not found</span>");
             }
             Entry<String, Item> entry = new Entry<String, Item>();
             entry.setKey(key);
@@ -203,8 +208,8 @@
     }
 
     public String post(String key, Item item) {
-        String contributionURI = uri(key);
-        QName qname = qname(key);
+        String contributionURI = contributionURI(key);
+        QName qname = compositeQName(key);
 
         // Adds a new composite to the domain composite
         Composite compositeCollection = readCompositeCollection();
@@ -218,7 +223,11 @@
         // under the deployment composites directory, if that directory is
         // configured on this component
         if (deploymentContributionDirectory != null && item.getContents() != 
null) {
-            File file = new File(deploymentContributionDirectory, 
qname.getLocalPart() + ".composite");
+            File directory = new File(deploymentContributionDirectory);
+            if (!directory.exists()) {
+                directory.mkdirs();
+            }
+            File file = new File(directory, qname.getLocalPart() + 
".composite");
             try {
                 Writer w = new OutputStreamWriter(new FileOutputStream(file));
                 w.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
@@ -236,8 +245,8 @@
     }
 
     public void put(String key, Item item) throws NotFoundException {
-        String contributionURI = uri(key);
-        QName qname = qname(key);
+        String contributionURI = contributionURI(key);
+        QName qname = compositeQName(key);
         
         // Update a composite already in the domain composite
         Composite compositeCollection = readCompositeCollection();
@@ -261,30 +270,36 @@
     }
 
     public void delete(String key) throws NotFoundException {
-        String contributionURI = uri(key);
-        QName qname = qname(key);
+        String contributionURI = contributionURI(key);
+        QName qname = compositeQName(key);
         
         // Delete a composite from the composite collection
         Composite compositeCollection = readCompositeCollection();
         List<Composite> composites = compositeCollection.getIncludes();
+        Composite deleted = null;
         for (int i = 0, n = composites.size(); i < n; i++) {
             Composite composite = composites.get(i);
             if (contributionURI.equals(composite.getURI()) && 
qname.equals(composite.getName())) {
                 composites.remove(i);
-
-                if (deploymentContributionDirectory != null && 
contributionURI.equals(deploymentContributionURI)) {
-                    File file = new File(deploymentContributionDirectory, 
qname.getLocalPart() + ".composite");
-                    if (file.exists()) {
-                        file.delete();
-                    }
-                }
+                deleted = composite;
                 
                 // Write the domain composite
                 writeCompositeCollection(compositeCollection);
-                return;
+                break;
             }
         }
-        throw new NotFoundException(key);
+
+        // Delete the file too if it is in the deployment contribution 
directory
+        if (deploymentContributionDirectory != null && 
contributionURI.equals(DEPLOYMENT_CONTRIBUTION_URI)) {
+            File file = new File(deploymentContributionDirectory, 
qname.getLocalPart() + ".composite");
+            if (file.exists()) {
+                file.delete();
+            }
+        }
+        
+        if (deleted == null) {
+            throw new NotFoundException(key);
+        }
     }
 
     public Entry<String, Item>[] query(String queryString) {
@@ -348,37 +363,6 @@
         } catch (Exception e) {
             throw new ServiceRuntimeException(e);
         }
-    }
-
-    /**
-     * Extracts a qname from a key expressed as 
contributionURI;namespace;localpart.
-     * @param key
-     * @return
-     */
-    private static QName qname(String key) {
-        int i = key.indexOf(';');
-        key = key.substring(i + 1);
-        i = key.indexOf(';');
-        return new QName(key.substring(0, i), key.substring(i + 1));
-    }
-    
-    /**
-     * Extracts a contribution uri from a key expressed as 
contributionURI;namespace;localpart.
-     * @param key
-     * @return
-     */
-    private static String uri(String key) {
-        int i = key.indexOf(';');
-        return key.substring("composite:".length(), i);
-    }
-    
-    /**
-     * Returns a composite key expressed as 
contributionURI;namespace;localpart.
-     * @param qname
-     * @return
-     */
-    private static String key(String uri, QName qname) {
-        return "composite:" + uri + ';' + qname.getNamespaceURI() + ';' + 
qname.getLocalPart();
     }
 
 }

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java?rev=637620&r1=637619&r2=637620&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java
 Sun Mar 16 10:59:33 2008
@@ -53,7 +53,7 @@
     }
     
     public Entry<String, Item>[] getAll() {
-        // Return all the contributions
+        // Return all the files
         List<Entry<String, Item>> entries = new ArrayList<Entry<String, 
Item>>();
         File directory = new File(directoryName);
         if (directory.exists()) {

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java?rev=637620&r1=637619&r2=637620&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java
 Sun Mar 16 10:59:33 2008
@@ -69,7 +69,7 @@
     @Override
     public void doPost(HttpServletRequest request, HttpServletResponse 
response) throws IOException {
 
-        // Upload contributions
+        // Upload files
         try {
             for (FileItem item: (List<FileItem>)upload.parseRequest(request)) {
                 if (!item.isFormField()) {
@@ -92,7 +92,7 @@
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
         
-        // Download a contribution file
+        // Download a file
         String requestURI = URLDecoder.decode(request.getRequestURI(), 
"UTF-8");
         String path = requestURI.substring(request.getServletPath().length());
         if (path.startsWith("/")) {

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/NodeProcessCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/NodeProcessCollectionImpl.java?rev=637620&r1=637619&r2=637620&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/NodeProcessCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/NodeProcessCollectionImpl.java
 Sun Mar 16 10:59:33 2008
@@ -19,6 +19,10 @@
 
 package org.apache.tuscany.sca.workspace.admin.impl;
 
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeQName;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.compositeTitle;
+import static 
org.apache.tuscany.sca.workspace.admin.impl.AdminCommons.contributionURI;
+
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -26,8 +30,6 @@
 import java.util.List;
 import java.util.Properties;
 
-import javax.xml.namespace.QName;
-
 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.ItemCollection;
@@ -36,7 +38,6 @@
 import org.apache.tuscany.sca.node.launch.SCANode2Launcher;
 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;
 
@@ -71,7 +72,7 @@
     public Item get(String key) throws NotFoundException {
 
         // Return the specified VM
-        SCANodeVM vm = getVM(key);
+        SCANodeVM vm = vm(key);
         if (vm == null) {
             throw new NotFoundException();
         }
@@ -82,7 +83,7 @@
     public String post(String key, Item item) {
         
         // Start a new VM and add it to the collection
-        SCANodeVM vm = getVM(key);
+        SCANodeVM vm = vm(key);
         if (vm != null) {
             return key;
         }
@@ -105,7 +106,7 @@
     public void delete(String key) throws NotFoundException {
         
         // Stop a VM and remove it from the collection
-        SCANodeVM vm = getVM(key);
+        SCANodeVM vm = vm(key);
         if (vm != null) {
             try {
                 vm.stop();
@@ -142,7 +143,7 @@
      * @param key
      * @return
      */
-    private SCANodeVM getVM(String key) {
+    private SCANodeVM vm(String key) {
         for (SCANodeVM vm: nodeVMs) {
             if (key.equals(vm.getComposite())) {
                 return vm;
@@ -173,43 +174,12 @@
     private static Item item(SCANodeVM vm) {
         Item item = new Item();
         String key = vm.getComposite();
-        item.setTitle(title(uri(key), qname(key)));
+        item.setTitle(compositeTitle(contributionURI(key), 
compositeQName(key)));
         item.setLink("/composite-image?composite=" + vm.getComposite());
-        item.setContents("<span style=\"white-space: nowrap; font-size: 
small\">" + vm.getLog().toString() + "</span>");
+        item.setContents("<span id=\"log\" style=\"white-space: nowrap; 
font-size: small\">" + vm.getLog().toString() + "</span>");
         return item;
     }
     
-    /**
-     * Extracts a qname from a key expressed as 
contributionURI;namespace;localpart.
-     * @param key
-     * @return
-     */
-    private static QName qname(String key) {
-        int i = key.indexOf(';');
-        key = key.substring(i + 1);
-        i = key.indexOf(';');
-        return new QName(key.substring(0, i), key.substring(i + 1));
-    }
-    
-    /**
-     * Extracts a contribution uri from a key expressed as 
contributionURI;namespace;localpart.
-     * @param key
-     * @return
-     */
-    private static String uri(String key) {
-        int i = key.indexOf(';');
-        return key.substring("composite:".length(), i);
-    }
-    
-    /**
-     * Returns a composite title expressed as contributionURI - 
namespace;localpart.
-     * @param qname
-     * @return
-     */
-    private static String title(String uri, QName qname) {
-        return uri + " - " + qname.getNamespaceURI() + ";" + 
qname.getLocalPart();
-    }
-
     /**
      * Represent a child Java VM running an SCA node.
      */

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=637620&r1=637619&r2=637620&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
 Sun Mar 16 10:59:33 2008
@@ -94,7 +94,7 @@
 
     <component name="FileServiceComponent">
         <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.FileServiceImpl"/>
-        <property name="directoryName">contributions</property>             
+        <property name="directoryName">files</property>             
                <service name="Servlet">
                        <t:binding.http uri="http://localhost:9990/files"/>
                </service>

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html?rev=637620&r1=637619&r2=637620&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
 Sun Mar 16 10:59:33 2008
@@ -84,18 +84,27 @@
                                }
                                compositeIds[i] = compositeId;
 
-                               var content = 
entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
-                               var name = compositeLocalName(nodeId);
+                               var content = "";
+                               if 
(entries[i].getElementsByTagName("content")[0].firstChild != null) {
+                                       content = 
entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
+                               }
+                               var bs = content.indexOf('<span 
id="components">');
+                               if (bs != -1) {
+                                       var es = content.indexOf('</span>', 
bs); 
+                                       nodeName = content.substring(bs, es + 
7);
+                               }
+
+                               var nodeName = compositeLocalName(nodeId);
                                
                                composites += '<tr>'
-                               if (content.indexOf('<span ') != -1) {
+                               if (content.indexOf('<span id="problem"') != 
-1) {
                                        composites += '<td><input 
name="composites" type="checkbox" value="' + nodeId + '">' +
-                                                                               
        '<a href=\"' + nodeLink + '\">' + name + '</a></td>';
+                                                                               
        '<a href=\"' + nodeLink + '\">' + nodeName + '</a></td>';
                                        composites += '<td>' + content + 
'</td>';
                                        composites += '<td>' + uri + '</td>';
                                } else {
                                        composites += '<td><input 
name="composites" type="checkbox" value="' + nodeId + '">' +
-                                                                               
        '<a href=\"' + nodeLink + '\">' + content + '</a></td>';
+                                                                               
        '<a href=\"' + nodeLink + '\">' + nodeName + '</a></td>';
                                        composites += '<td><a href=\"' + 
compositeLink + '\">' + qname + '</a></td>';
                                        composites += '<td><a 
href="/contribution/' + uri + '">' + uri + '</a></td>';
                                }
@@ -130,7 +139,7 @@
                var contributionURI = 
document.newCompositeForm.contributionURI.value;
                var id  = 'composite:' +
                        'http://tuscany.apache.org/xmlns/sca/1.0/cloud' + ';' +
-                       'http://tuscany.apache.org/xmlns/sca/1.0/cloud' + ';' +
+                       'cloud:/' + ';' +
                        nodeName;
                        
                var entry = '<entry xmlns="http://www.w3.org/2005/Atom";>\n' +
@@ -138,7 +147,7 @@
                '<content type="text/xml"\n>\n' + 
                                '<composite     
xmlns="http://www.osoa.org/xmlns/sca/1.0"\n' +
                                '       
xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"\n' +
-                               '       
targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0/cloud"\n' +
+                               '       targetNamespace="cloud:/"\n' +
                                '       xmlns:c="' + compositeNamespace + '"\n' 
+
                                '       name="' + nodeName + '">\n' +
                                '\n' +

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html?rev=637620&r1=637619&r2=637620&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
 Sun Mar 16 10:59:33 2008
@@ -54,9 +54,25 @@
                        for (var i=0; i<entries.length; i++) {
                                var id = 
entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
                                var link = 
entries[i].getElementsByTagName("link")[0].getAttribute("href");
-                               var components = 
entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
                                var uri = contributionURI(id);
                                var qname = compositeName(id);
+
+                               var content = "";
+                               if 
(entries[i].getElementsByTagName("content")[0].firstChild != null) {
+                                       content = 
entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
+                               }
+                               var components = '';
+                               var bs = content.indexOf('<span 
id="components">');
+                               if (bs != -1) {
+                                       var es = content.indexOf('</span>', 
bs); 
+                                       components = content.substring(bs, es + 
7);
+                               } else {
+                                       bs = content.indexOf('<span 
id="problem"');
+                                       if (bs != -1) {
+                                               var es = 
content.indexOf('</span>', bs); 
+                                               components = 
content.substring(bs, es + 7);
+                                       }
+                               }
                                
                                composites += '<tr>'
                                composites += '<td><input name="composites" 
type="checkbox" value="' + id + '">';



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

Reply via email to