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