package org.argeo.slc.unit;\r
\r
+import java.util.Map;\r
+\r
import junit.framework.TestCase;\r
\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
-import org.argeo.slc.core.SlcException;\r
-import org.argeo.slc.spring.SpringUtils;\r
+import org.argeo.slc.SlcException;\r
+import org.springframework.beans.factory.BeanFactoryUtils;\r
+import org.springframework.beans.factory.ListableBeanFactory;\r
import org.springframework.context.ConfigurableApplicationContext;\r
import org.springframework.context.support.ClassPathXmlApplicationContext;\r
\r
if (context == null) {\r
context = new ClassPathXmlApplicationContext(\r
getApplicationContextLocation());\r
+ if (getIsStartContext())\r
+ context.start();\r
}\r
return context;\r
}\r
\r
+ /** Whether the context should be started after being created. */\r
+ protected Boolean getIsStartContext() {\r
+ return false;\r
+ }\r
+\r
/** Returns a bean from the underlying context */\r
+ @SuppressWarnings(value = { "unchecked" })\r
protected <T> T getBean(String beanId) {\r
return (T) getContext().getBean(beanId);\r
}\r
\r
protected <T> T getBean(Class<? extends T> clss) {\r
- T bean = SpringUtils.loadSingleFromContext(getContext(), clss);\r
+ T bean = loadSingleFromContext(getContext(), clss);\r
if (bean == null) {\r
throw new SlcException("Cannot retrieve a unique bean of type "\r
+ clss);\r
String prefix = getClass().getPackage().getName().replace('.', '/');\r
return prefix + '/' + suffix;\r
}\r
+\r
+ @SuppressWarnings(value = { "unchecked" })\r
+ protected <T> T loadSingleFromContext(ListableBeanFactory context,\r
+ Class<T> clss) {\r
+ Map<String, T> beans = BeanFactoryUtils.beansOfTypeIncludingAncestors(\r
+ context, clss, false, false);\r
+ if (beans.size() == 1) {\r
+ return beans.values().iterator().next();\r
+ } else if (beans.size() > 1) {\r
+ if (log.isDebugEnabled()) {\r
+ log\r
+ .debug(("Found more that on bean for type " + clss\r
+ + ": " + beans.keySet()));\r
+ }\r
+ return null;\r
+ } else {\r
+ return null;\r
+ }\r
+ }\r
+\r
}\r