[jmapviewer] 01/06: Imported Upstream version 1.15+dfsg

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Tue Mar 1 21:26:14 UTC 2016


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

sebastic pushed a commit to branch master
in repository jmapviewer.

commit c84ae8ccad561ed1607526d95c9f4bb6df3720a5
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Tue Mar 1 06:35:20 2016 +0100

    Imported Upstream version 1.15+dfsg
---
 build.xml                                          |   2 +-
 .../gui/jmapviewer/AttributionSupport.java         |   2 +-
 .../gui/jmapviewer/DefaultMapController.java       |   5 +-
 src/org/openstreetmap/gui/jmapviewer/Demo.java     |   3 +-
 .../openstreetmap/gui/jmapviewer/JMapViewer.java   | 161 +++++++++++++++++++--
 .../gui/jmapviewer/JMapViewerTree.java             |   3 +-
 src/org/openstreetmap/gui/jmapviewer/Layer.java    |   2 +-
 .../openstreetmap/gui/jmapviewer/OsmMercator.java  |   2 +-
 .../gui/jmapviewer/OsmTileLoader.java              |  14 +-
 src/org/openstreetmap/gui/jmapviewer/Style.java    |   2 +-
 .../jmapviewer/checkBoxTree/CheckBoxNodeData.java  |   2 +-
 .../checkBoxTree/CheckBoxNodeEditor.java           |   2 +-
 .../jmapviewer/checkBoxTree/CheckBoxNodePanel.java |   2 +-
 .../checkBoxTree/CheckBoxNodeRenderer.java         |   6 +-
 .../jmapviewer/interfaces/TileClearController.java |   2 +-
 .../tilesources/AbstractOsmTileSource.java         |   8 +-
 .../tilesources/AbstractTMSTileSource.java         |  81 +++++------
 .../tilesources/BingAerialTileSource.java          |   2 +-
 .../tilesources/MapQuestOsmTileSource.java         |   2 +-
 .../gui/jmapviewer/tilesources/TMSTileSource.java  |  53 +++++++
 .../gui/jmapviewer/tilesources/TileSourceInfo.java |  22 ++-
 21 files changed, 290 insertions(+), 88 deletions(-)

diff --git a/build.xml b/build.xml
index a96296e..b13ba03 100644
--- a/build.xml
+++ b/build.xml
@@ -77,7 +77,7 @@
 
     <target name="checkstyle">
         <taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties" 
-        	classpath="tools/checkstyle/checkstyle-6.14-all.jar"/>
+        	classpath="tools/checkstyle/checkstyle-6.16-all.jar"/>
         <checkstyle config="tools/checkstyle/jmapviewer_checks.xml">
             <fileset dir="${basedir}/src" includes="**/*.java" />
             <formatter type="xml" toFile="checkstyle-jmapviewer.xml"/>
diff --git a/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java b/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java
index 15111b9..d038e25 100644
--- a/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java
+++ b/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java
@@ -53,7 +53,7 @@ public class AttributionSupport {
         }
     }
 
