You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2007/02/13 20:54:04 UTC

svn commit: r507186 - in /incubator/tuscany/java/sca/kernel/core/src: main/java/org/apache/tuscany/core/implementation/ test/java/org/apache/tuscany/core/implementation/

Author: jboynes
Date: Tue Feb 13 11:54:02 2007
New Revision: 507186

URL: http://svn.apache.org/viewvc?view=rev&rev=507186
Log:
support getProperty for POJO components

Added:
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java   (with props)
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponentContextImpl.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoAtomicComponentTestCase.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java?view=diff&rev=507186&r1=507185&r2=507186
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java Tue Feb 13 11:54:02 2007
@@ -25,6 +25,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.osoa.sca.ComponentContext;
 
@@ -62,6 +63,7 @@
     protected Map<String, Member> referenceSites;
     protected Map<String, Member> resourceSites;
     protected Map<String, Member> propertySites;
+    protected Map<String, ObjectFactory<?>> propertyFactories = new ConcurrentHashMap<String, ObjectFactory<?>>();
     protected Map<String, Member> callbackSites;
     protected List<Injector<Object>> injectors;
     protected Class implementationClass;
@@ -162,7 +164,13 @@
                 break;
             }
         }
-        //FIXME throw an error if no injection site found
+
+        propertyFactories.put(name, factory);
+    }
+
+    Object getProperty(String name) {
+        ObjectFactory<?> factory = propertyFactories.get(name);
+        return factory != null ? factory.getInstance() : null;
     }
 
     public void addResourceFactory(String name, ObjectFactory<?> factory) {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponentContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponentContextImpl.java?view=diff&rev=507186&r1=507185&r2=507186
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponentContextImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponentContextImpl.java Tue Feb 13 11:54:02 2007
@@ -50,7 +50,7 @@
     }
 
     public <B> B getProperty(Class<B> type, String propertyName) {
-        return null;
+        return type.cast(component.getProperty(propertyName));
     }
 
     public <B> ServiceReference<B> createSelfReference(Class<B> businessInterface) {

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoAtomicComponentTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoAtomicComponentTestCase.java?view=diff&rev=507186&r1=507185&r2=507186
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoAtomicComponentTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoAtomicComponentTestCase.java Tue Feb 13 11:54:02 2007
@@ -38,13 +38,10 @@
  * @version $Rev$ $Date$
  */
 public class PojoAtomicComponentTestCase extends TestCase {
-    private PojoObjectFactory<Foo> factory;
+    private PojoConfiguration config;
 
     @SuppressWarnings({"unchecked"})
     public void testDestroy() throws Exception {
-        PojoConfiguration config = new PojoConfiguration();
-        config.setName(URI.create("foo"));
-        config.setInstanceFactory(factory);
         EventInvoker<Object> invoker = EasyMock.createMock(EventInvoker.class);
         invoker.invokeEvent(EasyMock.notNull());
         EasyMock.replay(invoker);
@@ -57,9 +54,6 @@
 
     @SuppressWarnings({"unchecked"})
     public void testInit() throws Exception {
-        PojoConfiguration config = new PojoConfiguration();
-        config.setName(URI.create("foo"));
-        config.setInstanceFactory(factory);
         EventInvoker<Object> invoker = EasyMock.createMock(EventInvoker.class);
         invoker.invokeEvent(EasyMock.notNull());
         EasyMock.replay(invoker);
@@ -70,18 +64,12 @@
     }
 
     public void testOptimizable() throws Exception {
-        PojoConfiguration config = new PojoConfiguration();
-        config.setName(URI.create("foo"));
-        config.setInstanceFactory(factory);
         TestAtomicComponent component = new TestAtomicComponent(config);
         assertTrue(component.isOptimizable());
     }
 
     @SuppressWarnings({"unchecked"})
     public void testDestroyableButOptimizable() throws Exception {
-        PojoConfiguration config = new PojoConfiguration();
-        config.setInstanceFactory(factory);
-        config.setName(URI.create("foo"));
         EventInvoker<Object> invoker = EasyMock.createMock(EventInvoker.class);
         invoker.invokeEvent(EasyMock.notNull());
         EasyMock.replay(invoker);
@@ -92,18 +80,12 @@
 
     @SuppressWarnings({"unchecked"})
     public void testStatelessOptimizable() throws Exception {
-        PojoConfiguration config = new PojoConfiguration();
-        config.setName(URI.create("foo"));
-        config.setInstanceFactory(factory);
         TestStatelessAtomicComponent component = new TestStatelessAtomicComponent(config);
         assertTrue(component.isOptimizable());
     }
 
     @SuppressWarnings({"unchecked"})
     public void testNotOptimizable() throws Exception {
-        PojoConfiguration config = new PojoConfiguration();
-        config.setInstanceFactory(factory);
-        config.setName(URI.create("foo"));
         EventInvoker<Object> invoker = EasyMock.createMock(EventInvoker.class);
         invoker.invokeEvent(EasyMock.notNull());
         EasyMock.replay(invoker);
@@ -112,9 +94,24 @@
         assertFalse(component.isOptimizable());
     }
 
+    public void testPropertyAccess() {
+        String value = "Foo!";
+        ObjectFactory objectFactory = EasyMock.createMock(ObjectFactory.class);
+        EasyMock.expect(objectFactory.getInstance()).andReturn(value);
+        EasyMock.replay(objectFactory);
+
+        TestAtomicComponent component = new TestAtomicComponent(config);
+        component.addPropertyFactory("foo", objectFactory);
+        assertSame(value, component.getProperty("foo"));
+    }
+
     protected void setUp() throws Exception {
         super.setUp();
-        factory = new PojoObjectFactory<Foo>(Foo.class.getConstructor());
+        PojoObjectFactory<Foo> factory = new PojoObjectFactory<Foo>(Foo.class.getConstructor());
+
+        config = new PojoConfiguration();
+        config.setInstanceFactory(factory);
+        config.setName(URI.create("foo"));
     }
 
     private class TestAtomicComponent extends PojoAtomicComponent {

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java?view=auto&rev=507186
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java Tue Feb 13 11:54:02 2007
@@ -0,0 +1,78 @@
+/*
+ * 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.core.implementation;
+
+import java.net.URI;
+
+import junit.framework.TestCase;
+import org.easymock.classextension.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class PojoComponentContextImplTestCase extends TestCase {
+    private PojoAtomicComponent component;
+    private PojoComponentContextImpl context;
+
+    public void testURI() {
+        URI uri = URI.create("foo");
+        EasyMock.expect(component.getUri()).andReturn(uri);
+        EasyMock.replay(component);
+        assertEquals(uri.toString(), context.getURI());
+        EasyMock.verify(component);
+    }
+
+    public void testGetProperty() {
+        String name = "foo";
+        String value = "bar";
+        EasyMock.expect(component.getProperty(name)).andReturn(value);
+        EasyMock.replay(component);
+        assertSame(value, context.getProperty(String.class, name));
+        EasyMock.verify(component);
+    }
+
+    public void testGetPropertyThatIsIncompatible() {
+        String name = "foo";
+        String value = "bar";
+        EasyMock.expect(component.getProperty(name)).andReturn(value);
+        EasyMock.replay(component);
+        try {
+            context.getProperty(Integer.class, name);
+            fail();
+        } catch (ClassCastException e) {
+            // expected
+        }
+        EasyMock.verify(component);
+    }
+
+    public void testGetPropertyThatIsSubclass() {
+        String name = "foo";
+        String value = "bar";
+        EasyMock.expect(component.getProperty(name)).andReturn(value);
+        EasyMock.replay(component);
+        assertSame(value, context.getProperty(Object.class, name));
+        EasyMock.verify(component);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        component = EasyMock.createMock(PojoAtomicComponent.class);
+        context = new PojoComponentContextImpl(component);
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



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