Author: jsdelfino
Date: Sun Feb 24 09:27:27 2008
New Revision: 630640

URL: http://svn.apache.org/viewvc?rev=630640&view=rev
Log:
Added support for collections of composites and nodes.

Added:
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/CompositeCollection.java
   (with props)
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java
   (with props)
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/AdminLauncher.java
      - copied, changed from r630061, 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/WorkspaceAdminLauncher.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite
      - copied, changed from r630061, 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/WorkspaceAdmin.composite
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
   (with props)
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
   (with props)
Removed:
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/WorkspaceAdminLauncher.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/WorkspaceAdmin.composite
Modified:
    incubator/tuscany/java/sca/modules/workspace-admin/   (props changed)
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionFileCollection.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
    
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/workspace.html

Propchange: incubator/tuscany/java/sca/modules/workspace-admin/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sun Feb 24 09:27:27 2008
@@ -15,3 +15,6 @@
 .wtpmodules
 contributions
 workspace.xml
+domain.composite
+nodes.composite
+cloud.composite

Added: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/CompositeCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/CompositeCollection.java?rev=630640&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/CompositeCollection.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/CompositeCollection.java
 Sun Feb 24 09:27:27 2008
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.workspace.admin;
+
+import org.apache.tuscany.sca.implementation.data.collection.Collection;
+import org.apache.tuscany.sca.implementation.data.collection.Item;
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * The composite collection service interface.
+ *
+ * @version $Rev$ $Date$
+ */
[EMAIL PROTECTED]
+public interface CompositeCollection extends Collection<String, Item>{
+
+}

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

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

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionFileCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionFileCollection.java?rev=630640&r1=630639&r2=630640&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionFileCollection.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/ContributionFileCollection.java
 Sun Feb 24 09:27:27 2008
@@ -24,7 +24,7 @@
 import org.osoa.sca.annotations.Remotable;
 
 /**
- * The contribution store service interface.
+ * The contribution file store service interface.
  *
  * @version $Rev$ $Date$
  */

Added: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java?rev=630640&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeCollectionImpl.java
 Sun Feb 24 09:27:27 2008
