package org.geotools.coverage.io; import java.io.IOException; import java.util.List; import java.util.Map; import org.geotools.coverage.io.domain.RasterDatasetDomainManager; import org.geotools.coverage.io.range.Band; import org.geotools.coverage.io.request.CoverageReadRequest; import org.geotools.coverage.io.request.CoverageRequest; import org.geotools.coverage.io.request.CoverageResponse; import org.geotools.coverage.io.request.CoverageRequest.RequestType; import org.geotools.data.Parameter; import org.opengis.util.ProgressListener; public interface RasterSlice { /** * Retrieves a {@link RangeManager} instance which can be used to describe the * codomain for the underlying coverage. * * @param listener * @return a {@link RangeManager} instance which can be used to describe the * codomain for the underlying coverage. * @throws IOException in case something bad occurs */ public List<Band> getBands(final ProgressListener listener) throws IOException; public List<Band> getRangeSubset(final List<Band.BandKey>bands,final ProgressListener listener) throws IOException; public RasterDatasetDomainManager getDomainManager(final ProgressListener listener) throws IOException; public RasterDataset getRasterDataset(); /** * Obtain a {@link CoverageResponse} from this {@link RasterDataset} given a specified {@link DefaultCoverageRequest}. * * @param request the input {@link DefaultCoverageRequest}. * @param listener * @return * @throws IOException */ public <T extends CoverageRequest> CoverageResponse performRequest(final T request,final ProgressListener listener) throws IOException; /** * Describes the required (and optional) parameters that * can be passed to the {@link #update(CoverageReadRequest, ProgressListener)} method. * <p> * @return Param a {@link Map} describing the {@link Map} for {@link #update(CoverageReadRequest, ProgressListener)}. */ public Map<String, Parameter<?>> getDefaultParameterInfo(RequestType requestType); /** * Closes this {@link RasterDataset} and releases any lock or cached information it holds. * * <p> * Once a {@link RasterStorage} has been disposed it can be seen as being in unspecified state, * hence calling a method on it may have unpredictable results. */ public void close(); }