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/01/17 18:28:19 UTC

svn commit: r735314 - in /tuscany/branches/sca-java-1.3.3/modules: assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ assembly/src/main/java/org/apache/tuscany/sca/assembly/ a...

Author: lresende
Date: Sat Jan 17 09:28:17 2009
New Revision: 735314

URL: http://svn.apache.org/viewvc?rev=735314&view=rev
Log:
TUSCANY-2463 - Merging latest support for extended attributes from 1.x branch

Added:
    tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/DefaultExtensionFactory.java
      - copied, changed from r735283, tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java
    tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extension.java
      - copied, changed from r735283, tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java
    tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/ExtensionFactory.java
      - copied, changed from r735283, tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java
    tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensionImpl.java
      - copied, changed from r735283, tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java
    tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.ExtensionFactory
    tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor
Modified:
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeDocumentProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeDocumentProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/DefaultBeanModelProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAnyAttributeTestCase.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/TestAttributeProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java
    tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java
    tuscany/branches/sca-java-1.3.3/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/SCABindingImpl.java
    tuscany/branches/sca-java-1.3.3/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java
    tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java
    tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanComponentImpl.java
    tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanBaseJavaImplementationImpl.java

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java Sat Jan 17 09:28:17 2009
@@ -50,6 +50,8 @@
 import org.apache.tuscany.sca.assembly.ConstrainingType;
 import org.apache.tuscany.sca.assembly.Contract;
 import org.apache.tuscany.sca.assembly.Extensible;
+import org.apache.tuscany.sca.assembly.Extension;
+import org.apache.tuscany.sca.assembly.ExtensionFactory;
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.assembly.Multiplicity;
 import org.apache.tuscany.sca.assembly.OperationsConfigurator;
@@ -93,6 +95,7 @@
 
     protected ContributionFactory contributionFactory;
     protected AssemblyFactory assemblyFactory;
+    protected ExtensionFactory extensionFactory;
     protected PolicyFactory policyFactory;
     protected StAXArtifactProcessor<Object> extensionProcessor;
     protected PolicyAttachPointProcessor policyProcessor;
