Search in sources :

Example 6 with JSONArray

use of com.github.openjson.JSONArray in project openmeetings by apache.

the class WbPanel method processWbAction.

@Override
protected void processWbAction(WbAction a, JSONObject obj, AjaxRequestTarget target) throws IOException {
    Client c = rp.getClient();
    if (c == null) {
        return;
    }
    switch(a) {
        case createObj:
        case modifyObj:
            {
                JSONObject o = obj.optJSONObject("obj");
                if (o != null && "pointer".equals(o.getString(ATTR_TYPE))) {
                    sendWbOthers(a, obj);
                    return;
                }
            }
            break;
        case downloadPdf:
            {
                boolean moder = c.hasRight(Room.Right.moderator);
                Room r = rp.getRoom();
                if ((moder && !r.isHidden(RoomElement.ActionMenu)) || (!moder && r.isAllowUserQuestions())) {
                    try (PDDocument doc = new PDDocument()) {
                        JSONArray arr = obj.getJSONArray("slides");
                        for (int i = 0; i < arr.length(); ++i) {
                            String base64Image = arr.getString(i).split(",")[1];
                            byte[] bb = Base64.decodeBase64(base64Image);
                            BufferedImage img = ImageIO.read(new ByteArrayInputStream(bb));
                            float width = img.getWidth();
                            float height = img.getHeight();
                            PDPage page = new PDPage(new PDRectangle(width, height));
                            PDImageXObject pdImageXObject = LosslessFactory.createFromImage(doc, img);
                            try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, false)) {
                                contentStream.drawImage(pdImageXObject, 0, 0, width, height);
                            }
                            doc.addPage(page);
                        }
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        doc.save(baos);
                        rp.startDownload(target, baos.toByteArray());
                    }
                }
                return;
            }
        case loadVideos:
            {
                StringBuilder sb = new StringBuilder("WbArea.initVideos(");
                JSONArray arr = new JSONArray();
                for (Entry<Long, Whiteboard> entry : wbm.list(roomId)) {
                    Whiteboard wb = entry.getValue();
                    for (JSONObject o : wb.list()) {
                        String ft = o.optString(ATTR_FILE_TYPE);
                        if (BaseFileItem.Type.Recording.name().equals(ft) || BaseFileItem.Type.Video.name().equals(ft)) {
                            JSONObject _sts = o.optJSONObject(PARAM_STATUS);
                            if (_sts == null) {
                                continue;
                            }
                            // copy
                            JSONObject sts = new JSONObject(_sts.toString());
                            sts.put("pos", sts.getDouble("pos") + (System.currentTimeMillis() - sts.getLong("updated")) * 1. / 1000);
                            arr.put(new JSONObject().put("wbId", wb.getId()).put("uid", o.getString("uid")).put(ATTR_SLIDE, o.getString(ATTR_SLIDE)).put(PARAM_STATUS, sts));
                        }
                    }
                }
                sb.append(arr.toString()).append(");");
                target.appendJavaScript(sb);
                return;
            }
        default:
            break;
    }
    // presenter-right
    if (c.hasRight(Right.presenter)) {
        switch(a) {
            case createWb:
                {
                    Whiteboard wb = wbm.add(roomId, c.getUser().getLanguageId());
                    sendWbAll(WbAction.createWb, getAddWbJson(wb));
                }
                break;
            case removeWb:
                {
                    long id = obj.optLong("wbId", -1);
                    if (id > -1) {
                        wbm.remove(roomId, id);
                        sendWbAll(WbAction.removeWb, obj);
                    }
                }
                break;
            case activateWb:
                {
                    long _id = obj.optLong("wbId", -1);
                    if (_id > -1) {
                        wbm.activate(roomId, _id);
                        sendWbAll(WbAction.activateWb, obj);
                    }
                }
                break;
            case renameWb:
                {
                    Whiteboard wb = wbm.get(roomId).get(obj.optLong("wbId", -1));
                    if (wb != null) {
                        wbm.update(roomId, wb.setName(obj.getString("name")));
                        sendWbAll(WbAction.renameWb, obj);
                    }
                }
                break;
            case setSlide:
                {
                    Whiteboard wb = wbm.get(roomId).get(obj.optLong("wbId", -1));
                    if (wb != null) {
                        wb.setSlide(obj.optInt(ATTR_SLIDE, 0));
                        wbm.update(roomId, wb);
                        sendWbOthers(WbAction.setSlide, obj);
                    }
                }
                break;
            case clearAll:
                {
                    clearAll(roomId, obj.getLong("wbId"));
                }
                break;
            case setSize:
                {
                    Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId"));
                    wb.setZoom(obj.getDouble("zoom"));
                    wb.setZoomMode(ZoomMode.valueOf(obj.getString("zoomMode")));
                    wbm.update(roomId, wb);
                    sendWbOthers(WbAction.setSize, getAddWbJson(wb));
                }
                break;
            default:
                break;
        }
    }
    // wb-right
    if (c.hasRight(Right.presenter) || c.hasRight(Right.whiteBoard)) {
        switch(a) {
            case createObj:
                {
                    Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId"));
                    JSONObject o = obj.getJSONObject("obj");
                    wb.put(o.getString("uid"), o);
                    wbm.update(roomId, wb);
                    addUndo(wb.getId(), new UndoObject(UndoObject.Type.add, o));
                    sendWbOthers(WbAction.createObj, obj);
                }
                break;
            case modifyObj:
                {
                    Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId"));
                    JSONArray arr = obj.getJSONArray("obj");
                    JSONArray undo = new JSONArray();
                    for (int i = 0; i < arr.length(); ++i) {
                        JSONObject _o = arr.getJSONObject(i);
                        String uid = _o.getString("uid");
                        JSONObject po = wb.get(uid);
                        if (po != null) {
                            undo.put(po);
                            wb.put(uid, _o);
                        }
                    }
                    if (arr.length() != 0) {
                        wbm.update(roomId, wb);
                        addUndo(wb.getId(), new UndoObject(UndoObject.Type.modify, undo));
                    }
                    sendWbOthers(WbAction.modifyObj, obj);
                }
                break;
            case deleteObj:
                {
                    Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId"));
                    JSONArray arr = obj.getJSONArray("obj");
                    JSONArray undo = new JSONArray();
                    for (int i = 0; i < arr.length(); ++i) {
                        JSONObject _o = arr.getJSONObject(i);
                        JSONObject u = wb.remove(_o.getString("uid"));
                        if (u != null) {
                            undo.put(u);
                        }
                    }
                    if (undo.length() != 0) {
                        wbm.update(roomId, wb);
                        addUndo(wb.getId(), new UndoObject(UndoObject.Type.remove, undo));
                    }
                    sendWbAll(WbAction.deleteObj, obj);
                }
                break;
            case clearSlide:
                {
                    Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId"));
                    JSONArray arr = wb.clearSlide(obj.getInt(ATTR_SLIDE));
                    if (arr.length() != 0) {
                        wbm.update(roomId, wb);
                        addUndo(wb.getId(), new UndoObject(UndoObject.Type.remove, arr));
                    }
                    sendWbAll(WbAction.clearSlide, obj);
                }
                break;
            case save:
                wb2save = obj.getLong("wbId");
                fileName.open(target);
                break;
            case undo:
                {
                    Long wbId = obj.getLong("wbId");
                    UndoObject uo = getUndo(wbId);
                    if (uo != null) {
                        Whiteboard wb = wbm.get(roomId).get(wbId);
                        switch(uo.getType()) {
                            case add:
                                {
                                    JSONObject o = new JSONObject(uo.getObject());
                                    wb.remove(o.getString("uid"));
                                    wbm.update(roomId, wb);
                                    sendWbAll(WbAction.deleteObj, obj.put("obj", new JSONArray().put(o)));
                                }
                                break;
                            case remove:
                                {
                                    JSONArray arr = new JSONArray(uo.getObject());
                                    for (int i = 0; i < arr.length(); ++i) {
                                        JSONObject o = arr.getJSONObject(i);
                                        wb.put(o.getString("uid"), o);
                                    }
                                    wbm.update(roomId, wb);
                                    sendWbAll(WbAction.createObj, obj.put("obj", new JSONArray(uo.getObject())));
                                }
                                break;
                            case modify:
                                {
                                    JSONArray arr = new JSONArray(uo.getObject());
                                    for (int i = 0; i < arr.length(); ++i) {
                                        JSONObject o = arr.getJSONObject(i);
                                        wb.put(o.getString("uid"), o);
                                    }
                                    wbm.update(roomId, wb);
                                    sendWbAll(WbAction.modifyObj, obj.put("obj", arr));
                                }
                                break;
                        }
                    }
                }
                break;
            case videoStatus:
                {
                    Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId"));
                    String uid = obj.getString("uid");
                    JSONObject po = wb.get(uid);
                    if (po != null && "video".equals(po.getString(ATTR_TYPE))) {
                        JSONObject ns = obj.getJSONObject(PARAM_STATUS);
                        po.put(PARAM_STATUS, ns.put("updated", System.currentTimeMillis()));
                        wbm.update(roomId, wb.put(uid, po));
                        obj.put(ATTR_SLIDE, po.getInt(ATTR_SLIDE));
                        sendWbAll(WbAction.videoStatus, obj);
                    }
                }
                break;
            default:
                break;
        }
    }
}
Also used : PDPage(org.apache.pdfbox.pdmodel.PDPage) JSONArray(com.github.openjson.JSONArray) ByteArrayOutputStream(java.io.ByteArrayOutputStream) BufferedImage(java.awt.image.BufferedImage) PDImageXObject(org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) Entry(java.util.Map.Entry) JSONObject(com.github.openjson.JSONObject) ByteArrayInputStream(java.io.ByteArrayInputStream) PDDocument(org.apache.pdfbox.pdmodel.PDDocument) PDRectangle(org.apache.pdfbox.pdmodel.common.PDRectangle) PDPageContentStream(org.apache.pdfbox.pdmodel.PDPageContentStream) Client(org.apache.openmeetings.db.entity.basic.Client) Room(org.apache.openmeetings.db.entity.room.Room) Whiteboard(org.apache.openmeetings.db.dto.room.Whiteboard)

