Package org.geoserver.geosearch.rest

Source Code of org.geoserver.geosearch.rest.GeoSearchLayerFinder

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.geosearch.rest;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogInfo;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.MetadataMap;
import org.geoserver.config.GeoServer;
import org.geoserver.config.GeoServerInfo;
import org.geoserver.kml.KMLEncoder;
import org.geoserver.rest.RestletException;
import org.geoserver.rest.util.RESTUtils;
import org.restlet.Context;
import org.restlet.Finder;
import org.restlet.data.Method;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.data.Status;
import org.restlet.resource.Resource;

/**
* REST finder that sets up a {@link GeoSearchLayer} resource based on the resource name
*
*/
public class GeoSearchLayerFinder extends Finder {

    private final GeoServer geoserver;
    private KMLEncoder encoder;

    /**
     * @param geoserver
     *            access to {@link Catalog} and {@link GeoServerInfo}
     */
    private GeoSearchLayerFinder(GeoServer geoserver, KMLEncoder encoder) {
        this.geoserver = geoserver;
        this.encoder = encoder;
    }

    /**
     * Looks up a {@link LayerInfo} or {@link LayerGroupInfo} named after the {@code <layer>} in the
     * requested resource {@code <layer>.kml} name
     *
     * @see org.restlet.Finder#findTarget(org.restlet.data.Request, org.restlet.data.Response)
     */
    @Override
    public Resource findTarget(final Request request, Response response) {
        if (!Method.GET.equals(request.getMethod())) {
            response.setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED);
            return null;
        }
        final String name = RESTUtils.getAttribute(request, "layer");
        if (name == null) {
            throw new RestletException("No layer name specified", Status.CLIENT_ERROR_BAD_REQUEST);
        }
        final Catalog catalog = geoserver.getCatalog();
        CatalogInfo layer = catalog.getLayerByName(name);
        MetadataMap mdmap;
        if (layer == null) {
            layer = catalog.getLayerGroupByName(name);
            if (layer == null) {
                throw new RestletException("Layer " + name + " not found",
                        Status.CLIENT_ERROR_NOT_FOUND);
            }
            mdmap = ((LayerGroupInfo) layer).getMetadata();
        } else {
            mdmap = ((LayerInfo) layer).getMetadata();
        }

        Boolean enabled = mdmap.get(Properties.INDEXING_ENABLED, Boolean.class);
        if (enabled == null || !enabled.booleanValue()) {
            throw new RestletException("Layer " + name + " not found",
                    Status.CLIENT_ERROR_NOT_FOUND);
        }
        final Context context = getContext();
        return new GeoSearchLayer(context, request, response, layer, geoserver, encoder);
    }
}
TOP

Related Classes of org.geoserver.geosearch.rest.GeoSearchLayerFinder

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.