You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2009/03/05 00:15:47 UTC

svn commit: r750220 [2/5] - in /tuscany/java/sca/modules: ./ assembly-xml-osoa/ assembly-xml-osoa/META-INF/ assembly-xml-osoa/src/ assembly-xml-osoa/src/main/ assembly-xml-osoa/src/main/java/ assembly-xml-osoa/src/main/java/org/ assembly-xml-osoa/src/m...

Added: tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java?rev=750220&view=auto
==============================================================================
--- tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java (added)
+++ tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java Wed Mar  4 23:15:45 2009
@@ -0,0 +1,381 @@
+/*
+ * 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.assembly.xml;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+import static org.apache.tuscany.sca.assembly.xml.Constants.CALLBACK;
+import static org.apache.tuscany.sca.assembly.xml.Constants.CALLBACK_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.COMPONENT_TYPE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.COMPONENT_TYPE_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.ELEMENT;
+import static org.apache.tuscany.sca.assembly.xml.Constants.IMPLEMENTATION;
+import static org.apache.tuscany.sca.assembly.xml.Constants.MANY;
+import static org.apache.tuscany.sca.assembly.xml.Constants.MUST_SUPPLY;
+import static org.apache.tuscany.sca.assembly.xml.Constants.NAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.OPERATION_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.PROPERTY;
+import static org.apache.tuscany.sca.assembly.xml.Constants.PROPERTY_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.REFERENCE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.REFERENCE_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.SERVICE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.SERVICE_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.TYPE;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Callback;
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.Extensible;
+import org.apache.tuscany.sca.assembly.Property;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.impl.OperationImpl;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.policy.PolicySubject;
+import org.w3c.dom.Document;
+
+/**
+ * A componentType processor.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ComponentTypeProcessor extends BaseAssemblyProcessor implements StAXArtifactProcessor<ComponentType> {
+    
+    /**
+     * Constructs a new componentType processor.
+     * 
+     * @param modelFactories
+     * @param extensionProcessor
+     * @param extensionAttributeProcessor
+     * @param monitor
+     */
+    public ComponentTypeProcessor(FactoryExtensionPoint modelFactories,
+                                  StAXArtifactProcessor extensionProcessor,
+                                  StAXAttributeProcessor extensionAttributeProcessor,
+                                  Monitor monitor) {
+        super(modelFactories, extensionProcessor, monitor);
+    }
+    
+    public ComponentType read(XMLStreamReader reader) throws ContributionReadException {
+        ComponentType componentType = null;
+        Service service = null;
+        Reference reference = null;
+        Contract contract = null;
+        Property property = null;
+        Callback callback = null;
+        QName name = null;
+        
+        try {
+            // Read the componentType document
+            while (reader.hasNext()) {
+                int event = reader.getEventType();
+                switch (event) {
+                    case START_ELEMENT:
+                        name = reader.getName();
+    
+                        if (Constants.COMPONENT_TYPE_QNAME.equals(name)) {
+    
+                            // Read a <componentType>
+                            componentType = assemblyFactory.createComponentType();
+                            componentType.setConstrainingType(readConstrainingType(reader));
+    
+                        } else if (Constants.SERVICE_QNAME.equals(name)) {
+    
+                            // Read a <service>
+                            service = assemblyFactory.createService();
+                            contract = service;
+                            service.setName(getString(reader, Constants.NAME));
+                            componentType.getServices().add(service);
+                            policyProcessor.readPolicies(service, reader);
+    
+                        } else if (Constants.REFERENCE_QNAME.equals(name)) {
+    
+                            // Read a <reference>
+                            reference = assemblyFactory.createReference();
+                            contract = reference;
+                            reference.setName(getString(reader, Constants.NAME));
+                            reference.setWiredByImpl(getBoolean(reader, Constants.WIRED_BY_IMPL));
+                            readMultiplicity(reference, reader);
+                            readTargets(reference, reader);
+                            componentType.getReferences().add(reference);
+                            policyProcessor.readPolicies(reference, reader);
+    
+                        } else if (Constants.PROPERTY_QNAME.equals(name)) {
+    
+                            // Read a <property>
+                            property = assemblyFactory.createProperty();
+                            readAbstractProperty(property, reader);
+                            policyProcessor.readPolicies(property, reader);
+                            
+                            // Read the property value
+                            Document value = readPropertyValue(property.getXSDElement(), property.getXSDType(), reader);
+                            property.setValue(value);
+                            
+                            componentType.getProperties().add(property);
+                            
+                        } else if (Constants.IMPLEMENTATION_QNAME.equals(name)) {
+                            
+                            // Read an <implementation> element
+                            policyProcessor.readPolicies(componentType, reader);
+                            
+                        } else if (Constants.CALLBACK_QNAME.equals(name)) {
+    
+                            // Read a <callback>
+                            callback = assemblyFactory.createCallback();
+                            contract.setCallback(callback);
+                            policyProcessor.readPolicies(callback, reader);
+    
+                        } else if (OPERATION_QNAME.equals(name)) {
+    
+                            // Read an <operation>
+                            Operation operation = new OperationImpl();
+                            operation.setName(getString(reader, NAME));
+                            operation.setUnresolved(true);
+                            if (callback != null) {
+                                policyProcessor.readPolicies(callback, operation, reader);
+                            } else {
+                                policyProcessor.readPolicies(contract, operation, reader);
+                            }
+                        } 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>
+                                    if (callback != null) {
+                                        callback.getBindings().add((Binding)extension);
+                                    } else {
+                                        contract.getBindings().add((Binding)extension);
+                                    }
+                                } else {
+                                    
+                                    // Add the extension element to the current element
+                                    if (callback != null) {
+                                        callback.getExtensions().add(extension);
+                                    } else if (contract != null) {
+                                        contract.getExtensions().add(extension);
+                                    } else if (property != null) {
+                                        property.getExtensions().add(extension);
+                                    } else {
+                                        if (componentType instanceof Extensible) {
+                                            ((Extensible)componentType).getExtensions().add(extension);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        break;
+    
+                    case END_ELEMENT:
+                        name = reader.getName();
+    
+                        // Clear current state when reading reaching end element
+                        if (SERVICE_QNAME.equals(name)) {
+                            service = null;
+                            contract = null;
+                        } else if (REFERENCE_QNAME.equals(name)) {
+                            reference = null;
+                            contract = null;
+                        } else if (PROPERTY_QNAME.equals(name)) {
+                            property = null;
+                        } else if (CALLBACK_QNAME.equals(name)) {
+                            callback = null;
+                        }
+                        break;
+                }
+                
+                // Read the next element
+                if (reader.hasNext()) {
+                    reader.next();
+                }
+            }
+        }
+        catch (XMLStreamException e) {
+            ContributionReadException ex = new ContributionReadException(e);
+            error("XMLStreamException", reader, ex);
+        }
+        
+        return componentType;
+    }
+    
+    public void write(ComponentType componentType, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
+        
+        // Write <componentType> element
+        writeStartDocument(writer, COMPONENT_TYPE,
+               writeConstrainingType(componentType));
+
+        // Write <service> elements
+        for (Service service : componentType.getServices()) {
+            writeStart(writer, SERVICE, new XAttr(NAME, service.getName()),
+                       policyProcessor.writePolicies(service));
+
+            if (service.getInterfaceContract() != null) {
+                extensionProcessor.write(service.getInterfaceContract(), writer);
+            }
+            
+            for (Binding binding: service.getBindings()) {
+                extensionProcessor.write(binding, writer);
+            }
+            
+            if (service.getCallback() != null) {
+                Callback callback = service.getCallback();
+                writeStart(writer, CALLBACK, policyProcessor.writePolicies(callback));
+
+                for (Binding binding: callback.getBindings()) {
+                    extensionProcessor.write(binding, writer);
+                }
+                for (Object extension: callback.getExtensions()) {
+                    extensionProcessor.write(extension, writer);
+                }
+                
+                writeEnd(writer);
+            }
+            
+            for (Object extension: service.getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }
+            
+            writeEnd(writer);
+        }
+
+        // Write <reference> elements
+        for (Reference reference : componentType.getReferences()) {
+            
+            writeStart(writer, REFERENCE,
+                  new XAttr(NAME, reference.getName()),
+                  writeMultiplicity(reference),
+                  writeTargets(reference),
+                  policyProcessor.writePolicies(reference));
+
+            extensionProcessor.write(reference.getInterfaceContract(), writer);
+            
+            for (Binding binding: reference.getBindings()) {
+                extensionProcessor.write(binding, writer);
+            }
+            
+            if (reference.getCallback() != null) {
+                Callback callback = reference.getCallback();
+                writeStart(writer, CALLBACK,
+                           policyProcessor.writePolicies(callback));
+
+                for (Binding binding: callback.getBindings()) {
+                    extensionProcessor.write(binding, writer);
+                }
+                for (Object extension: callback.getExtensions()) {
+                    extensionProcessor.write(extension, writer);
+                }
+                
+                writeEnd(writer);
+            }
+
+            for (Object extension: reference.getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }
+            
+            writeEnd(writer);
+        }
+
+        // Write <property> elements
+        for (Property property : componentType.getProperties()) {
+            writeStart(writer,
+                       PROPERTY,
+                       new XAttr(NAME, property.getName()),
+                       new XAttr(MUST_SUPPLY, property.isMustSupply()),
+                       new XAttr(MANY, property.isMany()),
+                       new XAttr(TYPE, property.getXSDType()),
+                       new XAttr(ELEMENT, property.getXSDElement()),
+                       policyProcessor.writePolicies(property));
+
+            // Write property value
+            writePropertyValue(property.getValue(), property.getXSDElement(), property.getXSDType(), writer);
+
+            // Write extensions
+            for (Object extension : property.getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }
+
+            writeEnd(writer);
+        }
+
+        // Write extension elements
+        if (componentType instanceof Extensible) {
+            for (Object extension: ((Extensible)componentType).getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }
+        }
+        
+        // Write <implementation> elements if the componentType has
+        // any intents or policySets
+        boolean writeImplementation = false;
+        if (componentType instanceof PolicySubject) {
+            if (!((PolicySubject)componentType).getRequiredIntents().isEmpty()) {
+                writeImplementation = true;
+            }
+        }
+        if (componentType instanceof PolicySubject) {
+            if (!((PolicySubject)componentType).getPolicySets().isEmpty()) {
+                writeImplementation = true;
+            }
+        }
+        if (writeImplementation) {
+            writeStart(writer, IMPLEMENTATION,
+                       policyProcessor.writePolicies(componentType));
+        }
+        
+        writeEndDocument(writer);
+    }
+    
+    public void resolve(ComponentType componentType, ModelResolver resolver) throws ContributionResolveException {
+
+        // Resolve component type services and references
+        resolveContracts(componentType.getServices(), resolver);
+        resolveContracts(componentType.getReferences(), resolver);
+    }
+    
+    public QName getArtifactType() {
+        return COMPONENT_TYPE_QNAME;
+    }
+    
+    public Class<ComponentType> getModelType() {
+        return ComponentType.class;
+    }
+}

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

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

Added: tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java?rev=750220&view=auto
==============================================================================
--- tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java (added)
+++ tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java Wed Mar  4 23:15:45 2009
@@ -0,0 +1,202 @@
+/*
+ * 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.assembly.xml;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Collection;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.ValidatingXMLInputFactory;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.policy.PolicySet;
+import org.apache.tuscany.sca.policy.util.PolicyComputationUtils;
+
+/**
+ * A composite processor.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class CompositeDocumentProcessor extends BaseAssemblyProcessor implements URLArtifactProcessor<Composite> {
+    private XMLInputFactory inputFactory;
+    private DocumentBuilderFactory documentBuilderFactory;
+    private List scaDefnSink;
+    private Collection<PolicySet> domainPolicySets = null;
+    private int scaDefnsCount = 0;
+
+    /**
+     * Constructs a new composite processor.
+     * @param modelFactories
+     * @param staxProcessor
+     */
+    public CompositeDocumentProcessor(FactoryExtensionPoint modelFactories,
+                                      StAXArtifactProcessor staxProcessor,
+                                      Monitor monitor) {
+        super(modelFactories, staxProcessor, monitor);
+        this.inputFactory = modelFactories.getFactory(ValidatingXMLInputFactory.class);
+        this.documentBuilderFactory = modelFactories.getFactory(DocumentBuilderFactory.class);
+    }
+    
+    public Composite read(URL contributionURL, URI uri, URL url) throws ContributionReadException {
+        InputStream scdlStream = null;
+        try {
+            URLConnection connection = url.openConnection();
+            connection.setUseCaches(false);
+            scdlStream = connection.getInputStream();
+        } catch (IOException e) {
+            ContributionReadException ce = new ContributionReadException(e);
+            error("ContributionReadException", url, ce);
+            throw ce;
+        }
+        return read(uri, scdlStream);
+    }
+
+    public Composite read(URI uri, InputStream scdlStream) throws ContributionReadException {
+        try {
+/*            
+            if (scaDefnSink != null ) {
+                fillDomainPolicySets(scaDefnSink);
+            }
+*/            
+            
+            Composite composite = null;
+            
+            byte[] transformedArtifactContent;
+            try {
+                if ( domainPolicySets != null ) {
+                    transformedArtifactContent =
+                        PolicyComputationUtils.addApplicablePolicySets(scdlStream, domainPolicySets, documentBuilderFactory);
+                    scdlStream = new ByteArrayInputStream(transformedArtifactContent);
+                } 
+            } catch ( IOException e ) {
+            	ContributionReadException ce = new ContributionReadException(e);
+            	error("ContributionReadException", scdlStream, ce);
+            	throw ce;
+            } catch ( Exception e ) {
+            	ContributionReadException ce = new ContributionReadException(e);
+            	error("ContributionReadException", scdlStream, ce);
+                //throw ce;
+            }
+            
+            XMLStreamReader reader = inputFactory.createXMLStreamReader(scdlStream);
+            
+            reader.nextTag();
+            
+            // Read the composite model
+            composite = (Composite)extensionProcessor.read(reader);
+            if (composite != null) {
+                composite.setURI(uri.toString());
+            }
+
+            // For debugging purposes, write it back to XML
+//            if (composite != null) {
+//                try {
+//                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
+//                    XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
+//                    outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
+//                    extensionProcessor.write(composite, outputFactory.createXMLStreamWriter(bos));
+//                    Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(bos.toByteArray()));
+//                    OutputFormat format = new OutputFormat();
+//                    format.setIndenting(true);
+//                    format.setIndent(2);
+//                    XMLSerializer serializer = new XMLSerializer(System.out, format);
+//                    serializer.serialize(document);
+//                } catch (Exception e) {
+//                    e.printStackTrace();
+//                }
+//            }
+            
+            return composite;
+            
+        } catch (XMLStreamException e) {
+        	ContributionReadException ce = new ContributionReadException(e);
+        	error("ContributionReadException", inputFactory, ce);
+            throw ce;
+        } finally {
+            try {
+                if (scdlStream != null) {
+                    scdlStream.close();
+                    scdlStream = null;
+                }
+            } catch (IOException ioe) {
+                //ignore
+            }
+        }
+    }
+    
+    public void resolve(Composite composite, ModelResolver resolver) throws ContributionResolveException {
+        if (composite != null)
+    	    extensionProcessor.resolve(composite, resolver);
+    }
+
+    public String getArtifactType() {
+        return ".composite";
+    }
+    
+    public Class<Composite> getModelType() {
+        return Composite.class;
+    }
+    
+    /* 
+     * TODO - remove - definitions information is now aggregated in the 
+     *        systems definitions contribution and we need to add 
+     *        applicable policy sets once all composites have been read
+    private void fillDomainPolicySets(List scaDefnsSink) {
+        Map<QName, PolicySet> domainPolicySetMap = null;
+        if ( scaDefnsSink.size() > scaDefnsCount ) {
+        //if ( !scaDefnsSink.isEmpty() ) {
+            domainPolicySetMap = new Hashtable<QName, PolicySet>();
+            
+            if ( domainPolicySets != null ) {
+                for ( PolicySet policySet : domainPolicySets ) {
+                    domainPolicySetMap.put(policySet.getName(), policySet);
+                } 
+            }
+            
+            for ( Object object : scaDefnsSink ) {
+                if ( object instanceof Definitions ) {
+                    for ( PolicySet policySet : ((Definitions)object).getPolicySets() ) {
+                        domainPolicySetMap.put( policySet.getName(), policySet);
+                    }
+                }
+            }
+            domainPolicySets =  domainPolicySetMap.values();
+            //scaDefnsSink.clear();
+            scaDefnsCount = scaDefnsSink.size();
+        }
+    }
+    */
+}

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

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

