# HG changeset patch # User ymh # Date 1356952750 -3600 # Node ID 01fb9167ad752d34ea360301e9b3cc68b688292c # Parent 267d67791e05b1e60b8fcbe538d409bf4600b02a Correct bug on insert, delete move objects diff -r 267d67791e05 -r 01fb9167ad75 .classpath --- a/.classpath Tue Dec 25 21:29:11 2012 +0100 +++ b/.classpath Mon Dec 31 12:19:10 2012 +0100 @@ -9,9 +9,9 @@ - - - + + + diff -r 267d67791e05 -r 01fb9167ad75 server/pom.xml --- a/server/pom.xml Tue Dec 25 21:29:11 2012 +0100 +++ b/server/pom.xml Mon Dec 31 12:19:10 2012 +0100 @@ -8,7 +8,8 @@ war - 0.8.4 + 1.0 + 0.8.4 1.16 3.1.3.RELEASE 4.10 @@ -32,7 +33,7 @@ org.mortbay.jetty jetty-maven-plugin - 7.3.0.v20110203 + 8.1.8.v20121106 10 @@ -130,7 +131,7 @@ org.opencoweb.cowebx cowebx-widgets-dojo - ${coweb-version} + ${cowebx-version} war diff -r 267d67791e05 -r 01fb9167ad75 server/src/main/java/org/iri_research/renkan/coweb/RenkanSessionModerator.java --- a/server/src/main/java/org/iri_research/renkan/coweb/RenkanSessionModerator.java Tue Dec 25 21:29:11 2012 +0100 +++ b/server/src/main/java/org/iri_research/renkan/coweb/RenkanSessionModerator.java Mon Dec 31 12:19:10 2012 +0100 @@ -19,9 +19,10 @@ @SuppressWarnings("unchecked") @Override - public void onSync(Map data) { + public void onSync(String clientId, Map data) { - this.logger.debug("Debugging onSync : " + data.toString()); + this.logger.debug("Debugging onSync client id: " + clientId); + this.logger.debug("Debugging onSync: " + data.toString()); this.logger.debug("Debugging onSync channel: " + data.get("channel")); this.logger.debug("Debugging onSync type: " + data.get("type")); this.logger.debug("Debugging onSync site: " + data.get("site")); diff -r 267d67791e05 -r 01fb9167ad75 server/src/main/java/org/iri_research/renkan/coweb/event/EdgeSyncEventManager.java --- a/server/src/main/java/org/iri_research/renkan/coweb/event/EdgeSyncEventManager.java Tue Dec 25 21:29:11 2012 +0100 +++ b/server/src/main/java/org/iri_research/renkan/coweb/event/EdgeSyncEventManager.java Mon Dec 31 12:19:10 2012 +0100 @@ -55,7 +55,7 @@ public void insert(Map data) { // get project - this.logger.debug("NodeSyncEventManager: insert Node"); + this.logger.debug("EdgeSyncEventManager: insert Edge"); @SuppressWarnings("unchecked") Map values = (Map) data.get("value"); @@ -64,7 +64,7 @@ Project project = this.getProjectsRepository().findOne(project_id); if (null == project) { - throw new CowebException("node insert: project not found", String.format("Project %s not found", project_id)); + throw new CowebException("Edge insert: project not found", String.format("Project %s not found", project_id)); } String creator_id = (String) values.get("created_by"); @@ -91,7 +91,7 @@ Integer position = (Integer)data.get("position"); if(position == null || position < 0) { - throw new CowebException("node insert: bad insert position", String.format("Bad position %s not found", position==null?"null":position.toString())); + throw new CowebException("Edge insert: bad insert position", String.format("Bad position %s not found", position==null?"null":position.toString())); } int index = position.intValue(); List edges = project.getEdges(); diff -r 267d67791e05 -r 01fb9167ad75 server/src/main/webapp/WEB-INF/web.xml --- a/server/src/main/webapp/WEB-INF/web.xml Tue Dec 25 21:29:11 2012 +0100 +++ b/server/src/main/webapp/WEB-INF/web.xml Mon Dec 31 12:19:10 2012 +0100 @@ -30,7 +30,15 @@ jsonDebug false + + + maxSessionsPerBrowser + -1 + 1 diff -r 267d67791e05 -r 01fb9167ad75 server/src/main/webapp/static/js/config.js --- a/server/src/main/webapp/static/js/config.js Tue Dec 25 21:29:11 2012 +0100 +++ b/server/src/main/webapp/static/js/config.js Mon Dec 31 12:19:10 2012 +0100 @@ -32,7 +32,10 @@ }; var cowebConfig = { - adminUrl : '/renkan/admin' + baseUrl: window.location.protocol + '//' +window.location.host, + adminUrl : '/renkan/admin', + debug: false, + //useWebSockets: true }; diff -r 267d67791e05 -r 01fb9167ad75 server/src/main/webapp/static/js/corenkan.js --- a/server/src/main/webapp/static/js/corenkan.js Tue Dec 25 21:29:11 2012 +0100 +++ b/server/src/main/webapp/static/js/corenkan.js Mon Dec 31 12:19:10 2012 +0100 @@ -28,7 +28,10 @@ proto.initCollab = function(id) { this.collab = coweb.initCollab({id : id}); - this.collab.subscribeSync("project", this, "onRemoteProjectChange"); + this.collab.subscribeSync("project", this, "onRemoteProjectChange"); + this.collab.subscribeSync("user", this, "onRemoteUserChange"); + this.collab.subscribeSync("node", this, "onRemoteNodeChange"); + this.collab.subscribeSync("edge", this, "onRemoteEdgeChange"); }; function prepareValues(obj,c) { @@ -70,7 +73,7 @@ proto.updateObjectBind = function(type, obj, options) { console.log("change " + type,obj, options); - if(obj.hasChanged()) { + if(typeof obj != "undefined" && obj.hasChanged()) { var values = { id: obj.id, _type: type, @@ -176,9 +179,9 @@ if (args.type === "insert") { this.onRemoteObjectInsert(field, args.value, args.position); } else if (args.type === "update") { - this.onRemoteNodeUpdate(field, args.value, args.position); + this.onRemoteObjectUpdate(field, args.value, args.position); } else if (args.type === "delete") { - this.onRemoteNodeDelete(field, args.position); + this.onRemoteObjectDelete(field, args.position); } }; @@ -207,7 +210,7 @@ * local methods for insert, update, delete handling. * @param args Cooperative web event */ - proto.onRemoteUserChange = function(args) { + proto.onRemoteEdgeChange = function(args) { this.onRemoteObjectChange("edges", args); }; @@ -244,6 +247,8 @@ */ proto.onRemoteObjectInsert = function(field, values, position) { + console.log("Remote "+ field +" insert values ", values, "position", position); + var coll = this.project.get(field); var object_id = values['id']; @@ -253,7 +258,23 @@ this.onRemoteObjectUpdate(field, values, coll.indexOf(obj)); } else { - this.project.get(field).add(values, {at:position}); + var add_values = {}; + for(var fieldname in values) { + if(fieldname == "_id" || fieldname[0] !== '_' ) { + add_values[fieldname] = values[fieldname]; + } + } + switch(field) { + case "nodes": + this.project.addNode(add_values, {at:position}); + break; + case "edges": + this.project.addEdge(add_values, {at:position}); + break; + case "users": + this.project.addUser(add_values, {at:position}); + break; + } } }; @@ -269,17 +290,20 @@ */ proto.onRemoteObjectUpdate = function(field, values, position) { + console.log("Remote "+ field +" update values ", values, "position", position); + var object_id = values['id']; if(this.project != null) { - for(var obj in this.project.get(field)) { - if(obj.id == object_id) { - for(var fieldname in values) { - if(fieldname != "id" && fieldname != "type") { - obj.set(fieldname, values[fieldname]); - } - } - } + var obj = this.project.get(field).get(object_id); + if(obj != null) { + var changed_val = {}; + for(var fieldname in values) { + if(fieldname != "id" && fieldname != "type") { + changed_val[fieldname] = values[fieldname]; + } + } + obj.set(changed_val); } } }; @@ -290,6 +314,7 @@ * @param position Which item to update. */ proto.onRemoteObjectDelete = function(field, position) { + console.log("Remote "+ field +" delete position", position); this.project.get(field).remove(this.project.get(field).at(position)); }; diff -r 267d67791e05 -r 01fb9167ad75 server/src/main/webapp/static/js/models.js --- a/server/src/main/webapp/static/js/models.js Tue Dec 25 21:29:11 2012 +0100 +++ b/server/src/main/webapp/static/js/models.js Mon Dec 31 12:19:10 2012 +0100 @@ -165,22 +165,22 @@ }, } ], - addUser: function(_props) { + addUser: function(_props, _options) { _props.project = this; var _user = new User(_props); - this.get("users").push(_user); + this.get("users").push(_user, _options); return _user; }, - addNode: function(_props) { + addNode: function(_props, _options) { _props.project = this; var _node = new Node(_props); - this.get("nodes").push(_node); + this.get("nodes").push(_node, _options); return _node; }, - addEdge: function(_props) { + addEdge: function(_props, _options) { _props.project = this; var _edge = new Edge(_props); - this.get("edges").push(_edge); + this.get("edges").push(_edge, _options); return _edge; }, removeNode: function(_model) { diff -r 267d67791e05 -r 01fb9167ad75 server/src/main/webapp/static/js/paper-renderer.js --- a/server/src/main/webapp/static/js/paper-renderer.js Tue Dec 25 21:29:11 2012 +0100 +++ b/server/src/main/webapp/static/js/paper-renderer.js Mon Dec 31 12:19:10 2012 +0100 @@ -295,6 +295,13 @@ this.node_image.position = this.paper_coords; } } + + Rkns._.each(this.project.get("edges").filter(function (ed) { return ((ed.to === this.model) || (ed.from === this.model));}), function(edge, index, list){ + var repr = this.renderer.getRepresentationByModel(edge); + if(repr != null && typeof repr.from_representation.paper_coords !== "undefined" && typeof repr.to_representation.paper_coords !== "undefined") { + repr.redraw(); + } + }, this); } Rkns.Renderer.Node.prototype.paperShift = function(_delta) { @@ -306,7 +313,7 @@ } }; this.model.set(_data); - this.renderer.redraw(); + //this.renderer.redraw(); } Rkns.Renderer.Node.prototype.openEditor = function() {