Author: jmarino
Date: Fri Oct  6 16:10:24 2006
New Revision: 453804

URL: http://svn.apache.org/viewvc?view=rev&rev=453804
Log:
genericize PropertyObjectFactory

Modified:
    
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/PropertyObjectFactoryImpl.java
    
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/StringParserPropertyFactoryTestCase.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java

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=453804&r1=453803&r2=453804
==============================================================================
--- 
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
 Fri Oct  6 16:10:24 2006
@@ -21,6 +21,7 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Map;
+import java.lang.reflect.Type;
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.ParserConfigurationException;
@@ -186,6 +187,7 @@
         return (Implementation<?>) o;
     }
 
+    @SuppressWarnings("unchecked")
     protected void loadProperty(XMLStreamReader reader,
                                 DeploymentContext deploymentContext,
                                 ComponentDefinition<?> componentDefinition) 
throws XMLStreamException,
@@ -193,28 +195,28 @@
         String name = reader.getAttributeValue(null, PROPERTY_NAME_ATTR);
         Implementation<?> implementation = 
componentDefinition.getImplementation();
         ComponentType<?, ?, ?> componentType = 
implementation.getComponentType();
-        Property<?> property = componentType.getProperties().get(name);
+        Property<Type> property = 
(Property<Type>)componentType.getProperties().get(name);
         if (property == null) {
             throw new UndefinedPropertyException(name);
         } else if (OverrideOptions.NO.equals(property.getOverride())) {
             throw new NotOverridablePropertyException(name);
         }
-        PropertyValue<?> propertyValue = null;
+        PropertyValue<Type> propertyValue;
         String source = reader.getAttributeValue(null, PROPERTY_SOURCE_ATTR);
         String file = reader.getAttributeValue(null, PROPERTY_FILE_ATTR);
         if (source != null || file != null) {
-            propertyValue = new PropertyValue(name, source, file);
+            propertyValue = new PropertyValue<Type>(name, source, file);
             LoaderUtil.skipToEndElement(reader);
         } else {
             try {
                 DocumentBuilder documentBuilder = 
DOMHelper.newDocumentBuilder();
                 Document value = StAXUtil.createPropertyValue(reader, 
property.getXmlType(), documentBuilder);
-                propertyValue = new PropertyValue(name, value);
+                propertyValue = new PropertyValue<Type>(name, value);
             } catch (ParserConfigurationException e) {
                 throw new LoaderException(e);
             }
         }
-        ObjectFactory objectFactory = 
propertyFactory.createObjectFactory(property, propertyValue);
+        ObjectFactory<Type> 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=453804&r1=453803&r2=453804
==============================================================================
--- 
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
 Fri Oct  6 16:10:24 2006
@@ -22,29 +22,29 @@
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
-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.PropertyObjectFactory;
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.model.PropertyValue;
 
