From 5f9a9cc9092b500ff183fc4096e2f9294a4f2964 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Fri, 3 Oct 2014 02:34:13 +0200 Subject: [PATCH] TileLoader/TileDataSource: add cancel() method - used to force closing sockets when changing theme or tilesource --- .../src/org/oscim/layers/JeoTileLayer.java | 34 ------------------- .../src/org/oscim/layers/JeoTileSource.java | 8 ++++- .../source/bitmap/BitmapTileSourceTest.java | 4 +-- .../oscimap4/OSciMap4TileSourceTest.java | 4 +-- .../emu/org/oscim/layers/tile/TileLoader.java | 9 +++-- .../tiling/source/UrlTileDataSource.java | 8 ++++- .../source/bitmap/BitmapTileSource.java | 7 +++- .../tiling/source/JsonTileDataSource.java | 7 +++- vtm/src/org/oscim/layers/tile/TileLayer.java | 7 ++-- vtm/src/org/oscim/layers/tile/TileLoader.java | 20 ++++++----- .../layers/tile/bitmap/BitmapTileLoader.java | 7 +++- .../layers/tile/buildings/S3DBTileLoader.java | 9 +++-- .../layers/tile/example/TestTileLayer.java | 7 +++- .../layers/tile/vector/VectorTileLoader.java | 12 +++++-- vtm/src/org/oscim/tiling/ITileDataSource.java | 19 +++++------ .../tiling/source/UrlTileDataSource.java | 7 +++- .../tiling/source/mapfile/MapDatabase.java | 8 +++-- .../tiling/source/test/TestTileSource.java | 6 +++- 18 files changed, 107 insertions(+), 76 deletions(-) delete mode 100644 vtm-jeo/src/org/oscim/layers/JeoTileLayer.java diff --git a/vtm-jeo/src/org/oscim/layers/JeoTileLayer.java b/vtm-jeo/src/org/oscim/layers/JeoTileLayer.java deleted file mode 100644 index e436b8b1..00000000 --- a/vtm-jeo/src/org/oscim/layers/JeoTileLayer.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.oscim.layers; - -import org.oscim.layers.tile.MapTile; -import org.oscim.layers.tile.TileLoader; -import org.oscim.layers.tile.bitmap.BitmapTileLayer; -import org.oscim.map.Map; -import org.oscim.tiling.source.bitmap.BitmapTileSource; - -public class JeoTileLayer extends BitmapTileLayer { - - public JeoTileLayer(Map map, BitmapTileSource tileSource) { - super(map, tileSource); - } - - @Override - protected TileLoader createLoader() { - return new TileLoader(this.getManager()) { - - @Override - public void cleanup() { - // TODO Auto-generated method stub - - } - - @Override - protected boolean loadTile(MapTile tile) { - // TODO Auto-generated method stub - return false; - } - - }; - } - -} diff --git a/vtm-jeo/src/org/oscim/layers/JeoTileSource.java b/vtm-jeo/src/org/oscim/layers/JeoTileSource.java index 25a7654d..46330f2e 100644 --- a/vtm-jeo/src/org/oscim/layers/JeoTileSource.java +++ b/vtm-jeo/src/org/oscim/layers/JeoTileSource.java @@ -61,9 +61,15 @@ public class JeoTileSource extends TileSource { } @Override - public void destroy() { + public void dispose() { } + + @Override + public void cancel() { + + } + }; } diff --git a/vtm-tests/test/org/oscim/tiling/source/bitmap/BitmapTileSourceTest.java b/vtm-tests/test/org/oscim/tiling/source/bitmap/BitmapTileSourceTest.java index 8381a1d2..2eda03c2 100644 --- a/vtm-tests/test/org/oscim/tiling/source/bitmap/BitmapTileSourceTest.java +++ b/vtm-tests/test/org/oscim/tiling/source/bitmap/BitmapTileSourceTest.java @@ -30,7 +30,7 @@ public class BitmapTileSourceTest { LwHttp lwHttp = Mockito.mock(LwHttp.class); tileSource.setHttpEngine(new TestHttpFactory(lwHttp)); ITileDataSource dataSource = tileSource.getDataSource(); - dataSource.destroy(); + dataSource.dispose(); Mockito.verify(lwHttp).close(); } @@ -39,7 +39,7 @@ public class BitmapTileSourceTest { OkHttpEngine okHttp = Mockito.mock(OkHttpEngine.class); tileSource.setHttpEngine(new TestHttpFactory(okHttp)); UrlTileDataSource dataSource = (UrlTileDataSource) tileSource.getDataSource(); - dataSource.destroy(); + dataSource.dispose(); Mockito.verify(okHttp).close(); } diff --git a/vtm-tests/test/org/oscim/tiling/source/oscimap4/OSciMap4TileSourceTest.java b/vtm-tests/test/org/oscim/tiling/source/oscimap4/OSciMap4TileSourceTest.java index 54276965..34ad024f 100644 --- a/vtm-tests/test/org/oscim/tiling/source/oscimap4/OSciMap4TileSourceTest.java +++ b/vtm-tests/test/org/oscim/tiling/source/oscimap4/OSciMap4TileSourceTest.java @@ -29,7 +29,7 @@ public class OSciMap4TileSourceTest { LwHttp lwHttp = Mockito.mock(LwHttp.class); tileSource.setHttpEngine(new TestHttpFactory(lwHttp)); ITileDataSource dataSource = tileSource.getDataSource(); - dataSource.destroy(); + dataSource.dispose(); Mockito.verify(lwHttp).close(); } @@ -38,7 +38,7 @@ public class OSciMap4TileSourceTest { OkHttpEngine okHttp = Mockito.mock(OkHttpEngine.class); tileSource.setHttpEngine(new TestHttpFactory(okHttp)); ITileDataSource dataSource = tileSource.getDataSource(); - dataSource.destroy(); + dataSource.dispose(); Mockito.verify(okHttp).close(); } diff --git a/vtm-web/src/org/oscim/gdx/emu/org/oscim/layers/tile/TileLoader.java b/vtm-web/src/org/oscim/gdx/emu/org/oscim/layers/tile/TileLoader.java index 76deb326..fd0fea69 100644 --- a/vtm-web/src/org/oscim/gdx/emu/org/oscim/layers/tile/TileLoader.java +++ b/vtm-web/src/org/oscim/gdx/emu/org/oscim/layers/tile/TileLoader.java @@ -40,17 +40,22 @@ public abstract class TileLoader implements ITileDataSink { mTileManager = tileManager; } - public abstract void cleanup(); + public abstract void dispose(); protected abstract boolean loadTile(MapTile tile); boolean isInterrupted; - public void interrupt() { + public void finish() { isInterrupted = true; // cancel loading } + public void cancel() { + isInterrupted = true; + // cancel loading... ? + } + boolean mPausing; public boolean isCanceled() { diff --git a/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/UrlTileDataSource.java b/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/UrlTileDataSource.java index 0218db48..544d6c7b 100644 --- a/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/UrlTileDataSource.java +++ b/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/UrlTileDataSource.java @@ -84,7 +84,13 @@ public class UrlTileDataSource implements ITileDataSource { } @Override - public void destroy() { + public void dispose() { mConn.close(); } + + @Override + public void cancel() { + mConn.close(); + } + } diff --git a/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/bitmap/BitmapTileSource.java b/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/bitmap/BitmapTileSource.java index afc9d2a6..8e7186bc 100644 --- a/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/bitmap/BitmapTileSource.java +++ b/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/bitmap/BitmapTileSource.java @@ -126,7 +126,12 @@ public class BitmapTileSource extends UrlTileSource { } @Override - public void destroy() { + public void dispose() { } + + @Override + public void cancel() { + } + } } diff --git a/vtm-web/src/org/oscim/tiling/source/JsonTileDataSource.java b/vtm-web/src/org/oscim/tiling/source/JsonTileDataSource.java index 5d495c34..c8fb1bee 100644 --- a/vtm-web/src/org/oscim/tiling/source/JsonTileDataSource.java +++ b/vtm-web/src/org/oscim/tiling/source/JsonTileDataSource.java @@ -72,7 +72,12 @@ public class JsonTileDataSource implements ITileDataSource { boolean mFinished; @Override - public void destroy() { + public void dispose() { + mFinished = true; + } + + @Override + public void cancel() { mFinished = true; } diff --git a/vtm/src/org/oscim/layers/tile/TileLayer.java b/vtm/src/org/oscim/layers/tile/TileLayer.java index c5f95b2f..495760c9 100644 --- a/vtm/src/org/oscim/layers/tile/TileLayer.java +++ b/vtm/src/org/oscim/layers/tile/TileLayer.java @@ -105,8 +105,8 @@ public abstract class TileLayer extends Layer implements UpdateListener { public void onDetach() { for (TileLoader loader : mTileLoader) { loader.pause(); - loader.interrupt(); - loader.cleanup(); + loader.finish(); + loader.dispose(); } } @@ -117,9 +117,12 @@ public abstract class TileLayer extends Layer implements UpdateListener { protected void pauseLoaders(boolean wait) { for (TileLoader loader : mTileLoader) { + loader.cancel(); + if (!loader.isPausing()) loader.pause(); } + if (!wait) return; diff --git a/vtm/src/org/oscim/layers/tile/TileLoader.java b/vtm/src/org/oscim/layers/tile/TileLoader.java index 3461d98f..6b501900 100644 --- a/vtm/src/org/oscim/layers/tile/TileLoader.java +++ b/vtm/src/org/oscim/layers/tile/TileLoader.java @@ -23,8 +23,13 @@ import org.oscim.backend.canvas.Bitmap; import org.oscim.core.MapElement; import org.oscim.tiling.ITileDataSink; import org.oscim.utils.PausableThread; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public abstract class TileLoader extends PausableThread implements ITileDataSink { + + static final Logger log = LoggerFactory.getLogger(TileLoader.class); + private static int id; private final String THREAD_NAME; @@ -77,7 +82,9 @@ public abstract class TileLoader extends PausableThread implements ITileDataSink return mTileManager.hasTileJobs(); } - public abstract void cleanup(); + public abstract void dispose(); + + public abstract void cancel(); /** * Callback to be called by TileDataSource when finished @@ -85,15 +92,12 @@ public abstract class TileLoader extends PausableThread implements ITileDataSink */ @Override public void completed(QueryResult result) { - boolean success = result == SUCCESS; + boolean ok = (result == SUCCESS); - if (isCanceled()) - success = false; + if (ok && (isCanceled() || isInterrupted())) + ok = false; - if (isInterrupted()) - success = false; - - mTileManager.jobCompleted(mTile, success); + mTileManager.jobCompleted(mTile, ok); mTile = null; } diff --git a/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLoader.java b/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLoader.java index a04b1515..c1f0b6eb 100644 --- a/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLoader.java +++ b/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLoader.java @@ -67,6 +67,11 @@ public class BitmapTileLoader extends TileLoader { } @Override - public void cleanup() { + public void dispose() { } + + @Override + public void cancel() { + } + } diff --git a/vtm/src/org/oscim/layers/tile/buildings/S3DBTileLoader.java b/vtm/src/org/oscim/layers/tile/buildings/S3DBTileLoader.java index 8296ee5b..47b271da 100644 --- a/vtm/src/org/oscim/layers/tile/buildings/S3DBTileLoader.java +++ b/vtm/src/org/oscim/layers/tile/buildings/S3DBTileLoader.java @@ -50,8 +50,13 @@ class S3DBTileLoader extends TileLoader { } @Override - public void cleanup() { - mTileDataSource.destroy(); + public void dispose() { + mTileDataSource.dispose(); + } + + @Override + public void cancel() { + mTileDataSource.cancel(); } @Override diff --git a/vtm/src/org/oscim/layers/tile/example/TestTileLayer.java b/vtm/src/org/oscim/layers/tile/example/TestTileLayer.java index 76d6a4be..02d30c52 100644 --- a/vtm/src/org/oscim/layers/tile/example/TestTileLayer.java +++ b/vtm/src/org/oscim/layers/tile/example/TestTileLayer.java @@ -83,7 +83,12 @@ public class TestTileLayer extends TileLayer { } @Override - public void cleanup() { + public void dispose() { } + + @Override + public void cancel() { + } + } } diff --git a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java index 03b24d43..f8135be7 100644 --- a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java +++ b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java @@ -81,9 +81,15 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac } @Override - public void cleanup() { + public void dispose() { if (mTileDataSource != null) - mTileDataSource.destroy(); + mTileDataSource.dispose(); + } + + @Override + public void cancel() { + if (mTileDataSource != null) + mTileDataSource.cancel(); } @Override @@ -149,7 +155,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac } public void setDataSource(ITileDataSource dataSource) { - cleanup(); + dispose(); mTileDataSource = dataSource; } diff --git a/vtm/src/org/oscim/tiling/ITileDataSource.java b/vtm/src/org/oscim/tiling/ITileDataSource.java index fecc126b..af513865 100644 --- a/vtm/src/org/oscim/tiling/ITileDataSource.java +++ b/vtm/src/org/oscim/tiling/ITileDataSource.java @@ -1,6 +1,5 @@ /* - * Copyright 2010, 2011, 2012 mapsforge.org - * Copyright 2012 Hannes Janetzek + * Copyright 2014 Hannes Janetzek * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -19,22 +18,20 @@ package org.oscim.tiling; import org.oscim.layers.tile.MapTile; -/** - * - * - */ public interface ITileDataSource { /** - * Starts a database query with the given parameters. - * * @param tile - * the tile to read. + * the tile to load. * @param mapDataSink - * the callback which handles the extracted map elements. + * the callback to handle the extracted map elements. */ abstract void query(MapTile tile, ITileDataSink mapDataSink); - abstract void destroy(); + /** Implementations should cancel and release all resources */ + abstract void dispose(); + + /** Implementations should cancel their IO work and return */ + abstract void cancel(); } diff --git a/vtm/src/org/oscim/tiling/source/UrlTileDataSource.java b/vtm/src/org/oscim/tiling/source/UrlTileDataSource.java index 5289c71b..46495420 100644 --- a/vtm/src/org/oscim/tiling/source/UrlTileDataSource.java +++ b/vtm/src/org/oscim/tiling/source/UrlTileDataSource.java @@ -98,7 +98,12 @@ public class UrlTileDataSource implements ITileDataSource { } @Override - public void destroy() { + public void dispose() { + mConn.close(); + } + + @Override + public void cancel() { mConn.close(); } } diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java b/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java index 07d9e292..ed7c5280 100644 --- a/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java +++ b/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java @@ -213,13 +213,13 @@ public class MapDatabase implements ITileDataSource { } catch (IOException e) { log.error(e.getMessage()); // make sure that the file is closed - destroy(); + dispose(); throw new IOException(); } } @Override - public void destroy() { + public void dispose() { mReadBuffer = null; if (mInputFile != null) { @@ -232,6 +232,10 @@ public class MapDatabase implements ITileDataSource { } } + @Override + public void cancel() { + } + /** * Logs the debug signatures of the current way and block. */ diff --git a/vtm/src/org/oscim/tiling/source/test/TestTileSource.java b/vtm/src/org/oscim/tiling/source/test/TestTileSource.java index 25697d4f..4f734edc 100644 --- a/vtm/src/org/oscim/tiling/source/test/TestTileSource.java +++ b/vtm/src/org/oscim/tiling/source/test/TestTileSource.java @@ -184,7 +184,11 @@ public class TestTileSource extends TileSource { } @Override - public void destroy() { + public void dispose() { + } + + @Override + public void cancel() { } }