001// License: GPL. For details, see Readme.txt file.
002package org.openstreetmap.gui.jmapviewer.tilesources;
003
004/**
005 * OSM Tile source.
006 */
007public class OsmTileSource {
008
009    /**
010     * The default "Mapnik" OSM tile source.
011     */
012    public static class Mapnik extends AbstractOsmTileSource {
013
014        private static final String PATTERN = "https://%s.tile.openstreetmap.org";
015
016        private static final String[] SERVER = { "a", "b", "c" };
017
018        private int SERVER_NUM = 0;
019
020        /**
021         * Constructs a new {@code "Mapnik"} tile source.
022         */
023        public Mapnik() {
024            super("Mapnik", PATTERN);
025        }
026
027        @Override
028        public String getBaseUrl() {
029            String url = String.format(this.baseUrl, new Object[] { SERVER[SERVER_NUM] });
030            SERVER_NUM = (SERVER_NUM + 1) % SERVER.length;
031            return url;
032        }
033
034        @Override
035        public int getMaxZoom() {
036            return 19;
037        }
038
039        public TileUpdate getTileUpdate() {
040            return TileUpdate.IfNoneMatch;
041        }
042    }
043
044    /**
045     * The "Cycle Map" OSM tile source.
046     */
047    public static class CycleMap extends AbstractOsmTileSource {
048
049        private static final String PATTERN = "http://%s.tile.opencyclemap.org/cycle";
050
051        private static final String[] SERVER = { "a", "b", "c" };
052
053        private int SERVER_NUM = 0;
054
055        /**
056         * Constructs a new {@code CycleMap} tile source.
057         */
058        public CycleMap() {
059            super("Cyclemap", PATTERN);
060        }
061
062        @Override
063        public String getBaseUrl() {
064            String url = String.format(this.baseUrl, new Object[] { SERVER[SERVER_NUM] });
065            SERVER_NUM = (SERVER_NUM + 1) % SERVER.length;
066            return url;
067        }
068
069        @Override
070        public int getMaxZoom() {
071            return 18;
072        }
073
074        public TileUpdate getTileUpdate() {
075            return TileUpdate.LastModified;
076        }
077    }
078}