You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/04/11 04:55:07 UTC

svn commit: r527378 [2/9] - in /incubator/tuscany/java/sca/modules: assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/...

Added: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/CompositeProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/CompositeProcessor.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/CompositeProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/CompositeProcessor.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,508 @@
+/*
+ * 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.assembly.xml;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import java.util.StringTokenizer;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.assembly.AssemblyFactory;
+import org.apache.tuscany.assembly.Binding;
+import org.apache.tuscany.assembly.Callback;
+import org.apache.tuscany.assembly.Component;
+import org.apache.tuscany.assembly.ComponentProperty;
+import org.apache.tuscany.assembly.ComponentReference;
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.assembly.Composite;
+import org.apache.tuscany.assembly.CompositeReference;
+import org.apache.tuscany.assembly.CompositeService;
+import org.apache.tuscany.assembly.ConstrainingType;
+import org.apache.tuscany.assembly.Contract;
+import org.apache.tuscany.assembly.Implementation;
+import org.apache.tuscany.assembly.Property;
+import org.apache.tuscany.assembly.Reference;
+import org.apache.tuscany.assembly.Service;
+import org.apache.tuscany.assembly.Wire;
+import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
+import org.apache.tuscany.assembly.util.CompositeUtil;
+import org.apache.tuscany.interfacedef.InterfaceContract;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.policy.PolicyFactory;
+import org.apache.tuscany.policy.impl.DefaultPolicyFactory;
+import org.apache.tuscany.services.spi.contribution.ArtifactResolver;
+import org.apache.tuscany.services.spi.contribution.ContributionReadException;
+import org.apache.tuscany.services.spi.contribution.ContributionResolveException;
+import org.apache.tuscany.services.spi.contribution.ContributionWireException;
+import org.apache.tuscany.services.spi.contribution.ContributionWriteException;
+import org.apache.tuscany.services.spi.contribution.StAXArtifactProcessor;
+
+/**
+ * A composite processor.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class CompositeProcessor extends BaseArtifactProcessor implements StAXArtifactProcessor<Composite> {
+
+    /**
+     * Construct a new composite processor
+     * @param assemblyFactory
+     * @param policyFactory
+     * @param extensionProcessor 
+     */
+    public CompositeProcessor(AssemblyFactory factory, PolicyFactory policyFactory, StAXArtifactProcessor extensionProcessor) {
+        super(factory, policyFactory, extensionProcessor);
+    }
+
+    /**
+     * Construct a new composite processor.
+     * @param extensionProcessor
+     */
+    public CompositeProcessor(StAXArtifactProcessor extensionProcessor) {
+        this(new DefaultAssemblyFactory(), new DefaultPolicyFactory(), extensionProcessor);
+    }
+
+    public Composite read(XMLStreamReader reader) throws ContributionReadException {
+        Composite composite = null;
+        Composite include = null;
+        Component component = null;
+        Property property = null;
+        ComponentService componentService = null;
+        ComponentReference componentReference = null;
+        ComponentProperty componentProperty = null;
+        CompositeService compositeService = null;
+        CompositeReference compositeReference = null;
+        Contract contract = null;
+        Wire wire = null;
+        Callback callback = null;
+        QName name = null;
+        
+        try {
+    
+            // Read the composite document
+            while (reader.hasNext()) {
+                int event = reader.getEventType();
+                switch (event) {
+                    case START_ELEMENT:
+                        name = reader.getName();
+    
+                        if (COMPOSITE_QNAME.equals(name)) {
+    
+                            // Read a <composite>
+                            composite = factory.createComposite();
+                            composite.setName(new QName(getString(reader, TARGET_NAMESPACE), getString(reader, NAME)));
+                            composite.setAutowire(getBoolean(reader, AUTOWIRE));
+                            composite.setLocal(getBoolean(reader, LOCAL));
+                            composite.setConstrainingType(getConstrainingType(reader));
+                            readPolicies(composite, reader);
+    
+                        } else if (INCLUDE_QNAME.equals(name)) {
+    
+                            // Read an <include>
+                            include = factory.createComposite();
+                            include.setUnresolved(true);
+                            composite.getIncludes().add(include);
+    
+                        } else if (SERVICE_QNAME.equals(name)) {
+                            if (component != null) {
+    
+                                // Read a <component><service>
+                                componentService = factory.createComponentService();
+                                contract = componentService;
+                                componentService.setName(getString(reader, NAME));
+                                component.getServices().add(componentService);
+                                readPolicies(contract, reader);
+                            } else {
+    
+                                // Read a <composite><service>
+                                compositeService = factory.createCompositeService();
+                                contract = compositeService;
+                                compositeService.setName(getString(reader, NAME));
+    
+                                ComponentService promoted = factory.createComponentService();
+                                promoted.setUnresolved(true);
+                                promoted.setName(getString(reader, PROMOTE));
+                                compositeService.setPromotedService(promoted);
+    
+                                composite.getServices().add(compositeService);
+                                readPolicies(contract, reader);
+                            }
+    
+                        } else if (REFERENCE_QNAME.equals(name)) {
+                            if (component != null) {
+                                // Read a <component><reference>
+                                componentReference = factory.createComponentReference();
+                                contract = componentReference;
+                                componentReference.setName(getString(reader, NAME));
+                                readMultiplicity(componentReference, reader);
+                                componentReference.setAutowire(getBoolean(reader, AUTOWIRE));
+                                readTargets(componentReference, reader);
+                                componentReference.setWiredByImpl(getBoolean(reader, WIRED_BY_IMPL));
+                                component.getReferences().add(componentReference);
+                                readPolicies(contract, reader);
+                            } else {
+                                // Read a <composite><reference>
+                                compositeReference = factory.createCompositeReference();
+                                contract = compositeReference;
+                                compositeReference.setName(getString(reader, NAME));
+                                readMultiplicity(compositeReference, reader);
+                                readTargets(compositeReference, reader);
+                                readPromotes(compositeReference, reader);
+                                compositeReference.setWiredByImpl(getBoolean(reader, WIRED_BY_IMPL));
+                                composite.getReferences().add(compositeReference);
+                                readPolicies(contract, reader);
+                            }
+    
+                        } else if (PROPERTY_QNAME.equals(name)) {
+                            if (component != null) {
+                                // Read a <component><property>
+                                componentProperty = factory.createComponentProperty();
+                                property = componentProperty;
+                                componentProperty.setSource(getString(reader, SOURCE));
+                                componentProperty.setFile(getString(reader, FILE));
+                                readPolicies(property, reader);
+                                readProperty(componentProperty, reader);
+                                component.getProperties().add(componentProperty);
+                            } else {
+    
+                                // Read a <composite><property>
+                                property = factory.createProperty();
+                                readPolicies(property, reader);
+                                readProperty(property, reader);
+                                composite.getProperties().add(property);
+                            }
+    
+                        } else if (COMPONENT_QNAME.equals(name)) {
+    
+                            // Read a <component>
+                            component = factory.createComponent();
+                            component.setName(getString(reader, NAME));
+                            component.setConstrainingType(getConstrainingType(reader));
+                            composite.getComponents().add(component);
+                            readPolicies(component, reader);
+    
+                        } else if (WIRE_QNAME.equals(name)) {
+    
+                            // Read a <wire>
+                            wire = factory.createWire();
+                            ComponentReference source = factory.createComponentReference();
+                            source.setUnresolved(true);
+                            source.setName(getString(reader, SOURCE));
+                            wire.setSource(source);
+    
+                            ComponentService target = factory.createComponentService();
+                            target.setUnresolved(true);
+                            target.setName(getString(reader, TARGET));
+                            wire.setTarget(target);
+    
+                            composite.getWires().add(wire);
+                            readPolicies(wire, reader);
+    
+                        } else if (CALLBACK_QNAME.equals(name)) {
+    
+                            // Read a <callback>
+                            callback = factory.createCallback();
+                            contract.setCallback(callback);
+                            readPolicies(callback, reader);
+    
+                        } else if (OPERATION_QNAME.equals(name)) {
+    
+                            // Read an <operation>
+                            Operation operation = factory.createOperation();
+                            operation.setName(getString(reader, NAME));
+                            operation.setUnresolved(true);
+                            if (callback != null) {
+                                readPolicies(callback, operation, reader);
+                            } else {
+                                readPolicies(contract, operation, reader);
+                            }
+                        } else if (IMPLEMENTATION_COMPOSITE_QNAME.equals(name)) {
+                            
+                            // Read an implementation.composite
+                            Composite implementation = factory.createComposite();
+                            implementation.setName(getQName(reader, NAME));
+                            implementation.setUnresolved(true);
+                            component.setImplementation(implementation);
+                            
+                        } else {
+    
+                            // Read an extension element
+                            Object extension = extensionProcessor.read(reader);
+                            if (extension != null) {
+                                if (extension instanceof InterfaceContract) {
+    
+                                    // <service><interface> and
+                                    // <reference><interface>
+                                    contract.setInterfaceContract((InterfaceContract)extension);
+    
+                                } else if (extension instanceof Binding) {
+                                    // <service><binding> and <reference><binding>
+                                    contract.getBindings().add((Binding)extension);
+    
+                                } else if (extension instanceof Implementation) {
+    
+                                    // <component><implementation>
+                                    component.setImplementation((Implementation)extension);
+                                }
+                            }
+                        }
+                        break;
+    
+                    case XMLStreamConstants.CHARACTERS:
+    
+                        // Read an <include>qname</include>
+                        if (include != null && INCLUDE_QNAME.equals(name)) {
+                            include.setName(getQNameValue(reader, reader.getText().trim()));
+                        }
+    
+                        break;
+    
+                    case END_ELEMENT:
+                        name = reader.getName();
+    
+                        // Clear current state when reading reaching end element
+                        if (SERVICE_QNAME.equals(name)) {
+                            componentService = null;
+                            compositeService = null;
+                            contract = null;
+                        } else if (INCLUDE_QNAME.equals(name)) {
+                            include = null;
+                        } else if (REFERENCE_QNAME.equals(name)) {
+                            componentReference = null;
+                            compositeReference = null;
+                            contract = null;
+                        } else if (PROPERTY_QNAME.equals(name)) {
+                            componentProperty = null;
+                            property = null;
+                        } else if (COMPONENT_QNAME.equals(name)) {
+                            component = null;
+                        } else if (WIRE_QNAME.equals(name)) {
+                            wire = null;
+                        } else if (CALLBACK_QNAME.equals(name)) {
+                            callback = null;
+                        }
+                        break;
+                }
+    
+                // Read the next element
+                if (reader.hasNext()) {
+                    reader.next();
+                }
+            }
+            return composite;
+            
+        } catch (XMLStreamException e) {
+            throw new ContributionReadException(e);
+        }
+    }
+    
+    public void write(Composite composite, XMLStreamWriter writer) throws ContributionWriteException {
+
+        try {
+            writeStartDocument(writer, COMPOSITE,
+                new XAttr(CONSTRAINING_TYPE, getConstrainingTypeAttr(composite)),
+                new XAttr(TARGET_NAMESPACE, composite.getName().getNamespaceURI()),
+                new XAttr(NAME, composite.getName().getLocalPart()));
+    
+            for (Service service : composite.getServices()) {
+                CompositeService compositeService = (CompositeService)service;
+                ComponentService promotedService = compositeService.getPromotedService();
+                String promote = promotedService != null ? promotedService.getName() : null;
+                writeStart(writer, SERVICE, new XAttr(NAME, service.getName()), new XAttr(PROMOTE, promote));
+
+                extensionProcessor.write(service.getInterfaceContract(), writer);
+                
+                for (Binding binding: service.getBindings()) {
+                    extensionProcessor.write(binding, writer);
+                }
+                
+                if (service.getCallback() != null) {
+                    writeStart(writer, CALLBACK);
+                    writeEnd(writer);
+                }
+                writeEnd(writer);
+            }
+    
+            for (Component component : composite.getComponents()) {
+                writeStart(writer, COMPONENT, new XAttr(NAME, component.getName()));
+    
+                for (ComponentService service : component.getServices()) {
+                    writeStart(writer, SERVICE, new XAttr(NAME, service.getName()));
+
+                    extensionProcessor.write(service.getInterfaceContract(), writer);
+
+                    for (Binding binding: service.getBindings()) {
+                        extensionProcessor.write(binding, writer);
+                    }
+                    
+                    if (service.getCallback() != null) {
+                        writeStart(writer, CALLBACK);
+                        writeEnd(writer);
+                    }
+                    writeEnd(writer);
+                }
+    
+                for (ComponentReference reference : component.getReferences()) {
+                    // TODO handle multivalued target attribute
+                    String target = reference.getTargets().isEmpty() ? null : reference.getTargets().get(0).getName();
+                    writeStart(writer, REFERENCE,
+                               new XAttr(NAME, reference.getName()),
+                               new XAttr(TARGET,target));
+                    
+                    extensionProcessor.write(reference.getInterfaceContract(), writer);
+                    
+                    for (Binding binding: reference.getBindings()) {
+                        extensionProcessor.write(binding, writer);
+                    }
+                    
+                    if (reference.getCallback() != null) {
+                        writeStart(writer, CALLBACK);
+                        writeEnd(writer);
+                    }
+                    writeEnd(writer);
+                }
+    
+                for (ComponentProperty property : component.getProperties()) {
+                    writeStart(writer, PROPERTY, new XAttr(NAME, property.getName()));
+                    writeEnd(writer);
+                }
+
+                // Write the component implementation
+                Implementation implementation = component.getImplementation();
+                if (implementation instanceof Composite) {
+                    writeStart(writer, IMPLEMENTATION_COMPOSITE, 
+                       new XAttr(NAME, composite.getName()));
+                    writeEnd(writer);
+                } else {
+                    extensionProcessor.write(component.getImplementation(), writer);
+                }
+    
+                writeEnd(writer);
+            }
+    
+            for (Reference reference : composite.getReferences()) {
+                // TODO handle multivalued promote attribute
+                CompositeReference compositeReference = (CompositeReference)reference;
+                String promote;
+                if (!compositeReference.getPromotedReferences().isEmpty())
+                    promote = compositeReference.getPromotedReferences().get(0).getName();
+                else
+                    promote = null;
+                writeStart(writer, REFERENCE,
+                           new XAttr(NAME, reference.getName()),
+                           new XAttr(PROMOTE, promote));
+
+                extensionProcessor.write(reference.getInterfaceContract(), writer);
+                
+                for (Binding binding: reference.getBindings()) {
+                    extensionProcessor.write(binding, writer);
+                }
+                
+                if (reference.getCallback() != null) {
+                    writeStart(writer, CALLBACK);
+                    writeEnd(writer);
+                }
+                writeEnd(writer);
+            }
+    
+            for (Property property : composite.getProperties()) {
+                writeStart(writer, PROPERTY, new XAttr(NAME, property.getName()));
+                writeEnd(writer);
+            }
+    
+            writeEndDocument(writer);
+            
+        } catch (XMLStreamException e) {
+            throw new ContributionWriteException(e);
+        }
+    }
+    
+    public void resolve(Composite composite, ArtifactResolver resolver) throws ContributionResolveException {
+        
+        // Resolve constraining type
+        ConstrainingType constrainingType = composite.getConstrainingType(); 
+        constrainingType = resolver.resolve(ConstrainingType.class, constrainingType); 
+        composite.setConstrainingType(constrainingType);
+        
+        // Resolve includes in the composite
+        for (int i = 0, n = composite.getIncludes().size(); i < n; i++) {
+            Composite include = composite.getIncludes().get(i);
+            include = resolver.resolve(Composite.class, include);
+            composite.getIncludes().set(i, include);
+        }
+        
+        // Resolve component implementations, services and references 
+        for (Component component: composite.getComponents()) {
+            constrainingType = component.getConstrainingType(); 
+            constrainingType = resolver.resolve(ConstrainingType.class, constrainingType); 
+            component.setConstrainingType(constrainingType);
+
+            Implementation implementation = component.getImplementation();
+            implementation = resolveImplementation(implementation, resolver);
+            component.setImplementation(implementation);
+            
+            resolveContracts(component.getServices(), resolver);
+            resolveContracts(component.getReferences(), resolver);
+        }
+        
+        // Resolve composite services and references
+        resolveContracts(composite.getServices(), resolver);
+        resolveContracts(composite.getReferences(), resolver);
+    }
+
+    public void wire(Composite composite) throws ContributionWireException {
+        
+        // Process the composite configuration
+        CompositeUtil compositeUtil = new CompositeUtil(factory, composite);
+        compositeUtil.configure(null);
+    }
+
+    public QName getArtifactType() {
+        return COMPOSITE_QNAME;
+    }
+    
+    public Class<Composite> getModelType() {
+        return Composite.class;
+    }
+    
+    /**
+     * Read list of refence targets
+     * @param reference
+     * @param reader
+     */
+    protected void readPromotes(CompositeReference reference, XMLStreamReader reader) {
+        String value = reader.getAttributeValue(null, Constants.PROMOTE);
+        ComponentReference promoted = null;
+        if (value != null) {
+            for (StringTokenizer tokens = new StringTokenizer(value); tokens.hasMoreTokens();) {
+                promoted = factory.createComponentReference();
+                promoted.setUnresolved(true);
+                promoted.setName(tokens.nextToken());
+                reference.getPromotedReferences().add(promoted);
+            }
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/CompositeProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/CompositeProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeDocumentProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeDocumentProcessor.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeDocumentProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeDocumentProcessor.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,115 @@
+/*
+ * 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.assembly.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.assembly.AssemblyFactory;
+import org.apache.tuscany.assembly.ConstrainingType;
+import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
+import org.apache.tuscany.policy.PolicyFactory;
+import org.apache.tuscany.policy.impl.DefaultPolicyFactory;
+import org.apache.tuscany.services.spi.contribution.ArtifactResolver;
+import org.apache.tuscany.services.spi.contribution.ContributionReadException;
+import org.apache.tuscany.services.spi.contribution.ContributionResolveException;
+import org.apache.tuscany.services.spi.contribution.ContributionWireException;
+import org.apache.tuscany.services.spi.contribution.ContributionWriteException;
+import org.apache.tuscany.services.spi.contribution.StAXArtifactProcessor;
+import org.apache.tuscany.services.spi.contribution.URLArtifactProcessor;
+
+/**
+ * A contrainingType content handler.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ConstrainingTypeDocumentProcessor extends BaseArtifactProcessor implements URLArtifactProcessor<ConstrainingType> {
+    private XMLInputFactory inputFactory;
+
+    /**
+     * Construct a new constrainingType processor.
+     * @param factory
+     * @param policyFactory
+     * @param staxProcessor
+     */
+    public ConstrainingTypeDocumentProcessor(AssemblyFactory factory, PolicyFactory policyFactory, StAXArtifactProcessor staxProcessor, XMLInputFactory inputFactory) {
+        super(factory, policyFactory, staxProcessor);
+        this.inputFactory = inputFactory;
+    }
+
+    /**
+     * Construct a new constrainingType processor.
+     * @param staxProcessor
+     */
+    public ConstrainingTypeDocumentProcessor(StAXArtifactProcessor staxProcessor) {
+        this(new DefaultAssemblyFactory(), new DefaultPolicyFactory(), staxProcessor, XMLInputFactory.newInstance());
+    }
+
+    public ConstrainingType read(URL url) throws ContributionReadException {
+        InputStream urlStream = null;
+        try {
+            urlStream = url.openStream();
+            XMLStreamReader reader = inputFactory.createXMLStreamReader(urlStream);
+            reader.nextTag();
+            ConstrainingType constrainingType = (ConstrainingType)extensionProcessor.read(reader);
+            return constrainingType;
+            
+        } catch (XMLStreamException e) {
+            throw new ContributionReadException(e);
+        } catch (IOException e) {
+            throw new ContributionReadException(e);
+        } finally {
+            try {
+                if (urlStream != null) {
+                    urlStream.close();
+                    urlStream = null;
+                }
+            } catch (IOException ioe) {
+                //ignore
+            }
+        }
+    }
+    
+    public void write(ConstrainingType model, URL outputSource) throws ContributionWriteException {
+        // Can't write to a URL
+        throw new UnsupportedOperationException();
+    }
+    
+    public void resolve(ConstrainingType constrainingType, ArtifactResolver resolver) throws ContributionResolveException {
+        extensionProcessor.resolve(constrainingType, resolver);
+    }
+    
+    public void wire(ConstrainingType constrainingType) throws ContributionWireException {
+        extensionProcessor.wire(constrainingType);
+    }
+
+    public String getArtifactType() {
+        return ".constrainingType";
+    }
+    
+    public Class<ConstrainingType> getModelType() {
+        return ConstrainingType.class;
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeDocumentProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeDocumentProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeProcessor.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeProcessor.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,220 @@
+/*
+ * 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.assembly.xml;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.assembly.AbstractContract;
+import org.apache.tuscany.assembly.AbstractProperty;
+import org.apache.tuscany.assembly.AbstractReference;
+import org.apache.tuscany.assembly.AbstractService;
+import org.apache.tuscany.assembly.AssemblyFactory;
+import org.apache.tuscany.assembly.ConstrainingType;
+import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
+import org.apache.tuscany.interfacedef.InterfaceContract;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.policy.PolicyFactory;
+import org.apache.tuscany.policy.impl.DefaultPolicyFactory;
+import org.apache.tuscany.services.spi.contribution.ArtifactResolver;
+import org.apache.tuscany.services.spi.contribution.ContributionReadException;
+import org.apache.tuscany.services.spi.contribution.ContributionResolveException;
+import org.apache.tuscany.services.spi.contribution.ContributionWireException;
+import org.apache.tuscany.services.spi.contribution.ContributionWriteException;
+import org.apache.tuscany.services.spi.contribution.StAXArtifactProcessor;
+
+/**
+ * A contrainingType content handler.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ConstrainingTypeProcessor extends BaseArtifactProcessor implements StAXArtifactProcessor<ConstrainingType> {
+
+    /**
+     * Construct a new constrainingType processor.
+     * @param factory
+     * @param policyFactory
+     * @param extensionProcessor
+     */
+    public ConstrainingTypeProcessor(AssemblyFactory factory, PolicyFactory policyFactory, StAXArtifactProcessor extensionProcessor) {
+        super(factory, policyFactory, extensionProcessor);
+    }
+
+    /**
+     * Construct a new constrainingType processor.
+     * @param extensionProcessor
+     */
+    public ConstrainingTypeProcessor(StAXArtifactProcessor extensionProcessor) {
+        this(new DefaultAssemblyFactory(), new DefaultPolicyFactory(), extensionProcessor);
+    }
+
+    public ConstrainingType read(XMLStreamReader reader) throws ContributionReadException {
+        ConstrainingType constrainingType = null;
+        AbstractService abstractService = null;
+        AbstractReference abstractReference = null;
+        AbstractProperty abstractProperty = null;
+        AbstractContract abstractContract = null;
+        QName name = null;
+        
+        try {
+            
+            // Read the constrainingType document
+            while (reader.hasNext()) {
+                int event = reader.getEventType();
+                switch (event) {
+    
+                    case START_ELEMENT:
+                        name = reader.getName();
+                        
+                        // Read a <constrainingType>
+                        if (Constants.CONSTRAINING_TYPE_QNAME.equals(name)) {
+                            constrainingType = factory.createConstrainingType();
+                            constrainingType.setName(new QName(getString(reader, TARGET_NAMESPACE), getString(reader, NAME)));
+                            readIntents(constrainingType, reader);
+    
+                        } else if (Constants.SERVICE_QNAME.equals(name)) {
+                            
+                            // Read a <service>
+                            abstractService = factory.createAbstractService();
+                            abstractContract = abstractService;
+                            abstractService.setName(getString(reader, Constants.NAME));
+                            constrainingType.getServices().add(abstractService);
+                            readIntents(abstractService, reader);
+    
+                        } else if (Constants.REFERENCE_QNAME.equals(name)) {
+                            
+                            // Read a <reference>
+                            abstractReference = factory.createAbstractReference();
+                            abstractContract = abstractReference;
+                            abstractReference.setName(getString(reader, Constants.NAME));
+                            readMultiplicity(abstractReference, reader);
+                            constrainingType.getReferences().add(abstractReference);
+                            readIntents(abstractReference, reader);
+    
+                        } else if (Constants.PROPERTY_QNAME.equals(name)) {
+                            
+                            // Read a <property>
+                            abstractProperty = factory.createAbstractProperty();
+                            readAbstractProperty(abstractProperty, reader);
+                            constrainingType.getProperties().add(abstractProperty);
+                            readIntents(abstractProperty, reader);
+                            
+                        } else if (OPERATION.equals(name)) {
+    
+                            // Read an <operation>
+                            Operation operation = factory.createOperation();
+                            operation.setName(getString(reader, NAME));
+                            operation.setUnresolved(true);
+                            readIntents(abstractContract, operation, reader);
+                            
+                        } else {
+    
+                            // Read an extension element
+                            Object extension = extensionProcessor.read(reader);
+                            if (extension instanceof InterfaceContract) {
+                                
+                                // <service><interface> and <reference><interface>
+                                abstractContract.setInterfaceContract((InterfaceContract)extension);
+                            }
+                        }
+                        break;
+    
+                    case END_ELEMENT:
+                        name = reader.getName();
+    
+                        // Clear current state when reading reaching end element
+                        if (SERVICE_QNAME.equals(name)) {
+                            abstractService = null;
+                            abstractContract = null;
+                        } else if (REFERENCE_QNAME.equals(name)) {
+                            abstractReference = null;
+                            abstractContract = null;
+                        } else if (PROPERTY_QNAME.equals(name)) {
+                            abstractProperty = null;
+                        }
+                        break;
+                }
+                if (reader.hasNext()) {
+                    reader.next();
+                }
+            }
+            return constrainingType;
+            
+        } catch (XMLStreamException e) {
+            throw new ContributionReadException(e);
+        }
+    }
+    
+    public void write(ConstrainingType constrainingType, XMLStreamWriter writer) throws ContributionWriteException {
+        
+        try {
+            writeStartDocument(writer, CONSTRAINING_TYPE,
+               new XAttr(TARGET_NAMESPACE, constrainingType.getName().getNamespaceURI()),
+               new XAttr(NAME, constrainingType.getName().getLocalPart()));
+    
+            for (AbstractService service : constrainingType.getServices()) {
+                writeStart(writer, SERVICE, new XAttr(NAME, service.getName()));
+                extensionProcessor.write(service.getInterfaceContract(), writer);
+                writeEnd(writer);
+            }
+    
+            for (AbstractReference reference : constrainingType.getReferences()) {
+                writeStart(writer, REFERENCE,
+                      new XAttr(NAME, reference.getName()));
+                extensionProcessor.write(reference.getInterfaceContract(), writer);
+                writeEnd(writer);
+            }
+    
+            for (AbstractProperty property : constrainingType.getProperties()) {
+                writeStart(writer, PROPERTY, new XAttr(NAME, property.getName()));
+                writeEnd(writer);
+            }
+    
+            writeEndDocument(writer);
+            
+        } catch (XMLStreamException e) {
+            throw new ContributionWriteException(e);
+        }
+    }
+    
+    public void resolve(ConstrainingType constrainingType, ArtifactResolver resolver) throws ContributionResolveException {
+
+        // Resolve component type services and references
+        resolveAbstractContracts(constrainingType.getServices(), resolver);
+        resolveAbstractContracts(constrainingType.getReferences(), resolver);
+    }
+    
+    public void wire(ConstrainingType model) throws ContributionWireException {
+        // TODO Auto-generated method stub
+    }
+
+    public QName getArtifactType() {
+        return CONSTRAINING_TYPE_QNAME;
+    }
+    
+    public Class<ConstrainingType> getModelType() {
+        return ConstrainingType.class;
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ConstrainingTypeProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/XAttr.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/XAttr.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/XAttr.java (added)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/XAttr.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,122 @@
+/*
+ * 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.assembly.xml;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+
+/**
+ * Represents an XML attribute that needs to be written to a document.
+ *
+ * @version $Rev$ $Date$
+ */
+class XAttr {
+
+    String uri = Constants.SCA10_NS;
+    String name;
+    Object value;
+
+    public XAttr(String uri, String name, String value) {
+        this.uri = uri;
+        this.name = name;
+        this.value = value;
+    }
+
+    public XAttr(String name, String value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public XAttr(String uri, String name, boolean value) {
+        this.uri = uri;
+        this.name = name;
+        this.value = value;
+    }
+
+    public XAttr(String name, boolean value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public XAttr(String uri, String name, QName value) {
+        this.uri = uri;
+        this.name = name;
+        this.value = value;
+    }
+
+    public XAttr(String name, QName value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    /**
+     * Writes a string from a qname and registers a prefix for its namespace.  
+     * @param reader
+     * @param value
+     * @return
+     */
+    protected String writeQNameValue(XMLStreamWriter writer, QName qname) throws XMLStreamException {
+        if (qname != null) {
+            String prefix = qname.getPrefix();
+            String uri = qname.getNamespaceURI();
+            prefix = writer.getPrefix(uri);
+            if (prefix != null) {
+
+                // Use the prefix already bound to the given uri
+                return prefix + ":" + qname.getLocalPart();
+            } else {
+                
+                // Find an available prefix and bind it to the given uri 
+                NamespaceContext nsc = writer.getNamespaceContext();
+                for (int i=1; ; i++) {
+                    prefix = "ns" + i;
+                    if (nsc.getNamespaceURI(prefix) == null) {
+                        break;
+                    }
+                }
+                writer.setPrefix(prefix, uri);
+                writer.writeNamespace(prefix, uri);
+                return prefix + ":" + qname.getLocalPart();
+            }
+        } else {
+            return null;
+        }
+    }
+
+    void write(XMLStreamWriter writer) throws XMLStreamException {
+        if (value != null) {
+            String str;
+            if (value instanceof QName) {
+                str = writeQNameValue(writer, (QName)value);
+            } else {
+                str = String.valueOf(value);
+            }
+            if (uri != null && !uri.equals(Constants.SCA10_NS)) {
+                writer.writeAttribute(uri, name, str);
+            } else {
+                writer.writeAttribute(name,str);
+            }
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/XAttr.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/XAttr.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadAllTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadAllTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadAllTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadAllTestCase.java Tue Apr 10 19:55:00 2007
@@ -35,9 +35,6 @@
 import org.apache.tuscany.assembly.Multiplicity;
 import org.apache.tuscany.assembly.Property;
 import org.apache.tuscany.assembly.util.PrintUtil;
-import org.apache.tuscany.assembly.xml.impl.ComponentTypeProcessor;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
-import org.apache.tuscany.assembly.xml.impl.ConstrainingTypeProcessor;
 import org.apache.tuscany.services.spi.contribution.DefaultArtifactResolver;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;
 import org.w3c.dom.Document;

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadDocumentTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadDocumentTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadDocumentTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadDocumentTestCase.java Tue Apr 10 19:55:00 2007
@@ -25,12 +25,6 @@
 
 import org.apache.tuscany.assembly.Composite;
 import org.apache.tuscany.assembly.ConstrainingType;
-import org.apache.tuscany.assembly.xml.impl.ComponentTypeDocumentProcessor;
-import org.apache.tuscany.assembly.xml.impl.ComponentTypeProcessor;
-import org.apache.tuscany.assembly.xml.impl.CompositeDocumentProcessor;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
-import org.apache.tuscany.assembly.xml.impl.ConstrainingTypeDocumentProcessor;
-import org.apache.tuscany.assembly.xml.impl.ConstrainingTypeProcessor;
 import org.apache.tuscany.services.spi.contribution.DefaultArtifactResolver;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;
 import org.apache.tuscany.services.spi.contribution.DefaultURLArtifactProcessorRegistry;

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadTestCase.java Tue Apr 10 19:55:00 2007
@@ -26,9 +26,6 @@
 
 import junit.framework.TestCase;
 
-import org.apache.tuscany.assembly.xml.impl.ComponentTypeProcessor;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
-import org.apache.tuscany.assembly.xml.impl.ConstrainingTypeProcessor;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;
 
 /**

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ResolveTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ResolveTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ResolveTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ResolveTestCase.java Tue Apr 10 19:55:00 2007
@@ -28,8 +28,6 @@
 
 import org.apache.tuscany.assembly.Composite;
 import org.apache.tuscany.assembly.ConstrainingType;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
-import org.apache.tuscany.assembly.xml.impl.ConstrainingTypeProcessor;
 import org.apache.tuscany.services.spi.contribution.DefaultArtifactResolver;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;
 

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/StAXPerfTest.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/StAXPerfTest.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/StAXPerfTest.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/StAXPerfTest.java Tue Apr 10 19:55:00 2007
@@ -27,7 +27,6 @@
 import org.apache.tuscany.assembly.AssemblyFactory;
 import org.apache.tuscany.assembly.Composite;
 import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
 import org.apache.tuscany.policy.PolicyFactory;
 import org.apache.tuscany.policy.impl.DefaultPolicyFactory;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/WireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/WireTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/WireTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/WireTestCase.java Tue Apr 10 19:55:00 2007
@@ -28,8 +28,6 @@
 
 import org.apache.tuscany.assembly.Composite;
 import org.apache.tuscany.assembly.ConstrainingType;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
-import org.apache.tuscany.assembly.xml.impl.ConstrainingTypeProcessor;
 import org.apache.tuscany.services.spi.contribution.DefaultArtifactResolver;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;
 

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/WriteAllTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/WriteAllTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/WriteAllTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/WriteAllTestCase.java Tue Apr 10 19:55:00 2007
@@ -27,9 +27,6 @@
 import org.apache.tuscany.assembly.ComponentType;
 import org.apache.tuscany.assembly.Composite;
 import org.apache.tuscany.assembly.ConstrainingType;
-import org.apache.tuscany.assembly.xml.impl.ComponentTypeProcessor;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
-import org.apache.tuscany.assembly.xml.impl.ConstrainingTypeProcessor;
 import org.apache.tuscany.services.spi.contribution.DefaultArtifactResolver;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;
 

Modified: incubator/tuscany/java/sca/modules/binding-ws-xml/src/test/java/org/apache/tuscany/binding/ws/xml/ReadTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-xml/src/test/java/org/apache/tuscany/binding/ws/xml/ReadTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-xml/src/test/java/org/apache/tuscany/binding/ws/xml/ReadTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-xml/src/test/java/org/apache/tuscany/binding/ws/xml/ReadTestCase.java Tue Apr 10 19:55:00 2007
@@ -30,8 +30,8 @@
 import org.apache.tuscany.assembly.Composite;
 import org.apache.tuscany.assembly.util.CompositeUtil;
 import org.apache.tuscany.assembly.util.PrintUtil;
-import org.apache.tuscany.assembly.xml.impl.ComponentTypeProcessor;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
+import org.apache.tuscany.assembly.xml.ComponentTypeProcessor;
+import org.apache.tuscany.assembly.xml.CompositeProcessor;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;
 
 /**

Modified: incubator/tuscany/java/sca/modules/binding-ws-xml/src/test/java/org/apache/tuscany/binding/ws/xml/WriteTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-xml/src/test/java/org/apache/tuscany/binding/ws/xml/WriteTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-xml/src/test/java/org/apache/tuscany/binding/ws/xml/WriteTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-xml/src/test/java/org/apache/tuscany/binding/ws/xml/WriteTestCase.java Tue Apr 10 19:55:00 2007
@@ -28,9 +28,9 @@
 
 import org.apache.tuscany.assembly.ComponentType;
 import org.apache.tuscany.assembly.Composite;
-import org.apache.tuscany.assembly.xml.impl.ComponentTypeProcessor;
-import org.apache.tuscany.assembly.xml.impl.CompositeProcessor;
-import org.apache.tuscany.assembly.xml.impl.ConstrainingTypeProcessor;
+import org.apache.tuscany.assembly.xml.ComponentTypeProcessor;
+import org.apache.tuscany.assembly.xml.CompositeProcessor;
+import org.apache.tuscany.assembly.xml.ConstrainingTypeProcessor;
 import org.apache.tuscany.services.spi.contribution.DefaultStAXArtifactProcessorRegistry;
 
 /**

Modified: incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/spi/util/stax/StaxUtilTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/spi/util/stax/StaxUtilTestCase.java?view=diff&rev=527378&r1=527377&r2=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/spi/util/stax/StaxUtilTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/test/java/org/apache/tuscany/spi/util/stax/StaxUtilTestCase.java Tue Apr 10 19:55:00 2007
@@ -40,14 +40,14 @@
 
     public void testSerialize() throws XMLStreamException {
         
-        InputStream in = getClass().getClassLoader().getResourceAsStream("test.scdl");
+        InputStream in = getClass().getResourceAsStream("test.composite");
         XMLStreamReader reader = StaxUtil.createReader(in);
         StaxUtil.serialize(reader);
         // TODO Do assertions
     }
 
     public void testGetDocumentElementQName() throws XMLStreamException {
-        InputStream in = getClass().getClassLoader().getResourceAsStream("test.scdl");
+        InputStream in = getClass().getResourceAsStream("test.composite");
         XMLStreamReader reader = StaxUtil.createReader(in);
         String xml = StaxUtil.serialize(reader);
         QName qname = StaxUtil.getDocumentElementQName(xml);

Added: incubator/tuscany/java/sca/modules/core-spi/src/test/resources/org/apache/tuscany/spi/util/stax/test.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/test/resources/org/apache/tuscany/spi/util/stax/test.composite?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/test/resources/org/apache/tuscany/spi/util/stax/test.composite (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/test/resources/org/apache/tuscany/spi/util/stax/test.composite Tue Apr 10 19:55:00 2007
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+-->
+<!--
+    Test for stax.
+    
+    $Rev$ $Date$
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+           xmlns:system="http://tuscany.apache.org/xmlns/sca/system/2.0-alpha"
+           name="test.scdl">
+
+    <component name="test.component">
+        <system:implementation.system class="test.class"/>
+        <property name="testProperty">123</property>
+    </component>
+
+</composite>

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/test/resources/org/apache/tuscany/spi/util/stax/test.composite
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/test/resources/org/apache/tuscany/spi/util/stax/test.composite
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanAssemblyFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanAssemblyFactory.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanAssemblyFactory.java (added)
+++ incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanAssemblyFactory.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,139 @@
+/*
+ * 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.assembly.bean.impl;
+
+import org.apache.tuscany.assembly.AbstractProperty;
+import org.apache.tuscany.assembly.AbstractReference;
+import org.apache.tuscany.assembly.AbstractService;
+import org.apache.tuscany.assembly.AssemblyFactory;
+import org.apache.tuscany.assembly.Callback;
+import org.apache.tuscany.assembly.Component;
+import org.apache.tuscany.assembly.ComponentProperty;
+import org.apache.tuscany.assembly.ComponentReference;
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.assembly.ComponentType;
+import org.apache.tuscany.assembly.Composite;
+import org.apache.tuscany.assembly.CompositeReference;
+import org.apache.tuscany.assembly.CompositeService;
+import org.apache.tuscany.assembly.ConstrainingType;
+import org.apache.tuscany.assembly.Property;
+import org.apache.tuscany.assembly.Reference;
+import org.apache.tuscany.assembly.SCABinding;
+import org.apache.tuscany.assembly.Service;
+import org.apache.tuscany.assembly.Wire;
+import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
+import org.apache.tuscany.interfacedef.Operation;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+
+/**
+ * An alternate implementation of the SCA assembly model factory that creates SCA
+ * assembly model objects backed by Spring bean definitions.
+ *
+ *  @version $Rev$ $Date$
+ */
+public class BeanAssemblyFactory implements AssemblyFactory {
+	
+	private AssemblyFactory defaultFactory;
+	private BeanDefinitionRegistry beanRegistry;
+	
+	public BeanAssemblyFactory(AssemblyFactory defaultFactory, BeanDefinitionRegistry beanRegistry) {
+		this.defaultFactory = defaultFactory;
+		this.beanRegistry = beanRegistry;
+	}
+
+        public BeanAssemblyFactory(BeanDefinitionRegistry beanRegistry) {
+            this(new DefaultAssemblyFactory(), beanRegistry);
+        }
+
+	public AbstractProperty createAbstractProperty() {
+		return defaultFactory.createAbstractProperty();
+	}
+
+	public AbstractReference createAbstractReference() {
+		return defaultFactory.createAbstractReference();
+	}
+
+	public AbstractService createAbstractService() {
+		return defaultFactory.createAbstractService();
+	}
+
+	public Callback createCallback() {
+		return defaultFactory.createCallback();
+	}
+
+	public Component createComponent() {
+		return new BeanComponentImpl(beanRegistry);
+	}
+
+	public ComponentProperty createComponentProperty() {
+		return defaultFactory.createComponentProperty();
+	}
+
+	public ComponentReference createComponentReference() {
+		return defaultFactory.createComponentReference();
+	}
+
+	public ComponentService createComponentService() {
+		return defaultFactory.createComponentService();
+	}
+
+	public ComponentType createComponentType() {
+		return defaultFactory.createComponentType();
+	}
+
+	public Composite createComposite() {
+		return defaultFactory.createComposite();
+	}
+
+	public CompositeReference createCompositeReference() {
+		return defaultFactory.createCompositeReference();
+	}
+
+	public CompositeService createCompositeService() {
+		return defaultFactory.createCompositeService();
+	}
+
+	public ConstrainingType createConstrainingType() {
+		return defaultFactory.createConstrainingType();
+	}
+
+	public Property createProperty() {
+		return defaultFactory.createProperty();
+	}
+
+	public Reference createReference() {
+		return defaultFactory.createReference();
+	}
+
+	public Service createService() {
+		return defaultFactory.createService();
+	}
+
+	public Wire createWire() {
+		return defaultFactory.createWire();
+	}
+
+	public SCABinding createSCABinding() {
+		return defaultFactory.createSCABinding();
+	}
+	
+	public Operation createOperation() {
+		return defaultFactory.createOperation();
+	}
+}

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanAssemblyFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanAssemblyFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanComponentImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanComponentImpl.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanComponentImpl.java (added)
+++ incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanComponentImpl.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,160 @@
+/*
+ * 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.assembly.bean.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.assembly.Component;
+import org.apache.tuscany.assembly.ComponentProperty;
+import org.apache.tuscany.assembly.ComponentReference;
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.assembly.ConstrainingType;
+import org.apache.tuscany.assembly.Implementation;
+import org.apache.tuscany.policy.Intent;
+import org.apache.tuscany.policy.PolicySet;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.ChildBeanDefinition;
+
+/**
+ * An implementation of the SCA assembly Component interface backed by a Spring
+ * Bean definition.
+ *
+ *  @version $Rev$ $Date$
+ */
+public class BeanComponentImpl extends ChildBeanDefinition implements Component {
+	private static final long serialVersionUID = 1L;
+	
+	private ConstrainingType constrainingType;
+	private Implementation implementation;
+	private String name;
+	private List<ComponentService> services = new ArrayList<ComponentService>();
+	private List<Intent> requiredIntents = new ArrayList<Intent>();
+	private List<PolicySet> policySets = new ArrayList<PolicySet>();
+	private List<Object> extensions = new ArrayList<Object>();
+	private boolean unresolved = false;
+	private BeanDefinitionRegistry beanRegistry;
+	
+	public BeanComponentImpl(BeanDefinitionRegistry beanRegistry) {
+		super((String)"");
+		this.beanRegistry = beanRegistry;
+	}
+	
+	public String getParentName() {
+		//TODO find a better name for bean definitions representing component types
+		return String.valueOf(System.identityHashCode(implementation));
+	}
+
+	public ConstrainingType getConstrainingType() {
+		return constrainingType;
+	}
+
+	public Implementation getImplementation() {
+		return implementation;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	//TODO use a better list implementation
+	private List<ComponentProperty> properties = new ArrayList<ComponentProperty>() {
+		private static final long serialVersionUID = 1L;
+		
+		// Add a property
+		public boolean add(ComponentProperty property) {
+			
+			// Add corresponding bean property value
+			getPropertyValues().addPropertyValue(property.getName(), property.getValue());
+
+			return super.add(property);
+		}
+	};
+	
+	public List<ComponentProperty> getProperties() {
+		return properties;
+	}
+
+	//TODO use a better list implementation
+	private List<ComponentReference> references = new ArrayList<ComponentReference>() {
+		private static final long serialVersionUID = 1L;
+
+		// Add a reference
+		public boolean add(ComponentReference reference) {
+			
+			// Add corresponding bean property value
+			BeanReferenceImpl beanReference = new BeanReferenceImpl(reference);
+			getPropertyValues().addPropertyValue(reference.getName(), beanReference);
+
+			return super.add(reference);
+		}
+	};
+	
+	public List<ComponentReference> getReferences() {
+		return references;
+	}
+
+	public List<ComponentService> getServices() {
+		return services;
+	}
+
+	public void setConstrainingType(ConstrainingType constrainingType) {
+		this.constrainingType = constrainingType;
+	}
+
+	public void setImplementation(Implementation implementation) {
+		this.implementation = implementation;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+		
+		// Register this bean definition in the bean registry
+		this.beanRegistry.registerBeanDefinition(name, this);
+	}
+
+	public List<Intent> getRequiredIntents() {
+		return requiredIntents;
+	}
+
+	public List<PolicySet> getPolicySets() {
+		return policySets;
+	}
+
+	public boolean isAutowire() {
+		return super.getAutowireMode() == AUTOWIRE_BY_TYPE;
+	}
+	
+	public void setAutowire(boolean autowire) {
+		super.setAutowireMode(autowire? AUTOWIRE_BY_TYPE:AUTOWIRE_NO);
+	}
+
+	public List<Object> getExtensions() {
+		return extensions;
+	}
+
+	public boolean isUnresolved() {
+		return unresolved;
+	}
+
+	public void setUnresolved(boolean undefined) {
+		this.unresolved = undefined;
+	}
+
+}

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanComponentImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanComponentImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanReferenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanReferenceImpl.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanReferenceImpl.java (added)
+++ incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanReferenceImpl.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,71 @@
+/*
+ * 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.assembly.bean.impl;
+
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.assembly.Reference;
+import org.apache.tuscany.assembly.SCABinding;
+import org.springframework.beans.factory.config.RuntimeBeanReference;
+
+/**
+ * An implementation of RuntimeBeanReference wrappering an SCA assembly Reference
+ *
+ *  @version $Rev$ $Date$
+ */
+public class BeanReferenceImpl extends RuntimeBeanReference {
+	private Reference reference;
+	
+	public BeanReferenceImpl(Reference reference) {
+		super("temp");
+		this.reference = reference;
+	}
+	
+	public String getBeanName() {
+		//TODO handle multiplicity
+		ComponentService componentService = reference.getTargets().get(0);
+		String uri;
+		if (!componentService.isUnresolved()) {
+			SCABinding binding = componentService.getBinding(SCABinding.class);
+			uri = binding.getURI();
+		} else {
+			uri = componentService.getName();
+		}
+		int i = uri.indexOf('/');
+		if (i != -1) {
+			uri = uri.substring(0, i);
+		}
+		return uri;
+	}
+	
+	public boolean equals(Object other) {
+		if (this != other) {
+			if (other instanceof RuntimeBeanReference) {
+				RuntimeBeanReference br = (RuntimeBeanReference) other;
+				return (getBeanName().equals(br.getBeanName()) && this.isToParent() == br.isToParent());
+			} else
+				return false;
+		} else
+			return true;
+	}
+
+	public int hashCode() {
+		return getBeanName().hashCode() * 29 + (this.isToParent() ? 1 : 0);
+	}
+
+}

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanReferenceImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/assembly/bean/impl/BeanReferenceImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/CompositeApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/CompositeApplicationContext.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/CompositeApplicationContext.java (added)
+++ incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/CompositeApplicationContext.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,122 @@
+/*
+ * 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.core.bean.context;
+
+import java.io.IOException;
+
+import org.apache.tuscany.assembly.Component;
+import org.apache.tuscany.assembly.ComponentReference;
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.assembly.Composite;
+import org.apache.tuscany.assembly.CompositeReference;
+import org.apache.tuscany.assembly.CompositeService;
+import org.apache.tuscany.assembly.Contract;
+import org.apache.tuscany.assembly.Property;
+import org.apache.tuscany.assembly.Reference;
+import org.apache.tuscany.assembly.SCABinding;
+import org.apache.tuscany.assembly.Service;
+import org.apache.tuscany.implementation.java.JavaImplementation;
+import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.MutablePropertyValues;
+import org.springframework.beans.factory.config.RuntimeBeanReference;
+import org.springframework.beans.factory.support.DefaultBeanNameGenerator;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.context.support.AbstractRefreshableApplicationContext;
+
+/**
+ * An implementation of a Spring ApplicationContext that turns an SCA Composite
+ * into an assembly of Spring BeanDefinitions 
+ *
+ *  @version $Rev$ $Date$
+ */
+public class CompositeApplicationContext extends AbstractRefreshableApplicationContext {
+	
+	private Composite composite;
+
+	public CompositeApplicationContext(Composite composite) {
+		this.composite = composite; 
+	}
+	
+	private RuntimeBeanReference getBeanReference(Contract contract) {
+		SCABinding binding = contract.getBinding(SCABinding.class);
+		String uri = binding.getURI();
+		int i = uri.indexOf('/');
+		if (i != -1) {
+			uri = uri.substring(0, i);
+		}
+		return new RuntimeBeanReference(uri);
+	}
+
+	protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws IOException, BeansException {
+		DefaultBeanNameGenerator beanNameGenerator = new DefaultBeanNameGenerator();	
+
+		// Create bean definitions for the composite services
+		for (Service service: composite.getServices()) {
+			CompositeService compositeService = (CompositeService)service;
+			RootBeanDefinition bean = new RootBeanDefinition(DummyCompositeServiceBean.class);
+			MutablePropertyValues propertyValues = bean.getPropertyValues();
+			propertyValues.addPropertyValue("name", compositeService.getName());
+                        if (compositeService.getInterfaceContract() != null) { 
+                            propertyValues.addPropertyValue("interface", ((JavaInterface)compositeService.getInterfaceContract().getInterface()).getName());
+                        }
+			ComponentService promotedService = compositeService.getPromotedService();
+			propertyValues.addPropertyValue("promote", getBeanReference(promotedService));
+			beanFactory.registerBeanDefinition(beanNameGenerator.generateBeanName(bean, beanFactory), bean);        	
+		}
+
+		// Create bean definitions for the composite references
+		for (Reference reference: composite.getReferences()) {
+			CompositeReference compositeReference = (CompositeReference)reference;
+			RootBeanDefinition bean = new RootBeanDefinition(DummyCompositeReferenceBean.class);
+			MutablePropertyValues propertyValues = bean.getPropertyValues();
+			propertyValues.addPropertyValue("name", compositeReference.getName());
+                        if (compositeReference.getInterfaceContract() != null) {
+                            propertyValues.addPropertyValue("interface", ((JavaInterface)compositeReference.getInterfaceContract().getInterface()).getName());
+                        }
+			// TODO handle multiple promoted references
+			Reference promotedReference = compositeReference.getPromotedReferences().get(0);
+			propertyValues.addPropertyValue("promote", getBeanReference(promotedReference));
+			beanFactory.registerBeanDefinition(beanNameGenerator.generateBeanName(bean, beanFactory), bean);        	
+		}
+
+		// Create bean definitions for the components
+		for (Component component: composite.getComponents()) {
+			RootBeanDefinition bean = new RootBeanDefinition();
+			JavaImplementation javaImplementation = (JavaImplementation)component.getImplementation();
+			bean.setBeanClassName(javaImplementation.getName());
+			MutablePropertyValues propertyValues = bean.getPropertyValues();
+			
+			for (ComponentReference componentReference: component.getReferences()) {
+				//TODO handle multiplicity
+				ComponentService targetService = componentReference.getTargets().get(0);
+				propertyValues.addPropertyValue(componentReference.getName(),getBeanReference(targetService));
+			}
+			
+			for (Property property: component.getProperties()) {
+				propertyValues.addPropertyValue(property.getName(), property.getValue());
+			}
+			
+			beanFactory.registerBeanDefinition(component.getName(), bean);       	
+		}			
+			
+	}	
+	
+}

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/CompositeApplicationContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/CompositeApplicationContext.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeReferenceBean.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeReferenceBean.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeReferenceBean.java (added)
+++ incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeReferenceBean.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,56 @@
+/*
+ * 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.core.bean.context;
+
+/**
+ * Dummy bean used as a placeholder for composite references for now.
+ *
+ *  @version $Rev$ $Date$
+ */
+public class DummyCompositeReferenceBean {
+	
+	private String name;
+	private String interfaze;
+	private Object promote;
+
+	public String getInterface() {
+		return interfaze;
+	}
+
+	public void setInterface(String interfaze) {
+		this.interfaze = interfaze;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public Object getPromote() {
+		return promote;
+	}
+	
+	public void setPromote(Object promote) {
+		this.promote = promote;
+	}
+	
+}

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeReferenceBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeReferenceBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeServiceBean.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeServiceBean.java?view=auto&rev=527378
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeServiceBean.java (added)
+++ incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeServiceBean.java Tue Apr 10 19:55:00 2007
@@ -0,0 +1,56 @@
+/*
+ * 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.core.bean.context;
+
+/**
+ * Dummy bean used as a placeholder for composite references for now.
+ *
+ *  @version $Rev$ $Date$
+ */
+public class DummyCompositeServiceBean {
+	
+	private String name;
+	private String interfaze;
+	private Object promote;
+
+	public String getInterface() {
+		return interfaze;
+	}
+
+	public void setInterface(String interfaze) {
+		this.interfaze = interfaze;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public Object getPromote() {
+		return promote;
+	}
+	
+	public void setPromote(Object promote) {
+		this.promote = promote;
+	}
+	
+}

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeServiceBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spring/src/main/java/org/apache/tuscany/core/bean/context/DummyCompositeServiceBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org