package org.molgenis.das.impl; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.IOException; public class DasURLFilter implements Filter { public static final String DATASET_PREFIX = "dasdataset_"; public void doFilter(ServletRequest servletRequest, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; String requestURI = httpServletRequest.getRequestURI(); int datasetIndex = requestURI.indexOf(DATASET_PREFIX); if (datasetIndex != -1) { String dataSetURLPart = requestURI.substring(datasetIndex); int slashIndex = dataSetURLPart.indexOf("/"); String dataset = dataSetURLPart.substring(0, slashIndex); String newDasURI = requestURI.replace(dataset + "/", ""); String newQueryString = createNewQueryString(httpServletRequest, dataset); FilteredRequest requestWrapper = new FilteredRequest(servletRequest); if (newQueryString != null) { requestWrapper.setQuery(newQueryString); } servletRequest.getRequestDispatcher(newDasURI).forward(requestWrapper, response); } else { chain.doFilter(servletRequest, response); } } private String createNewQueryString(HttpServletRequest req, String argument) { String newQueryString = null; String queryString = req.getQueryString(); if (queryString != null) { String[] queryArray = queryString.split(":"); newQueryString = queryArray[0] + "," + argument + ":" + queryArray[1]; } return newQueryString; } static class FilteredRequest extends HttpServletRequestWrapper { String query = null; public void setQuery(String queryString) { query = queryString; } public FilteredRequest(ServletRequest request) { super((HttpServletRequest) request); } @Override public String getQueryString() { return query; } } public void init(FilterConfig config) throws ServletException { } public void destroy() { } }