+import org.apache.tuscany.core.injection.JNDIObjectFactory;
+
 /**
- * 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>
  * &lt;properties&gt; 
&lt;v:myDb&gt;java:comp/env/jdbc/MyDatabase&lt;/v:myDB&gt; &lt;/properties&gt; 
</code>
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class JNDIPropertyFactory implements PropertyObjectFactory {
-    public ObjectFactory createObjectFactory(Property property, PropertyValue 
value) throws LoaderException {
+    public <T> ObjectFactory<T> createObjectFactory(Property<T> property, 
PropertyValue<T> value)
+        throws LoaderException {
         String text = value.getValue().getDocumentElement().getTextContent();
         try {
             Context context = new InitialContext();
-            return new JNDIObjectFactory(context, text);
+            return new JNDIObjectFactory<T>(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=453804&r1=453803&r2=453804
==============================================================================
--- 
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
 Fri Oct  6 16:10:24 2006
@@ -24,25 +24,26 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
-
 import javax.xml.stream.XMLStreamException;
 
-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.PropertyObjectFactory;
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.model.PropertyValue;
 
+import org.apache.tuscany.core.injection.SingletonObjectFactory;
+
 /**
  * Implementation of StAXPropertyFactory that interprets the XML as
- * 
+ *
  * @version $Rev$ $Date$
  */
 @SuppressWarnings("unchecked")
 public class StringParserPropertyFactory implements PropertyObjectFactory {
 
-    public ObjectFactory createObjectFactory(Property property, PropertyValue 
value) throws LoaderException {
+    public <T> ObjectFactory<T> createObjectFactory(Property<T> property, 
PropertyValue<T> value)
+        throws LoaderException {
         String text = value.getValue().getDocumentElement().getTextContent();
         return new SingletonObjectFactory(createInstance(text, 
property.getJavaType()));
     }
@@ -61,7 +62,7 @@
             byte[] instance = new byte[text.length() >> 1];
             for (int i = 0; i < instance.length; i++) {
                 instance[i] =
-                    (byte)(Character.digit(text.charAt(i << 1), 16) << 4 | 
Character.digit(text
+                    (byte) (Character.digit(text.charAt(i << 1), 16) << 4 | 
Character.digit(text
                         .charAt((i << 1) + 1), 16));
             }
             return type.cast(instance);
@@ -104,7 +105,7 @@
         if (editor != null) {
             try {
                 editor.setAsText(text);
-                return (T)editor.getValue();
+                return (T) editor.getValue();
             } catch (IllegalArgumentException e) {
                 // FIXME we should throw something better
                 throw new LoaderException(e);
@@ -132,7 +133,7 @@
             byte[] instance = new byte[text.length() >> 1];
             for (int i = 0; i < instance.length; i++) {
                 instance[i] =
-                    (byte)(Character.digit(text.charAt(i << 1), 16) << 4 | 
Character.digit(text
+                    (byte) (Character.digit(text.charAt(i << 1), 16) << 4 | 
Character.digit(text
                         .charAt((i << 1) + 1), 16));
             }
             return new SingletonObjectFactory<T>(type.cast(instance));
@@ -175,7 +176,7 @@
         if (editor != null) {
             try {
                 editor.setAsText(text);
-                return new SingletonObjectFactory<T>((T)editor.getValue());
+                return new SingletonObjectFactory<T>((T) editor.getValue());
             } catch (IllegalArgumentException e) {
                 // FIXME we should throw something better
                 throw new LoaderException(e);

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.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=453804&r1=453803&r2=453804
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
 Fri Oct  6 16:10:24 2006
@@ -56,7 +56,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public ObjectFactory createObjectFactory(Property property, PropertyValue 
value) {
+    public <T> ObjectFactory<T> createObjectFactory(Property<T> property, 
PropertyValue<T> value) {
         if (mediator == null) {
             return new SimplePropertyObjectFactory(property, value.getValue());
         }

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=453804&r1=453803&r2=453804
==============================================================================
--- 
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
 Fri Oct  6 16:10:24 2006
@@ -33,7 +33,7 @@
  */
 public class StringParserPropertyFactoryTestCase extends TestCase {
 
-    private <T> PropertyValue<T> mock(Class<T> cls, String value) {
+    private <T> PropertyValue<T> mock(String value) {
         Document document = EasyMock.createMock(Document.class);
         Element element = EasyMock.createMock(Element.class);
         EasyMock.expect(document.getDocumentElement()).andReturn(element);
@@ -47,7 +47,7 @@
         StringParserPropertyFactory factory = new 
StringParserPropertyFactory();
         Property<Integer> property = new Property<Integer>();
         property.setJavaType(Integer.class);
-        PropertyValue<Integer> propertyValue = mock(Integer.class, "1");
+        PropertyValue<Integer> propertyValue = mock("1");
         ObjectFactory<Integer> oFactory = 
factory.createObjectFactory(property, propertyValue);
         assertEquals(1, oFactory.getInstance().intValue());
     }
@@ -56,7 +56,7 @@
         StringParserPropertyFactory factory = new 
StringParserPropertyFactory();
         Property<Integer> property = new Property<Integer>();
         property.setJavaType(Integer.TYPE);
-        PropertyValue<Integer> propertyValue = mock(Integer.TYPE, "1");
+        PropertyValue<Integer> propertyValue = mock("1");
         ObjectFactory<Integer> oFactory = 
factory.createObjectFactory(property, propertyValue);
         assertEquals(1, oFactory.getInstance().intValue());
     }
@@ -65,7 +65,7 @@
         StringParserPropertyFactory factory = new 
StringParserPropertyFactory();
         Property<String> property = new Property<String>();
         property.setJavaType(String.class);
-        PropertyValue<String> propertyValue = mock(String.class, "1");
+        PropertyValue<String> propertyValue = mock("1");
         ObjectFactory<String> oFactory = factory.createObjectFactory(property, 
propertyValue);
         assertEquals("1", oFactory.getInstance());
     }
@@ -74,7 +74,7 @@
         StringParserPropertyFactory factory = new 
StringParserPropertyFactory();
         Property<byte[]> property = new Property<byte[]>();
         property.setJavaType(byte[].class);
-        PropertyValue<byte[]> propertyValue = mock(byte[].class, "1");
+        PropertyValue<byte[]> propertyValue = mock("1");
         ObjectFactory<byte[]> oFactory = factory.createObjectFactory(property, 
propertyValue);
         byte[] result = oFactory.getInstance();
         byte[] expected = "1".getBytes();
@@ -90,7 +90,7 @@
         StringParserPropertyFactory factory = new 
StringParserPropertyFactory();
         Property<Boolean> property = new Property<Boolean>();
         property.setJavaType(Boolean.class);
-        PropertyValue<Boolean> propertyValue = mock(Boolean.class, "true");
+        PropertyValue<Boolean> propertyValue = mock("true");
         ObjectFactory<Boolean> oFactory = 
factory.createObjectFactory(property, propertyValue);
         assertTrue(oFactory.getInstance());
     }
@@ -99,7 +99,7 @@
         StringParserPropertyFactory factory = new 
StringParserPropertyFactory();
         Property<Boolean> property = new Property<Boolean>();
         property.setJavaType(Boolean.TYPE);
-        PropertyValue<Boolean> propertyValue = mock(Boolean.TYPE, "true");
+        PropertyValue<Boolean> propertyValue = mock("true");
         ObjectFactory<Boolean> oFactory = 
factory.createObjectFactory(property, propertyValue);
         assertTrue(oFactory.getInstance());
     }
@@ -108,7 +108,7 @@
         StringParserPropertyFactory factory = new 
StringParserPropertyFactory();
         Property<Foo> property = new Property<Foo>();
         property.setJavaType(Foo.class);
-        PropertyValue<Foo> propertyValue = mock(Foo.class, "test");
+        PropertyValue<Foo> propertyValue = mock("test");
         ObjectFactory<Foo> oFactory = factory.createObjectFactory(property, 
propertyValue);
         assertEquals("test", oFactory.getInstance().getFoo());
     }

Modified: 
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=diff&rev=453804&r1=453803&r2=453804
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/PropertyObjectFactory.java
 Fri Oct  6 16:10:24 2006
@@ -24,24 +24,21 @@
 
 /**
  * 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
+     * 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
+     * @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;
+    <T> ObjectFactory<T> createObjectFactory(Property<T> property, 
PropertyValue<T> propertyValue)
+        throws LoaderException;
 }



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

Reply via email to