/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2011-2014, 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.osmtms; import java.net.URL; import org.geotoolkit.client.AbstractCoverageClient; import org.geotoolkit.storage.coverage.CoverageReference; import org.geotoolkit.storage.coverage.CoverageType; import org.geotoolkit.storage.coverage.PyramidSet; import org.geotoolkit.util.NamesExt; import org.geotoolkit.osmtms.model.OSMTMSPyramidSet; import org.geotoolkit.parameter.Parameters; import org.geotoolkit.security.ClientSecurity; import org.apache.sis.storage.DataStoreException; import org.geotoolkit.client.Client; import org.geotoolkit.storage.DataNode; import org.geotoolkit.storage.DataStores; import org.geotoolkit.storage.DefaultDataNode; import org.opengis.util.GenericName; import org.opengis.parameter.ParameterValueGroup; /** * Represent a Tile Map Server instance. * * @author Johann Sorel (Geomatys) * @module */ public class OSMTileMapClient extends AbstractCoverageClient implements Client{ private final OSMTMSPyramidSet pyramidSet; private final DataNode rootNode = new DefaultDataNode(); /** * Builds a tile map server with the given server url and version. * * @param serverURL The server base url. must not be null. * @param maxZoomLevel maximum zoom level supported on server. */ public OSMTileMapClient(final URL serverURL, final int maxZoomLevel) { this(serverURL,null,maxZoomLevel, false); } /** * Builds a tile map server with the given server url, security and max zoom level. * * @param serverURL The server base url. must not be null. * @param security ClientSecurity. * @param maxZoomLevel maximum zoom level supported on server. */ public OSMTileMapClient(final URL serverURL, final ClientSecurity security, final int maxZoomLevel) { this(serverURL,security,maxZoomLevel, false); } /** * Builds a tile map server with the given server url, security, maximum * zoom level and a flag for cache. * * @param serverURL The server base url. must not be null. * @param security ClientSecurity. * @param maxZoomLevel maximum zoom level supported on server. * @param cacheImage */ public OSMTileMapClient(final URL serverURL, final ClientSecurity security, final int maxZoomLevel, boolean cacheImage) { this(toParameters(serverURL, security, maxZoomLevel, cacheImage)); } public OSMTileMapClient(ParameterValueGroup params){ super(params); final GenericName name = NamesExt.create(serverURL.toString(), "main"); pyramidSet = new OSMTMSPyramidSet(this,getMaxZoomLevel(),getCacheImage()); final OSMTMSCoverageReference ref = new OSMTMSCoverageReference(this,name); rootNode.getChildren().add(ref); } private static ParameterValueGroup toParameters( final URL serverURL, final ClientSecurity security, final int maxZoomLevel, boolean cacheImage){ final ParameterValueGroup params = create(OSMTMSClientFactory.PARAMETERS, serverURL, security); Parameters.getOrCreate(OSMTMSClientFactory.MAX_ZOOM_LEVEL, params).setValue(maxZoomLevel); Parameters.getOrCreate(OSMTMSClientFactory.IMAGE_CACHE, params).setValue(cacheImage); return params; } @Override public OSMTMSClientFactory getFactory() { return (OSMTMSClientFactory)DataStores.getFactoryById(OSMTMSClientFactory.NAME); } @Override public DataNode getRootNode() { return rootNode; } public boolean getCacheImage(){ return (Boolean)Parameters.getOrCreate(OSMTMSClientFactory.IMAGE_CACHE, parameters).getValue(); } public PyramidSet getPyramidSet(){ return pyramidSet; } /** * @return maximum scale level available on this server. */ public int getMaxZoomLevel() { return Parameters.value(OSMTMSClientFactory.MAX_ZOOM_LEVEL, parameters); } /** * Returns the request object. */ public GetTileRequest createGetTile() { return new DefaultGetTile(this); } @Override public void close() { } @Override public CoverageReference create(GenericName name) throws DataStoreException { throw new DataStoreException("Can not create new coverage."); } @Override public void delete(GenericName name) throws DataStoreException { throw new DataStoreException("Can not create new coverage."); } @Override public CoverageType getType() { return CoverageType.PYRAMID; } }