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();


Reply via email to