Thanks for the input, Alex.
I've created a ServletFilter that uses the info you provided above. I post it here for posterity. Note: this isn't ideal code (caches too much, for example), it's just here to give folks an idea of what an implementation would look like. My implementation uses Spring's DelegatingFilterProxy
to tell the code what groups to worry about. As far as it goes with creating a plugin, could you point me the way to some documentation for implementing, I'm hazy on that part?
public class WroDebugFilter implements Filter
{
//http loader is shamelessly stolen from another project.
SimpleHttpLoader httpLoader = new SimpleHttpLoader();
private List<String> jscriptFiles;
private List<String> debugGroups;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setAttribute("jscriptFiles",getJavaScriptFiles((HttpServletRequest) request));
chain.doFilter(request,response);
}
private List<String> getJavaScriptFiles(HttpServletRequest request) {
if (jscriptFiles == null) {
List<String> cssFiles = new ArrayList<String>();
List<String> jsFiles = new ArrayList<String>();
JsonParser jsonParser = new JsonParser();
String url = httpLoader.httpGet(getApiUrl(request));
JsonObject data = jsonParser.parse(url).getAsJsonObject();
JsonArray groups = data.getAsJsonArray("groups");
for (JsonElement group : groups) {
JsonObject groupObject = group.getAsJsonObject();
String groupName = groupObject.get("name").getAsString();
if (debugGroups.contains(groupName)) {
JsonArray resources = groupObject.getAsJsonArray("resources");
for (JsonElement resource : resources) {
JsonObject resourceObject = resource.getAsJsonObject();
String uri = resourceObject.get("uri").getAsString();
if (uri.contains(".css")) {
cssFiles.add("\t<link rel=\"stylesheet\" href=\"" + request.getContextPath() + uri +"\">");
}
else {
jsFiles.add("<script type=\"text/javascript\" src=\"" + request.getContextPath() + uri + "\"></script>");
}
}
}
}
cssFiles.addAll(jsFiles);
jscriptFiles = cssFiles;
}
return jscriptFiles;
}
private String getApiUrl(HttpServletRequest request) {
String serverName = request.getServerName();
String contextPath = request.getContextPath();
int port = request.getServerPort();
return String.format("http://%s:%s%s/%s",serverName,port,contextPath,"wro/wroAPI/model");
}
@Override
public void destroy() {
//To change body of implemented methods use File | Settings | File Templates.
}
public List<String> getDebugGroups() {
return debugGroups;
}
public void setDebugGroups(List<String> debugGroups) {
this.debugGroups = debugGroups;
}
}
The wro.xml
file
<groups xmlns="http://www.isdc.ro/wro">
<group name="external">
<js>/app/lib/*.js</js>
</group>
<group name="application">
<js>/js/*.js</js>
<css>/css/normalize.css</css>
<css>/css/*.css</css>
</group>
</groups>
and....
The Spring Configuration
<bean id="wroDebugFilter" class="gov.mystate.dhw.idalink.web.filter.WroDebugFilter">
<property name="debugGroups">
<list>
<value>application</value>
</list>
</property>
</bean>