Example 7 with JSONArray

use of com.github.openjson.JSONArray in project openmeetings by apache.

the class WbPanel method getArray.

private static JSONArray getArray(JSONObject wb, Function<JSONObject, JSONObject> postprocess) {
    JSONObject items = wb.getJSONObject(ITEMS_KEY);
    JSONArray arr = new JSONArray();
    for (String uid : items.keySet()) {
        JSONObject o = items.getJSONObject(uid);
        if (postprocess != null) {
            o = postprocess.apply(o);
        }
        arr.put(o);
    }
    return arr;
}
Also used : JSONObject(com.github.openjson.JSONObject) JSONArray(com.github.openjson.JSONArray)

Example 8 with JSONArray

use of com.github.openjson.JSONArray in project openmeetings by apache.

the class WbConverter method processPath.

private static void processPath(Whiteboard wb, List<?> props) {
    if (props.size() < 13) {
        return;
    }
    String color = getColor(getInt(props, 4));
    JSONObject o = setColor(init(wb, props), color, null).put(ATTR_TYPE, "path").put(ATTR_STROKE, props.get(3));
    @SuppressWarnings("unchecked") List<List<?>> points = (List<List<?>>) props.get(1);
    JSONArray path = new JSONArray();
    for (List<?> point : points) {
        if (path.length() == 0) {
            path.put(new JSONArray(Arrays.asList("M", getInt(point, 1), getInt(point, 2))));
        } else if (path.length() == points.size() - 1) {
            path.put(new JSONArray(Arrays.asList("L", getInt(point, 3), getInt(point, 4))));
        } else {
            path.put(new JSONArray(Arrays.asList("Q", getInt(point, 1), getInt(point, 2), getInt(point, 3), getInt(point, 4))));
        }
    }
    add(wb, o.put("path", path).put(ATTR_OPACITY, props.get(5)));
}
Also used : JSONObject(com.github.openjson.JSONObject) JSONArray(com.github.openjson.JSONArray) ArrayList(java.util.ArrayList) List(java.util.List)

