diff --git a/.gitignore b/.gitignore index 2694b20..61354a8 100644 --- a/.gitignore +++ b/.gitignore @@ -52,13 +52,13 @@ xcuserdata ######################## # Keep out icons local # ######################## -Android/res/drawable-hdpi/icon.png -Android/res/drawable-ldpi/icon.png -Android/res/drawable-mdpi/icon.png -Android/res/drawable-xhdpi/icon.png -Android/res/drawable/icon.png -iOS/Arbiter/Resources/icons/icon.png -iOS/Arbiter/Resources/icons/icon@2x.png -iOS/Arbiter/Resources/icons/icon-72.png -iOS/Arbiter/Resources/icons/icon-72@2x.png -iOS/www/src/img/logo.png +/Android/res/drawable-hdpi/icon.png +/Android/res/drawable-ldpi/icon.png +/Android/res/drawable-mdpi/icon.png +/Android/res/drawable-xhdpi/icon.png +/Android/res/drawable/icon.png +/iOS/Arbiter/Resources/icons/icon.png +/iOS/Arbiter/Resources/icons/icon@2x.png +/iOS/Arbiter/Resources/icons/icon-72.png +/iOS/Arbiter/Resources/icons/icon-72@2x.png +/iOS/www/src/img/logo.png diff --git a/Android/.settings/org.eclipse.jdt.core.prefs b/Android/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..b080d2d --- /dev/null +++ b/Android/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/Android/LatestBuilds/Arbiter_13Jan3_1041am.apk b/Android/LatestBuilds/Arbiter_13Jan3_1041am.apk deleted file mode 100644 index a63de8a..0000000 Binary files a/Android/LatestBuilds/Arbiter_13Jan3_1041am.apk and /dev/null differ diff --git a/iOS/www/src/index.html b/iOS/www/src/index.html index 8d81205..731e943 100644 --- a/iOS/www/src/index.html +++ b/iOS/www/src/index.html @@ -305,6 +305,7 @@

Map

+
@@ -312,7 +313,7 @@

Map

