Correct bug on insert, delete move objects
authorymh <ymh.work@gmail.com>
Mon, 31 Dec 2012 12:19:10 +0100
changeset 48 01fb9167ad75
parent 47 267d67791e05
child 49 d0da34fda4b4
Correct bug on insert, delete move objects
.classpath
server/pom.xml
server/src/main/java/org/iri_research/renkan/coweb/RenkanSessionModerator.java
server/src/main/java/org/iri_research/renkan/coweb/event/EdgeSyncEventManager.java
server/src/main/webapp/WEB-INF/web.xml
server/src/main/webapp/static/js/config.js
server/src/main/webapp/static/js/corenkan.js
server/src/main/webapp/static/js/models.js
server/src/main/webapp/static/js/paper-renderer.js
--- a/.classpath	Tue Dec 25 21:29:11 2012 +0100
+++ b/.classpath	Mon Dec 31 12:19:10 2012 +0100
@@ -9,9 +9,9 @@
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
 	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
-	<classpathentry kind="var" path="M2_REPO/org/opencoweb/coweb-bots/0.8.4/coweb-bots-0.8.4.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/opencoweb/coweb-server/0.8.4/coweb-server-0.8.4.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/opencoweb/coweb-operationengine/0.8.4/coweb-operationengine-0.8.4.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/opencoweb/coweb-bots/1.0/coweb-bots-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/opencoweb/coweb-server/1.0/coweb-server-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/opencoweb/coweb-operationengine/1.0/coweb-operationengine-1.0.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/cometd/java/bayeux-api/2.5.0/bayeux-api-2.5.0.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/cometd/java/cometd-java-common/2.5.0/cometd-java-common-2.5.0.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/eclipse/jetty/jetty-util/7.6.7.v20120910/jetty-util-7.6.7.v20120910.jar"/>
--- 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 @@
     <packaging>war</packaging>
 
     <properties>
-        <coweb-version>0.8.4</coweb-version>
+        <coweb-version>1.0</coweb-version>
+        <cowebx-version>0.8.4</cowebx-version>
         <jersey-version>1.16</jersey-version>
         <spring-version>3.1.3.RELEASE</spring-version>
         <junit-version>4.10</junit-version>
@@ -32,7 +33,7 @@
             <plugin>
                 <groupId>org.mortbay.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
-                <version>7.3.0.v20110203</version>
+                <version>8.1.8.v20121106</version>
                 <configuration>
                     <scanIntervalSeconds>10</scanIntervalSeconds>
                     <webAppConfig>
@@ -130,7 +131,7 @@
         <dependency>
             <groupId>org.opencoweb.cowebx</groupId>
             <artifactId>cowebx-widgets-dojo</artifactId>
-            <version>${coweb-version}</version>
+            <version>${cowebx-version}</version>
             <type>war</type>
         </dependency>
         <dependency>
--- 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<String, Object> data) {
+	public void onSync(String clientId, Map<String, Object> 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"));
--- 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<String, Object> data) {
 	
 		// get project
-		this.logger.debug("NodeSyncEventManager: insert Node");
+		this.logger.debug("EdgeSyncEventManager: insert Edge");
 		
 		@SuppressWarnings("unchecked")
 		Map<String, Object> values = (Map<String, Object>) 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<Edge> edges = project.getEdges();
--- 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 @@
     <init-param>
       <param-name>jsonDebug</param-name>
       <param-value>false</param-value>
+    </init-param>    
+    <init-param>
+      <param-name>maxSessionsPerBrowser</param-name>
+      <param-value>-1</param-value>
     </init-param>
+    <!--init-param>
+      <param-name>transports</param-name>
+      <param-value>org.cometd.websocket.server.WebSocketTransport</param-value>
+    </init-param-->
     <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
--- 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
 };
 
 
--- 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));
     };
     
--- 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) {
--- 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() {