You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2006/10/04 19:45:03 UTC
svn commit: r452952 - in /incubator/tuscany/java:
samples/sca/helloworldws/src/main/webapp/META-INF/tuscany/
sca/commands/launcher/src/main/resources/META-INF/tuscany/
sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/
sca/kernel/core/src...
Author: rfeng
Date: Wed Oct 4 10:45:02 2006
New Revision: 452952
URL: http://svn.apache.org/viewvc?view=rev&rev=452952
Log:
Further improve the property loading so that the PropertyObjectFactoryImpl will provide databinding-aware ObjectFactory
Added:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
- copied, changed from r452761, incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactory.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java (with props)
Removed:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactory.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/StAXPropertyFactory.java
Modified:
incubator/tuscany/java/samples/sca/helloworldws/src/main/webapp/META-INF/tuscany/webapp.scdl
incubator/tuscany/java/sca/commands/launcher/src/main/resources/META-INF/tuscany/system.scdl
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/SimplePropertyObjectFactory.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/StringParserPropertyFactoryTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/SimpleType2JavaTransformer.java
incubator/tuscany/java/sca/runtime/webapp-host/src/main/resources/META-INF/tuscany/webapp.scdl
incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/system.scdl
Modified: incubator/tuscany/java/samples/sca/helloworldws/src/main/webapp/META-INF/tuscany/webapp.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/helloworldws/src/main/webapp/META-INF/tuscany/webapp.scdl?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/samples/sca/helloworldws/src/main/webapp/META-INF/tuscany/webapp.scdl (original)
+++ incubator/tuscany/java/samples/sca/helloworldws/src/main/webapp/META-INF/tuscany/webapp.scdl Wed Oct 4 10:45:02 2006
@@ -120,7 +120,7 @@
</component>
<component name="propertyFactory">
- <system:implementation.system class="org.apache.tuscany.core.loader.StringParserPropertyFactory"/>
+ <system:implementation.system class="org.apache.tuscany.core.property.PropertyObjectFactoryImpl"/>
</component>
<component name="artifactRepository">
Modified: incubator/tuscany/java/sca/commands/launcher/src/main/resources/META-INF/tuscany/system.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/commands/launcher/src/main/resources/META-INF/tuscany/system.scdl?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/commands/launcher/src/main/resources/META-INF/tuscany/system.scdl (original)
+++ incubator/tuscany/java/sca/commands/launcher/src/main/resources/META-INF/tuscany/system.scdl Wed Oct 4 10:45:02 2006
@@ -118,7 +118,7 @@
</component>
<component name="propertyFactory">
- <system:implementation.system class="org.apache.tuscany.core.loader.StringParserPropertyFactory"/>
+ <system:implementation.system class="org.apache.tuscany.core.property.PropertyObjectFactoryImpl"/>
</component>
<!-- component that scans the extension directory -->
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java Wed Oct 4 10:45:02 2006
@@ -18,6 +18,7 @@
*/
package org.apache.tuscany.core.bootstrap;
+import org.apache.tuscany.host.MonitorFactory;
import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
import org.apache.tuscany.spi.builder.Connector;
import org.apache.tuscany.spi.component.ScopeRegistry;
@@ -25,9 +26,7 @@
import org.apache.tuscany.spi.deployer.Deployer;
import org.apache.tuscany.spi.implementation.java.Introspector;
import org.apache.tuscany.spi.loader.Loader;
-import org.apache.tuscany.spi.loader.StAXPropertyFactory;
-
-import org.apache.tuscany.host.MonitorFactory;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
/**
* Interface that abstracts the process used to create a running Tuscany system. Implementation of this may provide
@@ -70,7 +69,7 @@
* @param introspector the introspector to be used to extract component type information from a Java class
* @return a new prmordial Loader
*/
- Loader createLoader(StAXPropertyFactory propertyFactory, Introspector introspector);
+ Loader createLoader(PropertyObjectFactory propertyFactory, Introspector introspector);
/**
* Create a ScopeRegistry that supports the Scopes supported for primordial components
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Wed Oct 4 10:45:02 2006
@@ -20,22 +20,6 @@
import javax.xml.stream.XMLInputFactory;
-import org.apache.tuscany.spi.bootstrap.ComponentNames;
-import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
-import org.apache.tuscany.spi.builder.Builder;
-import org.apache.tuscany.spi.builder.BuilderRegistry;
-import org.apache.tuscany.spi.builder.Connector;
-import org.apache.tuscany.spi.component.CompositeComponent;
-import org.apache.tuscany.spi.component.ScopeRegistry;
-import org.apache.tuscany.spi.component.WorkContext;
-import org.apache.tuscany.spi.deployer.Deployer;
-import org.apache.tuscany.spi.extension.LoaderExtension;
-import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorRegistry;
-import org.apache.tuscany.spi.implementation.java.Introspector;
-import org.apache.tuscany.spi.implementation.java.ImplementationProcessorService;
-import org.apache.tuscany.spi.loader.LoaderRegistry;
-import org.apache.tuscany.spi.loader.StAXPropertyFactory;
-
import org.apache.tuscany.core.builder.BuilderRegistryImpl;
import org.apache.tuscany.core.builder.ConnectorImpl;
import org.apache.tuscany.core.component.WorkContextImpl;
@@ -74,8 +58,23 @@
import org.apache.tuscany.core.loader.PropertyLoader;
import org.apache.tuscany.core.loader.ReferenceLoader;
import org.apache.tuscany.core.loader.ServiceLoader;
-import org.apache.tuscany.core.loader.StringParserPropertyFactory;
+import org.apache.tuscany.core.property.PropertyObjectFactoryImpl;
import org.apache.tuscany.host.MonitorFactory;
+import org.apache.tuscany.spi.bootstrap.ComponentNames;
+import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
+import org.apache.tuscany.spi.builder.Builder;
+import org.apache.tuscany.spi.builder.BuilderRegistry;
+import org.apache.tuscany.spi.builder.Connector;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.ScopeRegistry;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.deployer.Deployer;
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorRegistry;
+import org.apache.tuscany.spi.implementation.java.ImplementationProcessorService;
+import org.apache.tuscany.spi.implementation.java.Introspector;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
/**
* A default implementation of a Bootstrapper. Please see the documentation on the individual methods for how the
@@ -134,7 +133,7 @@
Builder builder = createBuilder(scopeRegistry);
JavaInterfaceProcessorRegistry interfaceIntrospector = new JavaInterfaceProcessorRegistryImpl();
Introspector introspector = createIntrospector(interfaceIntrospector);
- LoaderRegistry loader = createLoader(new StringParserPropertyFactory(), introspector);
+ LoaderRegistry loader = createLoader(new PropertyObjectFactoryImpl(), introspector);
return new DeployerImpl(xmlFactory, loader, builder);
}
@@ -163,7 +162,7 @@
* @param introspector the Introspector to be used to inspect component implementations
* @return a new StAX XML loader
*/
- public LoaderRegistry createLoader(StAXPropertyFactory propertyFactory, Introspector introspector) {
+ public LoaderRegistry createLoader(PropertyObjectFactory propertyFactory, Introspector introspector) {
LoaderRegistryImpl loaderRegistry =
new LoaderRegistryImpl(monitorFactory.getMonitor(LoaderRegistryImpl.Monitor.class));
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Wed Oct 4 10:45:02 2006
@@ -34,6 +34,7 @@
import org.apache.tuscany.core.implementation.system.model.SystemImplementation;
import org.apache.tuscany.core.property.SimplePropertyObjectFactory;
+import org.apache.tuscany.spi.ObjectFactory;
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.databinding.extension.DOMHelper;
@@ -47,7 +48,7 @@
import org.apache.tuscany.spi.loader.MissingImplementationException;
import org.apache.tuscany.spi.loader.MissingMustOverridePropertyException;
import org.apache.tuscany.spi.loader.NotOverridablePropertyException;
-import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
import org.apache.tuscany.spi.loader.UndefinedPropertyException;
import org.apache.tuscany.spi.model.ComponentDefinition;
import org.apache.tuscany.spi.model.ComponentType;
@@ -73,10 +74,13 @@
private static final String PROPERTY_FILE_ATTR = "file";
private static final String PROPERTY_NAME_ATTR = "name";
private static final String PROPERTY_SOURCE_ATTR = "source";
+
+ private PropertyObjectFactory propertyFactory;
- @Constructor( {"registry", "defaultPropertyFactory"})
- public ComponentLoader(@Autowire LoaderRegistry registry, @Autowire StAXPropertyFactory propertyFactory) {
+ @Constructor( {"registry", "propertyFactory"})
+ public ComponentLoader(@Autowire LoaderRegistry registry, @Autowire PropertyObjectFactory propertyFactory) {
super(registry);
+ this.propertyFactory = propertyFactory;
}
@SuppressWarnings("unchecked")
@@ -209,7 +213,9 @@
throw new LoaderException(e);
}
}
- propertyValue.setValueFactory(new SimplePropertyObjectFactory(property, propertyValue.getValue()));
+ ObjectFactory objectFactory = propertyFactory.createObjectFactory(property, propertyValue);
+ // propertyValue.setValueFactory(new SimplePropertyObjectFactory(property, propertyValue.getValue()));
+ propertyValue.setValueFactory(objectFactory);
componentDefinition.add(propertyValue);
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/JNDIPropertyFactory.java Wed Oct 4 10:45:02 2006
@@ -21,34 +21,30 @@
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
import org.apache.tuscany.core.injection.JNDIObjectFactory;
import org.apache.tuscany.spi.ObjectFactory;
import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.model.PropertyValue;
/**
- * A StAXPropertyFactory that creates property values by looking them up in the default JNDI InitialContext.
- * <p/>
- * This can be used to locate resources in a J2EE environment and inject them as configuration properties. For example,
- * to access a database a component could write: <code> &at;Property DataSource myDB; </code> and configure with <code>
+ * A StAXPropertyFactory that creates property values by looking them up in the
+ * default JNDI InitialContext. <p/> This can be used to locate resources in a
+ * J2EE environment and inject them as configuration properties. For example, to
+ * access a database a component could write:
+ * <code> &at;Property DataSource myDB; </code> and configure with <code>
* <properties> <v:myDb>java:comp/env/jdbc/MyDatabase</v:myDB> </properties> </code>
- *
+ *
* @version $Rev$ $Date$
*/
-public class JNDIPropertyFactory implements StAXPropertyFactory {
- public <T> ObjectFactory<T> createObjectFactory(XMLStreamReader reader,
- Property<T> property)
- throws XMLStreamException, LoaderException {
- Class<T> type = property.getJavaType();
- assert type != null : "property type is null";
- String text = reader.getElementText();
+public class JNDIPropertyFactory implements PropertyObjectFactory {
+ public ObjectFactory createObjectFactory(Property property, PropertyValue value) throws LoaderException {
+ String text = value.getValue().getDocumentElement().getTextContent();
try {
Context context = new InitialContext();
- return new JNDIObjectFactory<T>(context, text);
+ return new JNDIObjectFactory(context, text);
} catch (NamingException e) {
throw new LoaderException(e);
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/StringParserPropertyFactory.java Wed Oct 4 10:45:02 2006
@@ -24,15 +24,15 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+
import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
+import org.apache.tuscany.core.injection.SingletonObjectFactory;
import org.apache.tuscany.spi.ObjectFactory;
import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
import org.apache.tuscany.spi.model.Property;
-
-import org.apache.tuscany.core.injection.SingletonObjectFactory;
+import org.apache.tuscany.spi.model.PropertyValue;
/**
* Implementation of StAXPropertyFactory that interprets the XML as
@@ -40,15 +40,14 @@
* @version $Rev$ $Date$
*/
@SuppressWarnings("unchecked")
-public class StringParserPropertyFactory implements StAXPropertyFactory {
+public class StringParserPropertyFactory implements PropertyObjectFactory {
- public <T> ObjectFactory<T> createObjectFactory(XMLStreamReader reader, Property<T> property)
- throws XMLStreamException, LoaderException {
- String text = reader.getElementText();
- return new SingletonObjectFactory<T>(createInstance(text, property.getJavaType()));
+ public ObjectFactory createObjectFactory(Property property, PropertyValue value) throws LoaderException {
+ String text = value.getValue().getDocumentElement().getTextContent();
+ return new SingletonObjectFactory(createInstance(text, property.getJavaType()));
}
- public <T> T createInstance(String text, Class<T> type) throws XMLStreamException, LoaderException {
+ public <T> T createInstance(String text, Class<T> type) throws LoaderException {
// Class<T> type = property.getJavaType();
assert type != null : "property type is null";
Copied: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java (from r452761, incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactory.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java?view=diff&rev=452952&p1=incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactory.java&r1=452761&p2=incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactory.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java Wed Oct 4 10:45:02 2006
@@ -24,52 +24,74 @@
import org.apache.tuscany.core.databinding.xml.DOMDataBinding;
import org.apache.tuscany.spi.ObjectCreationException;
import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.databinding.DataBinding;
import org.apache.tuscany.spi.databinding.DataBindingRegistry;
import org.apache.tuscany.spi.databinding.Mediator;
import org.apache.tuscany.spi.idl.ElementInfo;
import org.apache.tuscany.spi.idl.TypeInfo;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
import org.apache.tuscany.spi.model.DataType;
import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.model.PropertyValue;
+import org.osoa.sca.annotations.Constructor;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
import org.w3c.dom.Node;
-public class PropertyObjectFactory<P> implements ObjectFactory<P> {
+@Service(PropertyObjectFactory.class)
+@Scope("MODULE")
+public class PropertyObjectFactoryImpl implements PropertyObjectFactory {
private DataBindingRegistry registry;
private Mediator mediator;
- private Property<P> property;
- private Node value;
- private DataType<QName> sourceDataType;
- private DataType<?> targetDataType;
-
- public PropertyObjectFactory(DataBindingRegistry registry,
- Mediator mediator,
- Property<P> property,
- Node value) {
+ public PropertyObjectFactoryImpl() {
+ }
+
+ @Constructor({"registry", "mediator"})
+ public PropertyObjectFactoryImpl(@Autowire DataBindingRegistry registry, @Autowire Mediator mediator) {
super();
this.registry = registry;
this.mediator = mediator;
- this.property = property;
- this.value = value;
- sourceDataType = new DataType<QName>(DOMDataBinding.NAME, Node.class, this.property.getXmlType());
- TypeInfo typeInfo = new TypeInfo(property.getXmlType(), true, null);
- ElementInfo elementInfo = new ElementInfo(null, typeInfo);
- sourceDataType.setMetadata(ElementInfo.class.getName(), elementInfo);
- Class javaType = this.property.getJavaType();
- String dataBinding = (String)property.getExtensions().get(DataBinding.class.getName());
- if (dataBinding != null) {
- targetDataType = new DataType<Class>(dataBinding, javaType, javaType);
- } else {
- targetDataType = this.registry.introspectType(javaType);
- if (targetDataType == null) {
- targetDataType = new DataType<Class>("java.lang.Object", javaType, javaType);
- }
- }
}
@SuppressWarnings("unchecked")
- public P getInstance() throws ObjectCreationException {
- return (P)mediator.mediate(value, sourceDataType, targetDataType, null);
+ public ObjectFactory createObjectFactory(Property property, PropertyValue value) {
+ if (mediator == null) {
+ return new SimplePropertyObjectFactory(property, value.getValue());
+ }
+ return new ObjectFactoryImpl(property, value);
+ }
+
+ public class ObjectFactoryImpl<P> implements ObjectFactory<P> {
+ private Property<P> property;
+ private PropertyValue<P> propertyValue;
+ private DataType<QName> sourceDataType;
+ private DataType<?> targetDataType;
+
+ public ObjectFactoryImpl(Property<P> property, PropertyValue<P> propertyValue) {
+ this.property = property;
+ this.propertyValue = propertyValue;
+ sourceDataType = new DataType<QName>(DOMDataBinding.NAME, Node.class, this.property.getXmlType());
+ TypeInfo typeInfo = new TypeInfo(property.getXmlType(), true, null);
+ ElementInfo elementInfo = new ElementInfo(null, typeInfo);
+ sourceDataType.setMetadata(ElementInfo.class.getName(), elementInfo);
+ Class javaType = this.property.getJavaType();
+ String dataBinding = (String)property.getExtensions().get(DataBinding.class.getName());
+ if (dataBinding != null) {
+ targetDataType = new DataType<Class>(dataBinding, javaType, javaType);
+ } else {
+ targetDataType = registry.introspectType(javaType);
+ if (targetDataType == null) {
+ targetDataType = new DataType<Class>("java.lang.Object", javaType, javaType);
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public P getInstance() throws ObjectCreationException {
+ return (P)mediator.mediate(propertyValue.getValue(), sourceDataType, targetDataType, null);
+ }
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/SimplePropertyObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/SimplePropertyObjectFactory.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/SimplePropertyObjectFactory.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/SimplePropertyObjectFactory.java Wed Oct 4 10:45:02 2006
@@ -30,6 +30,7 @@
private SimpleTypeMapperExtension typeMapper;
private Property<P> property;
private Document value;
+ private P instance;
public SimplePropertyObjectFactory(Property<P> property, Document value) {
super();
@@ -43,12 +44,15 @@
if (value == null) {
return null;
}
- String text = value.getDocumentElement().getTextContent();
- TypeInfo xmlType = typeMapper.getXMLType(property.getJavaType());
- if (xmlType == null) {
- throw new IllegalArgumentException("Complex property is not supported.");
+ if (instance == null) {
+ String text = value.getDocumentElement().getTextContent();
+ TypeInfo xmlType = typeMapper.getXMLType(property.getJavaType());
+ if (xmlType == null) {
+ throw new IllegalArgumentException("Complex property is not supported.");
+ }
+ instance = (P)typeMapper.toJavaObject(xmlType, text, null);
}
- return (P)typeMapper.toJavaObject(xmlType, text, null);
+ return instance;
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java Wed Oct 4 10:45:02 2006
@@ -18,31 +18,31 @@
*/
package org.apache.tuscany.core.loader;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
+
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
-import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
+import junit.framework.TestCase;
+import org.apache.tuscany.core.implementation.java.JavaImplementation;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.implementation.java.PojoComponentType;
import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.loader.LoaderRegistry;
-import org.apache.tuscany.spi.loader.StAXPropertyFactory;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
import org.apache.tuscany.spi.model.ComponentDefinition;
import org.apache.tuscany.spi.model.Implementation;
import org.apache.tuscany.spi.model.Property;
import org.apache.tuscany.spi.model.ReferenceDefinition;
import org.apache.tuscany.spi.model.ServiceDefinition;
-
-import junit.framework.TestCase;
-import org.apache.tuscany.core.implementation.java.JavaImplementation;
import org.easymock.EasyMock;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
/**
* @version $Rev$ $Date$
@@ -54,7 +54,7 @@
private XMLStreamReader mockReader;
private LoaderRegistry mockRegistry;
- private StAXPropertyFactory mockPropertyFactory;
+ private PropertyObjectFactory mockPropertyFactory;
private ComponentLoader loader;
public void testEmptyComponent() throws LoaderException, XMLStreamException {
@@ -131,7 +131,7 @@
super.setUp();
mockReader = EasyMock.createMock(XMLStreamReader.class);
mockRegistry = EasyMock.createMock(LoaderRegistry.class);
- mockPropertyFactory = EasyMock.createMock(StAXPropertyFactory.class);
+ mockPropertyFactory = EasyMock.createMock(PropertyObjectFactory.class);
loader = new ComponentLoader(mockRegistry, mockPropertyFactory);
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/StringParserPropertyFactoryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/StringParserPropertyFactoryTestCase.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/StringParserPropertyFactoryTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/StringParserPropertyFactoryTestCase.java Wed Oct 4 10:45:02 2006
@@ -22,60 +22,61 @@
import org.apache.tuscany.spi.ObjectFactory;
import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.model.PropertyValue;
import junit.framework.TestCase;
import org.easymock.EasyMock;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
/**
* @version $Rev$ $Date$
*/
public class StringParserPropertyFactoryTestCase extends TestCase {
+ private <T> PropertyValue<T> mock(Class<T> cls, String value) {
+ Document document = EasyMock.createMock(Document.class);
+ Element element = EasyMock.createMock(Element.class);
+ EasyMock.expect(document.getDocumentElement()).andReturn(element);
+ EasyMock.expect(element.getTextContent()).andReturn(value);
+ EasyMock.replay(document, element);
+ return new PropertyValue<T>(null, document);
+ }
public void testInteger() throws Exception {
- XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
- EasyMock.expect(reader.getElementText()).andReturn("1");
- EasyMock.replay(reader);
+
StringParserPropertyFactory factory = new StringParserPropertyFactory();
Property<Integer> property = new Property<Integer>();
property.setJavaType(Integer.class);
- ObjectFactory<Integer> oFactory = factory.createObjectFactory(reader, property);
+ PropertyValue<Integer> propertyValue = mock(Integer.class, "1");
+ ObjectFactory<Integer> oFactory = factory.createObjectFactory(property, propertyValue);
assertEquals(1, oFactory.getInstance().intValue());
- EasyMock.verify(reader);
}
public void testPrimitiveInt() throws Exception {
- XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
- EasyMock.expect(reader.getElementText()).andReturn("1");
- EasyMock.replay(reader);
StringParserPropertyFactory factory = new StringParserPropertyFactory();
Property<Integer> property = new Property<Integer>();
property.setJavaType(Integer.TYPE);
- ObjectFactory<Integer> oFactory = factory.createObjectFactory(reader, property);
+ PropertyValue<Integer> propertyValue = mock(Integer.TYPE, "1");
+ ObjectFactory<Integer> oFactory = factory.createObjectFactory(property, propertyValue);
assertEquals(1, oFactory.getInstance().intValue());
- EasyMock.verify(reader);
}
public void testString() throws Exception {
- XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
- EasyMock.expect(reader.getElementText()).andReturn("1");
- EasyMock.replay(reader);
StringParserPropertyFactory factory = new StringParserPropertyFactory();
Property<String> property = new Property<String>();
property.setJavaType(String.class);
- ObjectFactory<String> oFactory = factory.createObjectFactory(reader, property);
+ PropertyValue<String> propertyValue = mock(String.class, "1");
+ ObjectFactory<String> oFactory = factory.createObjectFactory(property, propertyValue);
assertEquals("1", oFactory.getInstance());
- EasyMock.verify(reader);
}
public void testByteArray() throws Exception {
- XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
- EasyMock.expect(reader.getElementText()).andReturn("1");
- EasyMock.replay(reader);
StringParserPropertyFactory factory = new StringParserPropertyFactory();
Property<byte[]> property = new Property<byte[]>();
property.setJavaType(byte[].class);
- ObjectFactory<byte[]> oFactory = factory.createObjectFactory(reader, property);
+ PropertyValue<byte[]> propertyValue = mock(byte[].class, "1");
+ ObjectFactory<byte[]> oFactory = factory.createObjectFactory(property, propertyValue);
byte[] result = oFactory.getInstance();
byte[] expected = "1".getBytes();
for (int i = 0; i < result.length; i++) {
@@ -84,43 +85,33 @@
fail();
}
}
- EasyMock.verify(reader);
}
public void testBoolean() throws Exception {
- XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
- EasyMock.expect(reader.getElementText()).andReturn("true");
- EasyMock.replay(reader);
StringParserPropertyFactory factory = new StringParserPropertyFactory();
Property<Boolean> property = new Property<Boolean>();
property.setJavaType(Boolean.class);
- ObjectFactory<Boolean> oFactory = factory.createObjectFactory(reader, property);
+ PropertyValue<Boolean> propertyValue = mock(Boolean.class, "true");
+ ObjectFactory<Boolean> oFactory = factory.createObjectFactory(property, propertyValue);
assertTrue(oFactory.getInstance());
- EasyMock.verify(reader);
}
public void testPrimitiveBoolean() throws Exception {
- XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
- EasyMock.expect(reader.getElementText()).andReturn("true");
- EasyMock.replay(reader);
StringParserPropertyFactory factory = new StringParserPropertyFactory();
Property<Boolean> property = new Property<Boolean>();
property.setJavaType(Boolean.TYPE);
- ObjectFactory<Boolean> oFactory = factory.createObjectFactory(reader, property);
+ PropertyValue<Boolean> propertyValue = mock(Boolean.TYPE, "true");
+ ObjectFactory<Boolean> oFactory = factory.createObjectFactory(property, propertyValue);
assertTrue(oFactory.getInstance());
- EasyMock.verify(reader);
}
public void testStringConstructor() throws Exception {
- XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
- EasyMock.expect(reader.getElementText()).andReturn("test");
- EasyMock.replay(reader);
StringParserPropertyFactory factory = new StringParserPropertyFactory();
Property<Foo> property = new Property<Foo>();
property.setJavaType(Foo.class);
- ObjectFactory<Foo> oFactory = factory.createObjectFactory(reader, property);
+ PropertyValue<Foo> propertyValue = mock(Foo.class, "test");
+ ObjectFactory<Foo> oFactory = factory.createObjectFactory(property, propertyValue);
assertEquals("test", oFactory.getInstance().getFoo());
- EasyMock.verify(reader);
}
private static class Foo {
@@ -134,6 +125,5 @@
return foo;
}
}
-
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl Wed Oct 4 10:45:02 2006
@@ -105,8 +105,23 @@
<property name="repository">.m2/repository</property>
</component>
+ <!-- DataBinding registry -->
+ <component name="databinding.registry">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.impl.DataBindingRegistryImpl" />
+ </component>
+
+ <!-- DataBinding registry -->
+ <component name="databinding.mediator">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.impl.MediatorImpl" />
+ </component>
+
+ <!-- Transformer registry -->
+ <component name="databinding.transformerRegistry" initLevel="90">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.impl.TransformerRegistryImpl" />
+ </component>
+
<component name="propertyFactory">
- <system:implementation.system class="org.apache.tuscany.core.loader.StringParserPropertyFactory"/>
+ <system:implementation.system class="org.apache.tuscany.core.property.PropertyObjectFactoryImpl"/>
</component>
<component name="policyBuilderRegistry">
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/SimpleType2JavaTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/SimpleType2JavaTransformer.java?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/SimpleType2JavaTransformer.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/SimpleType2JavaTransformer.java Wed Oct 4 10:45:02 2006
@@ -25,25 +25,29 @@
import org.apache.tuscany.spi.idl.TypeInfo;
/**
- * Transformer to convert data from a databinding's representation of simple types to Java Objects
+ * Transformer to convert data from a databinding's representation of simple
+ * types to Java Objects
*/
public abstract class SimpleType2JavaTransformer<T> extends TransformerExtension<T, Object> implements
- PullTransformer<T, Object> {
+ PullTransformer<T, Object> {
protected SimpleTypeMapper mapper;
public SimpleType2JavaTransformer() {
this.mapper = new SimpleTypeMapperExtension();
}
-
+
public SimpleType2JavaTransformer(SimpleTypeMapper mapper) {
this.mapper = (mapper != null) ? mapper : new SimpleTypeMapperExtension();
}
public Object transform(T source, TransformationContext context) {
- ElementInfo element =
- (ElementInfo) context.getSourceDataType().getMetadata(ElementInfo.class.getName());
- TypeInfo simpleType = (TypeInfo) element.getType();
+ TypeInfo simpleType = (TypeInfo)context.getSourceDataType().getMetadata(TypeInfo.class.getName());
+ if (simpleType == null) {
+ ElementInfo element =
+ (ElementInfo)context.getSourceDataType().getMetadata(ElementInfo.class.getName());
+ simpleType = (TypeInfo)element.getType();
+ }
return mapper.toJavaObject(simpleType, getText(source), context);
}
@@ -52,9 +56,14 @@
}
public int getWeight() {
- // Cannot be used for imtermediate
+ // Cannot be used for imtermediate
return 10000;
}
-
+
+ /**
+ * Get the string value from the source
+ * @param source
+ * @return A string
+ */
protected abstract String getText(T source);
}
Added: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java?view=auto&rev=452952
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java Wed Oct 4 10:45:02 2006
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.spi.loader;
+
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.model.PropertyValue;
+
+/**
+ * A factory that will create an ObjectFactory for a property
+ *
+ * @version $Rev$ $Date$
+ */
+public interface PropertyObjectFactory {
+ /**
+ * Return an ObjectFactory for instances of a property defined in an XML.
+ * The ObjectFactory must return instances that can safely be supplied to
+ * component implementations. If the instance is mutable and isolation
+ * between components is required, then the factory must clone or otherwise
+ * protect the implementation from unexpected modifications by other
+ * implementation instances.
+ *
+ * @param property the Property definition that the resulting ObjectFactory
+ * must be able to assign to
+ * @param propertyValue The component configuration of the property
+ * @return an ObjectFactory that can produce instances that can be assigned
+ * to the supplied Property
+ * @throws LoaderException if there is a problem creating the ObjectFactory
+ */
+ ObjectFactory createObjectFactory(Property property, PropertyValue propertyValue) throws LoaderException;
+}
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/runtime/webapp-host/src/main/resources/META-INF/tuscany/webapp.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/webapp-host/src/main/resources/META-INF/tuscany/webapp.scdl?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/runtime/webapp-host/src/main/resources/META-INF/tuscany/webapp.scdl (original)
+++ incubator/tuscany/java/sca/runtime/webapp-host/src/main/resources/META-INF/tuscany/webapp.scdl Wed Oct 4 10:45:02 2006
@@ -124,7 +124,7 @@
</component>
<component name="propertyFactory">
- <system:implementation.system class="org.apache.tuscany.core.loader.StringParserPropertyFactory"/>
+ <system:implementation.system class="org.apache.tuscany.core.property.PropertyObjectFactoryImpl"/>
</component>
<component name="artifactRepository">
Modified: incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/system.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/system.scdl?view=diff&rev=452952&r1=452951&r2=452952
==============================================================================
--- incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/system.scdl (original)
+++ incubator/tuscany/java/sca/test/src/main/resources/META-INF/tuscany/system.scdl Wed Oct 4 10:45:02 2006
@@ -124,7 +124,7 @@
</component>
<component name="propertyFactory">
- <system:implementation.system class="org.apache.tuscany.core.loader.StringParserPropertyFactory"/>
+ <system:implementation.system class="org.apache.tuscany.core.property.PropertyObjectFactoryImpl"/>
</component>
</composite>
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org