package org.genedb.crawl.dao.proxy; import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.ArrayUtils; import org.apache.log4j.Logger; import org.codehaus.jackson.type.JavaType; import org.genedb.crawl.CrawlException; import org.genedb.crawl.client.CrawlClient; import org.springframework.util.Assert; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; public class Proxies { static Logger logger = Logger.getLogger(Proxies.class); private static String[] resources; public String[] getResources() { return resources; } public void setResources(String[] resources) { logger.info("setting resources"); logger.info(resources); Proxies.resources = resources; } public static <T extends Object> T proxyRequest(JavaType type) throws CrawlException { RequestAttributes attrs = RequestContextHolder.getRequestAttributes(); Assert.isInstanceOf(ServletRequestAttributes.class, attrs); ServletRequestAttributes servletAttrs = (ServletRequestAttributes) attrs; HttpServletRequest request = servletAttrs.getRequest(); @SuppressWarnings("unchecked") Map<String, String[]> parameters = request.getParameterMap(); String[] uriSplit = request.getRequestURI().split("/"); ArrayUtils.reverse(uriSplit); String method = uriSplit[0]; String resource = uriSplit[1]; String dot = "."; int dotPos = method.indexOf(dot); if (dotPos > 0) method = method.substring(0, dotPos); for (String url : resources) { logger.info(url + " - " + resource + " - " + method); CrawlClient client = new CrawlClient(url); try { T result = (T) client.request(type, resource, method, parameters); if (result != null) { logger.info(type + " -- " + result.getClass()); logger.info("found result, returning"); return result; } } catch (IOException e) { throw new RuntimeException(e); } catch (CrawlException e) { throw (e); } } return null; } }