Example 9 with JSONArray

use of com.github.openjson.JSONArray in project openmeetings by apache.

the class TestCalendarService method testCreateWithOmMm.

@Test
public void testCreateWithOmMm() throws Exception {
    JSONObject o = createAppointment("test").put("meetingMembers", new JSONArray().put(new JSONObject().put("user", new JSONObject().put("id", 1))));
    String uuid = UUID.randomUUID().toString();
    User u = getUser(uuid);
    u.getGroupUsers().add(new GroupUser(getBean(GroupDao.class).get(1L), u));
    u = createUser(getBean(UserDao.class), u);
    ServiceResult sr = login(u.getLogin(), createPass());
    Response resp = getClient(getCalendarUrl()).path("/").query("sid", sr.getMessage()).form(new Form().param("appointment", o.toString()));
    assertNotNull("Valid AppointmentDTO should be returned", resp);
    assertEquals("Call should be successful", Response.Status.OK.getStatusCode(), resp.getStatus());
    AppointmentDTO dto = resp.readEntity(AppointmentDTO.class);
    assertNotNull("Valid DTO should be returned", dto);
    assertNotNull("DTO id should be valid", dto.getId());
}
Also used : Response(javax.ws.rs.core.Response) User(org.apache.openmeetings.db.entity.user.User) AbstractJUnitDefaults.createUser(org.apache.openmeetings.AbstractJUnitDefaults.createUser) GroupUser(org.apache.openmeetings.db.entity.user.GroupUser) AbstractJUnitDefaults.getUser(org.apache.openmeetings.AbstractJUnitDefaults.getUser) ServiceResult(org.apache.openmeetings.db.dto.basic.ServiceResult) JSONObject(com.github.openjson.JSONObject) GroupUser(org.apache.openmeetings.db.entity.user.GroupUser) Form(javax.ws.rs.core.Form) JSONArray(com.github.openjson.JSONArray) AppointmentDTO(org.apache.openmeetings.db.dto.calendar.AppointmentDTO) GroupDao(org.apache.openmeetings.db.dao.user.GroupDao) Test(org.junit.Test)

