[gnome-maps/wip/osm-edit: 30/47] osmApi: plug in skeleton code to create OSM XML for updated objects



commit 9ab51035b98dc34f06201dbbb337451adeb5bd8e
Author: Marcus Lundblad <ml update uu se>
Date:   Mon Feb 16 23:36:02 2015 +0100

    osmApi: plug in skeleton code to create OSM XML for updated objects
    
    Added callbacks fired on successful OSM changeset creation.
    Added XML generation for nodes and ways (relations still missing).

 src/osmConnection.js |   11 ++++++++++-
 src/osmEdit.js       |   21 +++++++++++++++++++--
 src/osmNode.js       |   18 ++++++++++++++++++
 src/osmObject.js     |    4 ++++
 src/osmWay.js        |   20 ++++++++++++++++++++
 5 files changed, 71 insertions(+), 3 deletions(-)
---
diff --git a/src/osmConnection.js b/src/osmConnection.js
index 8654856..74d9959 100644
--- a/src/osmConnection.js
+++ b/src/osmConnection.js
@@ -146,8 +146,17 @@ const OSMConnection = new Lang.Class({
             }
 
             print ('data received: ' + message.response_body.data);
+           callback(true, message.status_code, message.response_body.data);
+           
+        }));
+    },
 
-        }).bind(this));
+    uploadObject: function(object, changeset, callback) {
+       object.changeset = changeset;
+
+       let xml = object.toXML();
+
+       print('about to upload object:\n' + xml + '\n');
     },
 
     _getOpenChangesetUrl: function() {
diff --git a/src/osmEdit.js b/src/osmEdit.js
index f233bda..6bc88e7 100644
--- a/src/osmEdit.js
+++ b/src/osmEdit.js
@@ -76,7 +76,24 @@ const OSMEditManager = new Lang.Class({
        return osmType;
     },
 
-    uploadObject: function(place, comment, source, callback) {
-       this._osmConnection.openChangeset(comment, source, callback);
+    uploadObject: function(object, comment, source, callback) {
+       this._osmConnection.openChangeset(comment, source,
+                                         function(success, status,
+                                                  changeset) {
+                                             print('open changeset CB:');
+                                             print('success: ' + success);
+                                             print('status: ' + status);
+                                             print('changeset: ' + changeset);
+                                             if (success)
+                                                 this._uploadObject(object,
+                                                                    changeset,
+                                                                    callback);
+                                             else
+                                                 callback(false, status, null);
+                                         }.bind(this));
+    },
+
+    _uploadObject: function(object, changeset, callback) {
+       this._osmConnection.uploadObject(object, changeset, callback);
     }
 });
diff --git a/src/osmNode.js b/src/osmNode.js
index 6a35305..c8acb79 100644
--- a/src/osmNode.js
+++ b/src/osmNode.js
@@ -24,6 +24,8 @@ const Lang = imports.lang;
 const OSMObject = imports.osmObject;
 const OSMConnection = imports.osmConnection;
 
+const GLib = imports.gi.GLib;
+
 const OSMNode = new Lang.Class({
     Name: 'OSMNode',
     Extends: OSMObject.OSMObject,
@@ -42,6 +44,22 @@ const OSMNode = new Lang.Class({
        return this._lon;
     },
 
+    toXML: function() {
+       let tags = this._serializeTagsToList();
+       let attrs = this._serializeAttributes();
+       let result = '<osm>\n' +
+           '\t<node ' + attrs + ' lat="' + this._lat + '" lon="' + this._lon + '">\n';
+
+       for (var i = 0; i < tags.length; i++) {
+           result += '\t\t' + tags[i] + '\n';
+       }
+
+       result += '\t</node>\n' +
+           '</osm>';
+
+       return result;
+    },
+
     toString: function() {
        let s = 'node changeset: ' + this._changeset + ' lat: ' + this._lat +
            ' lon: ' + this._lon;
diff --git a/src/osmObject.js b/src/osmObject.js
index 29e4350..3dbb864 100644
--- a/src/osmObject.js
+++ b/src/osmObject.js
@@ -63,6 +63,10 @@ const OSMObject = new Lang.Class({
        return this._changeset;
     },
 
+    set changeset(changeset) {
+       this._changeset = changeset;
+    },
+
     setTag: function(key, value) {
        this._tags[key] = value;
     },    
diff --git a/src/osmWay.js b/src/osmWay.js
index 04ac482..180a6ec 100644
--- a/src/osmWay.js
+++ b/src/osmWay.js
@@ -35,5 +35,25 @@ const OSMWay = new Lang.Class({
 
     get nodeRefs() {
        return this._nodeRefs;
+    },
+
+    toXML: function() {
+       let tags = this._serializeTagsToList();
+       let attrs = this._serializeAttributes();
+       let result = '<osm>\n' +
+           '\t<way ' + attrs + '">\n';
+
+       for (var i = 0; i < this._nodeRefs.length; i++) {
+           result += '\t\t<nd ref="' + this._nodeRefs[i] + '"/>\n';
+       }
+
+       for (var i = 0; i < tags.length; i++) {
+           result += '\t\t' + tags[i] + '\n';
+       }
+
+       result += '\t</node>\n' +
+           '</osm>';
+
+       return result;
     }
 })


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]