List of usage examples for io.vertx.core.eventbus Message body
@CacheReturn T body();
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void sendNotify(final HttpServerRequest request, final String resource, final UserInfos user, final List<String> recipients, final boolean isFolder) { final JsonObject params = new JsonObject() .put("uri", "/userbook/annuaire#" + user.getUserId() + "#" + user.getType()) .put("username", user.getUsername()).put("appPrefix", pathPrefix + "/workspace") .put("doc", "share"); final JsonObject pushNotif = new JsonObject(); final String i18nPushNotifBody; if (isFolder) { params.put("resourceUri", pathPrefix + "/workspace#/shared/folder/" + resource); pushNotif.put("title", "push.notif.folder.share"); i18nPushNotifBody = user.getUsername() + " " + I18n.getInstance().translate("workspace.shared.folder", getHost(request), I18n.acceptLanguage(request)) + " : "; } else {/*from www . j av a 2 s. co m*/ params.put("resourceUri", pathPrefix + "/document/" + resource); pushNotif.put("title", "push.notif.file.share"); i18nPushNotifBody = user.getUsername() + " " + I18n.getInstance().translate("workspace.shared.document", getHost(request), I18n.acceptLanguage(request)) + " : "; } final String notificationName = WORKSPACE_NAME.toLowerCase() + "." + (isFolder ? "share-folder" : "share"); mongo.findOne(DocumentDao.DOCUMENTS_COLLECTION, new JsonObject().put("_id", resource), new JsonObject().put("name", 1), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { if ("ok".equals(event.body().getString("status")) && event.body().getJsonObject("result") != null) { String resourceName = event.body().getJsonObject("result").getString("name", ""); params.put("resourceName", resourceName); params.put("pushNotif", pushNotif.put("body", i18nPushNotifBody + resourceName)); notification.notifyTimeline(request, notificationName, user, recipients, resource, params); } else { log.error( "Unable to send timeline notification : missing name on resource " + resource); } } }); }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void add(final HttpServerRequest request, final String mongoCollection, final JsonObject doc, long allowedSize) { storage.writeUploadFile(request, allowedSize, new Handler<JsonObject>() { @Override//from w ww . j av a 2s.co m public void handle(final JsonObject uploaded) { if ("ok".equals(uploaded.getString("status"))) { compressImage(uploaded, request.params().get("quality"), new Handler<Integer>() { @Override public void handle(Integer size) { JsonObject meta = uploaded.getJsonObject("metadata"); if (size != null && meta != null) { meta.put("size", size); } addAfterUpload(uploaded, doc, request.params().get("name"), request.params().get("application"), request.params().getAll("thumbnail"), mongoCollection, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> res) { if ("ok".equals(res.body().getString("status"))) { renderJson(request, res.body(), 201); } else { renderError(request, res.body()); } } }); } }); } else { badRequest(request, uploaded.getString("message")); } } }); }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void addAfterUpload(final JsonObject uploaded, final JsonObject doc, String name, String application, final List<String> thumbs, final String mongoCollection, final Handler<Message<JsonObject>> handler) { doc.put("name", getOrElse(name, uploaded.getJsonObject("metadata").getString("filename"), false)); doc.put("metadata", uploaded.getJsonObject("metadata")); doc.put("file", uploaded.getString("_id")); doc.put("application", getOrElse(application, WORKSPACE_NAME)); // TODO check if application name is valid log.debug(doc.encodePrettily());// w w w . j ava 2 s .co m mongo.save(mongoCollection, doc, new Handler<Message<JsonObject>>() { @Override public void handle(final Message<JsonObject> res) { if ("ok".equals(res.body().getString("status"))) { incrementStorage(doc); createRevision(res.body().getString("_id"), uploaded.getString("_id"), doc.getString("name"), doc.getString("owner"), doc.getString("owner"), doc.getString("ownerName"), doc.getJsonObject("metadata")); createThumbnailIfNeeded(mongoCollection, uploaded, res.body().getString("_id"), null, thumbs, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { if (handler != null) { handler.handle(res); } } }); } else if (handler != null) { handler.handle(res); } } }); }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void createThumbnails(List<String> thumbs, JsonObject srcFile, final String collection, final String documentId, final Handler<Message<JsonObject>> callback) { Pattern size = Pattern.compile("([0-9]+)x([0-9]+)"); JsonArray outputs = new fr.wseduc.webutils.collections.JsonArray(); for (String thumb : thumbs) { Matcher m = size.matcher(thumb); if (m.matches()) { try { int width = Integer.parseInt(m.group(1)); int height = Integer.parseInt(m.group(2)); if (width == 0 && height == 0) continue; JsonObject j = new JsonObject().put("dest", storage.getProtocol() + "://" + storage.getBucket()); if (width != 0) { j.put("width", width); }/*from w w w . ja va 2 s . c o m*/ if (height != 0) { j.put("height", height); } outputs.add(j); } catch (NumberFormatException e) { log.error("Invalid thumbnail size.", e); } } } if (outputs.size() > 0) { JsonObject json = new JsonObject().put("action", "resizeMultiple") .put("src", storage.getProtocol() + "://" + storage.getBucket() + ":" + srcFile.getString("_id")) .put("destinations", outputs); eb.send(imageResizerAddress, json, handlerToAsyncHandler(new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { JsonObject thumbnails = event.body().getJsonObject("outputs"); if ("ok".equals(event.body().getString("status")) && thumbnails != null) { mongo.update(collection, new JsonObject().put("_id", documentId), new JsonObject().put("$set", new JsonObject().put("thumbnails", thumbnails)), callback); } } })); } else if (callback != null) { callback.handle(null); } }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void compressImage(JsonObject srcFile, String quality, final Handler<Integer> handler) { if (!isImage(srcFile)) { handler.handle(null);//from w w w . j ava 2s.c o m return; } float q; if (quality != null) { try { q = Float.parseFloat(quality); } catch (NumberFormatException e) { log.warn(e.getMessage(), e); q = 0.8f; } } else { q = 0.8f; } JsonObject json = new JsonObject().put("action", "compress").put("quality", q) .put("src", storage.getProtocol() + "://" + storage.getBucket() + ":" + srcFile.getString("_id")) .put("dest", storage.getProtocol() + "://" + storage.getBucket() + ":" + srcFile.getString("_id")); eb.send(imageResizerAddress, json, handlerToAsyncHandler(new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { Integer size = event.body().getInteger("size"); handler.handle(size); } })); }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
@Put("/document/:id") @SecuredAction(value = "workspace.contrib", type = ActionType.RESOURCE) public void updateDocument(final HttpServerRequest request) { final String documentId = request.params().get("id"); UserUtils.getUserInfos(eb, request, new Handler<UserInfos>() { @Override//w w w .j av a 2s. c o m public void handle(final UserInfos user) { if (user != null) { request.pause(); documentDao.findById(documentId, new Handler<JsonObject>() { public void handle(JsonObject event) { if (!"ok".equals(event.getString("status"))) { notFound(request); return; } final String userId = event.getJsonObject("result").getString("owner"); emptySize(userId, new Handler<Long>() { @Override public void handle(Long emptySize) { request.resume(); storage.writeUploadFile(request, emptySize, new Handler<JsonObject>() { @Override public void handle(final JsonObject uploaded) { if ("ok".equals(uploaded.getString("status"))) { compressImage(uploaded, request.params().get("quality"), new Handler<Integer>() { @Override public void handle(Integer size) { JsonObject meta = uploaded .getJsonObject("metadata"); if (size != null && meta != null) { meta.put("size", size); } updateAfterUpload(documentId, request.params().get("name"), uploaded, request.params().getAll("thumbnail"), user, new Handler<Message<JsonObject>>() { @Override public void handle( Message<JsonObject> res) { if (res == null) { request.response() .setStatusCode(404) .end(); } else if ("ok".equals(res.body() .getString("status"))) { renderJson(request, res.body()); } else { renderError(request, res.body()); } } }); } }); } else { badRequest(request, uploaded.getString("message")); } } }); } }); } }); } } }); }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void updateAfterUpload(final String id, final String name, final JsonObject uploaded, final List<String> t, final UserInfos user, final Handler<Message<JsonObject>> handler) { documentDao.findById(id, new Handler<JsonObject>() { @Override//from w w w. j ava 2s .c om public void handle(final JsonObject old) { if ("ok".equals(old.getString("status"))) { final JsonObject metadata = uploaded.getJsonObject("metadata"); JsonObject set = new JsonObject(); final JsonObject doc = new JsonObject(); doc.put("name", getOrElse(name, metadata.getString("filename"))); final String now = MongoDb.formatDate(new Date()); doc.put("modified", now); doc.put("metadata", metadata); doc.put("file", uploaded.getString("_id")); final JsonObject thumbs = old.getJsonObject("result", new JsonObject()) .getJsonObject("thumbnails"); String query = "{ \"_id\": \"" + id + "\"}"; set.put("$set", doc).put("$unset", new JsonObject().put("thumbnails", "")); mongo.update(DocumentDao.DOCUMENTS_COLLECTION, new JsonObject(query), set, new Handler<Message<JsonObject>>() { @Override public void handle(final Message<JsonObject> res) { String status = res.body().getString("status"); JsonObject result = old.getJsonObject("result"); if ("ok".equals(status) && result != null) { String userId = user != null ? user.getUserId() : result.getString("owner"); String userName = user != null ? user.getUsername() : result.getString("ownerName"); doc.put("owner", result.getString("owner")); incrementStorage(doc); createRevision(id, doc.getString("file"), doc.getString("name"), result.getString("owner"), userId, userName, metadata); createThumbnailIfNeeded(DocumentDao.DOCUMENTS_COLLECTION, uploaded, id, thumbs, t, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { if (handler != null) { handler.handle(res); } } }); } else if (handler != null) { handler.handle(res); } } }); } else if (handler != null) { handler.handle(null); } } }); }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void copyFiles(final HttpServerRequest request, final String collection, final String owner, final UserInfos user) { String ids = request.params().get("ids"); // TODO refactor with json in request body String folder2 = getOrElse(request.params().get("folder"), ""); try {/*w w w .ja v a 2 s . c o m*/ folder2 = URLDecoder.decode(folder2, "UTF-8"); } catch (UnsupportedEncodingException e) { log.warn(e.getMessage(), e); } final String folder = folder2; if (ids != null && !ids.trim().isEmpty()) { JsonArray idsArray = new fr.wseduc.webutils.collections.JsonArray(Arrays.asList(ids.split(","))); String criteria = "{ \"_id\" : { \"$in\" : " + idsArray.encode() + "}"; if (owner != null) { criteria += ", \"to\" : \"" + owner + "\""; } criteria += "}"; mongo.find(collection, new JsonObject(criteria), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> r) { JsonObject src = r.body(); if ("ok".equals(src.getString("status")) && src.getJsonArray("results") != null) { final JsonArray origs = src.getJsonArray("results"); final JsonArray insert = new fr.wseduc.webutils.collections.JsonArray(); final AtomicInteger number = new AtomicInteger(origs.size()); emptySize(user, new Handler<Long>() { @Override public void handle(Long emptySize) { long size = 0; for (Object o : origs) { if (!(o instanceof JsonObject)) continue; JsonObject metadata = ((JsonObject) o).getJsonObject("metadata"); if (metadata != null) { size += metadata.getLong("size", 0l); } } if (size > emptySize) { badRequest(request, "files.too.large"); return; } for (Object o : origs) { JsonObject orig = (JsonObject) o; final JsonObject dest = orig.copy(); String now = MongoDb.formatDate(new Date()); dest.remove("_id"); dest.remove("protected"); dest.remove("comments"); dest.put("application", WORKSPACE_NAME); if (owner != null) { dest.put("owner", owner); dest.put("ownerName", dest.getString("toName")); dest.remove("to"); dest.remove("from"); dest.remove("toName"); dest.remove("fromName"); } else if (user != null) { dest.put("owner", user.getUserId()); dest.put("ownerName", user.getUsername()); dest.put("shared", new fr.wseduc.webutils.collections.JsonArray()); } dest.put("_id", UUID.randomUUID().toString()); dest.put("created", now); dest.put("modified", now); if (folder != null && !folder.trim().isEmpty()) { dest.put("folder", folder); } else { dest.remove("folder"); } insert.add(dest); final String filePath = orig.getString("file"); if ((owner != null || user != null) && folder != null && !folder.trim().isEmpty()) { //If the document has a new parent folder, replicate sharing rights String parentName, parentFolder; if (folder.lastIndexOf('_') < 0) { parentName = folder; parentFolder = folder; } else if (filePath != null) { String[] splittedPath = folder.split("_"); parentName = splittedPath[splittedPath.length - 1]; parentFolder = folder; } else { String[] splittedPath = folder.split("_"); parentName = splittedPath[splittedPath.length - 2]; parentFolder = folder.substring(0, folder.lastIndexOf("_")); } folderService.getParentRights(parentName, parentFolder, owner, new Handler<Either<String, JsonArray>>() { public void handle(Either<String, JsonArray> event) { final JsonArray parentSharedRights = event.right() == null || event.isLeft() ? null : event.right().getValue(); if (parentSharedRights != null && parentSharedRights.size() > 0) dest.put("shared", parentSharedRights); if (filePath != null) { storage.copyFile(filePath, new Handler<JsonObject>() { @Override public void handle(JsonObject event) { if (event != null && "ok" .equals(event.getString("status"))) { dest.put("file", event.getString("_id")); persist(insert, number.decrementAndGet()); } } }); } else { persist(insert, number.decrementAndGet()); } } }); } else if (filePath != null) { storage.copyFile(filePath, new Handler<JsonObject>() { @Override public void handle(JsonObject event) { if (event != null && "ok".equals(event.getString("status"))) { dest.put("file", event.getString("_id")); persist(insert, number.decrementAndGet()); } } }); } else { persist(insert, number.decrementAndGet()); } } } }); } else { renderJson(request, src, 404); } } private void persist(final JsonArray insert, int remains) { if (remains == 0) { mongo.insert(DocumentDao.DOCUMENTS_COLLECTION, insert, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> inserted) { if ("ok".equals(inserted.body().getString("status"))) { incrementStorage(insert); for (Object obj : insert) { JsonObject json = (JsonObject) obj; createRevision(json.getString("_id"), json.getString("file"), json.getString("name"), json.getString("owner"), json.getString("owner"), json.getString("ownerName"), json.getJsonObject("metadata")); } renderJson(request, inserted.body()); } else { renderError(request, inserted.body()); } } }); } } }); } else { badRequest(request); } }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
@Get("/folders") @SecuredAction("workspace.document.list.folders") public void listFolders(final HttpServerRequest request) { UserUtils.getUserInfos(eb, request, new Handler<UserInfos>() { @Override/*from ww w . j a va 2 s . c o m*/ public void handle(UserInfos user) { if (user != null && user.getUserId() != null) { final String hierarchical = request.params().get("hierarchical"); String relativePath2; try { relativePath2 = URLDecoder.decode(request.params().get("folder"), "UTF-8"); } catch (UnsupportedEncodingException | NullPointerException e) { relativePath2 = request.params().get("folder"); } final String relativePath = relativePath2; String filter = request.params().get("filter"); String query = "{ "; if ("owner".equals(filter)) { query += "\"owner\": \"" + user.getUserId() + "\""; } else if ("shared".equals(filter)) { query += "\"shared\" : { \"$elemMatch\" : " + orSharedElementMatch(user) + "}"; } else { query += "\"$or\" : [{ \"owner\": \"" + user.getUserId() + "\"}, {\"shared\" : { \"$elemMatch\" : " + orSharedElementMatch(user) + "}}]"; } if (relativePath != null) { query += ", \"folder\" : { \"$regex\" : \"^" + relativePath + "(_|$)\" }}"; } else { query += "}"; } mongo.distinct(DocumentDao.DOCUMENTS_COLLECTION, "folder", new JsonObject(query), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> res) { if ("ok".equals(res.body().getString("status"))) { JsonArray values = res.body().getJsonArray("values", new fr.wseduc.webutils.collections.JsonArray("[]")); JsonArray out = values; if (hierarchical != null) { Set<String> folders = new HashSet<String>(); for (Object value : values) { String v = (String) value; if (relativePath != null) { if (v != null && v.contains("_") && v.indexOf("_", relativePath.length() + 1) != -1 && v.substring( v.indexOf("_", relativePath.length() + 1)) .contains("_")) { folders.add(v.substring(0, v.indexOf("_", relativePath.length() + 1))); } else { folders.add(v); } } else { if (v != null && v.contains("_")) { folders.add(v.substring(0, v.indexOf("_"))); } else { folders.add(v); } } } out = new fr.wseduc.webutils.collections.JsonArray( new ArrayList<>(folders)); } renderJson(request, out); } else { renderJson(request, new fr.wseduc.webutils.collections.JsonArray()); } } }); } else { unauthorized(request); } } }); }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void notifyComment(final HttpServerRequest request, final String id, final UserInfos user, final boolean isFolder) { final JsonObject params = new JsonObject() .put("userUri", "/userbook/annuaire#" + user.getUserId() + "#" + user.getType()) .put("userName", user.getUsername()).put("appPrefix", pathPrefix + "/workspace"); final String notifyName = WORKSPACE_NAME.toLowerCase() + "." + (isFolder ? "comment-folder" : "comment"); //Retrieve the document from DB mongo.findOne(DocumentDao.DOCUMENTS_COLLECTION, new JsonObject().put("_id", id), new Handler<Message<JsonObject>>() { @Override//from w w w . j av a 2 s . com public void handle(Message<JsonObject> event) { if ("ok".equals(event.body().getString("status")) && event.body().getJsonObject("result") != null) { final JsonObject document = event.body().getJsonObject("result"); params.put("resourceName", document.getString("name", "")); //Handle the parent folder id (null if document is at root level) final Handler<String> folderIdHandler = new Handler<String>() { public void handle(final String folderId) { //Send the notification to the shared network Handler<List<String>> shareNotificationHandler = new Handler<List<String>>() { public void handle(List<String> recipients) { JsonObject sharedNotifParams = params.copy(); if (folderId != null) { sharedNotifParams.put("resourceUri", pathPrefix + "/workspace#/shared/folder/" + folderId); } else { sharedNotifParams.put("resourceUri", pathPrefix + "/workspace#/shared"); } // don't send comment with share uri at owner final String o = document.getString("owner"); if (o != null && recipients.contains(o)) { recipients.remove(o); } notification.notifyTimeline(request, notifyName, user, recipients, id, sharedNotifParams); } }; //'Flatten' the share users & group into a user id list (excluding the current user) flattenShareIds( document.getJsonArray("shared", new fr.wseduc.webutils.collections.JsonArray()), user, shareNotificationHandler); //If the user commenting is not the owner, send a notification to the owner if (!document.getString("owner").equals(user.getUserId())) { JsonObject ownerNotif = params.copy(); ArrayList<String> ownerList = new ArrayList<>(); ownerList.add(document.getString("owner")); if (folderId != null) { ownerNotif.put("resourceUri", pathPrefix + "/workspace#/folder/" + folderId); } else { ownerNotif.put("resourceUri", pathPrefix + "/workspace"); } notification.notifyTimeline(request, notifyName, user, ownerList, id, null, ownerNotif, true); } } }; //Handle the parent folder result from DB Handler<Message<JsonObject>> folderHandler = new Handler<Message<JsonObject>>() { public void handle(Message<JsonObject> event) { if (!"ok".equals(event.body().getString("status")) || event.body().getJsonObject("result") == null) { log.error( "Unable to send timeline notification : invalid parent folder on resource " + id); return; } final JsonObject folder = event.body().getJsonObject("result"); final String folderId = folder.getString("_id"); folderIdHandler.handle(folderId); } }; //If the document does not have a parent folder if (!isFolder && !document.containsKey("folder") || isFolder && document.getString("folder").equals(document.getString("name"))) { folderIdHandler.handle(null); } else { //If the document has a parent folder String parentFolderPath = document.getString("folder"); if (isFolder) { parentFolderPath = parentFolderPath.substring(0, parentFolderPath.lastIndexOf("_")); } QueryBuilder query = QueryBuilder.start("folder").is(parentFolderPath).and("file") .exists(false).and("owner").is(document.getString("owner")); //Retrieve the parent folder from DB mongo.findOne(DocumentDao.DOCUMENTS_COLLECTION, MongoQueryBuilder.build(query), folderHandler); } } else { log.error("Unable to send timeline notification : missing name on resource " + id); } } }); }