Added: tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java?rev=750220&view=auto
==============================================================================
--- tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java (added)
+++ tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java Wed Mar  4 23:15:45 2009
@@ -0,0 +1,83 @@
+/*
+ * 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.assembly.xml;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.namespace.NamespaceImport;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+
+/**
+ * A Model Resolver for Composite models.
+ *
+ * @version $Rev$ $Date$
+ */
+public class CompositeModelResolver implements ModelResolver {
+
+    private Contribution contribution;
+    private Map<QName, Composite> map = new HashMap<QName, Composite>();
+    
+    public CompositeModelResolver(Contribution contribution, FactoryExtensionPoint modelFactories) {
+        this.contribution = contribution;
+    }
+
+    public void addModel(Object resolved) {
+        Composite composite = (Composite)resolved;
+        map.put(composite.getName(), composite);
+    }
+    
+    public Object removeModel(Object resolved) {
+        return map.remove(((Composite)resolved).getName());
+    }
+    
+    public <T> T resolveModel(Class<T> modelClass, T unresolved) {
+        
+        // Lookup a definition for the given namespace
+        QName qname = ((Composite)unresolved).getName();
+        Composite resolved = (Composite) map.get(qname);
+        if (resolved != null) {
+            return modelClass.cast(resolved);
+        }
+        
+        // No definition found, delegate the resolution to the imports
+        for (Import import_ : this.contribution.getImports()) {
+            if (import_ instanceof NamespaceImport) {
+                NamespaceImport namespaceImport = (NamespaceImport)import_;
+                if (namespaceImport.getNamespace().equals(qname.getNamespaceURI())) {
+                    
+                    // Delegate the resolution to the import resolver
+                    resolved = namespaceImport.getModelResolver().resolveModel(Composite.class, (Composite)unresolved);
+                    if (!resolved.isUnresolved()) {
+                        return modelClass.cast(resolved);
+                    }
+                }
+            }
+        }
+        return (T)unresolved;
+    }
+    
+}

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

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

