001: /*
002: * Geotools2 - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2002, Geotools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation;
009: * version 2.1 of the License.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: */
017: package org.geotools.arcsde.gce.imageio;
018:
019: import java.awt.Dimension;
020: import java.io.File;
021: import java.io.IOException;
022: import java.util.Locale;
023: import java.util.Map;
024: import java.util.logging.Logger;
025:
026: import javax.imageio.ImageReader;
027: import javax.imageio.spi.ImageReaderSpi;
028:
029: import org.geotools.arcsde.gce.ArcSDEPyramid;
030: import org.geotools.arcsde.gce.ArcSDEPyramidLevel;
031: import org.geotools.arcsde.pool.ArcSDEConnectionPool;
032: import org.geotools.data.jdbc.ConnectionPool;
033:
034: /**
035: * An ImageIO Service Provider Interface for creating ArcSDERasterReaders.
036: *
037: * @author sfarber
038: *
039: */
040: public class ArcSDERasterReaderSpi extends ImageReaderSpi {
041:
042: final public static String PYRAMID = "org.geotools.arcsde.gce.imageio.PYRAMID";
043:
044: final public static String RASTER_COLUMN = "org.geotools.arcsde.gce.imageio.RASTER_COLUMN";
045:
046: final public static String RASTER_TABLE = "org.geotools.arcsde.gce.imageio.RASTER_TABLE";
047:
048: public boolean canDecodeInput(Object source) throws IOException {
049: // trust me, if you have to ask whether this plugin can decode a given
050: // source, it can't.
051: return false;
052: }
053:
054: /**
055: * Creates an ArcSDERasterReader (an ImageIO compatible ImageReader). This
056: * reader requires the following keys to be set in the {@link java.util.Map}
057: * passed to this method:<br/>
058: *
059: * <ul>
060: * <li>ArcSDERasterReaderSpi.PYRAMID - a {@link ArcSDEPyramid} describing the
061: * pyramid that this reader will be reading</li>
062: * <li>ArcSDERasterReaderSpi.RASTER_COLUMN - a String containing the Raster
063: * column for this readers RASTER_TABLE</li>
064: * <li>ArcSDERasterReaderSpi.RASTER_TABLE -
065: * a String containing the name of the ArcSDE raster table to read. Probably
066: * needs to be qualified with the schema name.</li>
067: * </ul>
068: */
069: public ImageReader createReaderInstance(Object extension)
070: throws IOException {
071: if (extension instanceof Map) {
072: final ArcSDEPyramid p = (ArcSDEPyramid) ((Map) extension)
073: .get(PYRAMID);
074: final String t = (String) ((Map) extension)
075: .get(RASTER_TABLE);
076: final String c = (String) ((Map) extension)
077: .get(RASTER_COLUMN);
078: if (p == null)
079: throw new IllegalArgumentException(
080: "missing value for 'ArcSDERasterReaderSpi.PYRAMID' in supplied paramater map.");
081: if (c == null)
082: throw new IllegalArgumentException(
083: "missing value for 'ArcSDERasterReaderSpi.RASTER_COLUMN' in supplied paramater map.");
084: if (t == null)
085: throw new IllegalArgumentException(
086: "missing value for 'ArcSDERasterReaderSpi.RASTER_TABLE' in supplied paramater map.");
087: return new ArcSDERasterReader(this , p, t, c);
088: } else {
089: throw new IllegalArgumentException(
090: "ArcSDERasterReader needs a java.util.Map of parameters to be instantiated");
091: }
092: }
093:
094: public String getDescription(Locale locale) {
095: return "ESRI ArcSDE database-stored raster image reader.";
096: }
097:
098: /**
099: * We completely ignore the setInput() call in this reader, so we'll happily accept anything.
100: */
101: public Class[] getInputTypes() {
102: return new Class[] { Object.class };
103: }
104:
105: }
|