Property changes on: . ___________________________________________________________________ Added: svn:ignore + .classpath .project target .settings Index: src/main/java/org/geoserver/catalog/rest/AvailableGeometryFeatureTypeResource.java =================================================================== --- src/main/java/org/geoserver/catalog/rest/AvailableGeometryFeatureTypeResource.java (revision 0) +++ src/main/java/org/geoserver/catalog/rest/AvailableGeometryFeatureTypeResource.java (revision 0) @@ -0,0 +1,98 @@ +/* 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 java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; + +import org.geoserver.catalog.Catalog; +import org.geoserver.catalog.DataStoreInfo; +import org.geoserver.catalog.FeatureTypeInfo; +import org.geoserver.rest.RestletException; +import org.geoserver.rest.format.ReflectiveXMLFormat; +import org.geotools.data.DataStore; +import org.restlet.Context; +import org.restlet.data.Request; +import org.restlet.data.Response; +import org.restlet.data.Status; + +import org.geotools.data.FeatureSource; + +import com.thoughtworks.xstream.XStream; + +public class AvailableGeometryFeatureTypeResource extends AbstractCatalogResource { + + public AvailableGeometryFeatureTypeResource(Context context, Request request, Response response, Catalog catalog) { + super(context, request, response, FeatureTypeInfo.class, catalog); + } + + @Override + protected Object handleObjectGet() { + String workspace = getAttribute("workspace"); + String datastore = getAttribute("datastore"); + + DataStoreInfo info = catalog.getDataStoreByName(workspace, datastore); + if (info == null) { + throw new RestletException("No such datastore: " + datastore, Status.CLIENT_ERROR_NOT_FOUND); + } + + //list of available feature types + List available = new ArrayList(); + try { + DataStore ds = (DataStore) info.getDataStore(null); + + String[] featureTypeNames = ds.getTypeNames(); + for (String featureTypeName : featureTypeNames) { + FeatureTypeInfo ftinfo = catalog.getFeatureTypeByDataStore(info, featureTypeName); + if (ftinfo == null) { + try { + FeatureSource featureSource = ds.getFeatureSource(featureTypeName); + if (featureSource.getSchema().getGeometryDescriptor() != null) { + //not in catalog, add it + available.add(featureTypeName); + } + } catch (IOException e) { + LOGGER.info("Error loading feature typee " + featureTypeName); + } + } + } + } catch (IOException e) { + throw new RestletException("Could not load datastore: " + datastore, Status.SERVER_ERROR_INTERNAL, e); + } + + return available; + } + + @Override + protected ReflectiveXMLFormat createXMLFormat(Request request, Response response) { + return new ReflectiveXMLFormat() { + + @Override + protected void write(Object data, OutputStream output) + throws IOException { + XStream xstream = new XStream(); + xstream.alias("featureTypeName", String.class); + xstream.toXML(data, output); + } + }; + } + + @Override + public boolean allowPost() { + return false; + } + + @Override + protected String handleObjectPost(Object object) { + return null; + } + + @Override + protected void handleObjectPut(Object object) { + //do nothing, we do not allow post + } +} Index: src/main/java/org/geoserver/catalog/rest/FeatureTypeFinder.java =================================================================== --- src/main/java/org/geoserver/catalog/rest/FeatureTypeFinder.java (revision 1421) +++ src/main/java/org/geoserver/catalog/rest/FeatureTypeFinder.java (working copy) @@ -54,7 +54,11 @@ if ( "available".equalsIgnoreCase( form.getFirstValue( "list" ) ) ) { return new AvailableFeatureTypeResource(null,request,response,catalog); } - + + if ( "available_geometry_only".equalsIgnoreCase( form.getFirstValue( "list" ) ) ) { + return new AvailableGeometryFeatureTypeResource(null,request,response,catalog); + } + if (request.getMethod() == Method.GET ) { return new FeatureTypeListResource(getContext(),request,response,catalog); }