Added: tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java?rev=750220&view=auto
==============================================================================
--- tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java (added)
+++ tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java Wed Mar  4 23:15:45 2009
@@ -0,0 +1,1020 @@
+/*
+ * 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.assembly.xml;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+import static org.apache.tuscany.sca.assembly.xml.Constants.AUTOWIRE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.CALLBACK;
+import static org.apache.tuscany.sca.assembly.xml.Constants.CALLBACK_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.COMPONENT;
+import static org.apache.tuscany.sca.assembly.xml.Constants.COMPONENT_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.COMPOSITE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.COMPOSITE_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.ELEMENT;
+import static org.apache.tuscany.sca.assembly.xml.Constants.FILE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.IMPLEMENTATION_COMPOSITE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.IMPLEMENTATION_COMPOSITE_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.INCLUDE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.INCLUDE_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.LOCAL;
+import static org.apache.tuscany.sca.assembly.xml.Constants.MANY;
+import static org.apache.tuscany.sca.assembly.xml.Constants.MUST_SUPPLY;
+import static org.apache.tuscany.sca.assembly.xml.Constants.NAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.PROMOTE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.PROPERTY;
+import static org.apache.tuscany.sca.assembly.xml.Constants.PROPERTY_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.REFERENCE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.REFERENCE_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.SCA11_NS;
+import static org.apache.tuscany.sca.assembly.xml.Constants.SERVICE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.SERVICE_QNAME;
+import static org.apache.tuscany.sca.assembly.xml.Constants.SOURCE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.TARGET;
+import static org.apache.tuscany.sca.assembly.xml.Constants.TARGET_NAMESPACE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.TYPE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.URI;
+import static org.apache.tuscany.sca.assembly.xml.Constants.WIRE;
+import static org.apache.tuscany.sca.assembly.xml.Constants.WIRED_BY_IMPL;
+import static org.apache.tuscany.sca.assembly.xml.Constants.WIRE_QNAME;
+
+import java.util.ArrayList;
+import java.util.List;
+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 javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Callback;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentProperty;
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.CompositeReference;
+import org.apache.tuscany.sca.assembly.CompositeService;
+import org.apache.tuscany.sca.assembly.ConstrainingType;
+import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.Implementation;
+import org.apache.tuscany.sca.assembly.Property;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.assembly.Wire;
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResolverExtension;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.MonitorFactory;
+import org.apache.tuscany.sca.policy.ExtensionType;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+import org.apache.tuscany.sca.policy.PolicySubject;
+import org.w3c.dom.Document;
+
+/**
+ * A composite processor. 
+ * 
+ * @version $Rev$ $Date$
+ */
+public class CompositeProcessor extends BaseAssemblyProcessor implements StAXArtifactProcessor<Composite> {
+    private XPathFactory xPathFactory;
+    private PolicyFactory intentAttachPointTypeFactory;
+    private StAXAttributeProcessor<Object> extensionAttributeProcessor;
+    private ContributionFactory contributionFactory;
+
+    
+    /**
+     * Construct a new composite processor
+     * 
+     * @param extensionPoints
+     * @param extensionProcessor
+     */
+    public CompositeProcessor(ExtensionPointRegistry extensionPoints,
+			StAXArtifactProcessor extensionProcessor,
+			StAXAttributeProcessor extensionAttributeProcessor, 
+			Monitor monitor) {
+        
+    	this(modelFactories(extensionPoints), 
+    		extensionProcessor, 
+    		extensionAttributeProcessor, 
+    		monitor(extensionPoints));
+        
+    	this.extensionAttributeProcessor = extensionAttributeProcessor;
+    }
+    
+    /**
+     * Constructs a new composite processor
+     * 
+     * @param modelFactories
+     * @param extensionProcessor
+     * @param monitor
+     */
+    private CompositeProcessor(FactoryExtensionPoint modelFactories,
+             StAXArtifactProcessor extensionProcessor,
+             StAXAttributeProcessor extensionAttributeProcessor,
+             Monitor monitor) {
+        
+    	super(modelFactories, extensionProcessor, monitor);
+        this.intentAttachPointTypeFactory = modelFactories.getFactory(PolicyFactory.class);
+        this.xPathFactory = modelFactories.getFactory(XPathFactory.class);
+        this.contributionFactory = modelFactories.getFactory(ContributionFactory.class);
+        this.extensionAttributeProcessor = extensionAttributeProcessor;
+        
+    }
+    
+    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 = assemblyFactory.createComposite();
+                            
+                            composite.setName(new QName(getString(reader, TARGET_NAMESPACE), getString(reader, NAME)));
+    
+                            if(!isSet(reader, TARGET_NAMESPACE)){
+                                // spec says that a composite must have a namespace
+                                warning("NoCompositeNamespace", composite, composite.getName().toString());   
+                            }
+                            
+                            if(isSet(reader, AUTOWIRE)) {
+                                composite.setAutowire(getBoolean(reader, AUTOWIRE));
+                            }
+                            
+                            //handle extension attributes
+                            this.readExtendedAttributes(reader, name, composite, extensionAttributeProcessor);
+    
+                            composite.setLocal(getBoolean(reader, LOCAL));
+                            composite.setConstrainingType(readConstrainingType(reader));
+                            policyProcessor.readPolicies(composite, reader);
+    
+                        } else if (INCLUDE_QNAME.equals(name)) {
+    
+                            // Read an <include>
+                            include = assemblyFactory.createComposite();
+                            include.setName(getQName(reader, NAME));
+                            include.setURI(getString(reader, URI));
+                            include.setUnresolved(true);
+                            composite.getIncludes().add(include);
+    
+                        } else if (SERVICE_QNAME.equals(name)) {
+                            if (component != null) {
+    
+                                // Read a <component><service>
+                                componentService = assemblyFactory.createComponentService();
+                                contract = componentService;
+                                componentService.setName(getString(reader, NAME));
+                                
+                                //handle extension attributes
+                                this.readExtendedAttributes(reader, name, componentService, extensionAttributeProcessor);
+    
+                                component.getServices().add(componentService);
+                                policyProcessor.readPolicies(contract, reader);
+                            } else {
+    
+                                // Read a <composite><service>
+                                compositeService = assemblyFactory.createCompositeService();
+                                contract = compositeService;
+                                compositeService.setName(getString(reader, NAME));
+    
+                                String promoted = getString(reader, PROMOTE);
+                                if (promoted != null) {
+                                    String promotedComponentName;
+                                    String promotedServiceName;
+                                    int s = promoted.indexOf('/');
+                                    if (s == -1) {
+                                        promotedComponentName = promoted;
+                                        promotedServiceName = null;
+                                    } else {
+                                        promotedComponentName = promoted.substring(0, s);
+                                        promotedServiceName = promoted.substring(s + 1);
+                                    }
+        
+                                    Component promotedComponent = assemblyFactory.createComponent();
+                                    promotedComponent.setUnresolved(true);
+                                    promotedComponent.setName(promotedComponentName);
+                                    compositeService.setPromotedComponent(promotedComponent);
+        
+                                    ComponentService promotedService = assemblyFactory.createComponentService();
+                                    promotedService.setUnresolved(true);
+                                    promotedService.setName(promotedServiceName);
+                                    compositeService.setPromotedService(promotedService);
+                                }
+    
+                                //handle extension attributes
+                                this.readExtendedAttributes(reader, name, compositeService, extensionAttributeProcessor);
+    
+                                composite.getServices().add(compositeService);
+                                policyProcessor.readPolicies(contract, reader);
+                            }
+    
+                        } else if (REFERENCE_QNAME.equals(name)) {
+                            if (component != null) {
+                                // Read a <component><reference>
+                                componentReference = assemblyFactory.createComponentReference();
+                                contract = componentReference;
+                                componentReference.setName(getString(reader, NAME));
+                                readMultiplicity(componentReference, reader);
+                                if (isSet(reader, AUTOWIRE)) {
+                                    componentReference.setAutowire(getBoolean(reader, AUTOWIRE));
+                                }
+                                readTargets(componentReference, reader);
+                                componentReference.setWiredByImpl(getBoolean(reader, WIRED_BY_IMPL));
+                                
+                                //handle extension attributes
+                                this.readExtendedAttributes(reader, name, componentReference, extensionAttributeProcessor);
+    
+                                component.getReferences().add(componentReference);
+                                policyProcessor.readPolicies(contract, reader);
+                            } else {
+                                // Read a <composite><reference>
+                                compositeReference = assemblyFactory.createCompositeReference();
+                                contract = compositeReference;
+                                compositeReference.setName(getString(reader, NAME));
+                                readMultiplicity(compositeReference, reader);
+                                readTargets(compositeReference, reader);
+                                String promote = reader.getAttributeValue(null, Constants.PROMOTE);
+                                if (promote != null) {
+                                    for (StringTokenizer tokens = new StringTokenizer(promote); tokens.hasMoreTokens();) {
+                                        ComponentReference promotedReference =
+                                            assemblyFactory.createComponentReference();
+                                        promotedReference.setUnresolved(true);
+                                        promotedReference.setName(tokens.nextToken());
+                                        compositeReference.getPromotedReferences().add(promotedReference);
+                                    }
+                                }
+                                compositeReference.setWiredByImpl(getBoolean(reader, WIRED_BY_IMPL));
+                                
+                                //handle extension attributes
+                                this.readExtendedAttributes(reader, name, compositeReference, extensionAttributeProcessor);
+    
+                                composite.getReferences().add(compositeReference);                            
+                                policyProcessor.readPolicies(contract, reader);
+                            }
+    
+                        } else if (PROPERTY_QNAME.equals(name)) {
+                            if (component != null) {
+    
+                                // Read a <component><property>
+                                componentProperty = assemblyFactory.createComponentProperty();
+                                property = componentProperty;
+                                String source = getString(reader, SOURCE);
+                                if(source!=null) {
+                                    source = source.trim();
+                                }
+                                componentProperty.setSource(source);
+                                if (source != null) {
+                                    // $<name>/...
+                                    if (source.charAt(0) == '$') {
+                                        int index = source.indexOf('/');
+                                        if (index == -1) {
+                                            // Tolerating $prop
+                                            source = source + "/";
+                                            index = source.length() - 1;
+                                        }
+                                        source = source.substring(index + 1);
+                                        if ("".equals(source)) {
+                                            source = ".";
+                                        }
+                                    }
+                                    XPath xpath = xPathFactory.newXPath();
+                                    xpath.setNamespaceContext(reader.getNamespaceContext());
+                                    try {
+                                        componentProperty.setSourceXPathExpression(xpath.compile(source));
+                                    } catch (XPathExpressionException e) {
+                                    	ContributionReadException ce = new ContributionReadException(e);
+                                    	error("ContributionReadException", xpath, ce);
+                                        //throw ce;
+                                    }
+                                }
+                                componentProperty.setFile(getString(reader, FILE));
+                                
+                                //handle extension attributes
+                                this.readExtendedAttributes(reader, name, componentProperty, extensionAttributeProcessor);
+    
+                                policyProcessor.readPolicies(property, reader);
+                                readAbstractProperty(componentProperty, reader);
+                                
+                                // Read the property value
+                                Document value = readPropertyValue(property.getXSDElement(), property.getXSDType(), reader);
+                                property.setValue(value);
+                                
+                                component.getProperties().add(componentProperty);
+                            } else {
+    
+                                // Read a <composite><property>
+                                property = assemblyFactory.createProperty();
+                                policyProcessor.readPolicies(property, reader);
+                                readAbstractProperty(property, reader);
+                                
+                                // Read the property value
+                                Document value = readPropertyValue(property.getXSDElement(), property.getXSDType(), reader);
+                                property.setValue(value);
+                                
+                                composite.getProperties().add(property);
+                            }
+                            
+                            // TUSCANY-1949
+                            // If the property doesn't have a value, the END_ELEMENT event is read by the readPropertyValue
+                            if (reader.getEventType() == END_ELEMENT && PROPERTY_QNAME.equals(reader.getName())) {
+                                property = null;
+                                componentProperty = null;
+                            }
+    
+                        } else if (COMPONENT_QNAME.equals(name)) {
+    
+                            // Read a <component>
+                            component = assemblyFactory.createComponent();
+                            component.setName(getString(reader, NAME));
+                            if (isSet(reader, AUTOWIRE)) {
+                                component.setAutowire(getBoolean(reader, AUTOWIRE));
+                            }
+                            if (isSet(reader, URI)) {
+                                component.setURI(getString(reader, URI));
+                            }
+                            
+                            //handle extension attributes
+                           this.readExtendedAttributes(reader, name, component, extensionAttributeProcessor);
+                            
+                            component.setConstrainingType(readConstrainingType(reader));
+                            composite.getComponents().add(component);
+                            policyProcessor.readPolicies(component, reader);
+    
+                        } else if (WIRE_QNAME.equals(name)) {
+    
+                            // Read a <wire>
+                            wire = assemblyFactory.createWire();
+                            ComponentReference source = assemblyFactory.createComponentReference();
+                            source.setUnresolved(true);
+                            source.setName(getString(reader, SOURCE));
+                            wire.setSource(source);
+    
+                            ComponentService target = assemblyFactory.createComponentService();
+                            target.setUnresolved(true);
+                            target.setName(getString(reader, TARGET));
+                            wire.setTarget(target);
+    
+                            //handle extension attributes
+                            this.readExtendedAttributes(reader, name, wire, extensionAttributeProcessor);
+    
+                            composite.getWires().add(wire);
+                            policyProcessor.readPolicies(wire, reader);
+    
+                        } else if (CALLBACK_QNAME.equals(name)) {
+    
+                            // Read a <callback>
+                            callback = assemblyFactory.createCallback();
+                            contract.setCallback(callback);
+                            
+                            //handle extension attributes
+                            this.readExtendedAttributes(reader, name, callback, extensionAttributeProcessor);
+                            
+                            policyProcessor.readPolicies(callback, reader);
+    
+                        } else if (IMPLEMENTATION_COMPOSITE_QNAME.equals(name)) {
+    
+                            // Read an implementation.composite
+                            Composite implementation = assemblyFactory.createComposite();
+                            implementation.setName(getQName(reader, NAME));
+                            implementation.setUnresolved(true);
+                            
+                            //handle extension attributes
+                            this.readExtendedAttributes(reader, name, implementation, extensionAttributeProcessor);
+    
+                            component.setImplementation(implementation);
+                            policyProcessor.readPolicies(implementation, reader);
+                        } else {
+    
+                            // Read an extension element
+                            Object extension = extensionProcessor.read(reader);
+                            if (extension != null) {
+                                if (extension instanceof InterfaceContract) {
+    
+                                    // <service><interface> and
+                                    // <reference><interface>
+                                    if (contract != null) {
+                                        contract.setInterfaceContract((InterfaceContract)extension);
+                                    } else {
+                                        if (name.getNamespaceURI().equals(SCA11_NS)) {
+                                        	error("UnexpectedInterfaceElement", extension);
+                                            //throw new ContributionReadException("Unexpected <interface> element found. It should appear inside a <service> or <reference> element");
+                                        } else {
+                                            composite.getExtensions().add(extension);
+                                        }
+                                    }
+                                } else if (extension instanceof Binding) {
+                                    if ( extension instanceof PolicySubject ) {
+                                        ExtensionType bindingType = intentAttachPointTypeFactory.createBindingType();
+                                        bindingType.setType(name);
+                                        bindingType.setUnresolved(true);
+                                        ((PolicySubject)extension).setType(bindingType);
+                                    }
+                                    // <service><binding> and
+                                    // <reference><binding>
+                                    if (callback != null) {
+                                        callback.getBindings().add((Binding)extension);
+                                    } else {
+                                        if (contract != null) {
+                                            contract.getBindings().add((Binding)extension);
+                                        } else {
+                                            if (name.getNamespaceURI().equals(SCA11_NS)) {
+                                            	error("UnexpectedBindingElement", extension);
+                                                //throw new ContributionReadException("Unexpected <binding> element found. It should appear inside a <service> or <reference> element");
+                                            } else {
+                                                composite.getExtensions().add(extension);
+                                            }
+                                        }
+                                    }
+    
+                                } else if (extension instanceof Implementation) {
+                                    if ( extension instanceof PolicySubject ) {
+                                        ExtensionType implType = intentAttachPointTypeFactory.createImplementationType();
+                                        implType.setType(name);
+                                        implType.setUnresolved(true);
+                                        ((PolicySubject)extension).setType(implType);
+                                    }
+                                    // <component><implementation>
+                                    if (component != null) {
+                                        component.setImplementation((Implementation)extension);
+                                    } else {
+                                        if (name.getNamespaceURI().equals(SCA11_NS)) {
+                                        	error("UnexpectedImplementationElement", extension);
+                                            //throw new ContributionReadException("Unexpected <implementation> element found. It should appear inside a <component> element");
+                                        } else {
+                                            composite.getExtensions().add(extension);
+                                        }
+                                    }
+                                } else {
+    
+                                    // Add the extension element to the current
+                                    // element
+                                    if (callback != null) {
+                                        callback.getExtensions().add(extension);
+                                    } else if (contract != null) {
+                                        contract.getExtensions().add(extension);
+                                    } else if (property != null) {
+                                        property.getExtensions().add(extension);
+                                    } else if (component != null) {
+                                        component.getExtensions().add(extension);
+                                    } else {
+                                        composite.getExtensions().add(extension);
+                                    }
+                                }
+                            }
+                        }
+                        break;
+    
+                    case XMLStreamConstants.CHARACTERS:
+                        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();
+                }
+            }
+        }
+        catch (XMLStreamException e) {
+            ContributionReadException ex = new ContributionReadException(e);
+            error("XMLStreamException", reader, ex);
+        }
+        
+        return composite;
+    }
+
+    public void write(Composite composite, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
+
+        // Write <composite> element
+        writeStartDocument(writer,
+                           COMPOSITE,
+                           writeConstrainingType(composite),
+                           new XAttr(TARGET_NAMESPACE, composite.getName().getNamespaceURI()),
+                           new XAttr(NAME, composite.getName().getLocalPart()),
+                           new XAttr(LOCAL, composite.isLocal() ? Boolean.TRUE : null),
+                           new XAttr(AUTOWIRE, composite.getAutowire()),
+                           policyProcessor.writePolicies(composite));
+        
+        //write extended attributes
+        this.writeExtendedAttributes(writer, composite, extensionAttributeProcessor);
+
+        // Write <include> elements
+        for (Composite include : composite.getIncludes()) {
+            String uri = include.isUnresolved()? include.getURI() : null;
+            writeStart(writer,
+                       INCLUDE,
+                       new XAttr(NAME, include.getName()),
+                       new XAttr(URI, uri));
+
+            //write extended attributes
+            this.writeExtendedAttributes(writer, include, extensionAttributeProcessor);
+            
+            writeEnd(writer);
+        }
+
+        // Write <service> elements
+        for (Service service : composite.getServices()) {
+            CompositeService compositeService = (CompositeService)service;
+            Component promotedComponent = compositeService.getPromotedComponent();
+            ComponentService promotedService = compositeService.getPromotedService();
+            String promote;
+            if (promotedService != null) {
+                if (promotedService.getName() != null) {
+                    promote = promotedComponent.getName() + '/' + promotedService.getName();
+                } else {
+                    promote = promotedComponent.getName();
+                }
+            } else {
+                promote = null;
+            }
+            writeStart(writer, SERVICE, new XAttr(NAME, service.getName()), new XAttr(PROMOTE, promote),
+                       policyProcessor.writePolicies(service));
+            
+            //write extended attributes
+            this.writeExtendedAttributes(writer, service, extensionAttributeProcessor);
+
+            
+            // Write service interface
+            extensionProcessor.write(service.getInterfaceContract(), writer);
+
+            // Write bindings
+            for (Binding binding : service.getBindings()) {
+                extensionProcessor.write(binding, writer);
+            }
+
+            // Write <callback> element
+            if (service.getCallback() != null) {
+                Callback callback = service.getCallback();
+                writeStart(writer, CALLBACK,
+                           policyProcessor.writePolicies(callback));
+            
+                //write extended attributes
+                this.writeExtendedAttributes(writer, callback, extensionAttributeProcessor);
+
+                // Write callback bindings
+                for (Binding binding : callback.getBindings()) {
+                    extensionProcessor.write(binding, writer);
+                }
+                
+                // Write extensions 
+                for (Object extension : callback.getExtensions()) {
+                    extensionProcessor.write(extension, writer);
+                }
+            
+                writeEnd(writer);
+            }
+
+            // Write extensions
+            for (Object extension : service.getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }
+            
+            writeEnd(writer);
+        }
+
+        // Write <component> elements
+        for (Component component : composite.getComponents()) {
+            writeStart(writer, COMPONENT, new XAttr(NAME, component.getName()),
+                       new XAttr(URI, component.getURI()),
+                       new XAttr(AUTOWIRE, component.getAutowire()),
+                       policyProcessor.writePolicies(component));
+            
+            //write extended attributes
+            this.writeExtendedAttributes(writer, component, extensionAttributeProcessor);
+            
+            // Write the component implementation
+            Implementation implementation = component.getImplementation();
+            if (implementation instanceof Composite) {
+                writeStart(writer, IMPLEMENTATION_COMPOSITE, new XAttr(NAME, ((Composite)implementation).getName()));
+                
+                //write extended attributes
+                this.writeExtendedAttributes(writer, (Composite)implementation, extensionAttributeProcessor);
+
+                writeEnd(writer);
+            } else {
+                extensionProcessor.write(component.getImplementation(), writer);
+            }
+            
+            for (Object extension : component.getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }            
+            
+            // Write <service> elements
+            for (ComponentService service : component.getServices()) {
+                writeStart(writer, SERVICE, new XAttr(NAME, service.getName()),
+                           policyProcessor.writePolicies(service));
+
+                //write extended attributes
+                this.writeExtendedAttributes(writer, service, extensionAttributeProcessor);
+
+                // Write service interface
+                extensionProcessor.write(service.getInterfaceContract(), writer);
+                
+                // Write bindings
+                for (Binding binding : service.getBindings()) {
+                    extensionProcessor.write(binding, writer);
+                }
+                
+                // Write <callback> element
+                if (service.getCallback() != null) {
+                    Callback callback = service.getCallback();
+                    writeStart(writer, CALLBACK, policyProcessor.writePolicies(callback));
+
+                    //write extended attributes
+                    this.writeExtendedAttributes(writer, callback, extensionAttributeProcessor);
+
+                    // Write bindings
+                    for (Binding binding : callback.getBindings()) {
+                        extensionProcessor.write(binding, writer);
+                    }
+                    
+                    // Write extensions 
+                    for (Object extension : callback.getExtensions()) {
+                        extensionProcessor.write(extension, writer);
+                    }
+                
+                    writeEnd(writer);
+                }
+                
+                // Write extensions
+                for (Object extension : service.getExtensions()) {
+                    extensionProcessor.write(extension, writer);
+                }
+                
+                writeEnd(writer);
+            }
+            
+            // Write <reference> elements
+            for (ComponentReference reference : component.getReferences()) {
+                writeStart(writer, REFERENCE, new XAttr(NAME, reference.getName()),
+                           new XAttr(AUTOWIRE, reference.getAutowire()),
+                           writeMultiplicity(reference),
+                           writeTargets(reference),
+                           policyProcessor.writePolicies(reference));
+
+                //write extended attributes
+                this.writeExtendedAttributes(writer, reference, extensionAttributeProcessor);
+
+                // Write reference interface
+                extensionProcessor.write(reference.getInterfaceContract(), writer);
+
+                // Write bindings
+                for (Binding binding : reference.getBindings()) {
+                    extensionProcessor.write(binding, writer);
+                }
+                
+                // Write callback
+                if (reference.getCallback() != null) {
+                    Callback callback = reference.getCallback();
+                    writeStart(writer, CALLBACK, policyProcessor.writePolicies(callback));
+                
+                    //write extended attributes
+                    this.writeExtendedAttributes(writer, callback, extensionAttributeProcessor);
+
+                    // Write callback bindings
+                    for (Binding binding : callback.getBindings()) {
+                        extensionProcessor.write(binding, writer);
+                    }
+                    
+                    // Write extensions
+                    for (Object extensions : callback.getExtensions()) {
+                        extensionProcessor.write(extensions, writer);
+                    }
+                
+                    writeEnd(writer);
+                }
+                
+                // Write extensions
+                for (Object extensions : reference.getExtensions()) {
+                    extensionProcessor.write(extensions, writer);
+                }
+                
+                writeEnd(writer);
+            }
+            
+            // Write <property> elements
+            for (ComponentProperty property : component.getProperties()) {
+                writeStart(writer,
+                           PROPERTY,
+                           new XAttr(NAME, property.getName()),
+                           new XAttr(MUST_SUPPLY, property.isMustSupply()),
+                           new XAttr(MANY, property.isMany()),
+                           new XAttr(TYPE, property.getXSDType()),
+                           new XAttr(ELEMENT, property.getXSDElement()),
+                           new XAttr(SOURCE, property.getSource()),
+                           new XAttr(FILE, property.getFile()),
+                           policyProcessor.writePolicies(property));
+
+                //write extended attributes
+                this.writeExtendedAttributes(writer, property, extensionAttributeProcessor);
+
+                // Write property value
+                writePropertyValue(property.getValue(), property.getXSDElement(), property.getXSDType(), writer);
+
+                // Write extensions
+                for (Object extension : property.getExtensions()) {
+                    extensionProcessor.write(extension, writer);
+                }
+
+                writeEnd(writer);
+            }
+ 
+            writeEnd(writer);
+        }
+
+        // Write <reference> elements
+        for (Reference reference : composite.getReferences()) {
+            CompositeReference compositeReference = (CompositeReference)reference;
+
+            // Write list of promoted references
+            List<String> promote = new ArrayList<String>();
+            for (ComponentReference promoted: compositeReference.getPromotedReferences()) {
+                promote.add(promoted.getName());
+            }
+            
+            // Write <reference> element
+            writeStart(writer, REFERENCE, new XAttr(NAME, reference.getName()),
+                       new XAttr(PROMOTE, promote),
+                       writeMultiplicity(reference),
+                       policyProcessor.writePolicies(reference));
+
+            //write extended attributes
+            this.writeExtendedAttributes(writer, reference, extensionAttributeProcessor);
+
+            // Write reference interface
+            extensionProcessor.write(reference.getInterfaceContract(), writer);
+            
+            // Write bindings
+            for (Binding binding : reference.getBindings()) {
+                extensionProcessor.write(binding, writer);
+            }
+            
+            // Write <callback> element
+            if (reference.getCallback() != null) {
+                Callback callback = reference.getCallback();
+                writeStart(writer, CALLBACK);
+            
+                //write extended attributes
+                this.writeExtendedAttributes(writer, callback, extensionAttributeProcessor);
+
+                // Write callback bindings
+                for (Binding binding : callback.getBindings()) {
+                    extensionProcessor.write(binding, writer);
+                }
+                
+                // Write extensions
+                for (Object extension : callback.getExtensions()) {
+                    extensionProcessor.write(extension, writer);
+                }
+            
+                writeEnd(writer);
+            }
+            
+            // Write extensions
+            for (Object extension : reference.getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }
+            
+            writeEnd(writer);
+        }
+
+        // Write <property> elements
+        for (Property property : composite.getProperties()) {
+            writeStart(writer,
+                       PROPERTY,
+                       new XAttr(NAME, property.getName()),
+                       new XAttr(MUST_SUPPLY, property.isMustSupply()),
+                       new XAttr(MANY, property.isMany()),
+                       new XAttr(TYPE, property.getXSDType()),
+                       new XAttr(ELEMENT, property.getXSDElement()),
+                       policyProcessor.writePolicies(property));
+
+            //write extended attributes
+            this.writeExtendedAttributes(writer, property, extensionAttributeProcessor);
+
+            // Write property value
+            writePropertyValue(property.getValue(), property.getXSDElement(), property.getXSDType(), writer);
+
+            // Write extensions
+            for (Object extension : property.getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }
+
+            writeEnd(writer);
+        }
+
+        // Write <wire> elements
+        for (Wire wire : composite.getWires()) {
+            writeStart(writer, WIRE, new XAttr(SOURCE, wire.getSource().getName()), new XAttr(TARGET, wire
+                .getTarget().getName()));
+            
+            //write extended attributes
+            this.writeExtendedAttributes(writer, wire, extensionAttributeProcessor);
+
+            // Write extensions
+            for (Object extension : wire.getExtensions()) {
+                extensionProcessor.write(extension, writer);
+            }
+            writeEnd(writer);
+        }
+
+        for (Object extension : composite.getExtensions()) {
+        		extensionProcessor.write(extension, writer);
+        }
+        
+        writeEndDocument(writer);
+    }
+
+    public void resolve(Composite composite, ModelResolver resolver) throws ContributionResolveException {
+
+        // Resolve constraining type
+        ConstrainingType constrainingType = composite.getConstrainingType();
+        if (constrainingType != null) {
+            constrainingType = resolver.resolveModel(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);
+            if (include != null) {
+                include = resolver.resolveModel(Composite.class, include);
+                composite.getIncludes().set(i, include);
+            }
+        }
+
+        // Resolve extensions
+        for (Object extension : composite.getExtensions()) {
+            if (extension != null) {
+                extensionProcessor.resolve(extension, resolver);
+            }
+        }
+
+        //Resolve composite services and references
+        resolveContracts(composite, composite.getServices(), resolver);
+        resolveContracts(composite, composite.getReferences(), resolver);
+
+        // Resolve component implementations, services and references
+        for (Component component : composite.getComponents()) {
+            constrainingType = component.getConstrainingType();
+            if (constrainingType != null) {
+                constrainingType = resolver.resolveModel(ConstrainingType.class, constrainingType);
+                component.setConstrainingType(constrainingType);
+            }
+            
+            //resolve component services and references 
+            resolveContracts(component, component.getServices(), resolver);
+            resolveContracts(component, component.getReferences(), resolver);
+            
+            for (ComponentProperty componentProperty : component.getProperties()) {
+                if (componentProperty.getFile() != null) {
+                    Artifact artifact = contributionFactory.createArtifact();
+                    artifact.setURI(componentProperty.getFile());
+                    artifact = resolver.resolveModel(Artifact.class, artifact);
+                    if (artifact.getLocation() != null) {
+                        componentProperty.setFile(artifact.getLocation());
+                    }
+                }
+            }
+            
+            //resolve component implementation
+            Implementation implementation = component.getImplementation();
+            if (implementation != null) {
+                //now resolve the implementation so that even if there is a shared instance
+                //for this that is resolved, the specified intents and policysets are safe in the
+                //component and not lost
+                implementation = resolveImplementation(implementation, resolver);
+
+                component.setImplementation(implementation);
+            }
+
+            //add model resolver to component
+            if (component instanceof ResolverExtension) {
+                ((ResolverExtension)component).setModelResolver(resolver);
+            }
+        }
+
+        // Add model resolver to promoted components
+        for (Service service : composite.getServices()) {
+            CompositeService compositeService = (CompositeService)service;
+            Component promotedComponent = compositeService.getPromotedComponent();
+            if (promotedComponent instanceof ResolverExtension) {
+                ((ResolverExtension)promotedComponent).setModelResolver(resolver);
+            }
+        }
+    }
+    
+    public QName getArtifactType() {
+        return COMPOSITE_QNAME;
+    }
+
+    public Class<Composite> getModelType() {
+        return Composite.class;
+    }
+
+    /**
+     * Returns the model factory extension point to use.
+     * 
+     * @param extensionPoints
+     * @return
+     */
+    private static FactoryExtensionPoint modelFactories(ExtensionPointRegistry extensionPoints) {
+        return extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
+    }
+    
+    /**
+     * Returns the monitor to use.
+     * 
+     * @param extensionPoints
+     * @return
+     */
+    private static Monitor monitor(ExtensionPointRegistry extensionPoints) {
+        UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class);
+        if (utilities != null) {
+            MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+            if (monitorFactory != null) {
+                return monitorFactory.createMonitor();
+            }
+        }
+        return null;
+    }
+    
+}

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

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

