You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sv...@apache.org on 2007/02/23 19:50:44 UTC

svn commit: r511044 - in /incubator/tuscany/branches/sca-java-integration/sca/kernel/spi: ./ src/main/java/org/apache/tuscany/spi/deployer/ src/main/java/org/apache/tuscany/spi/loader/ src/main/java/org/apache/tuscany/spi/model/ src/main/java/org/apach...

Author: svkrish
Date: Fri Feb 23 10:50:43 2007
New Revision: 511044

URL: http://svn.apache.org/viewvc?view=rev&rev=511044
Log:
Updates to support Multivalued Properties

Modified:
    incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/.checkstyle
    incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/ContributionProcessor.java
    incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java
    incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Property.java
    incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/PropertyValue.java
    incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/util/stax/StaxUtil.java

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/.checkstyle
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/.checkstyle?view=diff&rev=511044&r1=511043&r2=511044
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/.checkstyle (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/.checkstyle Fri Feb 23 10:50:43 2007
@@ -3,7 +3,7 @@
     <local-check-config name="Tuscany" location="F:\TuscanyLatest\buildtools\src\main\resources\tuscany-checkstyle.xml" type="external" description="">
         <additional-data name="protect-config-file" value="false"/>
     </local-check-config>
-    <fileset name="all" enabled="true" check-config-name="Tuscany Checks" local="false">
+    <fileset name="all" enabled="true" check-config-name="Tuscany" local="false">
         <file-match-pattern match-pattern="." include-pattern="true"/>
     </fileset>
 </fileset-config>

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/ContributionProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/ContributionProcessor.java?view=diff&rev=511044&r1=511043&r2=511044
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/ContributionProcessor.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/ContributionProcessor.java Fri Feb 23 10:50:43 2007
@@ -47,7 +47,7 @@
      */
     void processContent(Contribution contribution, URI source, InputStream inputStream) throws DeploymentException,
         IOException;
-
+ 
     /**
      * Process a contribution from another model object. It will be used for the
      * case that one artifact has other inline artifacts, for example, the WSDL

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java?view=diff&rev=511044&r1=511043&r2=511044
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java Fri Feb 23 10:50:43 2007
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.spi.loader;
 
+import java.util.List;
+
 import org.apache.tuscany.spi.ObjectFactory;
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.model.PropertyValue;
@@ -41,4 +43,7 @@
      */
     <T> ObjectFactory<T> createObjectFactory(Property<T> property, PropertyValue<T> propertyValue)
         throws LoaderException;
+    
+    <T> ObjectFactory<List<T>> createListObjectFactory(Property<T> property, PropertyValue<T> propertyValue)
+    throws LoaderException;
 }

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Property.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Property.java?view=diff&rev=511044&r1=511043&r2=511044
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Property.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Property.java Fri Feb 23 10:50:43 2007
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.spi.model;
 
+import java.util.List;
+
 import javax.xml.namespace.QName;
 
 import org.w3c.dom.Document;
