Package org.geotools.imageio

Source Code of org.geotools.imageio.GeoSpatialImageReader

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2007-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.imageio;


import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.spi.ImageReaderSpi;

import org.geotools.coverage.grid.io.FileSetManager;
import org.geotools.coverage.io.CoverageSourceDescriptor;
import org.geotools.coverage.io.catalog.CoverageSlice;
import org.geotools.coverage.io.catalog.CoverageSlicesCatalog;
import org.geotools.data.Query;
import org.opengis.feature.type.Name;

/**
* @author Daniele Romagnoli, GeoSolutions SAS
* @author Simone Giannecchini, GeoSolutions SAS
*
* @source $URL$
*/
public abstract class GeoSpatialImageReader extends ImageReader implements FileSetManager{

    /** the coverage slices slicesCatalog currently stored as H2 DB */
    private CoverageSlicesCatalog slicesCatalog;

    protected int numImages = -1;

    private String auxiliaryFilesPath = null;

    protected GeoSpatialImageReader(ImageReaderSpi originatingProvider) {
        super(originatingProvider);
    }

    @Override
    public IIOMetadata getImageMetadata(int imageIndex) throws IOException {
        checkImageIndex(imageIndex);
        if (ignoreMetadata) {
            return null;
        }
        throw new UnsupportedOperationException("ImageMetadata are not supported for this ImageReader");
    }

    @Override
    public void dispose() {
        super.dispose();
       
        try {
            if (slicesCatalog != null) {
                slicesCatalog.dispose();
            }
        } catch (Throwable t) {
           
        } finally {
            slicesCatalog = null;
        }
    }

    @Override
    public IIOMetadata getStreamMetadata() throws IOException {
        throw new UnsupportedOperationException("getStreamMetadata is not supported");
    }

    /**
     * Simple check of the specified image index. Valid indexes are belonging
     * the range [0 - numRasters]. In case this constraint is not respected, an
     * {@link IndexOutOfBoundsException} is thrown.
     *
     * @param imageIndex the index to be checked
     *
     * @throw {@link IndexOutOfBoundsException} in case the provided imageIndex
     * is not in the range of supported ones.
     */
    protected void checkImageIndex(final int imageIndex) {
        if (imageIndex < 0 || imageIndex >= numImages) {
            throw new IndexOutOfBoundsException("Invalid imageIndex. It should "
                    + (numImages > 0 ? ("belong the range [0," + (numImages - 1)) : "be 0"));
        }
    }

    public int getNumImages(final boolean allowSearch) throws IOException {
        return numImages;
    }

    /**
     * Return the name of coverages made available by this provider
     */
    public abstract Collection<Name> getCoveragesNames();

    /**
     * The number of coverages made available by this provider.
     */
    public abstract int getCoveragesNumber();

    /**
     *
     * @param name
     * @return
     */
    public abstract CoverageSourceDescriptor getCoverageDescriptor(Name name);

   
    protected void setCatalog(CoverageSlicesCatalog catalog) {
        if(slicesCatalog!=null){
            slicesCatalog.dispose();
        }
        slicesCatalog = catalog;
    }

    /**
     * Return the list of imageIndex related to the feature in the slicesCatalog
     * which result from the specified query.
     *
     * @param filterQuery the filter query (temporal, vertical, name selection) to
     * restrict the requested imageIndexes
     * @return
     * @throws IOException
     */
    public List<Integer> getImageIndex(Query filterQuery) throws IOException {
        List<CoverageSlice> descs = slicesCatalog.getGranules(filterQuery);
        List<Integer> indexes = new ArrayList<Integer>();
        for (CoverageSlice desc : descs) {
            Integer index = (Integer) desc.getOriginator().getAttribute(CoverageSlice.Attributes.INDEX);
            indexes.add(index);
        }
        return indexes;
    }

    public String getAuxiliaryFilesPath() {
        return auxiliaryFilesPath;
    }

    public void setAuxiliaryFilesPath(String auxiliaryFilesPath) {
        this.auxiliaryFilesPath = auxiliaryFilesPath;
    }

    /**
     * Returns the underlying slicesCatalog.
     *
     * @return
     */
    public CoverageSlicesCatalog getCatalog() {
        return slicesCatalog;
    }
   
    /**
     * Init the slicesCatalog based on the provided parameters
     *
     * @param parentLocation
     * @param databaseName
     * @throws IOException
     */
    protected void initCatalog(File parentLocation, String databaseName) throws IOException {
        slicesCatalog = new CoverageSlicesCatalog(databaseName, parentLocation);
    }

    @Override
    protected void finalize() throws Throwable {
        dispose();
        super.finalize();
    }
}
TOP

Related Classes of org.geotools.imageio.GeoSpatialImageReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.