package net.techreadiness.ui.util; import java.util.Map; import javax.servlet.ServletContext; import org.apache.struts2.StrutsStatics; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; import com.opensymphony.xwork2.ActionContext; public class ContextUtils { public static <T> T getOptionalBeanOfType(Class<T> type, ServletContext servletContext) { ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); Map<String, T> map = applicationContext.getBeansOfType(type); for (ApplicationContext context = applicationContext.getParent(); context != null; context = context.getParent()) { map.putAll(context.getBeansOfType(type)); } return Iterables.getOnlyElement(map.values(), null); } public static <T> T getRequiredBeanOfType(Class<T> type, ServletContext servletContext) { return Preconditions.checkNotNull(getOptionalBeanOfType(type, servletContext), "No bean of type %s found.", type); } private static ServletContext findServletContext() { ServletContext servletContext = (ServletContext) ActionContext.getContext().getActionInvocation() .getInvocationContext().get(StrutsStatics.SERVLET_CONTEXT); return servletContext; } public static <T> T getOptionalBeanOfType(Class<T> type) { return getOptionalBeanOfType(type, findServletContext()); } public static <T> T getRequiredBeanOfType(Class<T> type) { return getRequiredBeanOfType(type, findServletContext()); } }