extract QueryResult from ITileDataSink
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
package org.oscim.layers;
|
package org.oscim.layers;
|
||||||
|
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.FAILED;
|
import static org.oscim.tiling.QueryResult.FAILED;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
import static org.oscim.tiling.QueryResult.SUCCESS;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.TILE_NOT_FOUND;
|
import static org.oscim.tiling.QueryResult.TILE_NOT_FOUND;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
|||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
import org.oscim.renderer.MapRenderer;
|
import org.oscim.renderer.MapRenderer;
|
||||||
import org.oscim.theme.VtmThemes;
|
import org.oscim.theme.VtmThemes;
|
||||||
|
import org.oscim.tiling.QueryResult;
|
||||||
import org.oscim.tiling.TileSource;
|
import org.oscim.tiling.TileSource;
|
||||||
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
|
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
|
||||||
|
|
||||||
@@ -100,7 +101,7 @@ public class TileRenderTest extends GdxMapApp {
|
|||||||
log.debug("load {}", tile);
|
log.debug("load {}", tile);
|
||||||
|
|
||||||
tileLoader[0].loadTile(tile);
|
tileLoader[0].loadTile(tile);
|
||||||
tileManager.jobCompleted(tile, true);
|
tileManager.jobCompleted(tile, QueryResult.SUCCESS);
|
||||||
} else {
|
} else {
|
||||||
tileManager.update(mapPosition);
|
tileManager.update(mapPosition);
|
||||||
MapTile t = tileManager.getTileJob();
|
MapTile t = tileManager.getTileJob();
|
||||||
@@ -108,7 +109,7 @@ public class TileRenderTest extends GdxMapApp {
|
|||||||
log.debug("load {}", t);
|
log.debug("load {}", t);
|
||||||
|
|
||||||
tileLoader[0].loadTile(t);
|
tileLoader[0].loadTile(t);
|
||||||
tileManager.jobCompleted(t, true);
|
tileManager.jobCompleted(t, QueryResult.SUCCESS);
|
||||||
|
|
||||||
t = tileManager.getTileJob();
|
t = tileManager.getTileJob();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,13 +14,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.layers.tile;
|
package org.oscim.layers.tile;
|
||||||
|
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.FAILED;
|
import static org.oscim.tiling.QueryResult.FAILED;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
|
||||||
|
|
||||||
import org.oscim.backend.canvas.Bitmap;
|
import org.oscim.backend.canvas.Bitmap;
|
||||||
import org.oscim.core.MapElement;
|
import org.oscim.core.MapElement;
|
||||||
import org.oscim.renderer.MapRenderer;
|
import org.oscim.renderer.MapRenderer;
|
||||||
import org.oscim.tiling.ITileDataSink;
|
import org.oscim.tiling.ITileDataSink;
|
||||||
|
import org.oscim.tiling.QueryResult;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -115,13 +115,12 @@ public abstract class TileLoader implements ITileDataSink {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void completed(QueryResult result) {
|
public void completed(QueryResult result) {
|
||||||
boolean success = (result == SUCCESS) && !isInterrupted;
|
|
||||||
long now = MapRenderer.frametime;
|
long now = MapRenderer.frametime;
|
||||||
|
|
||||||
//log.debug("completed {} diff time:{}", mTile, (now - lastLoadTime));
|
//log.debug("completed {} diff time:{}", mTile, (now - lastLoadTime));
|
||||||
lastLoadTime = now;
|
lastLoadTime = now;
|
||||||
|
|
||||||
mTileManager.jobCompleted(mTile, success);
|
mTileManager.jobCompleted(mTile, result);
|
||||||
mTile = null;
|
mTile = null;
|
||||||
|
|
||||||
mWorking = false;
|
mWorking = false;
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.tiling.source;
|
package org.oscim.tiling.source;
|
||||||
|
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.FAILED;
|
import static org.oscim.tiling.QueryResult.FAILED;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
import static org.oscim.tiling.QueryResult.SUCCESS;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import org.oscim.layers.tile.LoadDelayTask;
|
|||||||
import org.oscim.layers.tile.MapTile;
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.layers.tile.TileLoader;
|
import org.oscim.layers.tile.TileLoader;
|
||||||
import org.oscim.tiling.ITileDataSink;
|
import org.oscim.tiling.ITileDataSink;
|
||||||
import org.oscim.tiling.ITileDataSink.QueryResult;
|
|
||||||
import org.oscim.tiling.ITileDataSource;
|
import org.oscim.tiling.ITileDataSource;
|
||||||
|
import org.oscim.tiling.QueryResult;
|
||||||
import org.oscim.tiling.source.LwHttp;
|
import org.oscim.tiling.source.LwHttp;
|
||||||
import org.oscim.tiling.source.UrlTileSource;
|
import org.oscim.tiling.source.UrlTileSource;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.tiling.source;
|
package org.oscim.tiling.source;
|
||||||
|
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.FAILED;
|
import static org.oscim.tiling.QueryResult.FAILED;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
import static org.oscim.tiling.QueryResult.SUCCESS;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
|||||||
@@ -16,12 +16,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.layers.tile;
|
package org.oscim.layers.tile;
|
||||||
|
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.FAILED;
|
import static org.oscim.tiling.QueryResult.FAILED;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
import static org.oscim.tiling.QueryResult.SUCCESS;
|
||||||
|
|
||||||
import org.oscim.backend.canvas.Bitmap;
|
import org.oscim.backend.canvas.Bitmap;
|
||||||
import org.oscim.core.MapElement;
|
import org.oscim.core.MapElement;
|
||||||
import org.oscim.tiling.ITileDataSink;
|
import org.oscim.tiling.ITileDataSink;
|
||||||
|
import org.oscim.tiling.QueryResult;
|
||||||
import org.oscim.utils.PausableThread;
|
import org.oscim.utils.PausableThread;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -95,9 +96,9 @@ public abstract class TileLoader extends PausableThread implements ITileDataSink
|
|||||||
boolean ok = (result == SUCCESS);
|
boolean ok = (result == SUCCESS);
|
||||||
|
|
||||||
if (ok && (isCanceled() || isInterrupted()))
|
if (ok && (isCanceled() || isInterrupted()))
|
||||||
ok = false;
|
result = QueryResult.FAILED;
|
||||||
|
|
||||||
mTileManager.jobCompleted(mTile, ok);
|
mTileManager.jobCompleted(mTile, result);
|
||||||
mTile = null;
|
mTile = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import org.oscim.layers.tile.MapTile.TileNode;
|
|||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
import org.oscim.map.Viewport;
|
import org.oscim.map.Viewport;
|
||||||
import org.oscim.renderer.BufferObject;
|
import org.oscim.renderer.BufferObject;
|
||||||
|
import org.oscim.tiling.QueryResult;
|
||||||
import org.oscim.utils.ScanBox;
|
import org.oscim.utils.ScanBox;
|
||||||
import org.oscim.utils.quadtree.TileIndex;
|
import org.oscim.utils.quadtree.TileIndex;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -576,29 +577,33 @@ public class TileManager {
|
|||||||
* @param tile
|
* @param tile
|
||||||
* Tile ready for upload in TileRenderLayer
|
* Tile ready for upload in TileRenderLayer
|
||||||
*/
|
*/
|
||||||
public void jobCompleted(MapTile tile, boolean success) {
|
public void jobCompleted(MapTile tile, QueryResult result) {
|
||||||
|
|
||||||
/* send TILE_LOADED event on main-loop */
|
/* send TILE_LOADED event on main-loop */
|
||||||
mMap.post(new JobCompletedEvent(tile, success));
|
mMap.post(new JobCompletedEvent(tile, result));
|
||||||
|
|
||||||
/* locked means the tile is visible or referenced by
|
/* locked means the tile is visible or referenced by
|
||||||
* a tile that might be visible. */
|
* a tile that might be visible. */
|
||||||
if (tile.isLocked())
|
if (tile.isLocked()) {
|
||||||
mMap.render();
|
if (result == QueryResult.DELAYED && tile.isLocked())
|
||||||
|
mMap.updateMap(false);
|
||||||
|
else
|
||||||
|
mMap.render();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class JobCompletedEvent implements Runnable {
|
class JobCompletedEvent implements Runnable {
|
||||||
final MapTile tile;
|
final MapTile tile;
|
||||||
final boolean success;
|
final QueryResult result;
|
||||||
|
|
||||||
public JobCompletedEvent(MapTile tile, boolean success) {
|
public JobCompletedEvent(MapTile tile, QueryResult result) {
|
||||||
this.tile = tile;
|
this.tile = tile;
|
||||||
this.success = success;
|
this.result = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (success && tile.state(LOADING)) {
|
if (result == QueryResult.SUCCESS && tile.state(LOADING)) {
|
||||||
tile.setState(NEW_DATA);
|
tile.setState(NEW_DATA);
|
||||||
events.fire(TILE_LOADED, tile);
|
events.fire(TILE_LOADED, tile);
|
||||||
mTilesToUpload++;
|
mTilesToUpload++;
|
||||||
@@ -606,7 +611,7 @@ public class TileManager {
|
|||||||
}
|
}
|
||||||
// TODO use mMap.update(true) to retry tile loading?
|
// TODO use mMap.update(true) to retry tile loading?
|
||||||
log.debug("Load: {} {} state:{}",
|
log.debug("Load: {} {} state:{}",
|
||||||
tile, success ? "success" : "failed",
|
tile, result,
|
||||||
tile.state());
|
tile.state());
|
||||||
|
|
||||||
/* got orphaned tile */
|
/* got orphaned tile */
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.oscim.layers.tile.TileLoader;
|
|||||||
import org.oscim.layers.tile.TileManager;
|
import org.oscim.layers.tile.TileManager;
|
||||||
import org.oscim.renderer.bucket.ExtrusionBucket;
|
import org.oscim.renderer.bucket.ExtrusionBucket;
|
||||||
import org.oscim.tiling.ITileDataSource;
|
import org.oscim.tiling.ITileDataSource;
|
||||||
|
import org.oscim.tiling.QueryResult;
|
||||||
import org.oscim.tiling.TileSource;
|
import org.oscim.tiling.TileSource;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import org.oscim.theme.styles.RenderStyle;
|
|||||||
import org.oscim.theme.styles.SymbolStyle;
|
import org.oscim.theme.styles.SymbolStyle;
|
||||||
import org.oscim.theme.styles.TextStyle;
|
import org.oscim.theme.styles.TextStyle;
|
||||||
import org.oscim.tiling.ITileDataSource;
|
import org.oscim.tiling.ITileDataSource;
|
||||||
|
import org.oscim.tiling.QueryResult;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|||||||
@@ -40,11 +40,4 @@ public interface ITileDataSink {
|
|||||||
* Notify loader that tile loading is completed.
|
* Notify loader that tile loading is completed.
|
||||||
*/
|
*/
|
||||||
void completed(QueryResult result);
|
void completed(QueryResult result);
|
||||||
|
|
||||||
public static enum QueryResult {
|
|
||||||
SUCCESS,
|
|
||||||
FAILED,
|
|
||||||
TILE_NOT_FOUND,
|
|
||||||
DELAYED,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
8
vtm/src/org/oscim/tiling/QueryResult.java
Normal file
8
vtm/src/org/oscim/tiling/QueryResult.java
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
package org.oscim.tiling;
|
||||||
|
|
||||||
|
public enum QueryResult {
|
||||||
|
SUCCESS,
|
||||||
|
FAILED,
|
||||||
|
TILE_NOT_FOUND,
|
||||||
|
DELAYED,
|
||||||
|
}
|
||||||
@@ -16,8 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.tiling.source;
|
package org.oscim.tiling.source;
|
||||||
|
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.FAILED;
|
import static org.oscim.tiling.QueryResult.DELAYED;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
import static org.oscim.tiling.QueryResult.FAILED;
|
||||||
|
import static org.oscim.tiling.QueryResult.SUCCESS;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -31,6 +32,7 @@ import org.oscim.tiling.ITileCache.TileReader;
|
|||||||
import org.oscim.tiling.ITileCache.TileWriter;
|
import org.oscim.tiling.ITileCache.TileWriter;
|
||||||
import org.oscim.tiling.ITileDataSink;
|
import org.oscim.tiling.ITileDataSink;
|
||||||
import org.oscim.tiling.ITileDataSource;
|
import org.oscim.tiling.ITileDataSource;
|
||||||
|
import org.oscim.tiling.QueryResult;
|
||||||
import org.oscim.utils.IOUtils;
|
import org.oscim.utils.IOUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -71,7 +73,8 @@ public class UrlTileDataSource implements ITileDataSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean ok = false;
|
QueryResult res = FAILED;
|
||||||
|
|
||||||
TileWriter cacheWriter = null;
|
TileWriter cacheWriter = null;
|
||||||
try {
|
try {
|
||||||
mConn.sendRequest(tile);
|
mConn.sendRequest(tile);
|
||||||
@@ -80,21 +83,27 @@ public class UrlTileDataSource implements ITileDataSource {
|
|||||||
cacheWriter = cache.writeTile(tile);
|
cacheWriter = cache.writeTile(tile);
|
||||||
mConn.setCache(cacheWriter.getOutputStream());
|
mConn.setCache(cacheWriter.getOutputStream());
|
||||||
}
|
}
|
||||||
ok = mTileDecoder.decode(tile, sink, is);
|
if (mTileDecoder.decode(tile, sink, is))
|
||||||
|
res = SUCCESS;
|
||||||
} catch (SocketException e) {
|
} catch (SocketException e) {
|
||||||
log.debug("{} Socket Error: {}", tile, e.getMessage());
|
log.debug("{} Socket Error: {}", tile, e.getMessage());
|
||||||
} catch (SocketTimeoutException e) {
|
} catch (SocketTimeoutException e) {
|
||||||
log.debug("{} Socket Timeout", tile);
|
log.debug("{} Socket Timeout", tile);
|
||||||
|
res = DELAYED;
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
log.debug("{} Unknown host: {}", tile, e.getMessage());
|
log.debug("{} Unknown host: {}", tile, e.getMessage());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.debug("{} Network Error: {}", tile, e.getMessage());
|
log.debug("{} Network Error: {}", tile, e.getMessage());
|
||||||
} finally {
|
} finally {
|
||||||
ok = mConn.requestCompleted(ok);
|
boolean ok = (res == SUCCESS);
|
||||||
|
|
||||||
|
if (!mConn.requestCompleted(ok) && ok)
|
||||||
|
res = FAILED;
|
||||||
|
|
||||||
if (cacheWriter != null)
|
if (cacheWriter != null)
|
||||||
cacheWriter.complete(ok);
|
cacheWriter.complete(ok);
|
||||||
|
|
||||||
sink.completed(ok ? SUCCESS : FAILED);
|
sink.completed(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package org.oscim.tiling.source.mapfile;
|
|||||||
|
|
||||||
import static org.oscim.core.GeometryBuffer.GeometryType.LINE;
|
import static org.oscim.core.GeometryBuffer.GeometryType.LINE;
|
||||||
import static org.oscim.core.GeometryBuffer.GeometryType.POLY;
|
import static org.oscim.core.GeometryBuffer.GeometryType.POLY;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.FAILED;
|
import static org.oscim.tiling.QueryResult.FAILED;
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
import static org.oscim.tiling.QueryResult.SUCCESS;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.RandomAccessFile;
|
import java.io.RandomAccessFile;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.tiling.source.test;
|
package org.oscim.tiling.source.test;
|
||||||
|
|
||||||
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
import static org.oscim.tiling.QueryResult.SUCCESS;
|
||||||
|
|
||||||
import org.oscim.core.MapElement;
|
import org.oscim.core.MapElement;
|
||||||
import org.oscim.core.Tag;
|
import org.oscim.core.Tag;
|
||||||
|
|||||||
Reference in New Issue
Block a user