@@ -103,16 +106,18 @@
     /**
      * Constructs a new BaseArtifactProcessor.
      * @param contribFactory
-     * @param factory
+     * @param assemblyFactory
      * @param policyFactory
      */
     @SuppressWarnings("unchecked")
     public BaseAssemblyProcessor(ContributionFactory contribFactory,
-                                 AssemblyFactory factory,
+                                 AssemblyFactory assemblyFactory,
+                                 ExtensionFactory extensionFactory,
                                  PolicyFactory policyFactory,
                                  StAXArtifactProcessor extensionProcessor,
                                  Monitor monitor) {
-        this.assemblyFactory = factory;
+        this.assemblyFactory = assemblyFactory;
+        this.extensionFactory = extensionFactory;
         this.policyFactory = policyFactory;
         this.extensionProcessor = (StAXArtifactProcessor<Object>)extensionProcessor;
         this.contributionFactory = contribFactory;
@@ -123,21 +128,21 @@
 
     /**
      * Constructs a new BaseArtifactProcessor.
-     * @param factory
+     * @param assemblyFactory
      * @param policyFactory
      */
     @SuppressWarnings("unchecked")
-    public BaseAssemblyProcessor(AssemblyFactory factory,
+    public BaseAssemblyProcessor(AssemblyFactory assemblyFactory,
+    							 ExtensionFactory extensionFactory,
                                  PolicyFactory policyFactory,
                                  StAXArtifactProcessor extensionProcessor,
                                  Monitor monitor) {
-        this.assemblyFactory = factory;
+        this.assemblyFactory = assemblyFactory;
+        this.extensionFactory = extensionFactory;
         this.policyFactory = policyFactory;
         this.extensionProcessor = (StAXArtifactProcessor<Object>)extensionProcessor;
         this.policyProcessor = new PolicyAttachPointProcessor(policyFactory);
         this.monitor = monitor;
-        
-        //TODO - this constructor should take a monitor too. 
     }
     
     /**
@@ -856,6 +861,7 @@
         }
     }
     
+    
     /**
      * 
      * @param reader
@@ -866,15 +872,21 @@
      * @throws XMLStreamException
      */
     protected void readExtendedAttributes(XMLStreamReader reader, QName elementName, Extensible estensibleElement, StAXAttributeProcessor extensionAttributeProcessor) throws ContributionReadException, XMLStreamException {
-    	 for (int a = 0; a < reader.getAttributeCount(); a++) {
-         	QName attributeName = reader.getAttributeName(a);
-         	if( attributeName.getNamespaceURI() != null && attributeName.getNamespaceURI().length() > 0) {
-             	if( ! elementName.getNamespaceURI().equals(attributeName.getNamespaceURI()) ) {
-             		String attributeExtension = (String) extensionAttributeProcessor.read(attributeName, reader);
-             		estensibleElement.getExtensions().add(attributeExtension);
-             	}
-         	}
-         }
+        for (int a = 0; a < reader.getAttributeCount(); a++) {
+            QName attributeName = reader.getAttributeName(a);
+            if( attributeName.getNamespaceURI() != null && attributeName.getNamespaceURI().length() > 0) {
+                if( ! elementName.getNamespaceURI().equals(attributeName.getNamespaceURI()) ) {
+                    Object attributeValue = extensionAttributeProcessor.read(attributeName, reader);
+                    Extension attributeExtension;
+                    if (attributeValue instanceof Extension) {
+                        attributeExtension = (Extension) attributeValue;
+                    } else {
+                        attributeExtension = extensionFactory.createExtension(attributeName, attributeValue, true);
+                    }
+                    estensibleElement.getAttributeExtensions().add(attributeExtension);
+                }
+            }
+        }
     }
     
 
@@ -888,11 +900,10 @@
      * @throws XMLStreamException
      */
     protected void writeExtendedAttributes(XMLStreamWriter writer, Extensible extensibleElement, StAXAttributeProcessor extensionAttributeProcessor) throws ContributionWriteException, XMLStreamException {
-        for(Object o : extensibleElement.getExtensions()) {
-        	//FIXME How to identify it's a extended attribute ? 
-        	if(o instanceof String) {
-        		extensionAttributeProcessor.write(o, writer);
-        	}
+        for(Extension extension : extensibleElement.getAttributeExtensions()) {
+            if(extension.isAttribute()) {
+                extensionAttributeProcessor.write(extension, writer);
+            }
         }
     }
     

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeDocumentProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeDocumentProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeDocumentProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeDocumentProcessor.java Sat Jan 17 09:28:17 2009
@@ -56,7 +56,7 @@
     public ComponentTypeDocumentProcessor(StAXArtifactProcessor staxProcessor, 
     									  XMLInputFactory inputFactory, 
     									  Monitor monitor) {
-        super(null, null, staxProcessor, monitor);
+        super(null, null, null, staxProcessor, monitor);
         this.inputFactory = inputFactory;
     }
     
@@ -68,7 +68,7 @@
     public ComponentTypeDocumentProcessor(ModelFactoryExtensionPoint modelFactories, 
     									  StAXArtifactProcessor staxProcessor,
     									  Monitor monitor) {
-        super(null, null, staxProcessor, monitor);
+        super(null, null, null, staxProcessor, monitor);
         this.inputFactory = modelFactories.getFactory(ValidatingXMLInputFactory.class);
     }
     

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java Sat Jan 17 09:28:17 2009
@@ -33,6 +33,7 @@
 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.ExtensionFactory;
 import org.apache.tuscany.sca.assembly.Property;
 import org.apache.tuscany.sca.assembly.Reference;
 import org.apache.tuscany.sca.assembly.Service;
@@ -65,9 +66,11 @@
      * @param policyFactory
      * @param registry
      */
-    public ComponentTypeProcessor(AssemblyFactory factory, PolicyFactory policyFactory, 
+    public ComponentTypeProcessor(AssemblyFactory factory, 
+    							  ExtensionFactory extensionFactory,
+    		                      PolicyFactory policyFactory, 
     							  StAXArtifactProcessor extensionProcessor, StAXAttributeProcessor extensionAttributeProcessor, Monitor monitor) {
-        super(factory, policyFactory, extensionProcessor, monitor);
+        super(factory, extensionFactory, policyFactory, extensionProcessor, monitor);
     }
 
     /**
@@ -81,7 +84,10 @@
     							  StAXAttributeProcessor extensionAttributeProcessor,
     							  Monitor monitor) {
         super(modelFactories.getFactory(AssemblyFactory.class),
-              modelFactories.getFactory(PolicyFactory.class), extensionProcessor, monitor);
+        	  modelFactories.getFactory(ExtensionFactory.class),
+              modelFactories.getFactory(PolicyFactory.class), 
+              extensionProcessor, 
+              monitor);
     }
     
     public ComponentType read(XMLStreamReader reader) throws ContributionReadException {

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java Sat Jan 17 09:28:17 2009
@@ -67,7 +67,7 @@
      */
     public CompositeDocumentProcessor(StAXArtifactProcessor staxProcessor, 
     								  XMLInputFactory inputFactory, List scaDefnsSink, Monitor monitor) {
-        super(null, null, staxProcessor, monitor);
+        super(null, null, null, staxProcessor, monitor);
         this.inputFactory = inputFactory;
         this.scaDefnSink = scaDefnsSink;
     }
@@ -79,7 +79,7 @@
      */
     public CompositeDocumentProcessor(ModelFactoryExtensionPoint modelFactories, 
     								  StAXArtifactProcessor staxProcessor, Monitor monitor) {
-        super(null, null, staxProcessor, monitor);
+        super(null, null, null, staxProcessor, monitor);
         this.inputFactory = modelFactories.getFactory(ValidatingXMLInputFactory.class);
     }
     

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java Sat Jan 17 09:28:17 2009
@@ -49,6 +49,7 @@
 import org.apache.tuscany.sca.assembly.ConfiguredOperation;
 import org.apache.tuscany.sca.assembly.ConstrainingType;
 import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.ExtensionFactory;
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.assembly.OperationsConfigurator;
 import org.apache.tuscany.sca.assembly.Property;
@@ -124,6 +125,7 @@
         
     	super(modelFactories.getFactory(ContributionFactory.class),
             modelFactories.getFactory(AssemblyFactory.class),
+            modelFactories.getFactory(ExtensionFactory.class),
             modelFactories.getFactory(PolicyFactory.class),
             extensionProcessor, 
             monitor);
@@ -142,11 +144,12 @@
      */
     public CompositeProcessor(ContributionFactory contributionFactory,
             AssemblyFactory assemblyFactory,
+            ExtensionFactory extensionFactory,
             PolicyFactory policyFactory,
             StAXArtifactProcessor extensionProcessor,
             StAXAttributeProcessor extensionAttributeProcessor,
             Monitor monitor) {
-        super(contributionFactory, assemblyFactory, policyFactory, extensionProcessor, monitor);
+        super(contributionFactory, assemblyFactory, extensionFactory, policyFactory, extensionProcessor, monitor);
     }    
 
     public Composite read(XMLStreamReader reader) throws ContributionReadException {

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeDocumentProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeDocumentProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeDocumentProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeDocumentProcessor.java Sat Jan 17 09:28:17 2009
@@ -56,7 +56,7 @@
     public ConstrainingTypeDocumentProcessor(StAXArtifactProcessor staxProcessor, 
     									     XMLInputFactory inputFactory,
     									     Monitor monitor) {
-        super(null, null, staxProcessor, monitor);
+        super(null, null, null, staxProcessor, monitor);
         this.inputFactory = inputFactory;
     }
 
@@ -68,7 +68,7 @@
     public ConstrainingTypeDocumentProcessor(ModelFactoryExtensionPoint modelFactories, 
     										 StAXArtifactProcessor staxProcessor,
     										 Monitor monitor) {
-        super(null, null, staxProcessor, monitor);
+        super(null, null, null, staxProcessor, monitor);
         this.inputFactory = modelFactories.getFactory(ValidatingXMLInputFactory.class);
     }
     

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ConstrainingTypeProcessor.java Sat Jan 17 09:28:17 2009
@@ -33,6 +33,7 @@
 import org.apache.tuscany.sca.assembly.AbstractService;
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.ConstrainingType;
+import org.apache.tuscany.sca.assembly.ExtensionFactory;
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
@@ -55,13 +56,16 @@
 
     /**
      * Construct a new constrainingType processor.
-     * @param factory
+     * @param assemblyFactory
      * @param policyFactory
      * @param extensionProcessor
      */
-    public ConstrainingTypeProcessor(AssemblyFactory factory, PolicyFactory policyFactory, 
-    								 StAXArtifactProcessor extensionProcessor, Monitor monitor) {
-        super(factory, policyFactory, extensionProcessor, monitor);
+    public ConstrainingTypeProcessor(AssemblyFactory assemblyFactory, 
+    								 ExtensionFactory extensionFactory,
+    								 PolicyFactory policyFactory, 
+    								 StAXArtifactProcessor extensionProcessor, 
+    								 Monitor monitor) {
+        super(assemblyFactory, extensionFactory, policyFactory, extensionProcessor, monitor);
     }
 
     /**
@@ -74,7 +78,10 @@
     								 StAXArtifactProcessor extensionProcessor,
     								 Monitor monitor) {
         super(modelFactories.getFactory(AssemblyFactory.class),
-              modelFactories.getFactory(PolicyFactory.class), extensionProcessor, monitor);
+        	  modelFactories.getFactory(ExtensionFactory.class),
+              modelFactories.getFactory(PolicyFactory.class), 
+              extensionProcessor, 
+              monitor);
     }
     
     public ConstrainingType read(XMLStreamReader reader) throws ContributionReadException {

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/DefaultBeanModelProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/DefaultBeanModelProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/DefaultBeanModelProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/DefaultBeanModelProcessor.java Sat Jan 17 09:28:17 2009
@@ -35,13 +35,14 @@
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.Base;
 import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.ExtensionFactory;
 import org.apache.tuscany.sca.assembly.Implementation;
-import org.apache.tuscany.sca.monitor.Monitor;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
 import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.monitor.Monitor;
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
 
@@ -60,12 +61,13 @@
     private Map<String, Method> getterMethods = new HashMap<String, Method>();
 
     public DefaultBeanModelProcessor(AssemblyFactory assemblyFactory,
-                                       PolicyFactory policyFactory,
-                                       QName artifactType,
-                                       Class<Implementation> modelClass,
-                                       Object modelFactory,
-                                       Monitor monitor) {
-        super(assemblyFactory, policyFactory, null, monitor);
+    							     ExtensionFactory extensionFactory,
+                                     PolicyFactory policyFactory,
+                                     QName artifactType,
+                                     Class<Implementation> modelClass,
+                                     Object modelFactory,
+                                     Monitor monitor) {
+        super(assemblyFactory, extensionFactory, policyFactory, null, monitor);
         this.artifactType = artifactType;
         this.modelClass = modelClass;
         this.modelFactory = modelFactory;

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAnyAttributeTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAnyAttributeTestCase.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAnyAttributeTestCase.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAnyAttributeTestCase.java Sat Jan 17 09:28:17 2009
@@ -19,100 +19,114 @@
 
 package org.apache.tuscany.sca.assembly.xml;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
 import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
+import java.io.StringReader;
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamReader;
 
-import junit.framework.TestCase;
-
 import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
-import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
 import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessorExtensionPoint;
 import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.junit.Test;
 
 /**
  * Test reading SCA XML assemblies.
  * 
  * @version $Rev$ $Date$
  */
-public class ReadWriteAnyAttributeTestCase extends TestCase {
+public class ReadWriteAnyAttributeTestCase {
 
-    private XMLInputFactory inputFactory;
-    private ExtensibleStAXArtifactProcessor staxProcessor;
-
-    private static final QName ATTRIBUTE = new QName("http://test", "customAttribute");
+    private static final QName EXTENDED_ATTRIBUTE = new QName("http://test", "customAttribute");
     
-    // implementation.java for CalculatorServiceComponent appears in a strange place as the
-    // java implementation extension is not loaded and hence they are loaded as any elements
     private static final String XML = "<?xml version='1.0' encoding='UTF-8'?>"+
-		 	 "<composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\" targetNamespace=\"http://calc\" name=\"Calculator\">"+
-		 	 "<service name=\"CalculatorService\" promote=\"CalculatorServiceComponent\">"+
-		 	 	"<interface.java interface=\"calculator.CalculatorService\" />"+
-	 	 	 "</service>"+
-	 	 	 "<component name=\"CalculatorServiceComponent\" customAttribute=\"customValue\">"+
-	 	 	    "<implementation.java class=\"calculator.CalculatorServiceImpl\" />"+
-	 	 	 	"<reference name=\"addService\" target=\"AddServiceComponent\" />"+
-	 	 	 	"<reference name=\"subtractService\" target=\"SubtractServiceComponent\" />"+
-	 	 	 	"<reference name=\"multiplyService\" target=\"MultiplyServiceComponent\" />"+
-	 	 	 	"<reference name=\"divideService\" target=\"DivideServiceComponent\" />"+
- 	 	 	 "</component>"+
- 	 	 	 "<component name=\"AddServiceComponent\">"+
- 	 	 	    "<implementation.java class=\"calculator.AddServiceImpl\" />"+
- 	 	 	 "</component>"+
- 	 	 	 "<component name=\"SubtractServiceComponent\">"+
- 	 	 	    "<implementation.java class=\"calculator.SubtractServiceImpl\" />"+
- 	 	 	 "</component>"+
- 	 	 	 "<component name=\"MultiplyServiceComponent\">"+
- 	 	 	    "<implementation.java class=\"calculator.MultiplyServiceImpl\" />"+
- 	 	 	 "</component>"+
- 	 	 	 "<component name=\"DivideServiceComponent\">"+
- 	 	 	    "<implementation.java class=\"calculator.DivideServiceImpl\" />"+
- 	 	 	 "</component>"+
- 	 	 	 "</composite>";
+		 	 "<composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" " +
+		 	            "xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\" " +
+		 	            "targetNamespace=\"http://calc\" " +
+		 	            "name=\"Calculator\">"+
+ 	 	 	    "<component name=\"AddServiceComponent\" xmlns:test=\"http://test\" test:customAttribute=\"customValue\">"+
+ 	 	 	      "<implementation.java class=\"calculator.AddServiceImpl\" />"+
+ 	 	 	    "</component>"+
+ 	 	 	  "</composite>";
     
-    @Override
-    public void setUp() throws Exception {
-        ExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
-        inputFactory = XMLInputFactory.newInstance();
-        StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
-
-        StAXAttributeProcessorExtensionPoint staxAttributeProcessors = extensionPoints.getExtensionPoint(StAXAttributeProcessorExtensionPoint.class);
-        staxAttributeProcessors.addArtifactProcessor(new TestAttributeProcessor());
-        
-        staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, XMLInputFactory.newInstance(), XMLOutputFactory.newInstance(), null);
-    }
+    private XMLInputFactory inputFactory;
+    private ExtensibleStAXArtifactProcessor staxProcessor;
+
 
-    @Override
-    public void tearDown() throws Exception {
+    /**
+     * Initialize the test environment
+     * This takes care to register attribute processors when provided
+     *
+     * @param attributeProcessor
+     * @throws Exception
+     */
+    private void init(StAXAttributeProcessor<?> attributeProcessor) throws Exception {
+    	ExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
+    	inputFactory = XMLInputFactory.newInstance();
+    	StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+
+    	if(attributeProcessor != null) {
+    		StAXAttributeProcessorExtensionPoint staxAttributeProcessors = extensionPoints.getExtensionPoint(StAXAttributeProcessorExtensionPoint.class);
+    		staxAttributeProcessors.addArtifactProcessor(attributeProcessor);
+    	}
     	
+    	staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, XMLInputFactory.newInstance(), XMLOutputFactory.newInstance(), null);
     }
 
-    public void testReadComposite() throws Exception {
-        InputStream is = getClass().getResourceAsStream("CalculatorExtended.composite");
-        XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
-        Composite composite = (Composite) staxProcessor.read(reader);
-        assertNotNull(composite);
-        is.close();
+    /**
+     * Read and Write a composite that has a extended attribute
+     * and a particular attribute processor
+     * @throws Exception
+     */
+    @Test
+    public void testReadWriteCompositeWithAttributeProcessor() throws Exception {
+    	init(new TestAttributeProcessor());
+
+    	XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(XML));
+    	Composite composite = (Composite) staxProcessor.read(reader);
+    	assertNotNull(composite);
+    	reader.close();
+
+    	ByteArrayOutputStream bos = new ByteArrayOutputStream();
+    	staxProcessor.write(composite, bos);
+
+    	// used for debug comparison
+    	// System.out.println(XML);
+    	// System.out.println(bos.toString());
+
+    	assertEquals(XML, bos.toString());    	
     }
-    
-    public void testWriteComposite() throws Exception {
-        InputStream is = getClass().getResourceAsStream("CalculatorExtended.composite");
-        XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
-        Composite composite = (Composite) staxProcessor.read(reader);
-        assertNotNull(composite);
-        is.close();
-        
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        staxProcessor.write(composite, bos);
-        System.out.println(bos.toString());
-        
-        assertEquals(XML, bos.toString());
+
+    /**
+     * Read and Write a composite that has a extended attribute
+     * but no particular processor for it
+     * @throws Exception
+     */
+    @Test
+    public void testDefaultReadWriteComposite() throws Exception {
+    	init(null);
+
+    	XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(XML));
+    	Composite composite = (Composite) staxProcessor.read(reader);
+    	assertNotNull(composite);
+    	reader.close();
+
+    	ByteArrayOutputStream bos = new ByteArrayOutputStream();
+    	staxProcessor.write(composite, bos);
+
+    	// used for debug comparison
+    	// System.out.println(XML);
+    	// System.out.println(bos.toString());
+
+    	assertEquals(XML, bos.toString());
     }
 }

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/TestAttributeProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/TestAttributeProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/TestAttributeProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/TestAttributeProcessor.java Sat Jan 17 09:28:17 2009
@@ -36,7 +36,7 @@
  * @version $Rev$ $Date$
  */
 public class TestAttributeProcessor extends BaseStAXArtifactProcessor implements StAXAttributeProcessor<String> {
-	private static final QName ATTRIBUTE = new QName("http://test", "customAttribute");
+	private static final QName ATTRIBUTE = new QName("http://test", "customAttribute", "test");
 	
     public QName getArtifactType() {
         return ATTRIBUTE;
@@ -47,15 +47,14 @@
     }
 
     public void write(String value, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
-    	writer.setPrefix(ATTRIBUTE.getPrefix(), ATTRIBUTE.getNamespaceURI());
-    	writer.writeAttribute(ATTRIBUTE.getLocalPart(), value);
+    	writer.writeAttribute(ATTRIBUTE.getPrefix(), ATTRIBUTE.getNamespaceURI(),ATTRIBUTE.getLocalPart(), value);
     } 
 
     public Class<String> getModelType() {
-        return String.class;
+        return null;
     }
 
     public void resolve(String arg0, ModelResolver arg1) throws ContributionResolveException {
     	
     }
-}
+}
\ No newline at end of file

Copied: tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/DefaultExtensionFactory.java (from r735283, tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java)
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/DefaultExtensionFactory.java?p2=tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/DefaultExtensionFactory.java&p1=tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java&r1=735283&r2=735314&rev=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/DefaultExtensionFactory.java Sat Jan 17 09:28:17 2009
@@ -16,22 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.    
  */
+
 package org.apache.tuscany.sca.assembly;
 
-import java.util.List;
+import javax.xml.namespace.QName;
 
-/**
- * Base interface for extensible assembly model objects.
- * 
- * @version $Rev$ $Date$
- */
-public interface Extensible {
+import org.apache.tuscany.sca.assembly.impl.ExtensionImpl;
+
+public class DefaultExtensionFactory implements ExtensionFactory {
+
+	public Extension createExtension() {
+		return new ExtensionImpl();
+	}
 
-    /**
-     * Returns a list of extension objects contained in this model object.
-     * 
-     * @return a list of extension objects container in this model object
-     */
-    List<Object> getExtensions();
+	public Extension createExtension(QName name, Object value, boolean isAttribute) {
+		return new ExtensionImpl(name, value, isAttribute);
+	}
 
 }

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java Sat Jan 17 09:28:17 2009
@@ -33,5 +33,12 @@
      * @return a list of extension objects container in this model object
      */
     List<Object> getExtensions();
+    
+    /**
+     * Returns a list of attribute extensions contained in this model object
+     * 
+     * @return a list of attribute extensions contained in this model object
+     */
+    List<Extension> getAttributeExtensions();
 
 }

Copied: tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extension.java (from r735283, tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java)
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extension.java?p2=tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extension.java&p1=tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java&r1=735283&r2=735314&rev=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extension.java Sat Jan 17 09:28:17 2009
@@ -18,20 +18,48 @@
  */
 package org.apache.tuscany.sca.assembly;
 
-import java.util.List;
+import javax.xml.namespace.QName;
 
 /**
- * Base interface for extensible assembly model objects.
+ * Base interface for storing contents of extensible assembly model objects.
  * 
  * @version $Rev$ $Date$
  */
-public interface Extensible {
-
-    /**
-     * Returns a list of extension objects contained in this model object.
-     * 
-     * @return a list of extension objects container in this model object
-     */
-    List<Object> getExtensions();
+public interface Extension {
 
+	/**
+	 * Return QName for the extension
+	 * @return the extension QName
+	 */
+	QName getQName();
+	
+	/**
+	 * Set QName for the extension
+	 * @param qName the extension QName
+	 */
+	void setQName(QName qName);
+	
+	/**
+	 * Return the original extension value
+	 * @return the extension value
+	 */
+	Object getValue();
+	
+	/**
+	 * Set the original extension value
+	 * @param value the extension value
+	 */
+	void setValue(Object value);
+	
+	/**
+	 * Return whether or not the extension is an attribute
+	 * @return 
+	 */
+	boolean isAttribute();
+	
+	/**
+	 * Set whether or not the extension is an attribute
+	 * @param value
+	 */
+	void setIsAttribute(boolean isAttribute);
 }

Copied: tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/ExtensionFactory.java (from r735283, tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java)
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/ExtensionFactory.java?p2=tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/ExtensionFactory.java&p1=tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java&r1=735283&r2=735314&rev=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Extensible.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/ExtensionFactory.java Sat Jan 17 09:28:17 2009
@@ -18,20 +18,11 @@
  */
 package org.apache.tuscany.sca.assembly;
 
-import java.util.List;
+import javax.xml.namespace.QName;
 
-/**
- * Base interface for extensible assembly model objects.
- * 
- * @version $Rev$ $Date$
- */
-public interface Extensible {
-
-    /**
-     * Returns a list of extension objects contained in this model object.
-     * 
-     * @return a list of extension objects container in this model object
-     */
-    List<Object> getExtensions();
+public interface ExtensionFactory {
 
+	Extension createExtension();
+	
+	Extension createExtension(QName qName, Object value, boolean isAttribute);
 }

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java Sat Jan 17 09:28:17 2009
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.tuscany.sca.assembly.Extensible;
+import org.apache.tuscany.sca.assembly.Extension;
 
 /**
  * Convenience base class for extensible assembly model objects.
@@ -30,6 +31,7 @@
  */
 public abstract class ExtensibleImpl extends BaseImpl implements Extensible {
     private List<Object> extensions = new ArrayList<Object>();
+    private List<Extension> attributeExtensions = new ArrayList<Extension>();
 
     /**
      * Constructs a new base model object.
@@ -40,5 +42,8 @@
     public List<Object> getExtensions() {
         return extensions;
     }
-
+    
+    public List<Extension> getAttributeExtensions() {
+        return attributeExtensions;
+    }
 }

Copied: tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensionImpl.java (from r735283, tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java)
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensionImpl.java?p2=tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensionImpl.java&p1=tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java&r1=735283&r2=735314&rev=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensibleImpl.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ExtensionImpl.java Sat Jan 17 09:28:17 2009
@@ -18,27 +18,46 @@
  */
 package org.apache.tuscany.sca.assembly.impl;
 
-import java.util.ArrayList;
-import java.util.List;
+import javax.xml.namespace.QName;
 
-import org.apache.tuscany.sca.assembly.Extensible;
+import org.apache.tuscany.sca.assembly.Extension;
 
-/**
- * Convenience base class for extensible assembly model objects.
- * 
- * @version $Rev$ $Date$
- */
-public abstract class ExtensibleImpl extends BaseImpl implements Extensible {
-    private List<Object> extensions = new ArrayList<Object>();
+public class ExtensionImpl implements Extension {
+	private QName qName;
+	private Object value;
+	boolean isAttribute = false;
+
+	public ExtensionImpl() {
+		
+	}
+	
+	public ExtensionImpl(QName qName, Object value, boolean isAttribute) {
+		this.qName = qName;
+		this.value = value;
+		this.isAttribute = isAttribute;
+	}
+	
+	public QName getQName() {
+		return qName;
+	}
+
+	public void setQName(QName qName) {
+		this.qName = qName;
+	}
+
+	public Object getValue() {
+		return value;
+	}
+
+	public void setValue(Object value) {
+		this.value = value;
+	}
 
-    /**
-     * Constructs a new base model object.
-     */
-    protected ExtensibleImpl() {
-    }
-    
-    public List<Object> getExtensions() {
-        return extensions;
-    }
+	public boolean isAttribute() {
+		return isAttribute;
+	}
 
+	public void setIsAttribute(boolean isAttribute) {
+		this.isAttribute = isAttribute;
+	}
 }

Added: tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.ExtensionFactory
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.ExtensionFactory?rev=735314&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.ExtensionFactory (added)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.ExtensionFactory Sat Jan 17 09:28:17 2009
@@ -0,0 +1,18 @@
+# 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. 
+
+org.apache.tuscany.sca.assembly.DefaultExtensionFactory
\ No newline at end of file

Modified: tuscany/branches/sca-java-1.3.3/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/SCABindingImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/SCABindingImpl.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/SCABindingImpl.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/SCABindingImpl.java Sat Jan 17 09:28:17 2009
@@ -25,6 +25,7 @@
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.Extensible;
+import org.apache.tuscany.sca.assembly.Extension;
 import org.apache.tuscany.sca.assembly.OptimizableBinding;
 import org.apache.tuscany.sca.assembly.SCABinding;
 import org.apache.tuscany.sca.assembly.builder.AutomaticBinding;
@@ -42,6 +43,7 @@
     private String name;
     private String uri;
     private List<Object> extensions = new ArrayList<Object>();
+    private List<Extension> attributeExtensions = new ArrayList<Extension>();
     private List<Intent> requiredIntents = new ArrayList<Intent>();
     private List<PolicySet> policySets = new ArrayList<PolicySet>();
     private IntentAttachPointType intentAttachPointType;
@@ -106,15 +108,15 @@
         this.uri = uri;
     }
     
-    /**
-     * Returns a list of extension objects contained in this model object.
-     * 
-     * @return a list of extension objects container in this model object
-     */
     public List<Object> getExtensions() {
         return extensions;
     }
     
+    public List<Extension> getAttributeExtensions() {
+        return attributeExtensions;
+    }
+    
+    
     /**
      * Returns true if the model element is unresolved.
      * 

Modified: tuscany/branches/sca-java-1.3.3/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/impl/WebServiceBindingImpl.java Sat Jan 17 09:28:17 2009
@@ -30,6 +30,7 @@
 
 import org.apache.tuscany.sca.assembly.ConfiguredOperation;
 import org.apache.tuscany.sca.assembly.Extensible;
+import org.apache.tuscany.sca.assembly.Extension;
 import org.apache.tuscany.sca.assembly.OperationsConfigurator;
 import org.apache.tuscany.sca.assembly.builder.BindingBuilder;
 import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
@@ -53,6 +54,7 @@
     private String uri;
     private boolean unresolved;
     private List<Object> extensions = new ArrayList<Object>();
+    private List<Extension> attributeExtensions = new ArrayList<Extension>();
     private List<Intent> requiredIntents = new ArrayList<Intent>();
     private List<PolicySet> policySets = new ArrayList<PolicySet>();
     private IntentAttachPointType intentAttachPointType;
@@ -109,6 +111,10 @@
         return extensions;
     }
     
+    public List<Extension> getAttributeExtensions() {
+        return attributeExtensions;
+    }
+    
     public String getLocation() {
         return location;
     }

Modified: tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java Sat Jan 17 09:28:17 2009
@@ -23,6 +23,8 @@
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.tuscany.sca.assembly.Extension;
+import org.apache.tuscany.sca.assembly.ExtensionFactory;
 import org.apache.tuscany.sca.contribution.Constants;
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
@@ -38,32 +40,37 @@
  *
  * @version $Rev$ $Date$
  */
-public class AnyAttributeProcessor extends BaseStAXArtifactProcessor implements StAXAttributeProcessor<String> {
-	private static final QName ANY_ATTRIBUTE = new QName(Constants.XMLSCHEMA_NS, "anyAttribute");
-	
-	public AnyAttributeProcessor(ModelFactoryExtensionPoint modelFactories, Monitor monitor) {
-		
-	}
+public class AnyAttributeProcessor extends BaseStAXArtifactProcessor implements StAXAttributeProcessor<Extension> {
+    private static final QName ANY_ATTRIBUTE = new QName(Constants.XMLSCHEMA_NS, "anyAttribute");
+    
+    private ExtensionFactory extensionFactory;
+
+    public AnyAttributeProcessor(ModelFactoryExtensionPoint modelFactories, Monitor monitor) {
+        this.extensionFactory = modelFactories.getFactory(ExtensionFactory.class);
+    }
 	
     public QName getArtifactType() {
         return ANY_ATTRIBUTE;
     }
 
-    public Class<String> getModelType() {
-        return String.class;
+    public Class<Extension> getModelType() {
+        return Extension.class;
     }
 
-    public String read(QName attributeName, XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
-        return reader.getAttributeValue(attributeName.getNamespaceURI(), attributeName.getLocalPart());
+    public Extension read(QName attributeName, XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
+        String attributeValue = reader.getAttributeValue(attributeName.getNamespaceURI(), attributeName.getLocalPart());
+        return extensionFactory.createExtension(attributeName, attributeValue, true);
     }
 
-    public void write(String value, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
-    	writer.setPrefix(ANY_ATTRIBUTE.getPrefix(), ANY_ATTRIBUTE.getNamespaceURI());
-    	writer.writeAttribute(ANY_ATTRIBUTE.getLocalPart(), value);
+    public void write(Extension attributeExtension, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
+    	writer.writeAttribute(attributeExtension.getQName().getPrefix(), 
+    	                      attributeExtension.getQName().getNamespaceURI(), 
+    	                      attributeExtension.getQName().getLocalPart(), 
+    	                      attributeExtension.getValue().toString());  //for extended attributes, we can assume values 
+    	                                                                  // are just the string representation fo the attribute
     } 
 
-
-    public void resolve(String arg0, ModelResolver arg1) throws ContributionResolveException {
+    public void resolve(Extension arg0, ModelResolver arg1) throws ContributionResolveException {
     	
     }
-}
+}
\ No newline at end of file

Added: tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor?rev=735314&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor (added)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor Sat Jan 17 09:28:17 2009
@@ -0,0 +1,19 @@
+# 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. 
+
+# Implementation class for the attribute processor extension
+org.apache.tuscany.sca.contribution.processor.xml.AnyAttributeProcessor;qname=http://www.w3.org/2001/XMLSchema#anyAttribute,model=org.apache.tuscany.sca.assembly.Extension

Modified: tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultStAXArtifactProcessorExtensionPoint.java Sat Jan 17 09:28:17 2009
@@ -31,6 +31,7 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.ExtensionFactory;
 import org.apache.tuscany.sca.assembly.builder.impl.ProblemImpl;
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
@@ -41,11 +42,11 @@
 import org.apache.tuscany.sca.core.UtilityExtensionPoint;
 import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
 import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
-import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.monitor.Monitor;
 import org.apache.tuscany.sca.monitor.MonitorFactory;
 import org.apache.tuscany.sca.monitor.Problem;
 import org.apache.tuscany.sca.monitor.Problem.Severity;
+import org.apache.tuscany.sca.policy.PolicyFactory;
 
 /**
  * The default implementation of an extension point for StAX artifact processors.
@@ -251,6 +252,7 @@
                     // Specific initialization for the DefaultBeanModelProcessor
                     ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
                     AssemblyFactory assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+                    ExtensionFactory extensionFactory = modelFactories.getFactory(ExtensionFactory.class);
                     PolicyFactory policyFactory = modelFactories.getFactory(PolicyFactory.class);
                     try {
                         Class<StAXArtifactProcessor> processorClass =
@@ -264,6 +266,7 @@
                         }
                         Constructor<StAXArtifactProcessor> constructor =
                             processorClass.getConstructor(AssemblyFactory.class,
+                            		                      ExtensionFactory.class,
                                                           PolicyFactory.class,
                                                           QName.class,
                                                           Class.class,
@@ -271,6 +274,7 @@
                                                           Monitor.class);
                         processor =
                             constructor.newInstance(assemblyFactory,
+                            		                extensionFactory,
                                                     policyFactory,
                                                     artifactType,
                                                     getModelType(),

Modified: tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java Sat Jan 17 09:28:17 2009
@@ -55,7 +55,7 @@
 
     private static final Logger logger = Logger.getLogger(ExtensibleStAXAttributeProcessor.class.getName()); 
     
-    private static final QName UNKNOWN_ATTRIBUTE = new QName(Constants.SCA10_TUSCANY_NS, "unknown");
+    private static final QName ANY_ATTRIBUTE = new QName(Constants.XMLSCHEMA_NS, "anyAttribute");
     
     private XMLInputFactory inputFactory;
     private XMLOutputFactory outputFactory;
@@ -149,13 +149,13 @@
         
         
         //handle extension attributes without processors
-        processor = (StAXAttributeProcessor<?>)processors.getProcessor(UNKNOWN_ATTRIBUTE);
+        processor = (StAXAttributeProcessor<?>)processors.getProcessor(ANY_ATTRIBUTE);
         if (processor == null) {
         	Location location = source.getLocation();
             if (logger.isLoggable(Level.WARNING)) {                
                 logger.warning("Could not find Default Attribute processor !");
             }
-            warning("DefaultAttributeProcessorNotAvailable", processors, UNKNOWN_ATTRIBUTE, location);            
+            warning("DefaultAttributeProcessorNotAvailable", processors, ANY_ATTRIBUTE, location);            
         }        	
         
         return processor == null ? null : processor.read(attributeName, source);
@@ -181,7 +181,7 @@
     	}
     	
     	 //handle extension attributes without processors
-        processor = (StAXAttributeProcessor<?>)processors.getProcessor(UNKNOWN_ATTRIBUTE);
+        processor = (StAXAttributeProcessor<?>)processors.getProcessor(ANY_ATTRIBUTE);
         if(processor == null) {
     		if (logger.isLoggable(Level.WARNING)) {
     			logger.warning("No Default StAX processor is configured to handle " + model.getClass());

Modified: tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanComponentImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanComponentImpl.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanComponentImpl.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanComponentImpl.java Sat Jan 17 09:28:17 2009
@@ -26,6 +26,7 @@
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.ConstrainingType;
+import org.apache.tuscany.sca.assembly.Extension;
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.policy.Intent;
 import org.apache.tuscany.sca.policy.IntentAttachPointType;
@@ -62,6 +63,7 @@
     private List<Intent> requiredIntents = new ArrayList<Intent>();
     private List<PolicySet> policySets = new ArrayList<PolicySet>();
     private List<Object> extensions = new ArrayList<Object>();
+    private List<Extension> attributeExtensions = new ArrayList<Extension>();
     private boolean unresolved = false;
     private BeanDefinitionRegistry beanRegistry;
 
@@ -205,6 +207,10 @@
         return extensions;
     }
 
+    public List<Extension> getAttributeExtensions() {
+        return attributeExtensions;
+    }
+    
     public boolean isUnresolved() {
         return unresolved;
     }

Modified: tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanBaseJavaImplementationImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanBaseJavaImplementationImpl.java?rev=735314&r1=735313&r2=735314&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanBaseJavaImplementationImpl.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanBaseJavaImplementationImpl.java Sat Jan 17 09:28:17 2009
@@ -23,6 +23,7 @@
 
 import org.apache.tuscany.sca.assembly.ConfiguredOperation;
 import org.apache.tuscany.sca.assembly.ConstrainingType;
+import org.apache.tuscany.sca.assembly.Extension;
 import org.apache.tuscany.sca.assembly.Property;
 import org.apache.tuscany.sca.assembly.Reference;
 import org.apache.tuscany.sca.assembly.Service;
@@ -45,6 +46,7 @@
     private List<Service> services = new ArrayList<Service>();
     private ConstrainingType constrainingType;
     private List<Object> extensions = new ArrayList<Object>();
+    private List<Extension> attributeExtensions = new ArrayList<Extension>();
     private boolean unresolved;
     private BeanDefinitionRegistry beanRegistry;
     private String uri;
@@ -172,6 +174,10 @@
         return extensions;
     }
 
+    public List<Extension> getAttributeExtensions() {
+        return attributeExtensions;
+    }
+    
     public boolean isUnresolved() {
         return unresolved;
     }