[jmapviewer] 01/13: Imported Upstream version 1.09+dfsg

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Fri Oct 9 09:40:53 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository jmapviewer.

commit 346f2a4261a089fcc2ea7cd90d2e804a3d3cf4eb
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Oct 9 10:37:46 2015 +0200

    Imported Upstream version 1.09+dfsg
---
 .../openstreetmap/gui/jmapviewer/JMapViewer.java   |   2 +-
 .../openstreetmap/gui/jmapviewer/OsmMercator.java  |  60 ++++++---
 .../gui/jmapviewer/OsmTileLoader.java              |  14 +-
 src/org/openstreetmap/gui/jmapviewer/Tile.java     |  50 ++++++-
 .../gui/jmapviewer/interfaces/TileJob.java         |   6 +
 .../gui/jmapviewer/interfaces/TileSource.java      |  25 +++-
 src/org/openstreetmap/gui/jmapviewer/package.html  |   2 +-
 .../tilesources/AbstractOsmTileSource.java         |   6 +-
 .../tilesources/AbstractTMSTileSource.java         |  77 ++++++++---
 .../jmapviewer/tilesources/AbstractTileSource.java |   8 +-
 .../tilesources/BingAerialTileSource.java          |   9 +-
 .../jmapviewer/tilesources/ScanexTileSource.java   |  10 +-
 .../gui/jmapviewer/tilesources/TMSTileSource.java  |  14 +-
 .../tilesources/TemplatedTMSTileSource.java        |  22 +---
 .../gui/jmapviewer/tilesources/TileSourceInfo.java | 143 +++++++++++++++++++++
 15 files changed, 369 insertions(+), 79 deletions(-)

