/** * */ package org.geotools.coverage.io.geotiff; import java.util.Collections; import java.util.EnumSet; import java.util.Map; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.coverage.grid.io.imageio.geotiff.GeoTiffException; import org.geotools.coverage.io.CoverageCapabilities; import org.geotools.coverage.io.CoverageResponse; import org.geotools.coverage.io.CoverageStore; import org.geotools.coverage.io.CoverageUpdateRequest; import org.geotools.coverage.io.CoverageResponse.Status; import org.geotools.coverage.io.geotiff.GeoTiffAccess.Info; import org.geotools.coverage.io.impl.DefaultCoverageResponseImpl; import org.geotools.data.Parameter; import org.geotools.geometry.GeneralEnvelope; import org.opengis.feature.type.Name; import org.opengis.util.ProgressListener; /** * @author simone * * * @source $URL: http://svn.osgeo.org/geotools/branches/2.7.x/build/maven/javadoc/../../../modules/unsupported/coverage-experiment/geotiff/src/main/java/org/geotools/coverage/io/geotiff/GeoTiffStore.java $ */ public class GeoTiffStore extends GeoTiffSource implements CoverageStore { GeoTiffStore(final GeoTiffAccess geotiff, final Name name) { super( geotiff, name ); capabilities.addAll( EnumSet.of( CoverageCapabilities.WRITE_HORIZONTAL_DOMAIN_SUBSAMBLING, CoverageCapabilities.WRITE_RANGE_SUBSETTING, CoverageCapabilities.WRITE_SUBSAMPLING )); } public Map<String, Parameter<?>> getUpdateParameterInfo() { return Collections.emptyMap(); } public CoverageResponse update(CoverageUpdateRequest writeRequest, ProgressListener progress) { ensureNotDisposed(); access.globalLock.writeLock().lock(); final DefaultCoverageResponseImpl response = new DefaultCoverageResponseImpl(); response.setRequest(writeRequest); try { // reader final GeoTiffWriter writer = new GeoTiffWriter(this.access.input); // get the data final GridCoverage2D coverage = (GridCoverage2D) writeRequest.getData().iterator().next(); writer.write(coverage, null); writer.dispose(); response.addResult(coverage); response.setStatus(Status.SUCCESS); // update the access Info info = getInfo(null); info.setExtent( (GeneralEnvelope) coverage.getGridGeometry().getEnvelope() ); info.setGeometry( coverage.getGridGeometry() ); } catch (Throwable e) { response.addException(new GeoTiffException(null, "IO error", e)); } finally { this.access.globalLock.writeLock().unlock(); } return response; } }