/* 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.util.HashMap; import org.geoserver.catalog.Catalog; import org.geoserver.data.util.CoverageStoreUtils; import org.geoserver.rest.RestletException; import org.geotools.data.DataStoreFactorySpi; import org.opengis.coverage.grid.Format; import org.restlet.data.Request; import org.restlet.data.Response; import org.restlet.data.Status; import org.restlet.resource.Resource; public class StoreFileFinder extends AbstractCatalogFinder { protected static HashMap<String,String> formatToCoverageStoreFormat = new HashMap(); static { for (Format format : CoverageStoreUtils.formats) { formatToCoverageStoreFormat.put(format.getName().toLowerCase(), format.getName()); } } public StoreFileFinder(Catalog catalog) { super(catalog); } @Override public Resource findTarget(Request request, Response response) { //figure out what kind of store this maps to String format = getAttribute(request, "format"); String datastore = getAttribute(request, "datastore"); String coveragestore = getAttribute(request, "coveragestore"); if ( datastore != null ) { return new DataStoreFileResource(request,response,format,catalog); } else { String coverageFormatName = formatToCoverageStoreFormat.get( format ); if ( coverageFormatName == null ) { throw new RestletException( "Unsupported format: " + format, Status.CLIENT_ERROR_BAD_REQUEST ); } Format coverageFormat = null; try { coverageFormat = CoverageStoreUtils.acquireFormat( coverageFormatName ); } catch( Exception e ) { throw new RestletException( "Coveragestore format unavailable: " + coverageFormatName, Status.SERVER_ERROR_INTERNAL ); } return new CoverageStoreFileResource(request,response,coverageFormat,catalog); } } }