Package org.geoserver.catalog.rest

Source Code of org.geoserver.catalog.rest.LayerGroupResource

/* Copyright (c) 2001 - 2009 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.catalog.rest;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogBuilder;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.config.util.XStreamPersister;
import org.geoserver.rest.RestletException;
import org.geoserver.rest.format.DataFormat;
import org.restlet.Context;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.data.Status;

import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

public class LayerGroupResource extends AbstractCatalogResource {

    public LayerGroupResource(Context context, Request request,
            Response response, Catalog catalog) {
        super(context, request, response, LayerGroupInfo.class, catalog);
    }

    @Override
    protected Object handleObjectGet() throws Exception {
        String lg = getAttribute( "layergroup" );
       
        LOGGER.fine( "GET layer group " + lg );
        return catalog.getLayerGroupByName( lg );
    }

    @Override
    public boolean allowPost() {
        return getAttribute( "layergroup") == null;
    }
   
    @Override
    protected String handleObjectPost(Object object) throws Exception {
        LayerGroupInfo lg = (LayerGroupInfo) object;
        LOGGER.info( "POST layer group " + lg.getName() );
       
        if ( lg.getLayers().isEmpty() ) {
            throw new RestletException( "layer group must not be empty", Status.CLIENT_ERROR_BAD_REQUEST );
        }
      
        if ( lg.getBounds() == null ) {
            LOGGER.fine( "Auto calculating layer group bounds");
            new CatalogBuilder( catalog ).calculateLayerGroupBounds(lg);
        }
       
        catalog.add( lg );
        return lg.getName();
    }

    @Override
    public boolean allowPut() {
        return getAttribute( "layergroup") != null;
    }
   
    @Override
    protected void handleObjectPut(Object object) throws Exception {
        String layergroup = getAttribute("layergroup");
        LOGGER.info( "PUT layer group " + layergroup );
       
        LayerGroupInfo lg = (LayerGroupInfo) object;
        LayerGroupInfo original = catalog.getLayerGroupByName( layergroup );
      
        //ensure not a name change
        if ( lg.getName() != null && !lg.getName().equals( original.getName() ) ) {
            throw new RestletException( "Can't change name of a layer group", Status.CLIENT_ERROR_FORBIDDEN );
        }
       
        new CatalogBuilder( catalog ).updateLayerGroup( original, lg );
        catalog.save( original );
    }

    @Override
    public boolean allowDelete() {
        return getAttribute( "layergroup" ) != null;
    }
   
    @Override
    protected void handleObjectDelete() throws Exception {
        String layergroup = getAttribute( "layergroup" );
        LOGGER.info( "DELETE layer group " + layergroup );
       
        LayerGroupInfo lg = catalog.getLayerGroupByName( layergroup );
        catalog.remove( lg );
    }
   
    @Override
    protected void configurePersister(XStreamPersister persister, DataFormat format) {
        persister.setCallback( new XStreamPersister.Callback() {
           @Override
           protected void postEncodeReference(Object obj, String ref,
                HierarchicalStreamWriter writer, MarshallingContext context) {
           
               if ( obj instanceof StyleInfo ) {
                   encodeLink("/styles/" + ref, writer);
               }
               if ( obj instanceof LayerInfo ) {
                   encodeLink("/layers/" + ref, writer);
               }
           }
        });
    }
}
TOP

Related Classes of org.geoserver.catalog.rest.LayerGroupResource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.