You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/03/25 16:13:10 UTC

svn commit: r1788673 - in /openmeetings/application/trunk: openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/ openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/

Author: solomax
Date: Sat Mar 25 16:13:10 2017
New Revision: 1788673

URL: http://svn.apache.org/viewvc?rev=1788673&view=rev
Log:
[OPENMEETINGS-551] create/modify/delete/load seems to work

Modified:
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java?rev=1788673&r1=1788672&r2=1788673&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java Sat Mar 25 16:13:10 2017
@@ -21,7 +21,6 @@ package org.apache.openmeetings.db.dto.r
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.util.Date;
-import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -108,7 +107,7 @@ public class Whiteboard {
 		return roomItems;
 	}
 
-	public void add(String uid, JSONObject obj) {
+	public void put(String uid, JSONObject obj) {
 		roomItems.put(uid, obj);
 	}
 
@@ -124,56 +123,6 @@ public class Whiteboard {
 		roomItems.remove(oid);
 	}
 
-	public void remove(List<Object> actionObject) {
-		String oid = actionObject.get(actionObject.size() - 1).toString();
-		String type = actionObject.get(0).toString();
-		log.debug("Removal of object: oid = {}, type = {} ", oid, type);
-
-		/* I believe this is redundant
-		// Re-Index all items in its zIndex
-		if (type.equals("ellipse")
-				|| type.equals("drawarrow")
-				|| type.equals("line")
-				|| type.equals("paint")
-				|| type.equals("rectangle")
-				|| type.equals("uline")
-				|| type.equals("image")
-				|| type.equals("letter")
-				|| type.equals("clipart")
-				|| type.equals("swf")
-				|| type.equals("mindmapnode")
-				|| type.equals("flv")) {
-
-			Integer zIndex = Integer.valueOf(actionObject.get(actionObject.size() - 8).toString());
-
-			log.debug("1|zIndex " + zIndex);
-			log.debug("2|zIndex " + actionObject.get(actionObject.size() - 8).toString());
-			log.debug("3|zIndex " + actionObject.get(actionObject.size() - 8));
-
-			int l = 0;
-			for (Object o : actionObject) {
-				log.debug("4|zIndex " + l + " -- " + o);
-				l++;
-			}
-
-			for (Entry<String, List<Object>> e : roomItems.entrySet()) {
-				List<Object> actionObjectStored = e.getValue();
-
-				Integer zIndexStored = Integer.valueOf(actionObjectStored.get(actionObjectStored.size() - 8).toString());
-
-				log.debug("zIndexStored|zIndex " + zIndexStored + "|" + zIndex);
-
-				if (zIndexStored >= zIndex) {
-					zIndexStored -= 1;
-					log.debug("new-zIndex " + zIndexStored);
-				}
-				actionObjectStored.set(actionObjectStored.size() - 8, zIndexStored);
-			}
-		}
-		*/
-		roomItems.remove(oid);
-	}
-
 	public String getName() {
 		return name;
 	}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java?rev=1788673&r1=1788672&r2=1788673&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java Sat Mar 25 16:13:10 2017
@@ -49,6 +49,7 @@ import org.apache.wicket.request.resourc
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.string.StringValue;
 
+import com.github.openjson.JSONArray;
 import com.github.openjson.JSONObject;
 
 public class WbPanel extends Panel {
@@ -65,6 +66,8 @@ public class WbPanel extends Panel {
 		createWb
 		, removeWb
 		, createObj
+		, modifyObj
+		, deleteObj
 	}
 	private final AbstractDefaultAjaxBehavior wbAction = new AbstractDefaultAjaxBehavior() {
 		private static final long serialVersionUID = 1L;
@@ -75,9 +78,9 @@ public class WbPanel extends Panel {
 				Action a = Action.valueOf(getRequest().getRequestParameters().getParameterValue(PARAM_ACTION).toString());
 				StringValue sv = getRequest().getRequestParameters().getParameterValue(PARAM_OBJ);
 				JSONObject obj = sv.isEmpty() ? new JSONObject() : new JSONObject(sv.toString());
-				if (Action.createObj == a) {
+				if (Action.createObj == a || Action.modifyObj == a) {
 					if ("pointer".equals(obj.getJSONObject("obj").getString("type"))) {
-						sendWbOthers(String.format("WbArea.createObj(%s);", obj.toString()));
+						sendWbOthers(String.format("WbArea.%s(%s);", a.name(), obj.toString()));
 						return;
 					}
 				}
@@ -103,8 +106,33 @@ public class WbPanel extends Panel {
 						{
 							Whiteboard wb = getBean(WhiteboardCache.class).get(roomId).get(obj.getLong("wbId"));
 							JSONObject o = obj.getJSONObject("obj");
-							wb.add(o.getString("uid"), o);
-							sendWbOthers(String.format("WbArea.createObj(%s);", obj.toString()));
+							wb.put(o.getString("uid"), o);
+							sendWbOthers(String.format("WbArea.%s(%s);", a.name(), obj.toString()));
+						}
+							break;
+						case modifyObj:
+						{
+							Whiteboard wb = getBean(WhiteboardCache.class).get(roomId).get(obj.getLong("wbId"));
+							JSONObject o = obj.getJSONObject("obj");
+							JSONArray arr = o.optJSONArray("objects");
+							if (arr == null) {
+								wb.put(o.getString("uid"), o);
+							} else {
+								for (int i = 0; i < arr.length(); ++i) {
+									JSONObject _o = arr.getJSONObject(i);
+									wb.put(_o.getString("uid"), _o);
+								}
+							}
+							sendWbOthers(String.format("WbArea.%s(%s);", a.name(), obj.toString()));
+						}
+						case deleteObj:
+						{
+							Whiteboard wb = getBean(WhiteboardCache.class).get(roomId).get(obj.getLong("wbId"));
+							JSONArray arr = obj.getJSONArray("obj");
+							for (int i = 0; i < arr.length(); ++i) {
+								wb.remove(arr.getString(i));
+							}
+							sendWbAll(String.format("WbArea.removeObj(%s);", obj.toString()));
 						}
 							break;
 					}
@@ -144,6 +172,11 @@ public class WbPanel extends Panel {
 		StringBuilder sb = new StringBuilder("WbArea.init();");
 		for (Entry<Long, Whiteboard> entry : getBean(WhiteboardCache.class).list(roomId, rp.getClient().getUser().getLanguageId())) {
 			sb.append(getAddWbScript(entry.getKey(), entry.getValue().getName()));
+			JSONArray arr = new JSONArray();
+			for (Entry<String, JSONObject> wbEntry : entry.getValue().getRoomItems().entrySet()) {
+				arr.put(wbEntry.getValue());
+			}
+			sb.append("WbArea.load(").append(new JSONObject().put("wbId", entry.getKey()).put("obj", arr).toString()).append(");");
 		}
 		response.render(OnDomReadyHeaderItem.forScript(sb));
 	}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js?rev=1788673&r1=1788672&r2=1788673&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js Sat Mar 25 16:13:10 2017
@@ -606,7 +606,7 @@ var Wb = function() {
 				break;
 			default:
 				o.includeDefaultValues = false;
-				json = o.toJSON(['uid'])
+				json = o.toJSON(['uid']);
 				break;
 		}
 		wbAction('createObj', JSON.stringify({
@@ -626,8 +626,14 @@ var Wb = function() {
 		}
 	};
 	var objModifiedHandler = function (e) {
-		var obj = e.target;
-		console.log('Object Modified', obj);
+		var o = e.target;
+		o.includeDefaultValues = false;
+		json = o.toJSON(['uid'])
+		wbAction('modifyObj', JSON.stringify({
+			wbId: wbId
+			, obj: o.toJSON(['uid'])
+		}));
+		//console.log('Object Modified', o);
 	};
 	var pathCreatedHandler = function (o) {
 		o.path.uid = UUID.generate();
@@ -676,6 +682,9 @@ var Wb = function() {
 		, getCanvas: function() {
 			return canvas;
 		}
+		, getWbId: function() {
+			return wbId;
+		}
 	};
 };
 var WbArea = (function() {
@@ -692,31 +701,76 @@ var WbArea = (function() {
 		if (idx > -1) {
 			var href = tabs.find('a')[idx];
 			if (!!href) {
-				var wb = $($(href).attr('href'));
-				return wb.data('getCanvas')();
+				return $($(href).attr('href'));
 			}
 		}
 		return null;
 	}
 	function deleteHandler(e) {
-		var canvas = getActive();
 		switch (e.which) {
 			case 8:  // backspace
 			case 46: // delete
-				if (!!canvas) {
-					if (canvas.getActiveGroup()) {
-						canvas.getActiveGroup().forEachObject(function(o){ canvas.remove(o) });
-						canvas.discardActiveGroup().renderAll();
-					} else {
-						var obj = canvas.getActiveObject();
-						if (!!obj) {
-							canvas.remove(obj).renderAll();
+				{
+					var wb = getActive();
+					var canvas = wb.data('getCanvas')();
+					if (!!canvas) {
+						var arr = [];
+						if (canvas.getActiveGroup()) {
+							canvas.getActiveGroup().forEachObject(function(o){ arr.push(o.uid); });
+						} else {
+							var obj = canvas.getActiveObject();
+							if (!!obj) {
+								arr.push(obj.uid);
+							}
 						}
+						wbAction('deleteObj', JSON.stringify({
+							wbId: wb.data('getWbId')()
+							, obj: arr
+						}));
+						return false;
 					}
-					return false;
 				}
+				break;
+		}
+	}
+	function _removeHandler(canvas, _uid) {
+		var __o = _findObject(canvas, _uid);
+		if (!!__o) {
+			canvas.remove(__o);
 		}
 	}
+	function _modifyHandler(canvas, _o) {
+		_removeHandler(canvas, _o.uid);
+		canvas.add(_o);
+	}
+	function _createHandler(canvas, _o) {
+		canvas.add(_o);
+	}
+	function _findObject(canvas, uid) {
+		var _o = {};
+		canvas.forEachObject(function(__o) {
+			if (!!__o && uid === __o.uid) {
+				_o = __o;
+				return false;
+			}
+		});
+		return _o;
+	}
+	function _createObject(canvas, arr, handler) {
+		fabric.util.enlivenObjects(arr, function(objects) {
+			var origRenderOnAddRemove = canvas.renderOnAddRemove;
+			canvas.renderOnAddRemove = false;
+
+			for (var i = 0; i < objects.length; ++i) {
+				var _o = objects[i];
+				_o.loaded = true;
+				handler(canvas, _o);
+			}
+
+			canvas.renderOnAddRemove = origRenderOnAddRemove;
+			canvas.renderAll();
+		});
+	}
 	self.init = function() {
 		tabs = $('.room.wb.area .tabs').tabs();
 		tabs.find(".ui-tabs-nav").sortable({
@@ -756,30 +810,49 @@ var WbArea = (function() {
 		});
 		wb.data(Wb()).data('init')(obj.id, tid);
 	};
-	self.createObj = function(json) {
+	self.load = function(json) { //TODO need to be unified
+		var canvas = $('#' + getWbTabId(json.wbId)).data('getCanvas')();
+		_createObject(canvas, json.obj, _createHandler);
+	};
+	self.createObj = function(json) { //TODO need to be unified
 		var canvas = $('#' + getWbTabId(json.wbId)).data('getCanvas')();
 		var o = json.obj;
-		o.loaded = true;
 		switch(o.type) {
 			case 'pointer':
 				APointer().create(canvas, o);
 				break;
 			default:
-				//TODO will be reused on Load WB
-				fabric.util.enlivenObjects([o], function(objects) {
-					var origRenderOnAddRemove = canvas.renderOnAddRemove;
-					canvas.renderOnAddRemove = false;
-
-					objects.forEach(function(_o) {
-						canvas.add(_o);
-					});
-
-					canvas.renderOnAddRemove = origRenderOnAddRemove;
-					canvas.renderAll();
-				});
+				_createObject(canvas, [o], _createHandler);
 				break;
 		}
 	};
+	self.modifyObj = function(json) { //TODO need to be unified
+		var canvas = $('#' + getWbTabId(json.wbId)).data('getCanvas')();
+		var o = json.obj;
+		switch(o.type) {
+			case 'pointer':
+				_modifyHandler(canvas, APointer().create(canvas, o))
+				break;
+			default:
+				var arr = [o];
+				if (!!o.objects) {
+					arr = o.objects;
+					for (var i = 0; i < arr.length; ++i) {
+						var _o = arr[i];
+						_o.left += o.left;
+						_o.top += o.top;
+					}
+				}
+				_createObject(canvas, o.objects || [o], _modifyHandler);
+				break;
+		}
+	};
+	self.removeObj = function(json) {
+		var canvas = $('#' + getWbTabId(json.wbId)).data('getCanvas')();
+		for (var i = 0; i < json.obj.length; ++i) {
+			_removeHandler(canvas, json.obj[i]);
+		}
+	};
 	self.remove = function(id) {
 		var tabId = getWbTabId(id);
 		tabs.find('li[aria-controls="' + tabId + '"]').remove();