refactored _storeTile() to TilesCore

This commit is contained in:
Andy Gup 2014-08-11 13:56:52 -06:00
parent 76bb3e2d6b
commit deaac929b9
7 changed files with 79 additions and 95 deletions

View File

@ -2,6 +2,7 @@ define([
"dojo/query",
"dojo/request",
"dojo/_base/declare",
"tiles/TilesCore",
"tiles/base64utils",
"tiles/TilesStore",
"tiles/tilingScheme",
@ -12,7 +13,7 @@ define([
"esri/layers/TileInfo",
"esri/SpatialReference",
"esri/layers/TiledMapServiceLayer"
], function(query, request, declare,Base64Utils,TilesStore,TilingScheme,
], function(query, request, declare,TilesCore,Base64Utils,TilesStore,TilingScheme,
FileSaver,LOD,Point,Extent,TileInfo,SpatialReference,TiledMapServerLayer)
{
"use strict";
@ -23,6 +24,7 @@ define([
_level: null, //current zoom level
_minZoom: null,
_maxZoom: null,
_tilesCore:null,
constructor:function(url,callback,state){
@ -31,6 +33,8 @@ define([
callback(false);
}
this._tilesCore = new TilesCore();
//For calculating minZoom and maxZoom
Array.prototype.sortNumber = function(){return this.sort(function(a,b){return a - b})};
@ -545,7 +549,9 @@ define([
{
var cell = cells[i];
this._storeTile(cell.level,cell.row,cell.col, function(success, error)
var url = this._getTileUrl(cell.level,cell.row,cell.col);
this._tilesCore._storeTile(url,this.offline.proxyPath,this.offline.store,function(success, error)
{
if(!success)
{
@ -567,45 +573,6 @@ define([
}.bind(this));
},
_storeTile : function(level,row,col,callback) // callback(success, msg)
{
var store = this.offline.store;
var url = this._getTileUrl(level,row,col);
url = url.split("?")[0];
/* download the tile */
var imgurl = this.offline.proxyPath? this.offline.proxyPath + "?" + url : url;
var req = new XMLHttpRequest();
req.open("GET", imgurl, true);
req.overrideMimeType("text/plain; charset=x-user-defined"); // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest%2FUsing_XMLHttpRequest#Handling_binary_data
req.onload = function()
{
if( req.status === 200 && req.responseText !== "")
{
var img = Base64Utils.wordToBase64(Base64Utils.stringToWord(this.responseText));
var tile = {
url: url,
img: img
};
store.store(tile,callback);
}
else
{
console.log("xhr failed for", imgurl);
callback(false, req.status + " " + req.statusText + ": " + req.response + " when downloading " + imgurl);
}
};
req.onerror = function(e)
{
console.log("xhr failed for", imgurl);
callback(false, e);
};
req.send(null);
},
parseGetTileInfo: function(data,callback){
var fixedResponse = data.replace(/\\'/g, "'");

View File

@ -3,10 +3,46 @@
* and OfflineTilesEnablerLayer.js
*/
define([
"dojo/_base/declare"],
function(declare){
"dojo/query",
"tiles/base64utils",
],
function(query,Base64Utils){
"use strict";
return declare([],{
var TilesCore = function(){
this._storeTile= function(url,proxyPath,store,callback) // callback(success, msg)
{
url = url.split("?")[0];
})
})
/* download the tile */
var imgurl = proxyPath ? proxyPath + "?" + url : url;
var req = new XMLHttpRequest();
req.open("GET", imgurl, true);
req.overrideMimeType("text/plain; charset=x-user-defined"); // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest%2FUsing_XMLHttpRequest#Handling_binary_data
req.onload = function () {
if (req.status === 200 && req.responseText !== "") {
var img = Base64Utils.wordToBase64(Base64Utils.stringToWord(this.responseText));
var tile = {
url: url,
img: img
};
store.store(tile, callback);
}
else {
console.log("xhr failed for", imgurl);
callback(false, req.status + " " + req.statusText + ": " + req.response + " when downloading " + imgurl);
}
};
req.onerror = function (e) {
console.log("xhr failed for", imgurl);
callback(false, e);
};
req.send(null);
}
}
return TilesCore;
}
)

View File

@ -2,11 +2,12 @@ define([
"dojo/query",
"dojo/request",
"dojo/_base/declare",
"tiles/TilesCore",
"tiles/base64utils",
"tiles/TilesStore",
"tiles/tilingScheme",
"tiles/FileSaver"
], function(query, request, declare,Base64Utils,TilesStore,TilingScheme,FileSaver)
], function(query, request, declare,TilesCore,Base64Utils,TilesStore,TilingScheme,FileSaver)
{
"use strict";
return declare([],{
@ -34,6 +35,7 @@ define([
{
console.log("extending layer", layer.url);
layer._tilesCore = new TilesCore();
layer._lastTileUrl = "";
layer._imageType = "";
@ -461,7 +463,9 @@ define([
{
var cell = cells[i];
this._storeTile(cell.level,cell.row,cell.col, function(success, error)
var url = this._getTileUrl(cell.level,cell.row,cell.col);
layer._tilesCore._storeTile(url,this.offline.proxyPath,this.offline.store, function(success, error)
{
if(!success)
{
@ -482,45 +486,6 @@ define([
}.bind(this));
};
layer._storeTile = function(level,row,col,callback) // callback(success, msg)
{
var store = this.offline.store;
var url = this._getTileUrl(level,row,col);
url = url.split("?")[0];
/* download the tile */
var imgurl = this.offline.proxyPath? this.offline.proxyPath + "?" + url : url;
var req = new XMLHttpRequest();
req.open("GET", imgurl, true);
req.overrideMimeType("text/plain; charset=x-user-defined"); // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest%2FUsing_XMLHttpRequest#Handling_binary_data
req.onload = function()
{
if( req.status === 200 && req.responseText !== "")
{
var img = Base64Utils.wordToBase64(Base64Utils.stringToWord(this.responseText));
var tile = {
url: url,
img: img
};
store.store(tile,callback);
}
else
{
console.log("xhr failed for", imgurl);
callback(false, req.status + " " + req.statusText + ": " + req.response + " when downloading " + imgurl);
}
};
req.onerror = function(e)
{
console.log("xhr failed for", imgurl);
callback(false, e);
};
req.send(null);
};
}
}); // declare
}); // define

View File

@ -28,6 +28,7 @@
var g_map;
var g_basemapLayer;
var g_offlineTilesEnabler;
var g_tilesCore;
require(["esri/map",
"esri/layers/GraphicsLayer", "esri/graphic", "esri/symbols/SimpleFillSymbol",
@ -60,7 +61,7 @@
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
jasmineEnv.defaultTimeoutInterval = 10000; // 10 sec
jasmineEnv.defaultTimeoutInterval = 15000; // 15 sec
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);

View File

@ -27,6 +27,7 @@
var g_map;
var g_basemapLayer;
var tilesCore;
require(["esri/map",
"esri/layers/GraphicsLayer", "esri/graphic", "esri/symbols/SimpleFillSymbol",
@ -34,13 +35,14 @@
"dojo/dom", "dojo/on", "dojo/query",
"esri/urlUtils", "esri/geometry/webMercatorUtils",
"tiles/OfflineTilesEnablerLayer",
"tiles/TilesCore",
"dojo/dom-construct", "dojo/domReady!"],
function(Map,
GraphicsLayer, Graphic, SimpleFillSymbol,
Scalebar, esriUtils, geometry,
dom, on, query,
urlUtils, webMercatorUtils,
OfflineTilesEnablerLayer,
OfflineTilesEnablerLayer,TilesCore,
domConstruct)
{
g_basemapLayer = new OfflineTilesEnablerLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",function(evt){
@ -57,6 +59,8 @@
g_map.addLayer(g_basemapLayer);
tilesCore = new TilesCore();
function test()
{
var jasmineEnv = jasmine.getEnv();

View File

@ -78,7 +78,10 @@ describe("offline enabler custom layer library", function()
g_basemapLayer.getOfflineUsage(function(usage)
{
expect(usage.tileCount).toEqual(0);
g_basemapLayer._storeTile(14,6177,8023, function(success)
var url = g_basemapLayer._getTileUrl(14,6177,8023);
tilesCore._storeTile(url,g_basemapLayer.offline.proxyPath,g_basemapLayer.offline.store, function(success)
{
expect(success).toEqual(true);
g_basemapLayer.getOfflineUsage(function(usage)
@ -95,7 +98,10 @@ describe("offline enabler custom layer library", function()
g_basemapLayer.getOfflineUsage(function(usage)
{
expect(usage.tileCount).toEqual(1);
g_basemapLayer._storeTile(14,6177,8023, function(success)
var url = g_basemapLayer._getTileUrl(14,6177,8023);
tilesCore._storeTile(url,g_basemapLayer.offline.proxyPath,g_basemapLayer.offline.store, function(success)
{
expect(success).toEqual(true);
g_basemapLayer.getOfflineUsage(function(usage)

View File

@ -29,10 +29,10 @@ describe("offline enabler library", function()
expect(g_basemapLayer.getTileUrl).toEqual(jasmine.any(Function));
expect(g_basemapLayer._getTileUrl).toEqual(jasmine.any(Function));
expect(g_basemapLayer.prepareForOffline).toEqual(jasmine.any(Function));
expect(g_basemapLayer._storeTile).toEqual(jasmine.any(Function));
expect(g_basemapLayer.deleteAllTiles).toEqual(jasmine.any(Function));
expect(g_basemapLayer.offline).toEqual(jasmine.any(Object));
expect(g_basemapLayer.offline.store).toEqual(jasmine.any(Object));
expect(g_basemapLayer._tilesCore._storeTile).toEqual(jasmine.any(Function));
g_basemapLayer.offline.proxyPath = "../lib/resource-proxy/proxy.php";
done();
@ -78,7 +78,10 @@ describe("offline enabler library", function()
g_basemapLayer.getOfflineUsage(function(usage)
{
expect(usage.tileCount).toEqual(0);
g_basemapLayer._storeTile(14,6177,8023, function(success)
var url = g_basemapLayer._getTileUrl(14,6177,8023);
g_basemapLayer._tilesCore._storeTile(url,g_basemapLayer.offline.proxyPath,g_basemapLayer.offline.store, function(success)
{
expect(success).toEqual(true);
g_basemapLayer.getOfflineUsage(function(usage)
@ -95,8 +98,10 @@ describe("offline enabler library", function()
g_basemapLayer.getOfflineUsage(function(usage)
{
expect(usage.tileCount).toEqual(1);
g_basemapLayer._storeTile(14,6177,8023, function(success)
{
var url = g_basemapLayer._getTileUrl(14,6177,8023);
g_basemapLayer._tilesCore._storeTile(url,g_basemapLayer.offline.proxyPath,g_basemapLayer.offline.store, function(success)
{
expect(success).toEqual(true);
g_basemapLayer.getOfflineUsage(function(usage)
{