import play.*;
import play.mvc.Http.*;
import play.mvc.*;
import play.libs.*;
import play.vfs.*;
import java.io.*;
public class DocViewerPlugin extends PlayPlugin {
@Override
public boolean rawInvocation(Request request, Response response) throws Exception {
if ("/@api".equals(request.path) || "/@api/".equals(request.path)) {
response.status = 302;
response.setHeader("Location", "/@api/index.html");
return true;
}
if (request.path.startsWith("/@api/")) {
if(request.path.matches("/@api/-[a-z]+/.*")) {
String module = request.path.substring(request.path.indexOf("-")+1);
module = module.substring(0, module.indexOf("/"));
VirtualFile f = Play.modules.get(module).child("documentation/api/"+request.path.substring(8+module.length()));
if(f.exists()) {
response.contentType = MimeTypes.getMimeType(f.getName());
response.out.write(f.content());
}
return true;
}
File f = new File(Play.frameworkPath, "documentation/api/"+request.path.substring(6));
if (f.exists()) {
response.contentType = MimeTypes.getMimeType(f.getName());
response.out.write(IO.readContent(f));
}
return true;
}
return false;
}
@Override
public void onRoutesLoaded() {
Router.prependRoute("GET", "/@documentation/?", "PlayDocumentation.index");
Router.prependRoute("GET", "/@documentation/{id}", "PlayDocumentation.page");
Router.prependRoute("GET", "/@documentation/images/{name}", "PlayDocumentation.image");
Router.prependRoute("GET", "/@documentation/files/{name}", "PlayDocumentation.file");
Router.prependRoute("GET", "/@documentation/modules/{module}/{id}", "PlayDocumentation.page");
Router.prependRoute("GET", "/@documentation/modules/{module}/images/{name}", "PlayDocumentation.image");
Router.prependRoute("GET", "/@documentation/modules/{module}/files/{name}", "PlayDocumentation.file");
Router.prependRoute("GET", "/@documentation/cheatsheet/{category}", "PlayDocumentation.cheatSheet");
}
}