/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2012, 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.driver; import java.io.IOException; import java.io.Serializable; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; import java.util.Map; import java.util.logging.Logger; import org.geotools.coverage.io.CoverageAccess; import org.geotools.coverage.io.CoverageAccess.AccessType; import org.geotools.coverage.io.CoverageReadRequest; import org.geotools.coverage.io.CoverageResponse; import org.geotools.coverage.io.CoverageSource; import org.geotools.coverage.io.CoverageSourceDescriptor; import org.geotools.coverage.io.CoverageStore; import org.geotools.coverage.io.Driver; import org.geotools.coverage.io.TestCoverageSourceDescriptor; import org.geotools.coverage.io.impl.DefaultCoverageSource; import org.geotools.coverage.io.impl.DefaultFileCoverageAccess; import org.geotools.coverage.io.impl.DefaultFileDriver; import org.geotools.data.DataSourceException; import org.geotools.data.Parameter; import org.geotools.factory.Hints; import org.geotools.feature.NameImpl; import org.opengis.feature.type.Name; import org.opengis.util.ProgressListener; /** * * @author Simone Giannecchini, GeoSolutions * @source $URL$ * * A simple TestDriver supporting only connections to a single TEST_URL resource. No support on delete and create, */ public class TestDriver extends DefaultFileDriver implements Driver { public static final String TEST_URL = "file:/" + TestCoverageSourceDescriptor.TEST_COVERAGE; public static final String TEST_DRIVER = "test driver"; private static TestDriver testDriver = new TestDriver(); private static Map<String, Parameter<?>> emptyMap = Collections.emptyMap(); private final static Logger LOGGER = org.geotools.util.logging.Logging .getLogger(TestDriver.class.toString()); private static final String EXTENSION = ".EXT"; @Override public boolean isAvailable() { return true; } public TestDriver() { super(TEST_DRIVER, TEST_DRIVER, TEST_DRIVER, new Hints(), Collections .singletonList(EXTENSION), EnumSet.of(DriverCapabilities.CONNECT, DriverCapabilities.CREATE, DriverCapabilities.DELETE)); } @Override protected boolean canConnect(Map<String, Serializable> params) { return params != null && params.containsKey(DefaultFileDriver.URL.key) && ((URL) params.get(DefaultFileDriver.URL.key)).getPath().contains( TestCoverageSourceDescriptor.TEST_COVERAGE); } @Override protected boolean canDelete(Map<String, Serializable> params) { return false; } @Override protected boolean canCreate(Map<String, Serializable> params) { return false; } @Override protected CoverageAccess connect(Map<String, Serializable> params, Hints hints, ProgressListener listener) throws IOException { return new TestCoverageAccess(this, EnumSet.of(AccessType.READ_ONLY), emptyMap, params); } @Override protected CoverageAccess create(Map<String, Serializable> params, Hints hints, ProgressListener listener) throws IOException { return new TestCoverageAccess(this, EnumSet.of(AccessType.READ_WRITE), emptyMap, params); } @Override protected CoverageAccess delete(Map<String, Serializable> params, Hints hints, ProgressListener listener) throws IOException { // TODO Auto-generated method stub return super.delete(params, hints, listener); } static class TestCoverageSource extends DefaultCoverageSource implements CoverageSource { protected TestCoverageSource(Name name, CoverageSourceDescriptor descriptor) { super(name, descriptor); } @Override public CoverageResponse read(CoverageReadRequest request, ProgressListener listener) throws IOException { return null; } } static class TestCoverageAccess extends DefaultFileCoverageAccess implements CoverageAccess { @Override public CoverageSource access(Name name, Map<String, Serializable> params, AccessType accessType, Hints hints, ProgressListener listener) throws IOException { return new TestCoverageSource(name, new TestCoverageSourceDescriptor(TestCoverageSourceDescriptor.TEST_COVERAGE)); } @Override public boolean canCreate(Name name, Map<String, Serializable> params, Hints hints, ProgressListener listener) throws IOException { return super.canCreate(name, params, hints, listener); } @Override public boolean canDelete(Name name, Map<String, Serializable> params, Hints hints) throws IOException { return false; } @Override public CoverageStore create(Name name, Map<String, Serializable> params, Hints hints, ProgressListener listener) throws IOException { return super.create(name, params, hints, listener); } @Override public boolean delete(Name name, Map<String, Serializable> params, Hints hints) throws IOException { throw new UnsupportedOperationException(); } public TestCoverageAccess(Driver driver, EnumSet<AccessType> allowedAccessTypes, Map<String, Parameter<?>> accessParams, Map<String, Serializable> connectionParameters) throws DataSourceException { super(driver, allowedAccessTypes, accessParams, null, connectionParameters); names = new ArrayList<Name>(); names.add(new NameImpl(TestCoverageSourceDescriptor.TEST_COVERAGE)); } } }