package org.geoserver.geosearch; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.NamespaceInfo; import java.util.List; import java.util.Iterator; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; import org.restlet.data.Method; import org.restlet.data.Request; import org.restlet.data.Response; import org.restlet.data.Status; public class SiteMapIndexRestlet extends GeoServerProxyAwareRestlet { private Catalog myCatalog; private String GEOSERVER_ROOT; protected static Namespace SITEMAP = Namespace.getNamespace("http://www.sitemaps.org/schemas/sitemap/0.9"); public Catalog getData(){ return myCatalog; } public void setCatalog(Catalog d){ myCatalog = d; } public void handle(Request request, Response response){ GEOSERVER_ROOT = getBaseURL(request); if (request.getMethod().equals(Method.GET)){ doGet(request, response); } else { response.setStatus(Status.CLIENT_ERROR_BAD_REQUEST); } } /** * Creates a "sitemap.xml" with all the namespaces that contain * one or more featuretypes. * * @param request * @param response */ public void doGet(Request request, Response response){ Document d = new Document(); Element sitemapindex = new Element("sitemapindex", SITEMAP); //urlset.addNamespaceDeclaration(GEOSITEMAP); d.setRootElement(sitemapindex); buildGlobalSiteMap(sitemapindex); response.setEntity(new JDOMRepresentation(d)); } private void buildGlobalSiteMap(Element sitemapindex) { for (FeatureTypeInfo ft : getData().getFeatureTypes()) { try { if ((Boolean)ft.getMetadata().get("indexingEnabled")) { String ftSitemap = GEOSERVER_ROOT + "/layers/" + ft.getName() + "/sitemap.xml"; addSitemap(sitemapindex, ftSitemap); } } catch( Exception e ) { // Do nothing ? } } } protected static void addSitemap(Element sitemapindex, String url){ Element sitemapElement = new Element("sitemap", SITEMAP); Element loc = new Element("loc", SITEMAP); loc.setText(url); sitemapElement.addContent(loc); sitemapindex.addContent(sitemapElement); } public static String getParentUrl(String url){ while (url.endsWith("/")){ url = url.substring(0, url.length() - 1); } int lastSlash = url.lastIndexOf('/'); if (lastSlash != -1){ url = url.substring(0, lastSlash); } return url; } }