/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.dir; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Collections; import java.util.Map; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFactorySpi; import org.geotools.data.DataUtilities; /** * Creates a Directory DataStore following the DataStoreFactorySpi interface. * * @author David Zwiers, Refractions Research, Inc. * * @see DataStoreFactorySpi * @source $URL$ * @deprecated Use {@link org.geotools.data.directory.DirectoryDataStoreFactory} instead */ public class DirectoryDataStoreFactory implements DataStoreFactorySpi { /** The Directory parameter which should contain some files to read */ public static final Param DIRECTORY = new Param("data_directory url", URL.class, "Directory containing geospatial vector files", true); /** * The suffix parameter to specify the order of creation for new * featureTypes */ public static final Param CREATE_SUFFIX_ORDER = new Param("suffix_list", String[].class, "space delimited list of prefixes to attempt and create new files for.", true) { /** * Overide text to unwap the array of strings back into a space * limited text string. * TODO: (JD) perhaps this should be done by param? I guess we would have to * agree on the delimiter for collection or array based parameters. */ public String text(Object value) { if ( value instanceof String[] ) { String[] values = (String[]) value; StringBuffer sb = new StringBuffer(); for ( int i = 0; i < values.length; i++ ) { sb.append( values[i] + " " ); } sb.setLength( sb.length() - 1); return sb.toString(); } return super.text( value ); } }; /** * @see org.geotools.data.DataStoreFactorySpi#createDataStore(java.util.Map) */ public DataStore createDataStore(Map params) throws IOException { if (!canProcess(params)) { throw new IOException("Invalid parameters for DirectoryDataStore"); } URL url = (URL) DIRECTORY.lookUp(params); File f = DataUtilities.urlToFile(url); String[] strs = (String[]) CREATE_SUFFIX_ORDER.lookUp(params); if (strs == null) { throw new IOException("Invalid parameter " + CREATE_SUFFIX_ORDER.key + " : is null"); } if (!f.isDirectory()) { throw new IOException("Invalid parameter " + DIRECTORY.key + " : is not a valid directory"); } return new DirectoryDataStore(f, strs); } // /** // * @see org.geotools.data.DataStoreFactorySpi#createMetadata(java.util.Map) // */ // public DataSourceMetadataEnity createMetadata(Map params) // throws IOException { // File url = (File) DIRECTORY.lookUp(params); // String parent = url.getParent(); // String name = url.getName(); // // return new DataSourceMetadataEnity(parent, name, // "Access to Directory " + url.toString()); // } /** * @see org.geotools.data.DataStoreFactorySpi#createNewDataStore(java.util.Map) */ public DataStore createNewDataStore(Map params) throws IOException { if (!canProcess(params)) { throw new IOException("Invalid parameters for DirectoryDataStore"); } URL url = (URL) DIRECTORY.lookUp(params); File f = DataUtilities.urlToFile(url); if (f.exists()) { throw new IOException("Invalid parameter " + DIRECTORY.key + " : directory already exists"); } if (!f.isDirectory()) { throw new IOException("Invalid parameter " + DIRECTORY.key + " : is not a valid directory"); } if (!f.createNewFile()) { throw new IOException("Invalid parameter " + DIRECTORY.key + " : cannot create directory"); } String[] strs = (String[]) CREATE_SUFFIX_ORDER.lookUp(params); if (strs == null) { throw new IOException("Invalid parameter " + CREATE_SUFFIX_ORDER.key + " : is null"); } return new DirectoryDataStore(f, strs); } /** * @see org.geotools.data.DataStoreFactorySpi#getDisplayName() */ public String getDisplayName() { return "Directory DataStore"; } /** * @see org.geotools.data.DataStoreFactorySpi#getDescription() */ public String getDescription() { return "Propagates to multiple file types representing a directory"; } /** * @see org.geotools.data.DataStoreFactorySpi#getParametersInfo() */ public Param[] getParametersInfo() { return new Param[] { DIRECTORY, CREATE_SUFFIX_ORDER }; } /** * @see org.geotools.data.DataStoreFactorySpi#canProcess(java.util.Map) */ public boolean canProcess(Map params) { try { URL url = (URL) DIRECTORY.lookUp(params); File f = DataUtilities.urlToFile(url); String[] str = (String[]) CREATE_SUFFIX_ORDER.lookUp(params); //return ((f != null) && (str != null) && f.isDirectory()); return (f != null) && (str != null); } catch (Exception e) { return false; } } /** * @see org.geotools.data.DataStoreFactorySpi#isAvailable() */ public boolean isAvailable() { return true; } /** * Returns the implementation hints. The default implementation returns en empty map. */ public Map getImplementationHints() { return Collections.EMPTY_MAP; } }