/* 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.geoserver.rest.format.DataFormat; import org.geoserver.rest.format.FreemarkerFormat; import org.restlet.Context; import org.restlet.Finder; import org.restlet.Route; import org.restlet.Router; import org.restlet.data.MediaType; import org.restlet.data.Request; import org.restlet.data.Response; 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(getContext(),req,resp); r.init(getContext(), req, resp); return r; } private class IndexResource extends MapResource{ public IndexResource(Context context, Request request, Response response) { super(context, request, response); } @Override protected List<DataFormat> createSupportedFormats( Request request, Response response) { ArrayList l = new ArrayList(); l.add(new FreemarkerFormat("templates/index.ftl", getClass(), MediaType.TEXT_HTML)); //l.add(null, m.get(MediaType.TEXT_HTML)); return l; } public Map getMap() { Map m = new HashMap(); m.put("links", getLinkList()); m.put("page", getPageInfo()); 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; } } }