/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2012, Geomatys * * 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.geotoolkit.storage.coverage; import java.awt.Image; import org.apache.sis.storage.DataStoreException; import org.apache.sis.util.collection.TableColumn; import org.geotoolkit.coverage.grid.GridCoverage2D; import org.geotoolkit.coverage.io.CoverageReader; import org.geotoolkit.coverage.io.CoverageStoreException; import org.geotoolkit.coverage.io.GridCoverageReader; import org.geotoolkit.coverage.io.GridCoverageWriter; import org.geotoolkit.coverage.io.ImageCoverageReader; import org.geotoolkit.coverage.memory.MemoryCoverageReader; import org.opengis.util.GenericName; /** * CoverageReference implementation wrapping a coverage. * * @author Johann Sorel */ public class DefaultCoverageReference extends AbstractCoverageReference{ private final GridCoverage2D coverage; private final Object input; private final int imageIndex; public DefaultCoverageReference(final CoverageStore store, final GridCoverage2D coverage, GenericName name) { super(store,name); setValue(TableColumn.NAME, name.tip().toString()); this.coverage = coverage; this.input = null; this.imageIndex = 0; } public DefaultCoverageReference(final GridCoverage2D coverage, GenericName name) { super(null,name); setValue(TableColumn.NAME, name.tip().toString()); this.coverage = coverage; this.input = null; this.imageIndex = 0; } public DefaultCoverageReference(final Object input, GenericName name) { super(null,name); this.coverage = null; this.input = input; this.imageIndex = 0; } @Override public int getImageIndex() { return imageIndex; } @Override public boolean isWritable() throws DataStoreException { return false; } @Override public GridCoverageReader acquireReader() throws CoverageStoreException { if (coverage != null) { return new MemoryCoverageReader(coverage); } else if (input instanceof GridCoverage2D) { return new MemoryCoverageReader((GridCoverage2D) input); } else if (input instanceof GridCoverageReader) { return (GridCoverageReader) input; } else { ImageCoverageReader reader = new ImageCoverageReader(); reader.setInput(input); return reader; } } @Override public GridCoverageWriter acquireWriter() throws CoverageStoreException { throw new CoverageStoreException("Writing not supported."); } @Override public void recycle(CoverageReader reader) { if(input instanceof GridCoverageReader){ //do not dispose it, it will be reused }else{ super.recycle(reader); } } @Override public Image getLegend() throws DataStoreException { return null; } @Override protected void finalize() throws Throwable { if(input instanceof GridCoverageReader){ dispose((GridCoverageReader)input); } super.finalize(); } }