Grazie per l'input, Alex.
Ho creato un ServletFilter che utilizza le informazioni fornite in precedenza. Lo post qui per i posteri. Nota: questo non è il codice ideale (ad esempio, cache troppo), è solo qui per dare un'idea alla gente di come sarebbe un'implementazione. La mia implementazione utilizza Spring DelegatingFilterProxy
per dire al codice quali gruppi di cui preoccuparsi. Per quanto riguarda la creazione di un plug-in, potresti indicarmi la strada per una documentazione da implementare, sono confuso da quella parte?
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;
}
}
Il wro.xml
file di
<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>
e ....
La configurazione di Spring
<bean id="wroDebugFilter" class="gov.mystate.dhw.idalink.web.filter.WroDebugFilter">
<property name="debugGroups">
<list>
<value>application</value>
</list>
</property>
</bean>
fonte
2013-01-18 18:08:19