You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2012/08/20 19:40:18 UTC

svn commit: r1375133 - in /rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src: main/java/org/apache/rave/inject/ test/java/org/apache/rave/inject/ test/resources/

Author: mfranklin
Date: Mon Aug 20 17:40:17 2012
New Revision: 1375133

URL: http://svn.apache.org/viewvc?rev=1375133&view=rev
Log:
Fixed RAVE-762

Modified:
    rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java
    rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java
    rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml

Modified: rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java?rev=1375133&r1=1375132&r2=1375133&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java (original)
+++ rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java Mon Aug 20 17:40:17 2012
@@ -20,8 +20,13 @@
 package org.apache.rave.inject;
 
 import com.google.inject.Provider;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
 import org.springframework.context.ApplicationContext;
 
+import java.util.Map;
+
 /**
  * Provides beans for injection by Guice that are managed by Spring
  * @param <T> the type of the bean to pull
@@ -38,6 +43,22 @@ public class SpringContextProvider<T> im
 
     @Override
     public T get() {
-        return context.getBean(clazz);
+        Map<String, T> beans = context.getBeansOfType(clazz);
+        return beans.size() == 1 ? getSingleBean(beans) : getPrimaryBean(beans);
+    }
+
+    private T getPrimaryBean(Map<String, T> beans) {
+        AutowireCapableBeanFactory factory = context.getAutowireCapableBeanFactory();
+        for(Map.Entry<String, T> bean : beans.entrySet()) {
+            if(factory instanceof ConfigurableListableBeanFactory &&
+                    ((ConfigurableListableBeanFactory) factory).getBeanDefinition(bean.getKey()).isPrimary()) {
+                return bean.getValue();
+            }
+        }
+        throw new NoSuchBeanDefinitionException(clazz, "Matching bean count for class: " + beans.size());
+    }
+
+    private T getSingleBean(Map<String, T> beans) {
+        return beans.entrySet().iterator().next().getValue();
     }
 }

Modified: rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java?rev=1375133&r1=1375132&r2=1375133&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java (original)
+++ rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java Mon Aug 20 17:40:17 2012
@@ -21,8 +21,12 @@ package org.apache.rave.inject;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
+import com.google.inject.ProvisionException;
 import org.apache.log4j.spi.LoggerRepository;
 import org.apache.rave.opensocial.service.impl.DefaultPersonService;
+import org.apache.rave.service.LockService;
+import org.apache.rave.service.impl.DefaultLockService;
+import org.apache.shindig.social.opensocial.spi.GroupService;
 import org.apache.shindig.social.opensocial.spi.PersonService;
 import org.junit.Before;
 import org.junit.Test;
@@ -69,6 +73,17 @@ public class SpringBindingModuleTest {
         assertThat(string, is(notNullValue()));
     }
 
+    @Test
+    public void bindsPrimaryBean() {
+        LockService lockService = injector.getInstance(LockService.class);
+        assertThat(lockService, is(not(instanceOf(DefaultLockService.class))));
+    }
+
+    @Test(expected = ProvisionException.class)
+    public void exceptionIfNoPrimary() {
+        injector.getInstance(GroupService.class);
+    }
+
     @Test(expected = com.google.inject.ConfigurationException.class)
     public void doesNotBindOthers() {
         ResultSetExtractor personService1 = injector.getInstance(ResultSetExtractor.class);

Modified: rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml?rev=1375133&r1=1375132&r2=1375133&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml (original)
+++ rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml Mon Aug 20 17:40:17 2012
@@ -67,12 +67,24 @@
         <constructor-arg value="org.apache.rave.opensocial.repository.OpenSocialPersonRepository"/>
     </bean>
 
+    <bean id="mockLockService" class="org.easymock.EasyMock" factory-method="createNiceMock"  primary="true">
+        <constructor-arg value="org.apache.rave.service.LockService"/>
+    </bean>
+
+    <bean id="lockService" class="org.apache.rave.service.impl.DefaultLockService" />
+
+    <bean id="mockGroupService" class="org.easymock.EasyMock" factory-method="createNiceMock">
+        <constructor-arg value="org.apache.shindig.social.opensocial.spi.GroupService"/>
+    </bean>
+
     <bean id="nonRaveBean" class="org.apache.log4j.spi.NOPLoggerRepository" />
 
     <bean id="mockSpringBean" class="org.easymock.EasyMock" factory-method="createNiceMock">
         <constructor-arg value="org.springframework.jdbc.core.ResultSetExtractor"/>
     </bean>
 
+    <bean id="groupService" class="org.apache.rave.opensocial.service.impl.DefaultGroupService" />
+
     <bean id="personService" class="org.apache.rave.opensocial.service.impl.DefaultPersonService">
         <constructor-arg name="repository" ref="mockPersonRepo" />
     </bean>