@@ -31,20 +33,26 @@
  */
 public class Property<T> extends ModelObject {
     private String name;
-    private ObjectFactory<T> defaultValueFactory;
+    private ObjectFactory<?> defaultValueFactory;
     private QName xmlType;
+    private QName xmlElement;
     private Class<T> javaType;
     private boolean many;
-    private boolean noDefault;
-    private Document defaultValue;
+    private boolean mustSupply;
+    private List<Document> defaultValues;
+    
 
     public Property() {
+        mustSupply = false;
+        many = false;
     }
 
     public Property(String name, QName xmlType, Class<T> javaType) {
         this.name = name;
         this.xmlType = xmlType;
         this.javaType = javaType;
+        mustSupply = false;
+        many = false;
     }
 
     public String getName() {
@@ -55,13 +63,17 @@
         this.name = name;
     }
 
-    public ObjectFactory<T> getDefaultValueFactory() {
+    public ObjectFactory<?> getDefaultValueFactory() {
         return defaultValueFactory;
     }
 
     public void setDefaultValueFactory(ObjectFactory<T> factory) {
         this.defaultValueFactory = factory;
     }
+    
+    public void setDefaultMultiValueFactory(ObjectFactory<List<T>> factory) {
+        this.defaultValueFactory = factory;
+    }
 
     public QName getXmlType() {
         return xmlType;
@@ -87,19 +99,35 @@
         this.many = many;
     }
 
-    public boolean isNoDefault() {
-        return noDefault;
+    public boolean isMustSupply() {
+        return mustSupply;
     }
 
-    public void setNoDefault(boolean noDefault) {
-        this.noDefault = noDefault;
+    public void setMustSupply(boolean mustSupply) {
+        this.mustSupply = mustSupply;
     }
 
-    public Document getDefaultValue() {
+    /*public Document getDefaultValue() {
         return defaultValue;
     }
 
     public void setDefaultValue(Document defaultValue) {
         this.defaultValue = defaultValue;
+    }*/
+
+    public QName getXmlElement() {
+        return xmlElement;
+    }
+
+    public void setXmlElement(QName xmlElement) {
+        this.xmlElement = xmlElement;
+    }
+
+    public List<Document> getDefaultValues() {
+        return defaultValues;
+    }
+
+    public void setDefaultValues(List<Document> defaultValues) {
+        this.defaultValues = defaultValues;
     }
 }

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/PropertyValue.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/PropertyValue.java?view=diff&rev=511044&r1=511043&r2=511044
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/PropertyValue.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/PropertyValue.java Fri Feb 23 10:50:43 2007
@@ -18,20 +18,21 @@
  */
 package org.apache.tuscany.spi.model;
 
+import java.util.List;
+
 import org.apache.tuscany.spi.ObjectFactory;
 import org.w3c.dom.Document;
 
 /**
  * Represents a configured component property
- *
  * @version $Rev$ $Date$
  */
 public class PropertyValue<T> extends ModelObject {
     private String name;
     private String source;
     private String file;
-    private Document value;
-    private ObjectFactory<T> valueFactory;
+    private List<Document> value;
+    private ObjectFactory<?> valueFactory;
 
     public PropertyValue() {
     }
@@ -53,12 +54,12 @@
      * @param name
      * @param value
      */
-    public PropertyValue(String name, Document value) {
+    public PropertyValue(String name, List<Document> value) {
         this.name = name;
         this.value = value;
     }
     
-    public PropertyValue(String name, ObjectFactory<T> valueFactory) {
+    public PropertyValue(String name, ObjectFactory<?> valueFactory) {
         this.name = name;
         this.valueFactory = valueFactory;
     }
@@ -96,19 +97,24 @@
         this.source = source;
     }
 
-    public ObjectFactory<T> getValueFactory() {
+    public ObjectFactory<?> getValueFactory() {
         return valueFactory;
     }
 
-    public void setValueFactory(ObjectFactory<T> valueFactory) {
+    public void setValueFactory(ObjectFactory<?> valueFactory) {
         this.valueFactory = valueFactory;
     }
+    
+    public void setMultiValueFactory(ObjectFactory<List<T>> valueFactory) {
+        this.valueFactory = valueFactory;
+    }
+    
 
-    public Document getValue() {
+    public List<Document> getValue() {
         return value;
     }
 
-    public void setValue(Document value) {
+    public void setValue(List<Document> value) {
         this.value = value;
     }
 

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/util/stax/StaxUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/util/stax/StaxUtil.java?view=diff&rev=511044&r1=511043&r2=511044
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/util/stax/StaxUtil.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/util/stax/StaxUtil.java Fri Feb 23 10:50:43 2007
@@ -18,9 +18,13 @@
  */
 package org.apache.tuscany.spi.util.stax;
 
+import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
+
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.xml.XMLConstants;
@@ -31,6 +35,9 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.tuscany.spi.databinding.SimpleTypeMapper;
+import org.apache.tuscany.spi.databinding.extension.DOMHelper;
+import org.apache.tuscany.spi.databinding.extension.SimpleTypeMapperExtension;
 import org.apache.tuscany.spi.model.InteractionScope;
 import org.apache.tuscany.spi.model.Multiplicity;
 import org.w3c.dom.Attr;
@@ -41,16 +48,18 @@
 /**
  * Utility for stax operations.
  * 
- * @version $Revision$ $Date$
- *
+ * @version $Revision$ $Date: 2007-02-01 05:37:32 +0530 (Thu, 01 Feb
+ *          2007) $
  */
 public abstract class StaxUtil {
 
     /** XML input factory. */
     private static final XMLInputFactory xmlFactory =
-        XMLInputFactory.newInstance("javax.xml.stream.XMLInputFactory", StaxUtil.class.getClassLoader());;
+        XMLInputFactory.newInstance("javax.xml.stream.XMLInputFactory", StaxUtil.class
+            .getClassLoader());
 
-    private static final Map<String, Multiplicity> MULTIPLICITY = new HashMap<String, Multiplicity>(4);
+    private static final Map<String, Multiplicity> MULTIPLICITY =
+        new HashMap<String, Multiplicity>(4);
 
     static {
         MULTIPLICITY.put("0..1", Multiplicity.ZERO_ONE);
@@ -88,12 +97,27 @@
             return InteractionScope.NONCONVERSATIONAL;
         }
     }
-
-    public static Document createPropertyValue(XMLStreamReader reader, QName type, DocumentBuilder builder)
-        throws XMLStreamException {
-        Document doc = builder.newDocument();
-
-        // root element has no namespace and local name "value"
+    
+    public static List<Document> createPropertyValues(XMLStreamReader reader,
+                                                      QName type,
+                                                      QName element,
+                                                      DocumentBuilder builder) throws XMLStreamException {
+       
+        final QName PROPERTY = new QName(XML_NAMESPACE_1_0, "property");
+        List<Document> propertyValues = new ArrayList<Document>();
+        Document value = null;
+        do {
+            value = StaxUtil.createPropertyValue(reader, type, element, builder);
+            if (value != null) {
+                propertyValues.add(value);
+            }
+        } while (!PROPERTY.equals(reader.getName()));
+        return propertyValues;
+    }
+           
+    
+    private static Element createDefaultRootElement(QName type, Document doc) {
+        
         Element root = doc.createElementNS(null, "value");
         if (type != null) {
             Attr xsi = doc.createAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns:xsi");
@@ -104,20 +128,61 @@
             if (prefix == null || prefix.length() == 0) {
                 prefix = "ns";
             }
-            Attr typeXmlns = doc.createAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns:" + prefix);
+            Attr typeXmlns =
+                doc.createAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns:" + prefix);
             typeXmlns.setValue(type.getNamespaceURI());
             root.setAttributeNodeNS(typeXmlns);
 
-            Attr xsiType = doc.createAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "xsi:type");
+            Attr xsiType =
+                doc.createAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "xsi:type");
             xsiType.setValue(prefix + ":" + type.getLocalPart());
             root.setAttributeNodeNS(xsiType);
+        } 
+        return root;
+    }
+           
+    
+    public static Document createPropertyValue(XMLStreamReader reader,
+                                               QName type,
+                                               QName element,
+                                               DocumentBuilder builder
+                                               ) throws XMLStreamException {
+        Document doc = null;
+        try {
+        doc = builder.newDocument();
+        } catch ( Exception e ) { e.printStackTrace();}
+        if (element == null && type != null && SimpleTypeMapperExtension.isSimpleXSDType(type)) {
+            // root element has no namespace and local name "value"
+            Element root = createDefaultRootElement(type, doc);   
+            doc.appendChild(root);
+            loadPropertyValue(reader, root, doc);
+            if (!isValueDefined(root)) {
+                return null;
+            }
+            
+        } else {
+            loadPropertyValue(reader, null, doc);
+            if (doc.getChildNodes().getLength() == 0) {
+                return null;
+            }
         }
-        doc.appendChild(root);
-
-        loadPropertyValue(reader, root);
         return doc;
     }
-
+    
+    
+    private static boolean isValueDefined(Element value) {
+        if (value.hasChildNodes()) {
+            Node childNode = value.getFirstChild();
+            if (childNode.getNodeType() == Document.ELEMENT_NODE 
+                || (childNode.getNodeType() == Document.TEXT_NODE 
+                    && childNode.getTextContent().trim().length() > 0)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+     
     /**
      * Load a property value specification from an StAX stream into a DOM
      * Document. Only elements, text and attributes are processed; all comments
@@ -126,14 +191,14 @@
      * @param reader the stream to read from
      * @param root the DOM node to load
      */
-    public static void loadPropertyValue(XMLStreamReader reader, Node root) throws XMLStreamException {
-        Document document = root.getOwnerDocument();
+    public static void loadPropertyValue(XMLStreamReader reader, Node root, Document document) throws XMLStreamException {
         Node current = root;
         while (true) {
             switch (reader.next()) {
                 case XMLStreamConstants.START_ELEMENT:
                     QName name = reader.getName();
-                    Element child = document.createElementNS(name.getNamespaceURI(), name.getLocalPart());
+                    Element child =
+                        document.createElementNS(name.getNamespaceURI(), name.getLocalPart());
 
                     // add the attributes for this element
                     int count = reader.getAttributeCount();
@@ -145,14 +210,24 @@
                     }
 
                     // push the new element and make it the current one
-                    current.appendChild(child);
+                    if (root == null) {
+                        document.appendChild(child);
+                        root = child;
+                    } else {
+                        current.appendChild(child);
+                    }
                     current = child;
+
                     break;
                 case XMLStreamConstants.CDATA:
-                    current.appendChild(document.createCDATASection(reader.getText()));
+                    if (current != null) {
+                        current.appendChild(document.createCDATASection(reader.getText()));
+                    }
                     break;
                 case XMLStreamConstants.CHARACTERS:
-                    current.appendChild(document.createTextNode(reader.getText()));
+                    if (current != null) {
+                        current.appendChild(document.createTextNode(reader.getText()));
+                    }
                     break;
                 case XMLStreamConstants.END_ELEMENT:
                     // if we are back at the root then we are done
@@ -278,7 +353,8 @@
         QName qname = reader.getName();
         String namePrefix = qname.getPrefix();
         String localPart = qname.getLocalPart();
-        String name = namePrefix == null || "".equals(namePrefix) ? localPart : namePrefix + ":" + localPart;
+        String name =
+            namePrefix == null || "".equals(namePrefix) ? localPart : namePrefix + ":" + localPart;
         return name;
     }
 



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