/* 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.sfs;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.rest.RestletException;
import org.geoserver.rest.util.RESTUtils;
import org.restlet.Finder;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.data.Status;
import org.restlet.resource.Resource;
/**
* Looks up the describe object
*
* @author Andrea Aime - GeoSolutions
*/
public class DescribeFinder extends Finder {
Catalog catalog;
public DescribeFinder(Catalog catalog) {
this.catalog = catalog;
}
@Override
public Resource findTarget(Request request, Response response) {
String layerName = RESTUtils.getAttribute(request, "layer");
LayerInfo layer = catalog.getLayerByName(layerName);
// any of these conditions mean the layer is not currently
// advertised in the capabilities document
if(layer == null || !layer.isEnabled() || !(layer.getResource() instanceof FeatureTypeInfo)) {
throw new RestletException( "No such layer: " + layerName, Status.CLIENT_ERROR_NOT_FOUND );
}
final FeatureTypeInfo resource = (FeatureTypeInfo) layer.getResource();
return new DescribeResource(getContext(), request, response, resource);
}
}