package de.twenty11.skysail.server.ext.maven; import java.util.List; import org.restlet.Restlet; import org.restlet.resource.Finder; import org.restlet.resource.Get; import org.restlet.resource.ServerResource; import org.restlet.routing.Route; import org.restlet.routing.TemplateRoute; import de.twenty11.skysail.common.responses.SkysailResponse; import de.twenty11.skysail.common.selfdescription.ResourceDetails; import de.twenty11.skysail.common.selfdescription.RestfulRoot; import de.twenty11.skysail.server.restlet.ListServerResource; import de.twenty11.skysail.server.restlet.SkysailServerResource2; /** * Restlet Root Resource for dbViewer application. * */ public class MyRootResource extends ListServerResource<ResourceDetails> implements RestfulRoot { public MyRootResource() { setAutoDescribing(false); setName("osgimonitor root resource"); setDescription("The root resource of the osgimonitor application"); } @Override @Get public SkysailResponse<List<ResourceDetails>> getMethods() { return getEntities(allMethods(), "listing all entry points for the skysail osgimonitor application"); } private void handleTemplateRoutes(List<ResourceDetails> result, Route route) { TemplateRoute tr = (TemplateRoute) route; String from = (tr.getTemplate() == null) ? super.toString() : tr.getTemplate().getPattern(); if (!from.contains("{")) { // some link we can acutally follow from = getHostRef() + from + "?media=json"; String to = (tr.getNext() == null) ? "null" : tr.getNext().toString(); String desc = "no description available"; if (tr.getNext() != null) { Restlet next = tr.getNext(); if (next instanceof Finder) { Finder finder = (Finder) next; Class<? extends ServerResource> targetClass = finder.getTargetClass(); ServerResource serverResource; try { serverResource = targetClass.newInstance(); if (serverResource instanceof SkysailServerResource2<?>) { SkysailServerResource2<?> ssr = (SkysailServerResource2<?>) serverResource; desc = ssr.getDescription(); } } catch (Exception e) { } next.getFinderClass(); } } ResourceDetails resourceDetails = new ResourceDetails(from, from, to, desc);// + " -> " + to); result.add(resourceDetails); } } }