@@ -0,0 +1,264 @@
+/*
+ * 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.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.util.ArrayList;
+import java.util.List;
+
+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.DefaultAssemblyFactory;
+import org.apache.tuscany.sca.assembly.xml.CompositeProcessor;
+import org.apache.tuscany.sca.assembly.xml.Constants;
+import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.DefaultContributionFactory;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.implementation.data.collection.Entry;
+import org.apache.tuscany.sca.implementation.data.collection.Item;
+import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
+import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
+import org.apache.tuscany.sca.policy.DefaultPolicyFactory;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+import org.apache.tuscany.sca.workspace.admin.CompositeCollection;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.XMLSerializer;
+import org.osoa.sca.ServiceRuntimeException;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Scope;
+import org.w3c.dom.Document;
+
+/**
+ * Implementation of a composite collection service. 
+ *
+ * @version $Rev$ $Date$
+ */
[EMAIL PROTECTED]("COMPOSITE")
+public class CompositeCollectionImpl implements CompositeCollection {
+    
+    @Property
+    public String compositeCollectionName;
+
+    private AssemblyFactory assemblyFactory;
+    private ContributionFactory contributionFactory;
+    private PolicyFactory policyFactory;
+    private InterfaceContractMapper contractMapper;
+    private Composite compositeCollection;
+    private CompositeProcessor compositeProcessor;
+    private XMLOutputFactory outputFactory;
+    private DocumentBuilder documentBuilder;
+    
+    /**
+     * Initialize the workspace administration component.
+     */
+    @Init
+    public void init() throws IOException, ContributionReadException, 
XMLStreamException, ParserConfigurationException {
+        
+        // Create factories
+        contributionFactory = new DefaultContributionFactory();
+        assemblyFactory = new DefaultAssemblyFactory();
+        policyFactory = new DefaultPolicyFactory();
+        outputFactory = XMLOutputFactory.newInstance();
+        outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, 
Boolean.TRUE);
+        documentBuilder = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
+        
+        // Read domain.composite
+        compositeProcessor = new CompositeProcessor(contributionFactory, 
assemblyFactory, policyFactory, contractMapper, null);
+        File file = new File(compositeCollectionName + ".composite");
+        if (file.exists()) {
+            XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+            FileInputStream is = new FileInputStream(file);
+            XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
+            compositeCollection = compositeProcessor.read(reader);
+        } else {
+            compositeCollection = assemblyFactory.createComposite();
+            compositeCollection.setName(new QName(Constants.SCA10_TUSCANY_NS, 
compositeCollectionName));
+        }
+    }
+    
+    public Entry<String, Item>[] getAll() {
+        // Return all the composites in the domain composite
+        List<Entry<String, Item>> entries = new ArrayList<Entry<String, 
Item>>();
+        for (Composite composite: compositeCollection.getIncludes()) {
+            Entry<String, Item> entry = new Entry<String, Item>();
+            entry.setKey(name(composite.getName()));
+            Item item = new Item();
+            item.setTitle(name(composite.getName()));
+            item.setLink(composite.getURI());
+            entry.setData(item);
+            entries.add(entry);
+        }
+        return entries.toArray(new Entry[entries.size()]);
+    }
+
+    public Item get(String key) throws NotFoundException {
+
+        // Returns the composite with the given name key
+        for (Composite composite: compositeCollection.getIncludes()) {
+            if (key.equals(name(composite.getName()))) {
+                Item item = new Item();
+                item.setTitle(name(composite.getName()));
+                item.setLink(composite.getURI());
+                return item;
+            }
+        }
+        throw new NotFoundException(key);
+    }
+
+    public String post(String key, Item item) {
+        
+        // Adds a new composite to the domain composite
+        Composite composite = assemblyFactory.createComposite();
+        composite.setName(qname(key));
+        composite.setURI(item.getLink());
+        composite.setUnresolved(true);
+        compositeCollection.getIncludes().add(composite);
+        
+        // Write the domain composite
+        write();
+        
+        return key;
+    }
+
+    public void put(String key, Item item) throws NotFoundException {
+        
+        // Update a composite already in the domain composite
+        Composite newComposite = assemblyFactory.createComposite();
+        newComposite.setName(qname(key));
+        newComposite.setURI(item.getLink());
+        newComposite.setUnresolved(true);
+        List<Composite> composites = compositeCollection.getIncludes();
+        for (int i = 0, n = composites.size(); i < n; i++) {
+            if (name(composites.get(i).getName()).equals(key)) {
+                composites.set(i, newComposite);
+                
+                // Write the domain composite
+                write();
+                
+                return;
+            }
+        }
+        throw new NotFoundException(key);
+    }
+
+    public void delete(String key) throws NotFoundException {
+        
+        // Delete a composite from the domain composite
+        List<Composite> composites = compositeCollection.getIncludes();
+        for (int i = 0, n = composites.size(); i < n; i++) {
+            if (name(composites.get(i).getName()).equals(key)) {
+                composites.remove(i);
+
+                // Write the domain composite
+                write();
+                
+                return;
+            }
+        }
+        throw new NotFoundException(key);
+    }
+
+    public Entry<String, Item>[] query(String queryString) {
+        if (queryString.startsWith("usedBy=")) {
+            //FIXME Invoke the Composite processing code from workspace-impl
+            return getAll();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    }
+    
+    /**
+     * Write the domain composite back to disk
+     */
+    private void write() {
+        try {
+            // First write to a byte stream
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            XMLStreamWriter writer = outputFactory.createXMLStreamWriter(bos);
+            compositeProcessor.write(compositeCollection, writer);
+            
+            // Parse again to pretty format the document
+            Document document = documentBuilder.parse(new 
ByteArrayInputStream(bos.toByteArray()));
+            OutputFormat format = new OutputFormat();
+            format.setIndenting(true);
+            format.setIndent(2);
+            
+            // Write to domain.composite
+            FileOutputStream os = new FileOutputStream(compositeCollectionName 
+ ".composite");
+            XMLSerializer serializer = new XMLSerializer(os, format);
+            serializer.serialize(document);
+            
+        } catch (FileNotFoundException e) {
+            throw new ServiceRuntimeException(e);
+        } catch (ContributionWriteException e) {
+            throw new ServiceRuntimeException(e);
+        } catch (XMLStreamException e) {
+            throw new ServiceRuntimeException(e);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    
+    /**
+     * Returns a qname object from its expression as namespace#localpart.
+     * @param name
+     * @return
+     */
+    private static QName qname(String name) {
+        int i = name.indexOf('}');
+        if (i != -1) {
+            return new QName(name.substring(1, i), name.substring(i + 1));
+        } else {
+            return new QName(name);
+        }
+    }
+    
+    /**
+     * Returns a qname expressed as namespace#localpart.
+     * @param qname
+     * @return
+     */
+    private static String name(QName qname) {
+        String ns = qname.getNamespaceURI();
+        if (ns != null) {
+            return '{' + ns + '}' + qname.getLocalPart();
+        } else {
+            return qname.getLocalPart();
+        }
+    }
+}

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

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

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java?rev=630640&r1=630639&r2=630640&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileCollectionImpl.java
 Sun Feb 24 09:27:27 2008
@@ -32,7 +32,7 @@
 import org.osoa.sca.annotations.Scope;
 
 /**
- * Implementation of the contribution workspace administration service 
component. 
+ * Implementation of a file collection service component. 
  *
  * @version $Rev$ $Date$
  */

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java?rev=630640&r1=630639&r2=630640&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionFileServiceImpl.java
 Sun Feb 24 09:27:27 2008
@@ -38,7 +38,7 @@
 import org.osoa.sca.annotations.Scope;
 
 /**
- * ContributionUploadServlet
+ * Implementation of a servlet component supporting file upload/download.
  *
  * @version $Rev$ $Date$
  */

Modified: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java?rev=630640&r1=630639&r2=630640&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/WorkspaceCollectionImpl.java
 Sun Feb 24 09:27:27 2008
@@ -26,7 +26,6 @@
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -60,7 +59,7 @@
 import org.w3c.dom.Document;
 
 /**
- * Implementation of the contribution workspace administration service 
component. 
+ * Implementation of a contribution workspace service component. 
  *
  * @version $Rev$ $Date$
  */

Copied: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/AdminLauncher.java
 (from r630061, 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/WorkspaceAdminLauncher.java)
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/AdminLauncher.java?p2=incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/AdminLauncher.java&p1=incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/WorkspaceAdminLauncher.java&r1=630061&r2=630640&rev=630640&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/WorkspaceAdminLauncher.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launch/AdminLauncher.java
 Sun Feb 24 09:27:27 2008
@@ -22,15 +22,15 @@
 import org.apache.tuscany.sca.host.embedded.SCADomain;
 
 /**
- * Default launcher for the workspace admin application. 
+ * Simple launcher for the administration application. 
  *
  * @version $Rev$ $Date$
  */
-public class WorkspaceAdminLauncher {
+public class AdminLauncher {
     
     public static void main(String[] args) throws Exception {
-        SCADomain.newInstance("WorkspaceAdmin.composite");
-        System.out.println("WorkspaceAdmin started...");
+        SCADomain.newInstance("Admin.composite");
+        System.out.println("Admin started...");
         System.in.read();
     }
 

Copied: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite
 (from r630061, 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/WorkspaceAdmin.composite)
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite?p2=incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite&p1=incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/WorkspaceAdmin.composite&r1=630061&r2=630640&rev=630640&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/WorkspaceAdmin.composite
 (original)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/Admin.composite
 Sun Feb 24 09:27:27 2008
@@ -20,7 +20,7 @@
 <composite xmlns="http://www.osoa.org/xmlns/sca/1.0";
        xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0";
        targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0";
-    name="WorkspaceAdmin">
+    name="Admin">
 
     <component name="WorkspaceUI">
         <t:implementation.widget location="workspace.html"/>
@@ -42,6 +42,26 @@
                 </reference>
     </component>
     
+    <component name="DomainCompositeUI">
+        <t:implementation.widget location="composite.html"/>
+        <service name="Widget">
+               <t:binding.http uri="http://localhost:9990/ui/composite"/>
+        </service>
+                <reference name="domainComposite" 
target="DomainCompositeCollectionComponent">
+                       <t:binding.atom/>
+                </reference>
+    </component>
+
+    <component name="CloudUI">
+        <t:implementation.widget location="cloud.html"/>
+        <service name="Widget">
+               <t:binding.http uri="http://localhost:9990/ui/cloud"/>
+        </service>
+                <reference name="cloudComposite" 
target="CloudCollectionComponent">
+                       <t:binding.atom/>
+                </reference>
+    </component>
+    
     <component name="WorkspaceCollectionComponent">
         <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.WorkspaceCollectionImpl"/>   
          
                <service name="WorkspaceCollection">
@@ -60,6 +80,22 @@
         <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.ContributionFileServiceImpl"/>
             
                <service name="ContributionFileServiceImpl">
                        <t:binding.http uri="http://localhost:9990/files"/>
+               </service>
+    </component>
+
+    <component name="DomainCompositeCollectionComponent">
+        <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.CompositeCollectionImpl"/>
+        <property name="compositeCollectionName">domain</property>
+               <service name="CompositeCollection">
+                       <t:binding.atom uri="http://localhost:9990/composite"/>
+               </service>
+    </component>
+
+    <component name="CloudCollectionComponent">
+        <implementation.java 
class="org.apache.tuscany.sca.workspace.admin.impl.CompositeCollectionImpl"/>
+        <property name="compositeCollectionName">cloud</property>
+               <service name="CompositeCollection">
+                       <t:binding.atom uri="http://localhost:9990/cloud"/>
                </service>
     </component>
 

Added: 
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=630640&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
 (added)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
 Sun Feb 24 09:27:27 2008
@@ -0,0 +1,112 @@
+<!--
+    * 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.    
+-->
+<html>
+<head>
+<title>SCA Node Cloud</title>
+
+<script type="text/javascript" src="cloud.js"></script>
+
+<script language="JavaScript">
+
+       //@Reference
+       var cloudComposite = new Reference("cloudComposite");
+       
+       function getComposites() {
+               cloudComposite.get("", getCompositesResponse);
+       }
+       
+       function getCompositesResponse(feed) {
+               if (feed != null) {
+                       var entries = feed.getElementsByTagName("entry");       
       
+                       var composites = "";
+                       composites += '<table border="0">';
+                       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");
+                               composites += '<tr>'
+                               composites += '<td><input name="composites" 
type="checkbox" value="' + id + '">' +
+                                                                               
        '<a href=\"' + location + '\">' + id + '</a></td>';
+                               composites += '</tr>';
+                       }
+                       composites += '</table>';
+                       document.getElementById("composites").innerHTML = 
composites;
+               }
+       }
+
+       function deleteComposite() {
+               var composites  = document.cloudCompositeForm.composites;
+               for (var i = 0; i < composites.length; i++) {
+                       if (composites[i].checked) {
+                           var id = composites[i].value;
+                               cloudComposite.del(id, deleteCompositeResponse);
+                       }
+               }
+       }
+
+       function deleteCompositeResponse() {
+           getComposites();
+       }       
+
+       function addComposite() {
+               var id  = document.newCompositeForm.compositeQName.value;
+               var location  = 
document.newCompositeForm.compositeLocation.value;
+               var entry = '<entry xmlns="http://www.w3.org/2005/Atom";>' +
+                               '<title>Contribution - ' + id +'</title>' +
+               '<id>' + id + '</id>' +
+               '<link rel="alternate" href="' + location + '" />' +
+               '<link rel="edit" href="' + location + '" />' +
+                       '</entry>';
+               cloudComposite.post(entry, addCompositeResponse);
+       }
+
+       function addCompositeResponse() {
+               document.newCompositeForm.compositeQName.value = "";
+               document.newCompositeForm.compositeLocation.value = "";
+           getComposites();
+       }       
+
+       getComposites();
+</script>
+
+</head>
+
+<body>
+  <h2>SCA Node Cloud</h2>
+  <div id="cloudComposite">
+  <form name="cloudCompositeForm">
+    <div id="composites" ></div>
+    <br/>
+    <input type="button" onClick="deleteComposite()"  value="Delete" />
+    <a href="/cloud/">(feed)</a>
+  </form>
+  <br/>
+  
+  <b>Add Composite</b>
+  <form name="newCompositeForm">
+    <table border="0">
+    <tr><td>QName:</td><td><input type="text" name="compositeQName" 
/></td></tr> 
+    <tr><td>Address:</td><td><input type="text" name="compositeLocation" 
/></td></tr>
+    </table>
+    <br/>
+    <input type="button" onClick="addComposite()" value="Add" />
+  </form>
+  
+  </div>
+</body>
+</html>

Propchange: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/cloud.html
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
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=630640&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
 (added)
+++ 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
 Sun Feb 24 09:27:27 2008
@@ -0,0 +1,112 @@
+<!--
+    * 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.    
+-->
+<html>
+<head>
+<title>SCA Domain Composites</title>
+
+<script type="text/javascript" src="composite.js"></script>
+
+<script language="JavaScript">
+
+       //@Reference
+       var domainComposite = new Reference("domainComposite");
+       
+       function getComposites() {
+               domainComposite.get("", getCompositesResponse);
+       }
+       
+       function getCompositesResponse(feed) {
+               if (feed != null) {
+                       var entries = feed.getElementsByTagName("entry");       
       
+                       var composites = "";
+                       composites += '<table border="0">';
+                       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");
+                               composites += '<tr>'
+                               composites += '<td><input name="composites" 
type="checkbox" value="' + id + '">' +
+                                                                               
        '<a href=\"' + location + '\">' + id + '</a></td>';
+                               composites += '</tr>';
+                       }
+                       composites += '</table>';
+                       document.getElementById("composites").innerHTML = 
composites;
+               }
+       }
+
+       function deleteComposite() {
+               var composites  = document.domainCompositeForm.composites;
+               for (var i = 0; i < composites.length; i++) {
+                       if (composites[i].checked) {
+                           var id = composites[i].value;
+                               domainComposite.del(id, 
deleteCompositeResponse);
+                       }
+               }
+       }
+
+       function deleteCompositeResponse() {
+           getComposites();
+       }       
+
+       function addComposite() {
+               var id  = document.newCompositeForm.compositeQName.value;
+               var location  = 
document.newCompositeForm.compositeLocation.value;
+               var entry = '<entry xmlns="http://www.w3.org/2005/Atom";>' +
+                               '<title>Contribution - ' + id +'</title>' +
+               '<id>' + id + '</id>' +
+               '<link rel="alternate" href="' + location + '" />' +
+               '<link rel="edit" href="' + location + '" />' +
+                       '</entry>';
+               domainComposite.post(entry, addCompositeResponse);
+       }
+
+       function addCompositeResponse() {
+               document.newCompositeForm.compositeQName.value = "";
+               document.newCompositeForm.compositeLocation.value = "";
+           getComposites();
+       }       
+
+       getComposites();
+</script>
+
+</head>
+
+<body>
+  <h2>SCA Domain Composites</h2>
+  <div id="domainComposite">
+  <form name="domainCompositeForm">
+    <div id="composites" ></div>
+    <br/>
+    <input type="button" onClick="deleteComposite()"  value="Delete" />
+    <a href="/composite/">(feed)</a>
+  </form>
+  <br/>
+  
+  <b>Add Composite</b>
+  <form name="newCompositeForm">
+    <table border="0">
+    <tr><td>QName:</td><td><input type="text" name="compositeQName" 
/></td></tr> 
+    <tr><td>Address:</td><td><input type="text" name="compositeLocation" 
/></td></tr>
+    </table>
+    <br/>
+    <input type="button" onClick="addComposite()" value="Add" />
+  </form>
+  
+  </div>
+</body>
+</html>

Propchange: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/workspace-admin/src/main/resources/composite.html
------------------------------------------------------------------------------
    svn:keywords = Rev Date

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=630640&r1=630639&r2=630640&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
 Sun Feb 24 09:27:27 2008
@@ -35,14 +35,17 @@
                if (feed != null) {
                        var entries = feed.getElementsByTagName("entry");       
       
                        var contributions = "";
+                       contributions += '<table border="0">';
                        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");
-                               contributions += '<input name="contributions" 
type="checkbox" value="' + id + '">' +
-                                                                               
        '<a href=\"' + location + '\">' + id + '</a>&nbsp;';
-                               contributions += '<a 
href=\"/workspace/?importedBy=' + id + '\">dependencies</a>';
-                               contributions += '<br/>';
+                               contributions += '<tr>'
+                               contributions += '<td><input 
name="contributions" type="checkbox" value="' + id + '">' +
+                                                                               
        '<a href=\"' + location + '\">' + id + '</a></td>';
+                               contributions += '<td>&nbsp;&nbsp;&nbsp;<a 
href=\"/workspace/?importedBy=' + id + '\">dependencies</a></td>';
+                               contributions += '</tr>';
                        }
+                       contributions += '</table>';
                        document.getElementById("contributions").innerHTML = 
contributions;
                }
        }                               



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

Reply via email to