Added: tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/Constants.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/Constants.java?rev=750220&view=auto
==============================================================================
--- tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/Constants.java (added)
+++ tuscany/java/sca/modules/assembly-xml-osoa/src/main/java/org/apache/tuscany/sca/assembly/xml/Constants.java Wed Mar  4 23:15:45 2009
@@ -0,0 +1,97 @@
+/*
+ * 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.assembly.xml;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Constants used in SCA assembly XML files.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface Constants {
+    String SCA10_NS = "http://www.osoa.org/xmlns/sca/1.0";
+    String SCA10_TUSCANY_NS = "http://tuscany.apache.org/xmlns/sca/1.0";
+    
+    String COMPONENT_TYPE = "componentType";
+    QName COMPONENT_TYPE_QNAME = new QName(SCA11_NS, COMPONENT_TYPE);
+    
+    String SERVICE = "service";
+    QName SERVICE_QNAME = new QName(SCA11_NS, SERVICE);
+    
+    String REFERENCE = "reference";
+    QName REFERENCE_QNAME = new QName(SCA11_NS, REFERENCE);
+    
+    String PROPERTY = "property";
+    QName PROPERTY_QNAME = new QName(SCA11_NS, PROPERTY);
+    
+    String CONSTRAINING_TYPE = "constrainingType";
+    QName CONSTRAINING_TYPE_QNAME = new QName(SCA11_NS, CONSTRAINING_TYPE);
+    
+    String COMPOSITE = "composite";
+    QName COMPOSITE_QNAME = new QName(SCA11_NS, COMPOSITE);
+    
+    String INCLUDE = "include";
+    QName INCLUDE_QNAME = new QName(SCA11_NS, INCLUDE); 
+    
+    String COMPONENT = "component";
+    QName COMPONENT_QNAME = new QName(SCA11_NS, COMPONENT);
+    
+    String WIRE = "wire";
+    QName WIRE_QNAME = new QName(SCA11_NS, WIRE);
+
+    String OPERATION = "operation";
+    QName OPERATION_QNAME = new QName(SCA11_NS, OPERATION);
+    
+    String CALLBACK = "callback";
+    QName CALLBACK_QNAME = new QName(SCA11_NS, CALLBACK);
+
+    String IMPLEMENTATION_COMPOSITE = "implementation.composite";
+    QName IMPLEMENTATION_COMPOSITE_QNAME = new QName(SCA11_NS, IMPLEMENTATION_COMPOSITE);
+    
+    String IMPLEMENTATION = "implementation";
+    QName IMPLEMENTATION_QNAME = new QName(SCA11_NS, IMPLEMENTATION);
+    
+    String BINDING_SCA = "binding.sca";
+    QName BINDING_SCA_QNAME = new QName(Constants.SCA11_NS, BINDING_SCA);
+    
+    String NAME = "name";
+    String TARGET_NAMESPACE = "targetNamespace";
+    String LOCAL = "local";
+    String AUTOWIRE = "autowire";
+    String REQUIRES = "requires";
+    String POLICY_SETS = "policySets"; 
+    String APPLICABLE_POLICY_SETS = "applicablePolicySets";
+    String PROMOTE = "promote";
+    String TARGET = "target";
+    String WIRED_BY_IMPL = "wiredByImpl";
+    String MULTIPLICITY = "multiplicity";
+    String TYPE = "type";
+    String ELEMENT = "element";
+    String MANY = "many";
+    String MUST_SUPPLY = "mustSupply";
+    String SOURCE = "source";
+    String FILE = "file";
+    String URI = "uri";
+    String ZERO_ONE = "0..1";
+    String ZERO_N = "0..n";
+    String ONE_ONE = "1..1";
+    String ONE_N = "1..n";
+}

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

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