List of usage examples for io.vertx.core.json JsonArray add
public JsonArray add(Object value)
From source file:org.entcore.workspace.service.impl.WorkspaceRepositoryEvents.java
License:Open Source License
@Override public void deleteGroups(JsonArray groups) { for (Object o : groups) { if (!(o instanceof JsonObject)) continue; final JsonObject j = (JsonObject) o; final JsonObject query = MongoQueryBuilder .build(QueryBuilder.start("shared.groupId").is(j.getString("group"))); final Handler<Message<JsonObject>> handler = new Handler<Message<JsonObject>>() { @Override//from w w w.j av a 2s. co m public void handle(Message<JsonObject> event) { if (!"ok".equals(event.body().getString("status"))) { log.error("Error updating documents with group " + j.getString("group") + " : " + event.body().encode()); } else { log.info("Documents with group " + j.getString("group") + " updated : " + event.body().getInteger("number")); } } }; if (shareOldGroupsToUsers) { JsonArray userShare = new fr.wseduc.webutils.collections.JsonArray(); for (Object u : j.getJsonArray("users")) { JsonObject share = new JsonObject().put("userId", u.toString()) .put("org-entcore-workspace-service-WorkspaceService|copyDocuments", true) .put("org-entcore-workspace-service-WorkspaceService|getDocument", true); userShare.add(share); } JsonObject update = new JsonObject().put("$addToSet", new JsonObject().put("shared", new JsonObject().put("$each", userShare))); mongo.update(DocumentDao.DOCUMENTS_COLLECTION, query, update, false, true, handler); } else { final MongoUpdateBuilder update = new MongoUpdateBuilder() .pull("shared", new JsonObject().put("groupId", j.getString("group"))) .addToSet("old_shared", new JsonObject().put("groupId", j.getString("group"))); mongo.update(DocumentDao.DOCUMENTS_COLLECTION, query, update.build(), false, true, handler); } } }
From source file:org.entcore.workspace.service.impl.WorkspaceRepositoryEvents.java
License:Open Source License
private void deleteFiles(final JsonObject query, final String collection) { mongo.find(collection, query, null, new JsonObject().put("file", 1), new Handler<Message<JsonObject>>() { @Override// w ww.j av a 2s . c o m public void handle(Message<JsonObject> res) { String status = res.body().getString("status"); JsonArray results = res.body().getJsonArray("results"); if ("ok".equals(status) && results != null && results.size() > 0) { JsonArray fileIds = new fr.wseduc.webutils.collections.JsonArray(); for (Object o : results) { if (o instanceof JsonObject) { fileIds.add(((JsonObject) o).getString("file")); } } storage.removeFiles(fileIds, new Handler<JsonObject>() { @Override public void handle(JsonObject event) { if (event == null) { log.error("Error deleting files "); } else if (!"ok".equals(event.getString("status"))) { log.error("Error deleting files : " + event.encode()); } } }); mongo.delete(collection, query, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { if (!"ok".equals(event.body().getString("status"))) { log.error("Error deleting documents : " + event.body().encode()); } else { log.info("Documents deleted : " + event.body().getInteger("number")); } } }); } } }); }
From source file:org.entcore.workspace.service.impl.WorkspaceSearchingEvents.java
License:Open Source License
@SuppressWarnings("unchecked") private JsonArray formatSearchResult(final JsonArray results, final JsonArray columnsHeader, final List<String> words, final String locale, final String userId, final Map<String, Map<String, String>> mapOwnerMapNameFolderId) { final List<String> aHeader = columnsHeader.getList(); final JsonArray traity = new fr.wseduc.webutils.collections.JsonArray(); for (int i = 0; i < results.size(); i++) { final JsonObject j = results.getJsonObject(i); final JsonObject jr = new JsonObject(); if (j != null) { final String folder = j.getString("folder", ""); Date modified = new Date(); try { modified = DateUtils.parse(j.getString("modified"), PATTERN); } catch (ParseException e) { log.error("Can't parse date from modified", e); }/*from www. j ava 2 s . c o m*/ final String owner = j.getString("owner", ""); final Map<String, Object> map = formatDescription( j.getJsonArray("comments", new fr.wseduc.webutils.collections.JsonArray()), words, modified, locale); jr.put(aHeader.get(0), j.getString("name")); jr.put(aHeader.get(1), map.get("description").toString()); jr.put(aHeader.get(2), new JsonObject().put("$date", ((Date) map.get("modified")).getTime())); jr.put(aHeader.get(3), j.getString("ownerName", "")); jr.put(aHeader.get(4), owner); //default front route (no folder and the file belongs to the owner) String resourceURI = "/workspace/workspace"; if (userId.equals(owner)) { if (!StringUtils.isEmpty(folder)) { resourceURI += "#/folder/" + mapOwnerMapNameFolderId.get(owner).get(folder); } } else { //if there is a folder on entry file and this folder is shared if (!StringUtils.isEmpty(folder) && mapOwnerMapNameFolderId.containsKey(owner) && mapOwnerMapNameFolderId.get(owner).containsKey(folder)) { resourceURI += "#/shared/folder/" + mapOwnerMapNameFolderId.get(owner).get(folder); } else { //only the file is shared resourceURI += "#/shared"; } } jr.put(aHeader.get(5), resourceURI); traity.add(jr); } } return traity; }
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 www.j a v a2 s . com*/ 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 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 {//from w w w.j a v a 2s .co 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
private void deleteAllRevisions(final String documentId, final JsonArray alreadyDeleted) { final QueryBuilder builder = QueryBuilder.start("documentId").is(documentId); JsonObject keys = new JsonObject(); mongo.find(DOCUMENT_REVISION_COLLECTION, MongoQueryBuilder.build(builder), new JsonObject(), keys, MongoDbResult.validResultsHandler(new Handler<Either<String, JsonArray>>() { public void handle(Either<String, JsonArray> event) { if (event.isRight()) { final JsonArray results = event.right().getValue(); final JsonArray ids = new fr.wseduc.webutils.collections.JsonArray(); for (Object obj : results) { JsonObject json = (JsonObject) obj; String id = json.getString("file"); if (id != null && !alreadyDeleted.contains(id)) { ids.add(id); }//w w w. j ava2 s .co m } storage.removeFiles(ids, new Handler<JsonObject>() { public void handle(JsonObject event) { if (event != null && "ok".equals(event.getString("status"))) { //Delete revisions mongo.delete(DOCUMENT_REVISION_COLLECTION, MongoQueryBuilder.build(builder), MongoDbResult.validResultHandler( new Handler<Either<String, JsonObject>>() { public void handle(Either<String, JsonObject> event) { if (event.isLeft()) { log.error( "[Workspace] Error deleting revisions for document " + documentId + " - " + event.left().getValue()); } else { for (Object obj : results) { JsonObject result = (JsonObject) obj; if (!alreadyDeleted .contains(result.getString("file"))) decrementStorage(result); } } } })); } else { log.error("[Workspace] Error deleting revision storage files for document " + documentId + " " + ids + " - " + event.getString("message")); } } }); } else { log.error("[Workspace] Error finding revision for document " + documentId + " - " + event.left().getValue()); } } })); }
From source file:org.etourdot.vertx.marklogic.impl.MarkLogicDocumentImpl.java
License:Open Source License
void readDocuments(JsonArray docIds, List<String> categories, Handler<AsyncResult<JsonArray>> resultHandler) { MultiPartRequest marklogicRequest = restService.newMultipartRequest(); marklogicRequest.get(DOCUMENTS_URL).addParam(FORMAT, "json").addParams(CATEGORY, categories); docIds.stream().forEach(docId -> marklogicRequest.addParam(MarkLogicConstants.URI, (String) docId)); marklogicRequest.execute(response -> { SearchResponse searchResponse = new SearchResponse(response); searchResponse.endHandler(marklogicResponse -> { if (HttpResponseStatus.OK.code() == marklogicResponse.statusCode()) { JsonArray documents = new JsonArray(); for (Document document : ((SearchResponse) marklogicResponse).getDocuments()) { documents.add(document.toJson()); }/*from w w w . j ava2 s . c o m*/ resultHandler.handle(Future.succeededFuture(documents)); } if (HttpResponseStatus.NOT_FOUND.code() == marklogicResponse.statusCode()) { resultHandler.handle( Future.failedFuture(new ResourceNotFoundException(marklogicResponse.statusMessage()))); } resultHandler.handle(Future.succeededFuture()); }); searchResponse.process(); }); }
From source file:org.etourdot.vertx.marklogic.impl.MarkLogicDocumentImpl.java
License:Open Source License
void saveDocuments(Documents documents, TransformOptions transformOptions, Handler<AsyncResult<JsonArray>> resultHandler) { logger.debug("Start saveDocuments " + this); MultiPartRequest marklogicRequest = restService.newMultipartRequest(); marklogicRequest.post(DOCUMENTS_URL); documents.getDocumentsList().stream().forEach(marklogicRequest::addDocument); if (transformOptions != null) { marklogicRequest.addParam(TRANSFORM, transformOptions.getName()); if (transformOptions.hasParameters()) { for (Map.Entry<String, Object> param : transformOptions.getParameters().getMap().entrySet()) { marklogicRequest.addParam("trans:" + param.getKey(), (String) param.getValue()); }//ww w.j a v a 2 s .c o m } } logger.debug("saveDocuments request:" + marklogicRequest); marklogicRequest.execute(response -> { BulkResponse bulkResponse = new BulkResponse(response); bulkResponse.endHandler(marklogicResponse -> { logger.debug("saveDocuments request endhandler:" + marklogicRequest); if (HttpResponseStatus.OK.code() == marklogicResponse.statusCode()) { JsonArray resultDocs = new JsonArray(); for (Document document : ((BulkResponse) marklogicResponse).getDocuments()) { resultDocs.add(document.getUri()); } resultHandler.handle(Future.succeededFuture(resultDocs)); } }); bulkResponse.process(); }); }
From source file:org.etourdot.vertx.marklogic.impl.MarkLogicSearchImpl.java
License:Open Source License
void searchDocuments(SearchOptions searchOptions, Handler<AsyncResult<JsonArray>> resultHandler) { requireNonNull(searchOptions, "searchOptions cannot be null"); requireNonNull(resultHandler, "resultHandler cannot be null"); doSeachDocPage(searchOptions, marklogicResponse -> { JsonArray documents = new JsonArray(); if (HttpResponseStatus.OK.code() == marklogicResponse.statusCode()) { for (Document document : ((MultiPartResponse) marklogicResponse).getDocuments()) { documents.add(document.toJson()); }// www . ja va2 s . co m resultHandler.handle(Future.succeededFuture(documents)); } if (HttpResponseStatus.NOT_FOUND.code() == marklogicResponse.statusCode()) { resultHandler.handle( Future.failedFuture(new ResourceNotFoundException(marklogicResponse.statusMessage()))); } resultHandler.handle(Future.succeededFuture()); }); }
From source file:org.etourdot.vertx.marklogic.model.options.DatabasesOptions.java
License:Open Source License
/** * Range element indexes/*from www. j av a 2s.co m*/ */ public DatabasesOptions addRangeElementIndex(RangeElementIndex index) { if (operation == null) { operation = new JsonObject(); } JsonArray indexes = operation.getJsonArray("range-element-indexes"); if (indexes == null) { indexes = new JsonArray(); } indexes.add(index.toJson()); return this; }