Changeset 405

Show
Ignore:
Timestamp:
11/04/08 14:25:23 (2 months ago)
Author:
arneke
Message:

SiteMap? generator for KML hierarchies

Location:
trunk/geowebcache/src/main/java/org/geowebcache/service/kml
Files:
1 added
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/geowebcache/src/main/java/org/geowebcache/service/kml/KMLService.java

    r395 r405  
    1919import java.io.IOException; 
    2020import java.io.OutputStream; 
     21import java.net.URLDecoder; 
     22import java.net.URLEncoder; 
    2123import java.util.Arrays; 
    2224 
     
    6163     
    6264    public static final String HINT_DEBUGGRID = "debuggrid"; 
    63          
     65 
     66    public static final String HINT_SITEMAP_LAYER = "sitemap"; 
     67     
     68    public static final String HINT_SITEMAP_GLOBAL = "sitemap_global"; 
     69     
    6470    public KMLService() { 
    6571        super(SERVICE_KML); 
     
    125131        String[] parsed = null; 
    126132        try { 
    127             parsed = parseRequest(request.getPathInfo()); 
     133            // TODO The container is supposed to handle the decoding prior 
     134            // to returning but in Eclipse / Jetty this does not hold true 
     135            parsed = parseRequest(URLDecoder.decode(request.getPathInfo(),"UTF-8")); 
    128136        } catch (Exception e) { 
    129137            throw new ServiceException("Unable to parse KML request : "+ e.getMessage()); 
     
    133141        tile.setMimeType(MimeType.createFromExtension(parsed[2])); 
    134142        tile.setSRS(SRS.getEPSG4326()); 
     143         
     144        // Sitemap index ? kml/sitemap.xml  
     145        if(parsed[0].equalsIgnoreCase("sitemap") && parsed[2].equalsIgnoreCase("xml")) { 
     146            tile.setHint(HINT_SITEMAP_GLOBAL); 
     147            String tmpUrl = urlPrefix(request.getRequestURL().toString(),parsed); 
     148            tile.setUrlPrefix(tmpUrl.substring(0, tmpUrl.length() - "sitemap".length())); 
     149            tile.setRequestHandler(Tile.RequestHandler.SERVICE); 
     150            return tile; 
     151        } 
     152         
     153        // Sitemap ?  kml/prefix:layername/sitemap.xml 
     154        if(parsed[1].equalsIgnoreCase(HINT_SITEMAP_LAYER)) { 
     155            tile.setHint(HINT_SITEMAP_LAYER); 
     156            tile.setUrlPrefix(urlPrefix(request.getRequestURL().toString(),parsed)); 
     157            tile.setRequestHandler(Tile.RequestHandler.SERVICE); 
     158            return tile; 
     159        } 
    135160         
    136161        // Do we have a key for the grid location? 
     
    166191        if(tile.getHint() == HINT_DEBUGGRID) { 
    167192            layer = KMLDebugGridLayer.getInstance(); 
     193        } else if (tile.getHint() == HINT_SITEMAP_GLOBAL) { 
     194            layer = null;   
    168195        } else { 
    169196            layer = tLD.getTileLayer(tile.getLayerId()); 
     
    183210        //} 
    184211 
     212        if(tile.getHint() == HINT_SITEMAP_LAYER || tile.getHint() == HINT_SITEMAP_GLOBAL) { 
     213            KMLSiteMap sm = new KMLSiteMap(tile,tLD); 
     214            try { 
     215                sm.write(); 
     216            } catch (IOException ioe) { 
     217                throw new GeoWebCacheException("Unable to write sitemap: " + ioe.getMessage()); 
     218            } 
     219            return; 
     220        } 
     221         
    185222        if(tile.getTileIndex() == null) { 
    186223            // No tile index -> super overlay 
     
    292329    } 
    293330 
    294     private static String gridLocString(int[] gridLoc) { 
     331    protected static String gridLocString(int[] gridLoc) { 
    295332        return "x" + gridLoc[0] + "y" + gridLoc[1] + "z" + gridLoc[2]; 
    296333    }