/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 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.coverage.io.impl;
import java.io.IOException;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.geotools.coverage.grid.io.DimensionDescriptor;
import org.geotools.coverage.io.CoverageCapabilities;
import org.geotools.coverage.io.CoverageSource;
import org.geotools.coverage.io.CoverageSourceDescriptor;
import org.geotools.coverage.io.RasterLayout;
import org.geotools.coverage.io.metadata.MetadataNode;
import org.geotools.coverage.io.range.RangeType;
import org.geotools.data.Parameter;
import org.geotools.data.ResourceInfo;
import org.opengis.feature.type.Name;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.util.ProgressListener;
/**
* Default implementation of {@link CoverageSource}.
*
* @author Daniele Romagnoli, GeoSolutions SAS
*
* @source $URL$
*/
public abstract class DefaultCoverageSource implements CoverageSource {
protected final static EnumSet<CoverageCapabilities> CAPABILITIES;
static {
CAPABILITIES = EnumSet.of(CoverageCapabilities.READ_HORIZONTAL_DOMAIN_SUBSAMBLING,
CoverageCapabilities.READ_RANGE_SUBSETTING, CoverageCapabilities.READ_REPROJECTION,
CoverageCapabilities.READ_SUBSAMPLING);
}
protected final Name name;
protected final CoverageSourceDescriptor coverageDescriptor;
private boolean disposed;
/**
* @param name
* @param coverageDescriptor
*/
protected DefaultCoverageSource(Name name, CoverageSourceDescriptor descriptor) {
this.name = name;
this.coverageDescriptor = descriptor;
}
@Override
public Map<String, Parameter< ? >> getReadParameterInfo() {
return null;
}
@Override
public MetadataNode getMetadata( String metadataDomain, ProgressListener listener ) {
return null;
}
@Override
public Set<Name> getMetadataDomains() {
return null;
}
@Override
public List< ? extends RasterLayout> getOverviewsLayouts( ProgressListener listener ) throws IOException {
return Collections.emptyList();
}
@Override
public int getOverviewsNumber( ProgressListener listener ) throws IOException {
return 0;
}
@Override
public Name getName( ProgressListener listener ) {
ensureNotDisposed();
return name;
}
protected void ensureNotDisposed() {
if (disposed){
throw new IllegalStateException("Disposed");
}
}
@Override
public EnumSet<CoverageCapabilities> getCapabilities() {
return EnumSet.copyOf(CAPABILITIES);
}
@Override
public RangeType getRangeType( ProgressListener listener ) throws IOException {
ensureNotDisposed();
return coverageDescriptor.getRangeType();
}
@Override
public CoordinateReferenceSystem getCoordinateReferenceSystem() {
return coverageDescriptor.getSpatialDomain().getCoordinateReferenceSystem2D();
}
@Override
public SpatialDomain getSpatialDomain() throws IOException {
return coverageDescriptor.getSpatialDomain();
}
@Override
public TemporalDomain getTemporalDomain() throws IOException {
return coverageDescriptor.getTemporalDomain();
}
@Override
public VerticalDomain getVerticalDomain() throws IOException {
return coverageDescriptor.getVerticalDomain();
}
@Override
public List<AdditionalDomain> getAdditionalDomains() throws IOException {
return coverageDescriptor.getAdditionalDomains();
}
@Override
public List<DimensionDescriptor> getDimensionDescriptors() throws IOException {
return coverageDescriptor.getDimensionDescriptors();
}
@Override
public ResourceInfo getInfo( ProgressListener listener ) {
ensureNotDisposed();
return null;
}
@Override
public void dispose() {
if(disposed){
return;
}
disposed=true;
coverageDescriptor.dispose();
}
}