/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.rest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.restlet.Context;
import org.restlet.Route;
import org.restlet.Router;
import org.restlet.Finder;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.data.MediaType;
import org.restlet.resource.Resource;
/**
* The IndexResource class lists the paths available for a Router.
* Specifically, it auto-generates an index page containing all
* non-templated paths relative to the router root.
*
* @author David Winslow <dwinslow@openplans.org>
*/
class IndexRestlet extends Finder{
private Router myRouter;
public IndexRestlet(Router r){
myRouter = r;
}
public IndexRestlet(Context con, Router router) {
super(con);
myRouter = router;
}
public Resource findTarget(Request req, Response resp){
Resource r = new IndexResource();
r.init(getContext(), req, resp);
return r;
}
private class IndexResource extends MapResource{
public Map getSupportedFormats() {
Map m = new HashMap();
m.put("html", new FreemarkerFormat("HTMLTemplates/index.ftl", getClass(), MediaType.TEXT_HTML));
m.put(null, m.get("html"));
return m;
}
public Object getMap() {
Map m = new HashMap();
m.put("links", getLinkList());
m.put("page", getPageDetails());
return m;
}
private List getLinkList() {
List l = new ArrayList();
Iterator it = myRouter.getRoutes().iterator();
while (it.hasNext()) {
Route r = (Route) it.next();
String pattern = r.getTemplate().getPattern();
if (!pattern.contains("{") && (pattern.length() > 1)) {
l.add(pattern.substring(1)); // trim leading slash
}
}
return l;
}
}
}