-    public void paintAttribution(Graphics g, int width, int height, ICoordinate topLeft, ICoordinate bottomRight, 
+    public void paintAttribution(Graphics g, int width, int height, ICoordinate topLeft, ICoordinate bottomRight,
             int zoom, ImageObserver observer) {
         if (source == null || !source.requiresAttribution()) {
             attrToUBounds = null;
diff --git a/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java b/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java
index 7721045..7b5e75f 100644
--- a/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java
+++ b/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java
@@ -44,7 +44,7 @@ MouseWheelListener {
         if (!movementEnabled || !isMoving)
             return;
         // Is only the selected mouse button pressed?
-        if ((e.getModifiersEx() & MOUSE_BUTTONS_MASK) == movementMouseButtonMask 
+        if ((e.getModifiersEx() & MOUSE_BUTTONS_MASK) == movementMouseButtonMask
                 || isPlatformOsx() && e.getModifiersEx() == MAC_MOUSE_BUTTON3_MASK) {
             Point p = e.getPoint();
             if (lastDragPoint != null) {
@@ -82,7 +82,8 @@ MouseWheelListener {
     @Override
     public void mouseWheelMoved(MouseWheelEvent e) {
         if (wheelZoomEnabled) {
-            map.setZoom(map.getZoom() - e.getWheelRotation(), e.getPoint());
+            int rotation = JMapViewer.zoomReverseWheel ? -e.getWheelRotation() : e.getWheelRotation();
+            map.setZoom(map.getZoom() - rotation, e.getPoint());
         }
     }
 
diff --git a/src/org/openstreetmap/gui/jmapviewer/Demo.java b/src/org/openstreetmap/gui/jmapviewer/Demo.java
index ea507b2..f3ec77b 100644
--- a/src/org/openstreetmap/gui/jmapviewer/Demo.java
+++ b/src/org/openstreetmap/gui/jmapviewer/Demo.java
@@ -62,7 +62,7 @@ public class Demo extends JFrame implements JMapViewerEventListener  {
         setLayout(new BorderLayout());
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setExtendedState(JFrame.MAXIMIZED_BOTH);
-        JPanel panel = new JPanel();
+        JPanel panel = new JPanel(new BorderLayout());
         JPanel panelTop = new JPanel();
         JPanel panelBottom = new JPanel();
         JPanel helpPanel = new JPanel();
@@ -75,7 +75,6 @@ public class Demo extends JFrame implements JMapViewerEventListener  {
 
         add(panel, BorderLayout.NORTH);
         add(helpPanel, BorderLayout.SOUTH);
-        panel.setLayout(new BorderLayout());
         panel.add(panelTop, BorderLayout.NORTH);
         panel.add(panelBottom, BorderLayout.SOUTH);
         JLabel helpLabel = new JLabel("Use right mouse button to move,\n "
diff --git a/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java b/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
index d537dad..91f43fc 100644
--- a/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
+++ b/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
@@ -43,14 +43,20 @@ import org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource;
  */
 public class JMapViewer extends JPanel implements TileLoaderListener {
 
+    /** whether debug mode is enabled or not */
     public static boolean debug;
 
+    /** option to reverse zoom direction with mouse wheel */
+    public static boolean zoomReverseWheel;
+
     /**
      * Vectors for clock-wise tile painting
      */
     private static final Point[] move = {new Point(1, 0), new Point(0, 1), new Point(-1, 0), new Point(0, -1)};
 
+    /** Maximum zoom level */
     public static final int MAX_ZOOM = 22;
+    /** Minimum zoom level */
     public static final int MIN_ZOOM = 0;
 
     protected transient List<MapMarker> mapMarkerList;
@@ -81,8 +87,13 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
     protected JButton zoomInButton;
     protected JButton zoomOutButton;
 
+    /**
+     * Apparence of zoom controls.
+     */
     public enum ZOOM_BUTTON_STYLE {
+        /** Zoom buttons are displayed horizontally (default) */
         HORIZONTAL,
+        /** Zoom buttons are displayed vertically */
         VERTICAL
     }
 
@@ -109,7 +120,8 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
     /**
      * Creates a new {@link JMapViewer} instance.
      * @param tileCache The cache where to store tiles
-     * @deprecated @param downloadThreadCount not used anymore
+     * @param downloadThreadCount not used anymore
+     * @deprecated use {@link #JMapViewer(TileCache)}
      */
     @Deprecated
     public JMapViewer(TileCache tileCache, int downloadThreadCount) {
@@ -227,10 +239,23 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
         setDisplayPosition(mapPoint, p.x, p.y, zoom);
     }
 
+    /**
+     * Sets the display position.
+     * @param x X coordinate
+     * @param y Y coordinate
+     * @param zoom zoom level, between {@link #MIN_ZOOM} and {@link #MAX_ZOOM}
+     */
     public void setDisplayPosition(int x, int y, int zoom) {
         setDisplayPosition(new Point(getWidth() / 2, getHeight() / 2), x, y, zoom);
     }
 
+    /**
+     * Sets the display position.
+     * @param mapPoint map point
+     * @param x X coordinate
+     * @param y Y coordinate
+     * @param zoom zoom level, between {@link #MIN_ZOOM} and {@link #MAX_ZOOM}
+     */
     public void setDisplayPosition(Point mapPoint, int x, int y, int zoom) {
         if (zoom > tileController.getTileSource().getMaxZoom() || zoom < MIN_ZOOM)
             return;
@@ -454,8 +479,8 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
      * @return Integer the radius in pixels
      */
     public Integer getLatOffset(double lat, double lon, double offset, boolean checkOutside) {
-        Point p = tileSource.latLonToXY(lat, lon, zoom);
-        int y = p.y - center.y - getHeight() / 2;
+        Point p = tileSource.latLonToXY(lat + offset, lon, zoom);
+        int y = p.y - (center.y - getHeight() / 2);
         if (checkOutside && (y < 0 || y > getHeight())) {
             return null;
         }
@@ -863,8 +888,7 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
      * derived implementations for adapting zoom dependent values. The new zoom
      * level can be obtained via {@link #getZoom()}.
      *
-     * @param oldZoom
-     *            the previous zoom level
+     * @param oldZoom the previous zoom level
      */
     protected void zoomChanged(int oldZoom) {
         zoomSlider.setToolTipText("Zoom level " + zoom);
@@ -874,15 +898,27 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
         zoomInButton.setEnabled(zoom < tileController.getTileSource().getMaxZoom());
     }
 
+    /**
+     * Determines whether the tile grid is visible or not.
+     * @return {@code true} if the tile grid is visible, {@code false} otherwise
+     */
     public boolean isTileGridVisible() {
         return tileGridVisible;
     }
 
+    /**
+     * Sets whether the tile grid is visible or not.
+     * @param tileGridVisible {@code true} if the tile grid is visible, {@code false} otherwise
+     */
     public void setTileGridVisible(boolean tileGridVisible) {
         this.tileGridVisible = tileGridVisible;
         repaint();
     }
 
+    /**
+     * Determines whether {@link MapMarker}s are painted or not.
+     * @return {@code true} if {@link MapMarker}s are painted, {@code false} otherwise
+     */
     public boolean getMapMarkersVisible() {
         return mapMarkersVisible;
     }
@@ -899,88 +935,157 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
         repaint();
     }
 
+    /**
+     * Sets the list of {@link MapMarker}s.
+     * @param mapMarkerList list of {@link MapMarker}s
+     */
     public void setMapMarkerList(List<MapMarker> mapMarkerList) {
         this.mapMarkerList = mapMarkerList;
         repaint();
     }
 
+    /**
+     * Returns the list of {@link MapMarker}s.
+     * @return list of {@link MapMarker}s
+     */
     public List<MapMarker> getMapMarkerList() {
         return mapMarkerList;
     }
 
+    /**
+     * Sets the list of {@link MapRectangle}s.
+     * @param mapRectangleList list of {@link MapRectangle}s
+     */
     public void setMapRectangleList(List<MapRectangle> mapRectangleList) {
         this.mapRectangleList = mapRectangleList;
         repaint();
     }
 
+    /**
+     * Returns the list of {@link MapRectangle}s.
+     * @return list of {@link MapRectangle}s
+     */
     public List<MapRectangle> getMapRectangleList() {
         return mapRectangleList;
     }
 
+    /**
+     * Sets the list of {@link MapPolygon}s.
+     * @param mapPolygonList list of {@link MapPolygon}s
+     */
     public void setMapPolygonList(List<MapPolygon> mapPolygonList) {
         this.mapPolygonList = mapPolygonList;
         repaint();
     }
 
+    /**
+     * Returns the list of {@link MapPolygon}s.
+     * @return list of {@link MapPolygon}s
+     */
     public List<MapPolygon> getMapPolygonList() {
         return mapPolygonList;
     }
 
+    /**
+     * Add a {@link MapMarker}.
+     * @param marker map marker to add
+     */
     public void addMapMarker(MapMarker marker) {
         mapMarkerList.add(marker);
         repaint();
     }
 
+    /**
+     * Remove a {@link MapMarker}.
+     * @param marker map marker to remove
+     */
     public void removeMapMarker(MapMarker marker) {
         mapMarkerList.remove(marker);
         repaint();
     }
 
+    /**
+     * Remove all {@link MapMarker}s.
+     */
     public void removeAllMapMarkers() {
         mapMarkerList.clear();
         repaint();
     }
 
+    /**
+     * Add a {@link MapRectangle}.
+     * @param rectangle map rectangle to add
+     */
     public void addMapRectangle(MapRectangle rectangle) {
         mapRectangleList.add(rectangle);
         repaint();
     }
 
+    /**
+     * Remove a {@link MapRectangle}.
+     * @param rectangle map rectangle to remove
+     */
     public void removeMapRectangle(MapRectangle rectangle) {
         mapRectangleList.remove(rectangle);
         repaint();
     }
 
+    /**
+     * Remove all {@link MapRectangle}s.
+     */
     public void removeAllMapRectangles() {
         mapRectangleList.clear();
         repaint();
     }
 
+    /**
+     * Add a {@link MapPolygon}.
+     * @param polygon map polygon to add
+     */
     public void addMapPolygon(MapPolygon polygon) {
         mapPolygonList.add(polygon);
         repaint();
     }
 
+    /**
+     * Remove a {@link MapPolygon}.
+     * @param polygon map polygon to remove
+     */
     public void removeMapPolygon(MapPolygon polygon) {
         mapPolygonList.remove(polygon);
         repaint();
     }
 
+    /**
+     * Remove all {@link MapPolygon}s.
+     */
     public void removeAllMapPolygons() {
         mapPolygonList.clear();
         repaint();
     }
 
+    /**
+     * Sets whether zoom controls are displayed or not.
+     * @param visible {@code true} if zoom controls are displayed, {@code false} otherwise
+     */
     public void setZoomContolsVisible(boolean visible) {
         zoomSlider.setVisible(visible);
         zoomInButton.setVisible(visible);
         zoomOutButton.setVisible(visible);
     }
 
+    /**
+     * Determines whether zoom controls are displayed or not.
+     * @return {@code true} if zoom controls are displayed, {@code false} otherwise
+     */
     public boolean getZoomControlsVisible() {
         return zoomSlider.isVisible();
     }
 
+    /**
+     * Sets the tile source.
+     * @param tileSource tile source
+     */
     public void setTileSource(TileSource tileSource) {
         if (tileSource.getMaxZoom() > MAX_ZOOM)
             throw new RuntimeException("Maximum zoom level too high");
@@ -1006,12 +1111,16 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
         repaint();
     }
 
+    /**
+     * Determines whether the {@link MapRectangle}s are painted or not.
+     * @return {@code true} if the {@link MapRectangle}s are painted, {@code false} otherwise
+     */
     public boolean isMapRectanglesVisible() {
         return mapRectanglesVisible;
     }
 
     /**
-     * Enables or disables painting of the {@link MapRectangle}
+     * Enables or disables painting of the {@link MapRectangle}s.
      *
      * @param mapRectanglesVisible {@code true} to enable painting of rectangles
      * @see #addMapRectangle(MapRectangle)
@@ -1022,12 +1131,16 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
         repaint();
     }
 
+    /**
+     * Determines whether the {@link MapPolygon}s are painted or not.
+     * @return {@code true} if the {@link MapPolygon}s are painted, {@code false} otherwise
+     */
     public boolean isMapPolygonsVisible() {
         return mapPolygonsVisible;
     }
 
     /**
-     * Enables or disables painting of the {@link MapPolygon}
+     * Enables or disables painting of the {@link MapPolygon}s.
      *
      * @param mapPolygonsVisible {@code true} to enable painting of polygons
      * @see #addMapPolygon(MapPolygon)
@@ -1038,35 +1151,47 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
         repaint();
     }
 
+    /**
+     * Determines whether scroll wrap is enabled or not.
+     * @return {@code true} if scroll wrap is enabled, {@code false} otherwise
+     */
     public boolean isScrollWrapEnabled() {
         return scrollWrapEnabled;
     }
 
+    /**
+     * Sets whether scroll wrap is enabled or not.
+     * @param scrollWrapEnabled {@code true} if scroll wrap is enabled, {@code false} otherwise
+     */
     public void setScrollWrapEnabled(boolean scrollWrapEnabled) {
         this.scrollWrapEnabled = scrollWrapEnabled;
         repaint();
     }
 
+    /**
+     * Returns the zoom controls apparence style (horizontal/vertical).
+     * @return {@link ZOOM_BUTTON_STYLE#VERTICAL} or {@link ZOOM_BUTTON_STYLE#HORIZONTAL}
+     */
     public ZOOM_BUTTON_STYLE getZoomButtonStyle() {
         return zoomButtonStyle;
     }
 
+    /**
+     * Sets the zoom controls apparence style (horizontal/vertical).
+     * @param style {@link ZOOM_BUTTON_STYLE#VERTICAL} or {@link ZOOM_BUTTON_STYLE#HORIZONTAL}
+     */
     public void setZoomButtonStyle(ZOOM_BUTTON_STYLE style) {
         zoomButtonStyle = style;
         if (zoomSlider == null || zoomInButton == null || zoomOutButton == null) {
             return;
         }
         switch (style) {
-        case HORIZONTAL:
-            zoomSlider.setBounds(10, 10, 30, 150);
-            zoomInButton.setBounds(4, 155, 18, 18);
-            zoomOutButton.setBounds(26, 155, 18, 18);
-            break;
         case VERTICAL:
             zoomSlider.setBounds(10, 27, 30, 150);
             zoomInButton.setBounds(14, 8, 20, 20);
             zoomOutButton.setBounds(14, 176, 20, 20);
             break;
+        case HORIZONTAL:
         default:
             zoomSlider.setBounds(10, 10, 30, 150);
             zoomInButton.setBounds(4, 155, 18, 18);
@@ -1076,6 +1201,10 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
         repaint();
     }
 
+    /**
+     * Returns the tile controller.
+     * @return the tile controller
+     */
     public TileController getTileController() {
         return tileController;
     }
@@ -1089,10 +1218,18 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
         return tileController.getTileCache();
     }
 
+    /**
+     * Sets the tile loader.
+     * @param loader tile loader
+     */
     public void setTileLoader(TileLoader loader) {
         tileController.setTileLoader(loader);
     }
 
+    /**
+     * Returns attribution.
+     * @return attribution
+     */
     public AttributionSupport getAttribution() {
         return attribution;
     }
diff --git a/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java b/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java
index c7fb93f..8f6cbf7 100644
--- a/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java
+++ b/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java
@@ -43,8 +43,7 @@ public class JMapViewerTree extends JPanel {
         splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
 
         tree = new CheckBoxTree(name);
-        treePanel = new JPanel();
-        treePanel.setLayout(new BorderLayout());
+        treePanel = new JPanel(new BorderLayout());
         treePanel.add(tree, BorderLayout.CENTER);
         treePanel.add(new JLabel("<html><center>Use right mouse button to<br />show/hide texts</center></html>"), BorderLayout.SOUTH);
         map = new JMapViewer();
diff --git a/src/org/openstreetmap/gui/jmapviewer/Layer.java b/src/org/openstreetmap/gui/jmapviewer/Layer.java
index b31e73a..405e6b7 100644
--- a/src/org/openstreetmap/gui/jmapviewer/Layer.java
+++ b/src/org/openstreetmap/gui/jmapviewer/Layer.java
@@ -7,7 +7,7 @@ import org.openstreetmap.gui.jmapviewer.interfaces.MapObject;
 
 public class Layer extends AbstractLayer {
     private List<MapObject> elements;
-    
+
     public Layer(String name) {
         super(name);
     }
diff --git a/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java b/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
index f475e8a..6f89d33 100644
--- a/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
+++ b/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
@@ -21,7 +21,7 @@ public class OsmMercator {
     /** minimum latitude (south) for mercator display */
     public static final double MIN_LAT = -85.05112877980659;
     /** equatorial earth radius for EPSG:3857 (Mercator) */
-    private static double EARTH_RADIUS = 6378137;
+    public static final double EARTH_RADIUS = 6378137;
 
     /**
      * instance with tile size of 256 for easy conversions
diff --git a/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java b/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
index 3aac681..02c451e 100644
--- a/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
+++ b/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
@@ -9,8 +9,8 @@ import java.net.URLConnection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadPoolExecutor;
 
 import org.openstreetmap.gui.jmapviewer.interfaces.TileJob;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
@@ -22,7 +22,7 @@ import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
  * @author Jan Peter Stotz
  */
 public class OsmTileLoader implements TileLoader {
-    private static final Executor jobDispatcher = Executors.newSingleThreadExecutor();
+    private static final ThreadPoolExecutor jobDispatcher = (ThreadPoolExecutor) Executors.newFixedThreadPool(3);
 
     private final class OsmTileJob implements TileJob {
         private final Tile tile;
@@ -183,6 +183,14 @@ public class OsmTileLoader implements TileLoader {
 
     @Override
     public void cancelOutstandingTasks() {
-        // intentionally left empty - OsmTileLoader doesn't maintain queue
+        jobDispatcher.getQueue().clear();
+    }
+
+    /**
+     * Sets the maximum number of concurrent connections the tile loader will do
+     * @param num number of conncurent connections
+     */
+    public static void setConcurrentConnections(int num) {
+        jobDispatcher.setMaximumPoolSize(num);
     }
 }
diff --git a/src/org/openstreetmap/gui/jmapviewer/Style.java b/src/org/openstreetmap/gui/jmapviewer/Style.java
index 1302d83..7e4a315 100644
--- a/src/org/openstreetmap/gui/jmapviewer/Style.java
+++ b/src/org/openstreetmap/gui/jmapviewer/Style.java
@@ -11,7 +11,7 @@ public class Style {
     private Color backColor;
     private Stroke stroke;
     private Font font;
-    
+
     private static final AlphaComposite TRANSPARENCY = AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
     private static final AlphaComposite OPAQUE = AlphaComposite.getInstance(AlphaComposite.SRC);
 
diff --git a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeData.java b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeData.java
index 47e2114..7024a75 100644
--- a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeData.java
+++ b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeData.java
@@ -6,7 +6,7 @@ import org.openstreetmap.gui.jmapviewer.LayerGroup;
 
 /**
  * Node Data for checkBox Tree
- * 
+ *
  * @author galo
  */
 public class CheckBoxNodeData {
diff --git a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeEditor.java b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeEditor.java
index 3c57ca7..4c750f5 100644
--- a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeEditor.java
+++ b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeEditor.java
@@ -16,7 +16,7 @@ import javax.swing.tree.TreePath;
 
 /**
  * Editor for checkBox Tree
- * 
+ *
  * @author galo
  */
 public class CheckBoxNodeEditor extends AbstractCellEditor implements TreeCellEditor {
diff --git a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodePanel.java b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodePanel.java
index ce04747..0653e35 100644
--- a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodePanel.java
+++ b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodePanel.java
@@ -10,7 +10,7 @@ import javax.swing.JPanel;
 
 /**
  * Node Panel for checkBox Tree
- * 
+ *
  * @author galo
  */
 public class CheckBoxNodePanel extends JPanel {
diff --git a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeRenderer.java b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeRenderer.java
index dcb7de9..f8e2609 100644
--- a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeRenderer.java
+++ b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeRenderer.java
@@ -14,7 +14,7 @@ import javax.swing.tree.TreeCellRenderer;
 
 /**
  * Renderer for checkBox Tree
- * 
+ *
  * @author galo
  */
 public class CheckBoxNodeRenderer implements TreeCellRenderer {
@@ -101,7 +101,7 @@ public class CheckBoxNodeRenderer implements TreeCellRenderer {
 /*
     private JPopupMenu createPopupMenu(final AbstractLayer layer) {
         JMenuItem menuItem;
- 
+
         //Create the popup menu.
         if (layer.isVisibleTexts()) menuItem = new JMenuItem("hide texts");
         else menuItem = new JMenuItem("show texts");
@@ -113,7 +113,7 @@ public class CheckBoxNodeRenderer implements TreeCellRenderer {
                 setVisibleTexts(layer, !layer.isVisibleTexts());
             }
         });
- 
+
         return popup;
     }
 
diff --git a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileClearController.java b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileClearController.java
index 94a5a83..a2fd1b9 100644
--- a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileClearController.java
+++ b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileClearController.java
@@ -2,7 +2,7 @@
 package org.openstreetmap.gui.jmapviewer.interfaces;
 
 import java.io.File;
-    
+
 public interface TileClearController {
 
     void initClearDir(File dir);
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
index 0210515..d87a64b 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
@@ -8,14 +8,14 @@ import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
 /**
  * Abstract class for OSM Tile sources
  */
-public abstract class AbstractOsmTileSource extends AbstractTMSTileSource {
-    
+public abstract class AbstractOsmTileSource extends TMSTileSource {
+
     /**
-     * The OSM attribution. Must be always in line with 
+     * The OSM attribution. Must be always in line with
      * <a href="https://www.openstreetmap.org/copyright/en">https://www.openstreetmap.org/copyright/en</a>
      */
     public static final String DEFAULT_OSM_ATTRIBUTION = "\u00a9 OpenStreetMap contributors";
-    
+
     /**
      * Constructs a new OSM tile source
      * @param name Source name as displayed in GUI
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
index b8a2683..38afc21 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
@@ -3,12 +3,14 @@ package org.openstreetmap.gui.jmapviewer.tilesources;
 
 import java.awt.Point;
 import java.io.IOException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 
-import org.openstreetmap.gui.jmapviewer.Coordinate;
 import org.openstreetmap.gui.jmapviewer.OsmMercator;
 import org.openstreetmap.gui.jmapviewer.Tile;
 import org.openstreetmap.gui.jmapviewer.TileXY;
@@ -25,10 +27,10 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
     protected String name;
     protected String baseUrl;
     protected String id;
-    private final Map<String, String> noTileHeaders;
+    private final Map<String, Set<String>> noTileHeaders;
+    private final Map<String, Set<String>> noTileChecksums;
     private final Map<String, String> metadataHeaders;
     protected int tileSize;
-    protected OsmMercator osmMercator;
 
     /**
      * Creates an instance based on TileSource information
@@ -43,9 +45,9 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
         }
         this.id = info.getUrl();
         this.noTileHeaders = info.getNoTileHeaders();
+        this.noTileChecksums = info.getNoTileChecksums();
         this.metadataHeaders = info.getMetadataHeaders();
         this.tileSize = info.getTileSize();
-        this.osmMercator = new OsmMercator(this.tileSize);
     }
 
     /**
@@ -123,19 +125,6 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
     }
 
     @Override
-    public double getDistance(double lat1, double lon1, double lat2, double lon2) {
-        return osmMercator.getDistance(lat1, lon1, lat2, lon2);
-    }
-
-    @Override
-    public Point latLonToXY(double lat, double lon, int zoom) {
-        return new Point(
-                (int) osmMercator.lonToX(lon, zoom),
-                (int) osmMercator.latToY(lat, zoom)
-                );
-    }
-
-    @Override
     public Point latLonToXY(ICoordinate point, int zoom) {
         return latLonToXY(point.getLat(), point.getLon(), zoom);
     }
@@ -146,22 +135,6 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
     }
 
     @Override
-    public ICoordinate xyToLatLon(int x, int y, int zoom) {
-        return new Coordinate(
-                osmMercator.yToLat(y, zoom),
-                osmMercator.xToLon(x, zoom)
-                );
-    }
-
-    @Override
-    public TileXY latLonToTileXY(double lat, double lon, int zoom) {
-        return new TileXY(
-                osmMercator.lonToX(lon, zoom) / tileSize,
-                osmMercator.latToY(lat, zoom) / tileSize
-                );
-    }
-
-    @Override
     public TileXY latLonToTileXY(ICoordinate point, int zoom) {
         return latLonToTileXY(point.getLat(), point.getLon(), zoom);
     }
@@ -177,14 +150,6 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
     }
 
     @Override
-    public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
-        return new Coordinate(
-                osmMercator.yToLat(y * tileSize, zoom),
-                osmMercator.xToLon(x * tileSize, zoom)
-                );
-    }
-
-    @Override
     public int getTileXMax(int zoom) {
         return getTileMax(zoom);
     }
@@ -207,17 +172,45 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
     @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()) {
+            for (Entry<String, Set<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;
+                        for (String val: searchEntry.getValue()) {
+                            if (headerValue.matches(val)) {
+                                return true;
+                            }
                         }
                     }
                 }
             }
         }
+        if (noTileChecksums != null) {
+            for (Entry<String, Set<String>> searchEntry: noTileChecksums.entrySet()) {
+                MessageDigest md = null;
+                try {
+                    md = MessageDigest.getInstance(searchEntry.getKey());
+                } catch (NoSuchAlgorithmException e) {
+                    break;
+                }
+                byte[] byteDigest = md.digest(content);
+                final int len = byteDigest.length;
+
+                char[] hexChars = new char[len * 2];
+                for (int i = 0, j = 0; i < len; i++) {
+                    final int v = byteDigest[i];
+                    int vn = (v & 0xf0) >> 4;
+                    hexChars[j++] = (char) (vn + (vn >= 10 ? 'a'-10 : '0'));
+                    vn = (v & 0xf);
+                    hexChars[j++] = (char) (vn + (vn >= 10 ? 'a'-10 : '0'));
+                }
+                for (String val: searchEntry.getValue()) {
+                    if (new String(hexChars).equalsIgnoreCase(val)) {
+                        return true;
+                    }
+                }
+            }
+        }
         return super.isNoTileAtZoom(headers, statusCode, content);
     }
 
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
index bc704e4..98f32cc 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
@@ -36,7 +36,7 @@ import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
-public class BingAerialTileSource extends AbstractTMSTileSource {
+public class BingAerialTileSource extends TMSTileSource {
 
     private static final String API_KEY = "Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU";
     private static volatile Future<List<Attribution>> attributions; // volatile is required for getAttribution(), see below.
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/MapQuestOsmTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/MapQuestOsmTileSource.java
index 18d01de..27b34f7 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/MapQuestOsmTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/MapQuestOsmTileSource.java
@@ -10,7 +10,7 @@ public class MapQuestOsmTileSource extends AbstractMapQuestTileSource {
     public MapQuestOsmTileSource() {
         super("MapQuest-OSM", PATTERN, "mapquest-osm");
     }
-    
+
     @Override
     public String getAttributionText(int zoom, ICoordinate topLeft,
             ICoordinate botRight) {
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
index 590c06d..cc112b8 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
@@ -1,15 +1,31 @@
 // License: GPL. For details, see Readme.txt file.
 package org.openstreetmap.gui.jmapviewer.tilesources;
 
+import java.awt.Point;
+
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+import org.openstreetmap.gui.jmapviewer.OsmMercator;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
+
+/**
+ * TMS tile source.
+ */
 public class TMSTileSource extends AbstractTMSTileSource {
 
     protected int maxZoom;
     protected int minZoom;
+    protected OsmMercator osmMercator;
 
+    /**
+     * Constructs a new {@code TMSTileSource}.
+     * @param info tile source information
+     */
     public TMSTileSource(TileSourceInfo info) {
         super(info);
         minZoom = info.getMinZoom();
         maxZoom = info.getMaxZoom();
+        this.osmMercator = new OsmMercator(this.getTileSize());
     }
 
     @Override
@@ -21,4 +37,41 @@ public class TMSTileSource extends AbstractTMSTileSource {
     public int getMaxZoom() {
         return (maxZoom == 0) ? super.getMaxZoom() : maxZoom;
     }
+
+    @Override
+    public double getDistance(double lat1, double lon1, double lat2, double lon2) {
+        return osmMercator.getDistance(lat1, lon1, lat2, lon2);
+    }
+
+    @Override
+    public Point latLonToXY(double lat, double lon, int zoom) {
+        return new Point(
+                (int) osmMercator.lonToX(lon, zoom),
+                (int) osmMercator.latToY(lat, zoom)
+                );
+    }
+
+    @Override
+    public ICoordinate xyToLatLon(int x, int y, int zoom) {
+        return new Coordinate(
+                osmMercator.yToLat(y, zoom),
+                osmMercator.xToLon(x, zoom)
+                );
+    }
+
+    @Override
+    public TileXY latLonToTileXY(double lat, double lon, int zoom) {
+        return new TileXY(
+                osmMercator.lonToX(lon, zoom) / getTileSize(),
+                osmMercator.latToY(lat, zoom) / getTileSize()
+                );
+    }
+
+    @Override
+    public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
+        return new Coordinate(
+                osmMercator.yToLat(y * getTileSize(), zoom),
+                osmMercator.xToLon(x * getTileSize(), zoom)
+                );
+    }
 }
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
index 7d2b2d1..edff7da 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
@@ -2,8 +2,7 @@
 package org.openstreetmap.gui.jmapviewer.tilesources;
 
 import java.util.Map;
-
-import org.openstreetmap.gui.jmapviewer.OsmMercator;
+import java.util.Set;
 
 /**
  * Data class that keeps basic information about a tile source.
@@ -21,7 +20,10 @@ public class TileSourceInfo {
     protected String name;
 
     /** headers meaning, that there is no tile at this zoom level */
-    protected Map<String, String> noTileHeaders;
+    protected Map<String, Set<String>> noTileHeaders;
+
+    /** checksum of empty tiles */
+    protected Map<String, Set<String>> noTileChecksums;
 
     /** minimum zoom level supported by the tile source */
     protected int minZoom;
@@ -33,7 +35,7 @@ public class TileSourceInfo {
     protected String cookies = "";
 
     /** tile size of the displayed tiles */
-    private int tileSize = OsmMercator.DEFAUL_TILE_SIZE; // FIXME: set to -1 for next release
+    private int tileSize = -1;
 
     /** mapping <header key, metadata key> */
     protected Map<String, String> metadataHeaders;
@@ -95,12 +97,22 @@ public class TileSourceInfo {
     /**
      * 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
+     * @since 32022
      */
-    public Map<String, String> getNoTileHeaders() {
+    public Map<String, Set<String>> getNoTileHeaders() {
         return noTileHeaders;
     }
 
     /**
+     * Checkusm for empty tiles for servers delivering such tile types
+     * @return map of checksums, that when detected, means that this is "no tile at this zoom level" situation
+     * @since 32022
+     */
+    public Map<String, Set<String>> getNoTileChecksums() {
+        return noTileChecksums;
+    }
+
+    /**
      * Request supported minimum zoom level
      * @return minimum zoom level supported by tile source
      */

-- 
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