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/17 03:16:22 UTC

svn commit: r508691 - in /incubator/tuscany/java/sca/kernel/core/src: main/java/org/apache/tuscany/core/component/ main/java/org/apache/tuscany/core/implementation/ test/java/org/apache/tuscany/core/component/ test/java/org/apache/tuscany/core/implemen...

Author: jboynes
Date: Fri Feb 16 18:16:21 2007
New Revision: 508691

URL: http://svn.apache.org/viewvc?view=rev&rev=508691
Log:
refactor ComponentContextImpl out from PojoAtomicComponent

Added:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextImpl.java   (contents, props changed)
      - copied, changed from r508679, incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponentContextImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextProvider.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentContextImplTestCase.java   (contents, props changed)
      - copied, changed from r508690, incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java
Removed:
    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/PojoComponentContextImplTestCase.java
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoAtomicComponentTestCase.java

Copied: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextImpl.java (from r508679, 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/component/ComponentContextImpl.java?view=diff&rev=508691&p1=incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponentContextImpl.java&r1=508679&p2=incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextImpl.java&r2=508691
==============================================================================
--- 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/component/ComponentContextImpl.java Fri Feb 16 18:16:21 2007
@@ -16,20 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.    
  */
-package org.apache.tuscany.core.implementation;
+package org.apache.tuscany.core.component;
 
 import org.osoa.sca.ComponentContext;
 import org.osoa.sca.CallableReference;
 import org.osoa.sca.ServiceReference;
 import org.osoa.sca.RequestContext;
 
+import org.apache.tuscany.core.component.ComponentContextProvider;
+
 /**
+ * Implementation of ComponentContext that delegates to a ComponentContextProvider.
+ * 
  * @version $Rev$ $Date$
  */
-public class PojoComponentContextImpl implements ComponentContext {
-    private final PojoAtomicComponent component;
+public class ComponentContextImpl implements ComponentContext {
+    private final ComponentContextProvider component;
 
-    public PojoComponentContextImpl(PojoAtomicComponent component) {
+    public ComponentContextImpl(ComponentContextProvider component) {
         this.component = component;
     }
 
@@ -50,7 +54,7 @@
     }
 
     public <B> B getProperty(Class<B> type, String propertyName) {
-        return type.cast(component.getProperty(propertyName));
+        return component.getProperty(type, propertyName);
     }
 
     public <B> ServiceReference<B> createSelfReference(Class<B> businessInterface) {

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextProvider.java?view=auto&rev=508691
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextProvider.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextProvider.java Fri Feb 16 18:16:21 2007
@@ -0,0 +1,41 @@
+/*
+ * 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.component;
+
+import java.net.URI;
+
+import org.osoa.sca.ComponentContext;
+import org.osoa.sca.ServiceReference;
+
+/**
+ * Interface implemented by Component's that want to expose a ComponentContext.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface ComponentContextProvider {
+    ComponentContext getComponentContext();
+
+    URI getUri();
+
+    <B> B getService(Class<B> businessInterface, String referenceName);
+
+    <B> ServiceReference<B> getServiceReference(Class<B> businessInterface, String referenceName);
+
+    <B> B getProperty(Class<B> type, String propertyName);
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentContextProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

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=508691&r1=508690&r2=508691
==============================================================================
--- 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 Fri Feb 16 18:16:21 2007
@@ -30,15 +30,9 @@
 import org.osoa.sca.ComponentContext;
 import org.osoa.sca.ServiceReference;
 
-import org.apache.tuscany.spi.ObjectCreationException;
-import org.apache.tuscany.spi.ObjectFactory;
-import org.apache.tuscany.spi.component.TargetDestructionException;
-import org.apache.tuscany.spi.component.TargetInitializationException;
-import org.apache.tuscany.spi.component.TargetResolutionException;
-import org.apache.tuscany.spi.extension.AtomicComponentExtension;
-import org.apache.tuscany.spi.model.Scope;
-import org.apache.tuscany.spi.wire.OutboundWire;
-
+import org.apache.tuscany.core.component.ComponentContextProvider;
+import org.apache.tuscany.core.component.ServiceReferenceImpl;
+import org.apache.tuscany.core.component.ComponentContextImpl;
 import org.apache.tuscany.core.injection.ArrayMultiplicityObjectFactory;
 import org.apache.tuscany.core.injection.ConversationIDObjectFactory;
 import org.apache.tuscany.core.injection.EventInvoker;
@@ -51,14 +45,21 @@
 import org.apache.tuscany.core.injection.NoMultiplicityTypeException;
 import org.apache.tuscany.core.injection.ObjectCallbackException;
 import org.apache.tuscany.core.injection.PojoObjectFactory;
-import org.apache.tuscany.core.component.ServiceReferenceImpl;
+import org.apache.tuscany.spi.ObjectCreationException;
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.component.TargetDestructionException;
+import org.apache.tuscany.spi.component.TargetInitializationException;
+import org.apache.tuscany.spi.component.TargetResolutionException;
+import org.apache.tuscany.spi.extension.AtomicComponentExtension;
+import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.wire.OutboundWire;
 
 /**
  * Base implementation of an {@link org.apache.tuscany.spi.component.AtomicComponent} whose type is a Java class
  *
  * @version $$Rev$$ $$Date$$
  */
-public abstract class PojoAtomicComponent extends AtomicComponentExtension {
+public abstract class PojoAtomicComponent extends AtomicComponentExtension implements ComponentContextProvider {
     protected EventInvoker<Object> initInvoker;
     protected EventInvoker<Object> destroyInvoker;
     protected PojoObjectFactory<?> instanceFactory;
@@ -77,13 +78,13 @@
 
     public PojoAtomicComponent(PojoConfiguration configuration) {
         super(configuration.getName(),
-            configuration.getWireService(),
-            configuration.getWorkContext(),
-            configuration.getScheduler(),
-            configuration.getMonitor(),
-            configuration.getInitLevel(),
-            configuration.getMaxIdleTime(),
-            configuration.getMaxAge());
+              configuration.getWireService(),
+              configuration.getWorkContext(),
+              configuration.getScheduler(),
+              configuration.getMonitor(),
+              configuration.getInitLevel(),
+              configuration.getMaxIdleTime(),
+              configuration.getMaxAge());
         assert configuration.getInstanceFactory() != null : "Object factory was null";
         initInvoker = configuration.getInitInvoker();
         destroyInvoker = configuration.getDestroyInvoker();
@@ -101,7 +102,7 @@
             : new HashMap<String, Member>();
         implementationClass = configuration.getImplementationClass();
 
-        componentContext = new PojoComponentContextImpl(this);
+        componentContext = new ComponentContextImpl(this);
     }
 
 
@@ -298,9 +299,13 @@
         return componentContext;
     }
 
-    public Object getProperty(String name) {
-        ObjectFactory<?> factory = propertyFactories.get(name);
-        return factory != null ? factory.getInstance() : null;
+    public <B> B getProperty(Class<B> type, String propertyName) {
+        ObjectFactory<?> factory = propertyFactories.get(propertyName);
+        if (factory != null) {
+            return type.cast(factory.getInstance());
+        } else {
+            return null;
+        }
 
     }
 

Copied: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentContextImplTestCase.java (from r508690, 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/component/ComponentContextImplTestCase.java?view=diff&rev=508691&p1=incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java&r1=508690&p2=incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentContextImplTestCase.java&r2=508691
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/PojoComponentContextImplTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/ComponentContextImplTestCase.java Fri Feb 16 18:16:21 2007
@@ -16,19 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.    
  */
-package org.apache.tuscany.core.implementation;
+package org.apache.tuscany.core.component;
 
 import java.net.URI;
 
 import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
 
+import org.apache.tuscany.core.implementation.PojoAtomicComponent;
+
 /**
  * @version $Rev$ $Date$
  */
-public class PojoComponentContextImplTestCase extends TestCase {
+public class ComponentContextImplTestCase extends TestCase {
     private PojoAtomicComponent component;
-    private PojoComponentContextImpl context;
+    private ComponentContextImpl context;
 
     public void testURI() {
         URI uri = URI.create("foo");
@@ -41,7 +43,7 @@
     public void testGetProperty() {
         String name = "foo";
         String value = "bar";
-        EasyMock.expect(component.getProperty(name)).andReturn(value);
+        EasyMock.expect(component.getProperty(String.class, name)).andReturn(value);
         EasyMock.replay(component);
         assertSame(value, context.getProperty(String.class, name));
         EasyMock.verify(component);
@@ -49,8 +51,7 @@
 
     public void testGetPropertyThatIsIncompatible() {
         String name = "foo";
-        String value = "bar";
-        EasyMock.expect(component.getProperty(name)).andReturn(value);
+        EasyMock.expect(component.getProperty(Integer.class, name)).andThrow(new ClassCastException());
         EasyMock.replay(component);
         try {
             context.getProperty(Integer.class, name);
@@ -64,7 +65,7 @@
     public void testGetPropertyThatIsSubclass() {
         String name = "foo";
         String value = "bar";
-        EasyMock.expect(component.getProperty(name)).andReturn(value);
+        EasyMock.expect(component.getProperty(Object.class, name)).andReturn(value);
         EasyMock.replay(component);
         assertSame(value, context.getProperty(Object.class, name));
         EasyMock.verify(component);
@@ -82,7 +83,7 @@
     protected void setUp() throws Exception {
         super.setUp();
         component = EasyMock.createMock(PojoAtomicComponent.class);
-        context = new PojoComponentContextImpl(component);
+        context = new ComponentContextImpl(component);
     }
 
     public interface FooService {

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

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

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=508691&r1=508690&r2=508691
==============================================================================
--- 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 Fri Feb 16 18:16:21 2007
@@ -102,7 +102,7 @@
 
         TestAtomicComponent component = new TestAtomicComponent(config);
         component.addPropertyFactory("foo", objectFactory);
-        assertSame(value, component.getProperty("foo"));
+        assertSame(value, component.getProperty(String.class, "foo"));
     }
 
     public void testServiceLookup() {



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