- +
diff --git a/iOS/www/src/js/Arbiter.js b/iOS/www/src/js/Arbiter.js index ee6f135..de55d35 100644 --- a/iOS/www/src/js/Arbiter.js +++ b/iOS/www/src/js/Arbiter.js @@ -815,7 +815,7 @@ var Arbiter = { var attributeSql = "id integer primary key, fid text, " + layer.geomName + " text not null"; for(var i = 0; i < layer.attributes.length; i++){ - attributeSql += ", " + layer.attributes[i] + " " + layer.attributeTypes[i].type; + attributeSql += ", '" + layer.attributes[i] + "' " + layer.attributeTypes[i].type; if(layer.attributeTypes[i].notnull) attributeSql += " not null"; } @@ -869,10 +869,10 @@ var Arbiter = { insertProjectsServer: function(serverId, serverName, success){ console.log("insertProjectsServer: " + serverId + ", " + serverName, success); - var insertServerSql = "INSERT INTO servers (server_id) VALUES (" + serverId + ");"; + var insertServerSql = "INSERT INTO servers (server_id) VALUES (?);"; console.log(insertServerSql); - Cordova.transaction(Arbiter.currentProject.variablesDatabase, insertServerSql, [], function(tx, res){ + Cordova.transaction(Arbiter.currentProject.variablesDatabase, insertServerSql, [serverId], function(tx, res){ success(serverId, serverName); }, Arbiter.error); }, @@ -942,7 +942,7 @@ var Arbiter = { console.log("Add project " + Arbiter.squote(Arbiter.currentProject.name) + " to projects table..."); //Add the project name to the projects table in globle.db - Cordova.transaction(Arbiter.globalDatabase, "INSERT INTO projects (name) VALUES (" + Arbiter.squote(Arbiter.currentProject.name) + ");", [], function(tx, res){ + Cordova.transaction(Arbiter.globalDatabase, "INSERT INTO projects (name) VALUES (?);", [Arbiter.currentProject.name], function(tx, res){ Arbiter.currentProject.variablesDatabase = Cordova.openDatabase("Arbiter/Projects/" + Arbiter.currentProject.name + "/variables", "1.0", "Variable Database", 1000000); Arbiter.currentProject.dataDatabase = Cordova.openDatabase("Arbiter/Projects/" + Arbiter.currentProject.name + "/data", "1.0", "Data Database", 1000000); @@ -1244,7 +1244,7 @@ var Arbiter = { }, function(e){ console.log("Error reading tileIds - " + e); }); //open the editor tab. a hack to avoid the jumping feature bug - $("#editorTab").click(); + Arbiter.ToggleEditorMenu(); } }, @@ -1574,13 +1574,6 @@ var Arbiter = { Arbiter.OpenAttributesMenu(); } else { Arbiter.CloseAttributesMenu(); - /* - if(attributeTab) { - if(selectedFeature) { - Arbiter.newWFSLayer.unselected(selectedFeature); - } - } - */ } }, @@ -1957,6 +1950,7 @@ var Arbiter = { li += ""; + Arbiter.radioNumber++; //add the data from local storage @@ -1984,14 +1978,15 @@ var Arbiter = { } } } + Arbiter.radioNumber = 1; }, setLayerAttributeInfo: function(serverList, layername, f_table_name){ console.log("layername: " + layername + ", f_table_name: " + f_table_name, serverList); // get the geometry name, type, and srs of the layer - var geomColumnsSql = "SELECT * FROM geometry_columns where f_table_name='" + f_table_name + "';"; + var geomColumnsSql = "SELECT * FROM geometry_columns where f_table_name=?;"; - Cordova.transaction(Arbiter.currentProject.dataDatabase, geomColumnsSql, [], function(tx, res) { + Cordova.transaction(Arbiter.currentProject.dataDatabase, geomColumnsSql, [f_table_name], function(tx, res) { var geomName; //var server = Arbiter.currentProject.serverList[serverName]; var serverLayer = serverList.layers[layername]; @@ -2095,8 +2090,9 @@ var Arbiter = { Cordova.transaction(Arbiter.currentProject.variablesDatabase, "DELETE FROM layers WHERE layername=?;", [layername], function(tx, res){ var server = Arbiter.currentProject.serverList[servername]; var layer = server.layers[layername]; + //TODO: check all statements for end ; Cordova.transaction(Arbiter.currentProject.dataDatabase, "DELETE FROM geometry_columns WHERE f_table_name=?", [layer.featureType], function(tx, res){ - Cordova.transaction(Arbiter.currentProject.dataDatabase, "DROP TABLE " + layer.featureType, [], function(tx, res){ + Cordova.transaction(Arbiter.currentProject.dataDatabase, "DROP TABLE " + layer.featureType + ";", [], function(tx, res){ console.log("before_delete: success! " + servername + ", " + layername); //TODO: why is destroy not working? @@ -3166,7 +3162,7 @@ var Arbiter = { readLayerFromDb: function(tableName, layerName, geomName, srsName){ var layer = map.getLayersByName(layerName + "-wfs")[0]; console.log("readLayerFromDb: " + tableName + ", " + layerName + ", " + geomName + ", " + srsName); - Cordova.transaction(Arbiter.currentProject.dataDatabase, "SELECT * FROM " + tableName, [], function(tx, res){ + Cordova.transaction(Arbiter.currentProject.dataDatabase, "SELECT * FROM " + tableName + ";", [], function(tx, res){ for(var i = 0; i < res.rows.length;i++){ var row = res.rows.item(i); @@ -3191,7 +3187,7 @@ var Arbiter = { } //after the transaction is complete, check to see which features are dirty - Cordova.transaction(Arbiter.currentProject.variablesDatabase, "SELECT * FROM dirty_table where f_table_name='" + tableName + "';", [], function(tx, res){ + Cordova.transaction(Arbiter.currentProject.variablesDatabase, "SELECT * FROM dirty_table where f_table_name=?;", [tableName], function(tx, res){ for(var i = 0; i < res.rows.length;i++){ var feature = layer.getFeatureByFid(res.rows.item(i).fid); feature.modified = true; @@ -3548,7 +3544,8 @@ var Arbiter = { var protocol = selectedFeature.layer.protocol; Arbiter.insertFeaturesIntoTable([selectedFeature], protocol.featureType, protocol.geometryName, protocol.srsName, true); - Arbiter.ToggleAttributeMenu(); + //this should go back in when the feature selection bug is fixed + //Arbiter.ToggleAttributeMenu(); }else{ $("#saveAttributesFailed").fadeIn(1000, function(){ $(this).fadeOut(3000); @@ -3728,7 +3725,7 @@ var Arbiter = { //Arbiter.deleteLayerCount++; Arbiter.deleteLayer(meta.serverName, meta.nickname); }else{ - Cordova.transaction(Arbiter.currentProject.dataDatabase, "DELETE FROM " + featureType, [], function(tx, res) { + Cordova.transaction(Arbiter.currentProject.dataDatabase, "DELETE FROM '" + featureType + "';", [], function(tx, res) { // pull everything down wfsLayer.destroyFeatures(); console.log("pull after delete"); @@ -3764,9 +3761,13 @@ var Arbiter = { var newWFSLayer = new OpenLayers.Layer.Vector(meta.nickname + "-wfs", { strategies : strategies, projection : new OpenLayers.Projection(meta.srsName), - protocol : protocol, - styleMap: styleMap + protocol : protocol }); + + if (serverLayer.geometryType === "Point") { + alert('setting stylemap for: ' + meta.nickname); + newWFSLayer.styleMap = styleMap; + } newWFSLayer.attributeTypes = {}; @@ -3818,17 +3819,18 @@ var Arbiter = { } }); - var poiInBounds; + var featureInBounds; newWFSLayer.events.register("beforefeatureadded", null, function(event) { //if in bounds - if(Arbiter.currentProject.aoi.contains(event.feature.geometry.x, event.feature.geometry.y)) { - poiInBounds = true; + // if(Arbiter.currentProject.aoi.contains(event.feature.geometry.x, event.feature.geometry.y)) { + if(Arbiter.currentProject.aoi.intersectsBounds(event.feature.geometry.getBounds())) { + featureInBounds = true; return true; } //if out of bounds - console.log('Feature is out of bounds'); - poiInBounds = false; + console.log('Feature is out of bounds:', event.feature); + featureInBounds = false; return false; }); @@ -3836,7 +3838,7 @@ var Arbiter = { var selectControl = new OpenLayers.Control.SelectFeature( newWFSLayer, OpenLayers.Handler.Point); addFeatureControl.events.register("featureadded", null, function(event) { - if(poiInBounds == false) { + if(featureInBounds == false) { return false; } // populate the features attributes object diff --git a/iOS/www/src/js/Cordova.js b/iOS/www/src/js/Cordova.js index d95009a..5dc2232 100644 --- a/iOS/www/src/js/Cordova.js +++ b/iOS/www/src/js/Cordova.js @@ -153,13 +153,13 @@ var Cordova = { if(_success) _success(tx, res); }, function(tx, err){ - Arbiter.error("Cordova.transaction: sql execution failed!!!", tx, err); + Arbiter.error("Cordova.transaction: sql execution failed!", tx, err, _sql, _variables); if(_error){ _error(tx, err); } }); }, function(err, err2){ - Arbiter.error("Transaction failed!!!", err, err2); + Arbiter.error("Transaction failed!", err, err2, _sql, _variable); }, function(){ // do nothing }); diff --git a/iOS/www/src/js/TileUtil.js b/iOS/www/src/js/TileUtil.js index 5bdbdb9..ea605cd 100644 --- a/iOS/www/src/js/TileUtil.js +++ b/iOS/www/src/js/TileUtil.js @@ -1172,6 +1172,25 @@ dumpTableRows: function(database, tableName){ }); }, + +dumpTableAttributes: function(database, tableName){ + console.log("---- TileUtil.dumpTableAttributes"); + + // get the attributes of the layer + var sql = "PRAGMA table_info (" + tableName + ");"; + + Cordova.transaction(Arbiter.currentProject.dataDatabase, sql, [], function(tx, res) { + var str = 'attribute count: ' + res.rows.length + '\n'; + for (var i=0; i