diff --git a/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java b/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
index b1aa19f..e70ca00 100644
--- a/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
+++ b/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
@@ -584,7 +584,7 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
                             tile = tileController.getTile(tilex, tiley, zoom);
                         }
                         if (tile != null) {
-                            tile.paint(g, posx, posy);
+                            tile.paint(g, posx, posy, tilesize, tilesize);
                             if (tileGridVisible) {
                                 g.drawRect(posx, posy, tilesize, tilesize);
                             }
diff --git a/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java b/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
index f0a7bcd..0556783 100644
--- a/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
+++ b/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
@@ -10,31 +10,59 @@ package org.openstreetmap.gui.jmapviewer;
  */
 public class OsmMercator {
 
-    public static int TILE_SIZE = 256;
+    /**
+     * default tile size
+     */
+    public static int DEFAUL_TILE_SIZE = 256;
+    /** maximum latitude (north) for mercator display */
     public static final double MAX_LAT = 85.05112877980659;
+    /** minimum latitude (south) for mercator display */
     public static final double MIN_LAT = -85.05112877980659;
-    private static double EARTH_RADIUS = 6378137; // equatorial earth radius for EPSG:3857 (Mercator)
+    /** equatorial earth radius for EPSG:3857 (Mercator) */
+    private static double EARTH_RADIUS = 6378137;
+
+    /**
+     * instance with tile size of 256 for easy conversions
+     */
+    public static final OsmMercator MERCATOR_256 = new OsmMercator();
+
+    /** tile size of the displayed tiles */
+    private int tileSize = DEFAUL_TILE_SIZE;
+
+    /**
+     * Creates instance with default tile size of 256
+     */
+    public OsmMercator() {
+    }
+
+    /**
+     * Creates instance with provided tile size.
+     * @param tileSize
+     */
+    public OsmMercator(int tileSize) {
+        this.tileSize = tileSize;
+    }
 
-    public static double radius(int aZoomlevel) {
-        return (TILE_SIZE * (1 << aZoomlevel)) / (2.0 * Math.PI);
+    public double radius(int aZoomlevel) {
+        return (tileSize * (1 << aZoomlevel)) / (2.0 * Math.PI);
     }
 
     /**
      * Returns the absolut number of pixels in y or x, defined as: 2^Zoomlevel *
-     * TILE_WIDTH where TILE_WIDTH is the width of a tile in pixels
+     * tileSize where tileSize is the width of a tile in pixels
      *
      * @param aZoomlevel zoom level to request pixel data
      * @return number of pixels
      */
-    public static int getMaxPixels(int aZoomlevel) {
-        return TILE_SIZE * (1 << aZoomlevel);
+    public int getMaxPixels(int aZoomlevel) {
+        return tileSize * (1 << aZoomlevel);
     }
 
-    public static int falseEasting(int aZoomlevel) {
+    public int falseEasting(int aZoomlevel) {
         return getMaxPixels(aZoomlevel) / 2;
     }
 
-    public static int falseNorthing(int aZoomlevel) {
+    public int falseNorthing(int aZoomlevel) {
         return (-1 * getMaxPixels(aZoomlevel) / 2);
     }
 
@@ -50,7 +78,7 @@ public class OsmMercator {
      * @return the distance
      * @author Jason Huntley
      */
-    public static double getDistance(int x1, int y1, int x2, int y2, int zoomLevel) {
+    public double getDistance(int x1, int y1, int x2, int y2, int zoomLevel) {
         double la1 = YToLat(y1, zoomLevel);
         double lo1 = XToLon(x1, zoomLevel);
         double la2 = YToLat(y2, zoomLevel);
@@ -69,7 +97,7 @@ public class OsmMercator {
      * @return the distance
      * @author Jason Huntley
      */
-    public static double getDistance(double la1, double lo1, double la2, double lo2) {
+    public double getDistance(double la1, double lo1, double la2, double lo2) {
         double aStartLat = Math.toRadians(la1);
         double aStartLong = Math.toRadians(lo1);
         double aEndLat =Math.toRadians(la2);
@@ -100,10 +128,10 @@ public class OsmMercator {
      * @return [0..2^Zoomlevel*TILE_SIZE[
      * @author Jan Peter Stotz
      */
-    public static double LonToX(double aLongitude, int aZoomlevel) {
+    public double LonToX(double aLongitude, int aZoomlevel) {
         int mp = getMaxPixels(aZoomlevel);
         double x = (mp * (aLongitude + 180l)) / 360l;
-        return Math.min(x, mp - 1);
+        return Math.min(x, mp);
     }
 
     /**
@@ -124,7 +152,7 @@ public class OsmMercator {
      * @return [0..2^Zoomlevel*TILE_SIZE[
      * @author Jan Peter Stotz
      */
-    public static double LatToY(double aLat, int aZoomlevel) {
+    public double LatToY(double aLat, int aZoomlevel) {
         if (aLat < MIN_LAT)
             aLat = MIN_LAT;
         else if (aLat > MAX_LAT)
@@ -154,7 +182,7 @@ public class OsmMercator {
      * @return ]-180..180[
      * @author Jan Peter Stotz
      */
-    public static double XToLon(int aX, int aZoomlevel) {
+    public double XToLon(int aX, int aZoomlevel) {
         return ((360d * aX) / getMaxPixels(aZoomlevel)) - 180.0;
     }
 
@@ -165,7 +193,7 @@ public class OsmMercator {
      *            [0..2^Zoomlevel*TILE_WIDTH[
      * @return [MIN_LAT..MAX_LAT] is about [-85..85]
      */
-    public static double YToLat(int aY, int aZoomlevel) {
+    public double YToLat(int aY, int aZoomlevel) {
         aY += falseNorthing(aZoomlevel);
         double latitude = (Math.PI / 2) - (2 * Math.atan(Math.exp(-1.0 * aY / radius(aZoomlevel))));
         return -1 * Math.toDegrees(latitude);
diff --git a/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java b/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
index bf93c6e..d138714 100644
--- a/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
+++ b/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
@@ -40,6 +40,7 @@ public class OsmTileLoader implements TileLoader {
         return new TileJob() {
 
             InputStream input = null;
+            boolean force = false;
 
             public void run() {
                 synchronized (tile) {
@@ -51,6 +52,9 @@ public class OsmTileLoader implements TileLoader {
                 }
                 try {
                     URLConnection conn = loadTileFromOsm(tile);
+                    if (force) {
+                        conn.setUseCaches(false);
+                    }
                     loadTileMetadata(tile, conn);
                     if ("no-tile".equals(tile.getValue("tile-info"))) {
                         tile.setError("No tile at this zoom level");
@@ -88,9 +92,16 @@ public class OsmTileLoader implements TileLoader {
 
             @Override
             public void submit() {
-                run();
+                submit(false);
 
             }
+
+            @Override
+            public void submit(boolean force) {
+                this.force = force;
+                run();
+            }
+
         };
     }
 
@@ -101,7 +112,6 @@ public class OsmTileLoader implements TileLoader {
         if (urlConn instanceof HttpURLConnection) {
             prepareHttpUrlConnection((HttpURLConnection)urlConn);
         }
-        urlConn.setReadTimeout(30000); // 30 seconds read timeout
         return urlConn;
     }
 
diff --git a/src/org/openstreetmap/gui/jmapviewer/Tile.java b/src/org/openstreetmap/gui/jmapviewer/Tile.java
index 895b962..8cd511d 100644
--- a/src/org/openstreetmap/gui/jmapviewer/Tile.java
+++ b/src/org/openstreetmap/gui/jmapviewer/Tile.java
@@ -48,9 +48,9 @@ public class Tile {
     protected int zoom;
     protected BufferedImage image;
     protected String key;
-    protected boolean loaded = false;
-    protected boolean loading = false;
-    protected boolean error = false;
+    protected volatile boolean loaded = false; // field accessed by multiple threads without any monitors, needs to be volatile
+    protected volatile boolean loading = false;
+    protected volatile boolean error = false;
     protected String error_message;
 
     /** TileLoader-specific tile metadata */
@@ -219,6 +219,23 @@ public class Tile {
         g.drawImage(image, x, y, null);
     }
 
+    /**
+     * Paints the tile-image on the {@link Graphics} <code>g</code> at the
+     * position <code>x</code>/<code>y</code>.
+     *
+     * @param g the Graphics object
+     * @param x x-coordinate in <code>g</code>
+     * @param y y-coordinate in <code>g</code>
+     * @param width width that tile should have
+     * @param height height that tile should have
+     */
+    public void paint(Graphics g, int x, int y, int width, int height) {
+        if (image == null)
+            return;
+        g.drawImage(image, x, y, width, height, null);
+    }
+
+
     @Override
     public String toString() {
         return "Tile " + key;
@@ -312,23 +329,50 @@ public class Tile {
         metadata.put(key, value);
     }
 
+    /**
+     * returns the metadata of the Tile
+     *
+     * @param key metadata key that should be returned
+     * @return null if no such metadata exists, or the value of the metadata
+     */
     public String getValue(String key) {
         if (metadata == null) return null;
         return metadata.get(key);
     }
 
+    /**
+     *
+     * @return metadata of the tile
+     */
     public Map<String,String> getMetadata() {
+        if (metadata == null) {
+            metadata = new HashMap<>();
+        }
         return metadata;
     }
 
+    /**
+     * indicate that loading process for this tile has started
+     */
     public void initLoading() {
         loaded = false;
         error = false;
         loading = true;
     }
 
+    /**
+     * indicate that loading process for this tile has ended
+     */
     public void finishLoading() {
         loading = false;
         loaded = true;
     }
+
+    /**
+     *
+     * @return TileSource from which this tile comes
+     */
+    public TileSource getTileSource() {
+        return source;
+    }
 }
diff --git a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileJob.java b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileJob.java
index 3e91f3b..f546b48 100644
--- a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileJob.java
+++ b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileJob.java
@@ -22,4 +22,10 @@ public interface TileJob extends Runnable {
      * submits download job to backend.
      */
     void submit();
+
+    /**
+     * submits download job to backend.
+     * @param force true if the load should skip all the caches (local & remote)
+     */
+    void submit(boolean force);
 }
diff --git a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java
index ab003a6..ec509c0 100644
--- a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java
@@ -2,6 +2,8 @@
 package org.openstreetmap.gui.jmapviewer.interfaces;
 
 import java.io.IOException;
+import java.util.List;
+import java.util.Map;
 
 import org.openstreetmap.gui.jmapviewer.JMapViewer;
 
@@ -70,10 +72,10 @@ public interface TileSource extends Attributed {
 
     /**
      * A unique id for this tile source.
-     * 
+     *
      * Unlike the name it has to be unique and has to consist only of characters
      * valid for filenames.
-     * 
+     *
      * @return the id
      */
     String getId();
@@ -155,4 +157,23 @@ public interface TileSource extends Attributed {
      * @return [MIN_LAT..MAX_LAT]
      */
     double tileYToLat(int y, int zoom);
+
+    /**
+     * Determines, if the returned data from TileSource represent "no tile at this zoom level" situation. Detection
+     * algorithms differ per TileSource, so each TileSource should implement each own specific way.
+     *
+     * @param headers HTTP headers from response from TileSource server
+     * @param statusCode HTTP status code
+     * @param content byte array representing the data returned from the server
+     * @return true, if "no tile at this zoom level" situation detected
+     */
+    public boolean isNoTileAtZoom(Map<String, List<String>> headers, int statusCode, byte[] content);
+
+    /**
+     * Extracts metadata about the tile based on HTTP headers
+     *
+     * @param headers HTTP headers from Tile Source server
+     * @return tile metadata
+     */
+    public Map<String, String> getMetadata(Map<String, List<String>> headers);
 }
diff --git a/src/org/openstreetmap/gui/jmapviewer/package.html b/src/org/openstreetmap/gui/jmapviewer/package.html
index 6be7e8e..d9b0584 100644
--- a/src/org/openstreetmap/gui/jmapviewer/package.html
+++ b/src/org/openstreetmap/gui/jmapviewer/package.html
@@ -7,6 +7,6 @@ component <a href="http://wiki.openstreetmap.org/wiki/JMapViewer">JMapViewer</a>
 <p>JMapViewer is designed to run as stand-alone component without
 any further requirements. Therefore <b>please do not add any code that
 depends on other libraries or applications</b>. Only functions and methods
-provided by the runtime library of Java 5 should be used.</p>
+provided by the runtime library of Java 7 should be used.</p>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
index ff8f58a..0fc6c41 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
@@ -6,7 +6,7 @@ import java.awt.Image;
 import org.openstreetmap.gui.jmapviewer.Coordinate;
 
 /**
- * Abstract clas for OSM Tile sources
+ * Abstract class for OSM Tile sources
  */
 public abstract class AbstractOsmTileSource extends AbstractTMSTileSource {
     
@@ -23,9 +23,11 @@ public abstract class AbstractOsmTileSource extends AbstractTMSTileSource {
      * are safe for file names; can be null
      */
     public AbstractOsmTileSource(String name, String base_url, String id) {
-        super(name, base_url, id);
+        super(new TileSourceInfo(name, base_url, id));
+
     }
 
+    @Override
     public int getMaxZoom() {
         return 19;
     }
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
index 2ec140b..50a6a7c 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
@@ -2,6 +2,10 @@
 package org.openstreetmap.gui.jmapviewer.tilesources;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import org.openstreetmap.gui.jmapviewer.OsmMercator;
 
@@ -10,14 +14,22 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
     protected String name;
     protected String baseUrl;
     protected String id;
-
-    public AbstractTMSTileSource(String name, String base_url, String id) {
-        this.name = name;
-        this.baseUrl = base_url;
-        if(baseUrl.endsWith("/")) {
+    private Map<String, String> noTileHeaders;
+    private Map<String, String> metadataHeaders;
+    protected int tileSize;
+    protected OsmMercator osmMercator;
+
+    public AbstractTMSTileSource(TileSourceInfo info) {
+        this.name = info.getName();
+        this.baseUrl = info.getUrl();
+        if(baseUrl != null && baseUrl.endsWith("/")) {
             baseUrl = baseUrl.substring(0,baseUrl.length()-1);
         }
-        this.id = id;
+        this.id = info.getUrl();
+        this.noTileHeaders = info.getNoTileHeaders();
+        this.metadataHeaders = info.getMetadataHeaders();
+        this.tileSize = info.getTileSize();
+        osmMercator = new OsmMercator(this.tileSize);
     }
 
     @Override
@@ -75,51 +87,84 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
      */
     @Override
     public int getTileSize() {
-        return OsmMercator.TILE_SIZE;
+        return tileSize;
     }
 
     @Override
     public double getDistance(double lat1, double lon1, double lat2, double lon2) {
-        return OsmMercator.getDistance(lat1, lon1, lat2, lon2);
+        return osmMercator.getDistance(lat1, lon1, lat2, lon2);
     }
 
     @Override
     public int LonToX(double lon, int zoom) {
-        return (int )OsmMercator.LonToX(lon, zoom);
+        return (int )osmMercator.LonToX(lon, zoom);
     }
 
     @Override
     public int LatToY(double lat, int zoom) {
-        return (int )OsmMercator.LatToY(lat, zoom);
+        return (int )osmMercator.LatToY(lat, zoom);
     }
 
     @Override
     public double XToLon(int x, int zoom) {
-        return OsmMercator.XToLon(x, zoom);
+        return osmMercator.XToLon(x, zoom);
     }
 
     @Override
     public double YToLat(int y, int zoom) {
-        return OsmMercator.YToLat(y, zoom);
+        return osmMercator.YToLat(y, zoom);
     }
 
     @Override
     public double latToTileY(double lat, int zoom) {
-        return OsmMercator.LatToY(lat, zoom) / OsmMercator.TILE_SIZE;
+        return osmMercator.LatToY(lat, zoom) / tileSize;
     }
 
     @Override
     public double lonToTileX(double lon, int zoom) {
-        return OsmMercator.LonToX(lon, zoom) / OsmMercator.TILE_SIZE;
+        return osmMercator.LonToX(lon, zoom) / tileSize;
     }
 
     @Override
     public double tileYToLat(int y, int zoom) {
-        return OsmMercator.YToLat(y * OsmMercator.TILE_SIZE, zoom);
+        return osmMercator.YToLat(y * tileSize, zoom);
     }
 
     @Override
     public double tileXToLon(int x, int zoom) {
-        return OsmMercator.XToLon(x * OsmMercator.TILE_SIZE, zoom);
+        return osmMercator.XToLon(x * tileSize, zoom);
+    }
+
+    @Override
+    public boolean isNoTileAtZoom(Map<String, List<String>> headers, int statusCode, byte[] content) {
+        if (noTileHeaders != null && headers != null) {
+            for (Entry<String, String> searchEntry: noTileHeaders.entrySet()) {
+                List<String> headerVals = headers.get(searchEntry.getKey());
+                if (headerVals != null) {
+                    for (String headerValue: headerVals) {
+                        if (headerValue.matches(searchEntry.getValue())) {
+                            return true;
+                        }
+                    }
+                }
+            }
+        }
+        return super.isNoTileAtZoom(headers, statusCode, content);
+    }
+
+    @Override
+    public Map<String, String> getMetadata(Map<String, List<String>> headers) {
+        Map<String, String> ret = new HashMap<>();
+        if (metadataHeaders != null && headers != null) {
+            for (Entry<String, String> searchEntry: metadataHeaders.entrySet()) {
+                List<String> headerVals = headers.get(searchEntry.getKey());
+                if (headerVals != null) {
+                    for (String headerValue: headerVals) {
+                        ret.put(searchEntry.getValue(), headerValue);
+                    }
+                }
+            }
+        }
+        return ret;
     }
 }
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTileSource.java
index 9505330..b41e558 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTileSource.java
@@ -2,9 +2,11 @@
 package org.openstreetmap.gui.jmapviewer.tilesources;
 
 import java.awt.Image;
+import java.util.List;
+import java.util.Map;
 
-import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
 import org.openstreetmap.gui.jmapviewer.Coordinate;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
 
 abstract public class AbstractTileSource implements TileSource {
 
@@ -74,4 +76,8 @@ abstract public class AbstractTileSource implements TileSource {
         this.termsOfUseURL = termsOfUseURL;
     }
 
+    public boolean isNoTileAtZoom(Map<String, List<String>> headers, int statusCode, byte[] content) {
+        // default handler - when HTTP 404 is returned, then treat this situation as no tile at this zoom level
+        return statusCode == 404;
+    }
 }
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
index e71d093..c5e8169 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
@@ -52,14 +52,11 @@ public class BingAerialTileSource extends AbstractTMSTileSource {
      * Constructs a new {@code BingAerialTileSource}.
      */
     public BingAerialTileSource() {
-        this("Bing");
+        super(new TileSourceInfo("Bing", null, null));
     }
 
-    /**
-     * Constructs a new {@code BingAerialTileSource}.
-     */
-    public BingAerialTileSource(String id) {
-        super("Bing Aerial Maps", "http://example.com/", id);
+    public BingAerialTileSource(TileSourceInfo info) {
+        super(info);
     }
 
     protected class Attribution {
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/ScanexTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/ScanexTileSource.java
index b12b98e..9d0d502 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/ScanexTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/ScanexTileSource.java
@@ -45,8 +45,9 @@ public class ScanexTileSource extends TMSTileSource {
     /* IRS by default */
     private ScanexLayer Layer = ScanexLayer.IRS;
 
-    public ScanexTileSource(String name, String url, String id, int maxZoom) {
-        super(name, url, id, maxZoom);
+    public ScanexTileSource(TileSourceInfo info) {
+        super(info);
+        String url = info.getUrl();
 
         for (ScanexLayer layer : ScanexLayer.values()) {
             if (url.equalsIgnoreCase(layer.getName())) {
@@ -77,6 +78,7 @@ public class ScanexTileSource extends TMSTileSource {
         return this.Layer.getUri() + "&apikey=" + API_KEY + "&x=" + tilex + "&y=" + tiley + "&z=" + zoom;
     }
 
+    @Override
     public TileUpdate getTileUpdate() {
         return TileUpdate.IfNoneMatch;
     }
@@ -91,12 +93,12 @@ public class ScanexTileSource extends TMSTileSource {
 
     @Override
     public int LatToY(double lat, int zoom) {
-        return (int )(latToTileY(lat, zoom) * OsmMercator.TILE_SIZE);
+        return (int )(latToTileY(lat, zoom) * tileSize);
     }
 
     @Override
     public double YToLat(int y, int zoom) {
-        return tileYToLat((double )y / OsmMercator.TILE_SIZE, zoom);
+        return tileYToLat((double )y / tileSize, zoom);
     }
 
     @Override
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
index 7f47c6a..66673de 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
@@ -1,20 +1,16 @@
 // License: GPL. For details, see Readme.txt file.
 package org.openstreetmap.gui.jmapviewer.tilesources;
 
+
 public class TMSTileSource extends AbstractTMSTileSource {
 
     protected int maxZoom;
     protected int minZoom = 0;
 
-    public TMSTileSource(String name, String url, String id, int maxZoom) {
-        super(name, url, id);
-        this.maxZoom = maxZoom;
-    }
-
-    public TMSTileSource(String name, String url, String id, int minZoom, int maxZoom) {
-        super(name, url, id);
-        this.minZoom = minZoom;
-        this.maxZoom = maxZoom;
+    public TMSTileSource(TileSourceInfo info) {
+        super(info);
+        minZoom = info.getMinZoom();
+        maxZoom = info.getMaxZoom();
     }
 
     @Override
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/TemplatedTMSTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/TemplatedTMSTileSource.java
index 98417fb..cf163bf 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/TemplatedTMSTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/TemplatedTMSTileSource.java
@@ -1,11 +1,11 @@
 // License: GPL. For details, see Readme.txt file.
 package org.openstreetmap.gui.jmapviewer.tilesources;
 
-import java.util.Map;
 import java.util.HashMap;
+import java.util.Map;
 import java.util.Random;
-import java.util.regex.Pattern;
 import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class TemplatedTMSTileSource extends TMSTileSource {
 
@@ -27,20 +27,10 @@ public class TemplatedTMSTileSource extends TMSTileSource {
         PATTERN_SWITCH
     };
 
-    public TemplatedTMSTileSource(String name, String url, String id, int maxZoom) {
-        super(name, url, id, maxZoom);
-        handleTemplate();
-    }
-
-    public TemplatedTMSTileSource(String name, String url, String id, int minZoom, int maxZoom) {
-        super(name, url, id, minZoom, maxZoom);
-        handleTemplate();
-    }
-
-    public TemplatedTMSTileSource(String name, String url, String id, int minZoom, int maxZoom, String cookies) {
-        super(name, url, id, minZoom, maxZoom);
-        if (cookies != null) {
-            headers.put(COOKIE_HEADER, cookies);
+    public TemplatedTMSTileSource(TileSourceInfo info) {
+        super(info);
+        if (info.getCookies() != null) {
+            headers.put(COOKIE_HEADER, info.getCookies());
         }
         handleTemplate();
     }
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
new file mode 100644
index 0000000..49591ec
--- /dev/null
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
@@ -0,0 +1,143 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.gui.jmapviewer.tilesources;
+
+import java.util.Map;
+
+import org.openstreetmap.gui.jmapviewer.OsmMercator;
+
+/**
+ * Data class that keeps basic information about a tile source.
+ *
+ * @since 31122
+ */
+public class TileSourceInfo {
+    /** id for this imagery entry, optional at the moment */
+    protected String id;
+    /** URL of the imagery service */
+    protected  String url = null;
+
+    /** name of the imagery layer */
+    protected String name;
+
+    /** headers meaning, that there is no tile at this zoom level */
+    protected Map<String, String> noTileHeaders;
+
+    /** minimum zoom level supported by the tile source */
+    protected int minZoom;
+
+    /** maximum zoom level supported by the tile source */
+    protected int maxZoom;
+
+    /** cookies that needs to be sent to tile source */
+    protected String cookies;
+
+    /** tile size of the displayed tiles */
+    private int tileSize = OsmMercator.DEFAUL_TILE_SIZE;
+
+    /** mapping <header key, metadata key> */
+    protected Map<String, String> metadataHeaders;
+
+    /**
+     * Create a TileSourceInfo class
+     *
+     * @param name
+     * @param base_url
+     * @param id
+     */
+    public TileSourceInfo(String name, String base_url, String id) {
+        this(name);
+        this.url = base_url;
+        this.id = id;
+    }
+
+    /**
+     * Create a TileSourceInfo class
+     *
+     * @param name
+     */
+    public TileSourceInfo(String name) {
+        this.name = name;
+    }
+
+    /**
+     * Creates empty TileSourceInfo class
+     */
+    public TileSourceInfo() {
+    }
+
+    /**
+     * Request name of the tile source
+     * @return name of the tile source
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Request URL of the tile source
+     * @return url of the tile source
+     */
+    public String getUrl() {
+        return url;
+    }
+
+    /**
+     * Request header information for empty tiles for servers delivering such tile types
+     * @return map of headers, that when set, means that this is "no tile at this zoom level" situation
+     */
+    public Map<String, String> getNoTileHeaders() {
+        return noTileHeaders;
+    }
+
+    /**
+     * Request supported minimum zoom level
+     * @return minimum zoom level supported by tile source
+     */
+    public int getMinZoom() {
+        return minZoom;
+    }
+
+    /**
+     * Request supported maximum zoom level
+     * @return maximum zoom level supported by tile source
+     */
+    public int getMaxZoom() {
+        return maxZoom;
+    }
+
+    /**
+     * Request cookies to be sent together with request
+     * @return cookies to be sent along with request to tile source
+     */
+    public String getCookies() {
+        return cookies;
+    }
+
+    /**
+     * Request tile size of this tile source
+     * @return tile size provided by this tile source
+     */
+    public int getTileSize() {
+        return tileSize;
+    }
+
+    /**
+     * Sets the tile size provided by this tile source
+     * @param tileSize
+     */
+    public void setTileSize(int tileSize) {
+        if (tileSize <= 0) {
+            throw new AssertionError("Invalid tile size: " + tileSize);
+        }
+        this.tileSize = tileSize;
+    }
+
+    /**
+     *
+     * @return mapping <HTTP header name, Metadata key name> for copying HTTP headers to Tile metadata
+     * @since 31125
+     */
+    public Map<String, String> getMetadataHeaders() {
+        return metadataHeaders;
+    }
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/jmapviewer.git



More information about the Pkg-grass-devel mailing list