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