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