Author: svkrish
Date: Fri Aug 31 00:43:37 2007
New Revision: 571391

URL: http://svn.apache.org/viewvc?rev=571391&view=rev
Log:
enhance CompositeProcessor.write to write property elements, added test, fixed 
writing of QName attribute values..... fixed 
https://issues.apache.org/jira/browse/TUSCANY-1482

Modified:
    
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
    
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java
    
incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java
    
incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite

Modified: 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java?rev=571391&r1=571390&r2=571391&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
 Fri Aug 31 00:43:37 2007
@@ -15,7 +15,7 @@
  * 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;
 
@@ -25,10 +25,12 @@
 import java.util.StringTokenizer;
 
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
+import javax.xml.transform.dom.DOMSource;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.Binding;
@@ -59,6 +61,9 @@
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 /**
  * A composite processor.
@@ -522,11 +527,7 @@
         }
 
         for (ComponentProperty property : component.getProperties()) {
-            writeStart(writer, PROPERTY, new XAttr(NAME, property.getName()));
-            for (Object extension : property.getExtensions()) {
-                extensionProcessor.write(extension, writer);
-            }
-            writeEnd(writer);
+            writeProperty(property, writer);
         }
 
         // Write the component implementation
@@ -582,6 +583,93 @@
         writeEnd(writer);
     }
     
+    public void writeProperty(Property property, XMLStreamWriter writer) 
throws XMLStreamException, ContributionWriteException {
+        
+        if ( property instanceof ComponentProperty ) {
+            ComponentProperty componentProperty = (ComponentProperty)property;
+            writeStart(writer, PROPERTY, new XAttr(NAME, 
componentProperty.getName()),
+                                            new XAttr(MUST_SUPPLY, 
componentProperty.isMustSupply()), 
+                                            new XAttr(MANY, 
componentProperty.isMany()),
+                                            new XAttr(TYPE, 
componentProperty.getXSDType()),
+                                            new XAttr(ELEMENT, 
componentProperty.getXSDElement()),
+                                            new XAttr(SOURCE, 
componentProperty.getSource()),
+                                            new XAttr(FILE, 
componentProperty.getFile()));
+
+        } else {
+            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()));
+
+        }
+        
+        if ( property.getValue() != null &&  property.getValue() instanceof 
Document ) {
+            try {
+                Document document = (Document)property.getValue();
+                NodeList nodeList = 
document.getDocumentElement().getChildNodes();
+                
+                for ( int count = 0 ; count < nodeList.getLength() ; ++count ) 
{
+                    if ( nodeList.item(count).getNodeType() == 
Node.ELEMENT_NODE ) {
+                        XMLStreamReader reader = 
XMLInputFactory.newInstance().createXMLStreamReader(new 
DOMSource(nodeList.item(count)));
+                        writeElement(reader, writer);
+                    }
+                }
+            } catch ( Exception e ) {
+                throw new ContributionWriteException(e);
+            }
+        }
+        
+        for (Object extension : property.getExtensions()) {
+            extensionProcessor.write(extension, writer);
+        }
+
+        writeEnd(writer);
+    }
+    
+    private void writeElement(XMLStreamReader reader, XMLStreamWriter writer) 
throws XMLStreamException {
+        while (reader.hasNext()) {
+            switch (reader.next()) {
+                case XMLStreamConstants.START_ELEMENT:
+                    QName name = reader.getName();
+                    writer.writeStartElement(name.getPrefix(), 
name.getLocalPart(), name.getNamespaceURI());
+
+                    int count = reader.getNamespaceCount();
+                    for (int i = 0; i < count; i++) {
+                        String prefix = reader.getNamespacePrefix(i);
+                        String ns = reader.getNamespaceURI(i);
+                        writer.writeNamespace(prefix, ns);
+                    }
+
+                    if(!"".equals(name.getNamespaceURI())) {
+                        writer.writeNamespace(name.getPrefix(), 
name.getNamespaceURI());
+                    }
+
+                    // add the attributes for this element
+                    count = reader.getAttributeCount();
+                    for (int i = 0; i < count; i++) {
+                        String ns = reader.getAttributeNamespace(i);
+                        String prefix = reader.getAttributePrefix(i);
+                        String qname = reader.getAttributeLocalName(i);
+                        String value = reader.getAttributeValue(i);
+                        
+                        writer.writeAttribute(prefix, ns, qname, value);
+                    }
+
+                    break;
+                case XMLStreamConstants.CDATA:
+                    writer.writeCData(reader.getText());
+                    break;
+                case XMLStreamConstants.CHARACTERS:
+                    writer.writeCharacters(reader.getText());
+                    break;
+                case XMLStreamConstants.END_ELEMENT:
+                    writer.writeEndElement();
+                    break;
+            }
+        }
+    }
+    
     public void write(Composite composite, XMLStreamWriter writer) throws 
ContributionWriteException {
 
         try {
@@ -604,13 +692,7 @@
             }
 
             for (Property property : composite.getProperties()) {
-                writeStart(writer, PROPERTY, new XAttr(NAME, 
property.getName()));
-
-                for (Object extension : property.getExtensions()) {
-                    extensionProcessor.write(extension, writer);
-                }
-
-                writeEnd(writer);
+                writeProperty(property, writer);
             }
 
             for (Wire wire : composite.getWires()) {

Modified: 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java?rev=571391&r1=571390&r2=571391&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/XAttr.java
 Fri Aug 31 00:43:37 2007
@@ -80,7 +80,7 @@
             String prefix = qname.getPrefix();
             String uri = qname.getNamespaceURI();
             prefix = writer.getPrefix(uri);
-            if (prefix != null) {
+            if (prefix != null && prefix.length() > 0) {
 
                 // Use the prefix already bound to the given uri
                 return prefix + ":" + qname.getLocalPart();

Modified: 
incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java?rev=571391&r1=571390&r2=571391&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/WriteAllTestCase.java
 Fri Aug 31 00:43:37 2007
@@ -19,9 +19,11 @@
 
 package org.apache.tuscany.sca.assembly.xml;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
 
@@ -81,8 +83,18 @@
     public void testReadWriteComposite() throws Exception {
         InputStream is = 
getClass().getResourceAsStream("TestAllCalculator.composite");
         Composite composite = staxProcessor.read(is, Composite.class);
+        
+        verifyComposite(composite);
+        
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         staxProcessor.write(composite, bos);
+        bos.close();
+        
+        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+        composite = staxProcessor.read(bis, Composite.class);
+        
+        verifyComposite(composite);
+        
     }
 
     public void testReadWireWriteComposite() throws Exception {
@@ -108,6 +120,15 @@
         staxProcessor.resolve(constrainingType, resolver);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         staxProcessor.write(constrainingType, bos);
+    }
+    
+    private void verifyComposite(Composite composite) {
+        assertEquals(composite.getProperties().get(0).getName(),"prop1");
+        assertEquals(composite.getProperties().get(0).isMany(), true);
+        assertEquals(composite.getProperties().get(1).getName(),"prop2");
+        assertEquals(composite.getProperties().get(1).isMustSupply(), true);
+        assertEquals(composite.getProperties().get(0).getXSDType(), new 
QName("http://foo";, "MyComplexType"));
+        assertEquals(composite.getProperties().get(1).getXSDElement(), new 
QName("http://www.osoa.org/xmlns/sca/1.0";, "MyComplexPropertyValue1"));
     }
 
 }

Modified: 
incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite?rev=571391&r1=571390&r2=571391&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/TestAllCalculator.composite
 Fri Aug 31 00:43:37 2007
@@ -109,9 +109,9 @@
                 <operation name="multiplyCallback" 
policySets="sns:SecureReliablePolicy" requires="cns:confidentiality" />
             </binding.ws>
         </callback>
-    </reference>
+    </reference> 
 
-    <property name="prop1" xmlns:foo="http://foo";>
+    <property name="prop1" xmlns:foo="http://foo"; many="true" 
type="foo:MyComplexType">
        <ext:testExtension/>
            <MyComplexPropertyValue1 xsi:type="foo:MyComplexType" attr="bar">
             <foo:a>AValue</foo:a>
@@ -122,5 +122,7 @@
             <bar:b xmlns:bar="http://bar";>BoringURI</bar:b>
         </MyComplexPropertyValue2>
     </property>
+    
+    <property name="prop2" xmlns:foo="http://foo"; mustSupply="true" 
element="MyComplexPropertyValue1"/>
 
 </composite>



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

Reply via email to