Example 10 with JSONArray

use of com.github.openjson.JSONArray in project openmeetings by apache.

the class AppointmentParamConverter method fromString.

@Override
public AppointmentDTO fromString(String val) {
    JSONObject o = new JSONObject(val);
    if (o.has(ROOT)) {
        o = o.getJSONObject(ROOT);
    }
    AppointmentDTO a = new AppointmentDTO();
    a.setId(optLong(o, "id"));
    a.setTitle(o.optString("title"));
    a.setLocation(o.optString("location"));
    a.setOwner(UserDTO.get(o.optJSONObject("owner")));
    String tzId = a.getOwner() == null ? null : a.getOwner().getTimeZoneId();
    a.setStart(CalendarParamConverter.get(o.optString("start"), tzId));
    a.setEnd(CalendarParamConverter.get(o.optString("end"), tzId));
    a.setDescription(o.optString("description"));
    a.setInserted(DateParamConverter.get(o.optString("inserted")));
    a.setUpdated(DateParamConverter.get(o.optString("updated")));
    a.setDeleted(o.optBoolean("deleted"));
    a.setReminder(optEnum(Reminder.class, o, "reminder"));
    a.setRoom(RoomDTO.get(o.optJSONObject("room")));
    a.setIcalId(o.optString("icalId"));
    JSONArray mm = o.optJSONArray("meetingMembers");
    if (mm != null) {
        for (int i = 0; i < mm.length(); ++i) {
            a.getMeetingMembers().add(MeetingMemberDTO.get(mm.getJSONObject(i)));
        }
    }
    a.setLanguageId(o.optLong("languageId"));
    a.setPassword(o.optString("password"));
    a.setPasswordProtected(o.optBoolean("passwordProtected"));
    a.setConnectedEvent(o.optBoolean("connectedEvent"));
    a.setReminderEmailSend(o.optBoolean("reminderEmailSend"));
    return a;
}
Also used : Reminder(org.apache.openmeetings.db.entity.calendar.Appointment.Reminder) JSONObject(com.github.openjson.JSONObject) AppointmentDTO(org.apache.openmeetings.db.dto.calendar.AppointmentDTO) JSONArray(com.github.openjson.JSONArray)

Aggregations

JSONArray (com.github.openjson.JSONArray)35 JSONObject (com.github.openjson.JSONObject)30 Test (org.junit.jupiter.api.Test)11 List (java.util.List)5 AppointmentDTO (org.apache.openmeetings.db.dto.calendar.AppointmentDTO)5 ArrayList (java.util.ArrayList)4 Whiteboard (org.apache.openmeetings.db.dto.room.Whiteboard)4 Form (javax.ws.rs.core.Form)3 Response (javax.ws.rs.core.Response)3 JSONException (com.github.openjson.JSONException)2 BufferedImage (java.awt.image.BufferedImage)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 Map (java.util.Map)2 Entry (java.util.Map.Entry)2 Client (org.apache.openmeetings.db.entity.basic.Client)2 Room (org.apache.openmeetings.db.entity.room.Room)2 RoomElement (org.apache.openmeetings.db.entity.room.Room.RoomElement)2 NullStringer (org.apache.openmeetings.util.NullStringer)2 PDDocument (org.apache.pdfbox.pdmodel.PDDocument)2