List of usage examples for io.vertx.core.json JsonArray getJsonObject
public JsonObject getJsonObject(int pos)
From source file:org.entcore.workspace.security.WorkspaceResourcesProvider.java
License:Open Source License
private void isAdminFromUsers(HttpServerRequest request, UserInfos user, final Handler<Boolean> handler) { final UserInfos.Function adminLocal = getFunction(user, handler); if (adminLocal == null) return;/*from ww w.ja v a 2 s.com*/ RequestUtils.bodyToJson(request, new Handler<JsonObject>() { @Override public void handle(JsonObject object) { String query = "MATCH (s:Structure)<-[:DEPENDS]-(:ProfileGroup)<-[:IN]-(u:User) " + "WHERE s.id IN {structures} AND u.id IN {users} " + "RETURN count(distinct u) as nb "; final JsonArray users = object.getJsonArray("users", new fr.wseduc.webutils.collections.JsonArray()); JsonObject params = new JsonObject() .put("structures", new fr.wseduc.webutils.collections.JsonArray(adminLocal.getScope())) .put("users", users); Neo4j.getInstance().execute(query, params, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> message) { JsonArray res = message.body().getJsonArray("result"); handler.handle( "ok".equals(message.body().getString("status")) && res != null && res.size() == 1 && res.getJsonObject(0).getInteger("nb", -1).equals(users.size())); } }); } }); }
From source file:org.entcore.workspace.service.impl.WorkspaceRepositoryEvents.java
License:Open Source License
@Override public void exportResources(final String exportId, final String userId, JsonArray g, final String exportPath, final String locale, String host, final Handler<Boolean> handler) { log.debug("Workspace export resources."); List<DBObject> groups = new ArrayList<>(); groups.add(QueryBuilder.start("userId").is(userId).get()); for (Object o : g) { if (!(o instanceof String)) continue; String gpId = (String) o; groups.add(QueryBuilder.start("groupId").is(gpId).get()); }//from w w w. j av a 2 s . co m QueryBuilder b = new QueryBuilder().or(QueryBuilder.start("owner").is(userId).get(), QueryBuilder.start("shared") .elemMatch(new QueryBuilder().or(groups.toArray(new DBObject[groups.size()])).get()).get(), QueryBuilder.start("old_shared") .elemMatch(new QueryBuilder().or(groups.toArray(new DBObject[groups.size()])).get()).get()) .put("file").exists(true); final JsonObject keys = new JsonObject().put("file", 1).put("name", 1); final JsonObject query = MongoQueryBuilder.build(b); mongo.find(DocumentDao.DOCUMENTS_COLLECTION, query, null, keys, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { final AtomicBoolean exported = new AtomicBoolean(false); final JsonArray documents = event.body().getJsonArray("results"); if ("ok".equals(event.body().getString("status")) && documents != null) { QueryBuilder b = QueryBuilder.start("to").is(userId).put("file").exists(true); final JsonObject q = MongoQueryBuilder.build(b); mongo.find(RackDao.RACKS_COLLECTION, q, null, keys, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { JsonArray racks = event.body().getJsonArray("results"); if ("ok".equals(event.body().getString("status")) && racks != null) { final Set<String> usedFileName = new HashSet<>(); final JsonObject alias = new JsonObject(); final String[] ids = new String[racks.size() + documents.size()]; for (int i = 0; i < documents.size(); i++) { JsonObject j = documents.getJsonObject(i); ids[i] = j.getString("file"); String fileName = j.getString("name"); if (fileName != null && fileName.contains("/")) { fileName = fileName.replaceAll("/", "-"); } if (usedFileName.add(fileName)) { alias.put(ids[i], fileName); } else { alias.put(ids[i], ids[i] + "_" + fileName); } } for (int i = 0; i < racks.size(); i++) { JsonObject j = racks.getJsonObject(i); ids[i] = j.getString("file"); String fileName = j.getString("name"); if (fileName != null && fileName.contains("/")) { fileName = fileName.replaceAll("/", "-"); } if (usedFileName.add(fileName)) { alias.put(ids[i], fileName); } else { alias.put(ids[i], ids[i] + "_" + fileName); } } exportFiles(alias, ids, exportPath, locale, exported, handler); } else { log.error("Rack " + q.encode() + " - " + event.body().getString("message")); handler.handle(exported.get()); } } }); } else { log.error("Documents " + query.encode() + " - " + event.body().getString("message")); handler.handle(exported.get()); } } }); }
From source file:org.entcore.workspace.service.impl.WorkspaceRepositoryEvents.java
License:Open Source License
@Override public void deleteUsers(JsonArray users) { String[] userIds = new String[users.size()]; for (int i = 0; i < users.size(); i++) { JsonObject j = users.getJsonObject(i); String id = j.getString("id"); userIds[i] = id;/*from w w w .j av a 2 s . c o m*/ } final JsonObject queryDocuments = MongoQueryBuilder.build(QueryBuilder.start("owner").in(userIds)); deleteFiles(queryDocuments, DocumentDao.DOCUMENTS_COLLECTION); final JsonObject queryRacks = MongoQueryBuilder.build(QueryBuilder.start("to").in(userIds)); deleteFiles(queryRacks, RackDao.RACKS_COLLECTION); deleteFiles(queryDocuments, Workspace.REVISIONS_COLLECTION); final JsonObject query = MongoQueryBuilder.build(QueryBuilder.start("shared.userId").in(userIds)); JsonObject update = new JsonObject().put("$pull", new JsonObject().put("shared", MongoQueryBuilder.build(QueryBuilder.start("userId").in(userIds)))); mongo.update(DocumentDao.DOCUMENTS_COLLECTION, query, update, false, true, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { if (!"ok".equals(event.body().getString("status"))) { log.error(event.body().getString("message")); } } }); }
From source file:org.entcore.workspace.service.impl.WorkspaceSearchingEvents.java
License:Open Source License
@Override @SuppressWarnings("unchecked") public void searchResource(List<String> appFilters, final String userId, JsonArray groupIds, JsonArray searchWords, Integer page, Integer limit, final JsonArray columnsHeader, final String locale, final Handler<Either<String, JsonArray>> handler) { if (appFilters.contains(WorkspaceSearchingEvents.class.getSimpleName())) { final List<String> searchWordsLst = searchWords.getList(); final List<String> groupIdsLst = groupIds.getList(); final List<DBObject> groups = new ArrayList<>(); groups.add(QueryBuilder.start("userId").is(userId).get()); for (String gpId : groupIdsLst) { groups.add(QueryBuilder.start("groupId").is(gpId).get()); }//from w ww .ja v a 2s.co m final QueryBuilder rightsQuery = new QueryBuilder().or( QueryBuilder.start("visibility").is(VisibilityFilter.PUBLIC.name()).get(), QueryBuilder.start("visibility").is(VisibilityFilter.PROTECTED.name()).get(), QueryBuilder.start("visibility").is(VisibilityFilter.PROTECTED.name()).get(), QueryBuilder.start("owner").is(userId).get(), QueryBuilder.start("shared") .elemMatch(new QueryBuilder().or(groups.toArray(new DBObject[groups.size()])).get()) .get()); final QueryBuilder worldsQuery = new QueryBuilder(); worldsQuery.text(MongoDbSearchService.textSearchedComposition(searchWordsLst)); //searching only the file entry (not folder), if folder match and is returned, the paginate system is impacted final QueryBuilder fileQuery = QueryBuilder.start("file").exists(true); final QueryBuilder query = new QueryBuilder().and(fileQuery.get(), rightsQuery.get(), worldsQuery.get()); JsonObject sort = new JsonObject().put("modified", -1); final JsonObject projection = new JsonObject(); projection.put("name", 1); projection.put("modified", 1); projection.put("folder", 1); projection.put("owner", 1); projection.put("ownerName", 1); projection.put("comments", 1); final int skip = (0 == page) ? -1 : page * limit; //main search on file mongo.find(this.collection, MongoQueryBuilder.build(query), sort, projection, skip, limit, Integer.MAX_VALUE, validResultsHandler(new Handler<Either<String, JsonArray>>() { @Override public void handle(Either<String, JsonArray> event) { if (event.isRight()) { final JsonArray globalJa = event.right().getValue(); //different owner can have the same folder name //if the folder exists, we must find id of folder according to the directory name and the owner, //it's necessary to use the front route for the resource link final QueryBuilder foldersOwnersOrQuery = new QueryBuilder(); Boolean isFolderProcessing = false; for (int i = 0; i < globalJa.size(); i++) { final JsonObject j = globalJa.getJsonObject(i); // processing only files that have a folder if (j != null && !StringUtils.isEmpty(j.getString("folder"))) { isFolderProcessing = true; final QueryBuilder folderOwnerQuery = new QueryBuilder(); folderOwnerQuery.and( QueryBuilder.start("folder").is(j.getString("folder")).get(), QueryBuilder.start("owner").is(j.getString("owner")).get()); foldersOwnersOrQuery.or(folderOwnerQuery.get()); } } final Map<String, Map<String, String>> mapOwnerMapNameFolderId = new HashMap<>(); //finding ids of folder found. if (isFolderProcessing) { //find only authorized folder entry and not file final QueryBuilder queryFindFolderIds = new QueryBuilder().and( QueryBuilder.start("file").exists(false).get(), rightsQuery.get(), foldersOwnersOrQuery.get()); //search all folder of main result set and format the search result findFoldersIdAndFormatResult(globalJa, queryFindFolderIds, columnsHeader, searchWordsLst, locale, userId, handler); } else { //all files without folder final JsonArray res = formatSearchResult(globalJa, columnsHeader, searchWordsLst, locale, userId, mapOwnerMapNameFolderId); handler.handle(new Either.Right<String, JsonArray>(res)); } } else { handler.handle(new Either.Left<String, JsonArray>(event.left().getValue())); } if (log.isDebugEnabled()) { log.debug( "[WorkspaceSearchingEvents][searchResource] The resources searched by user are finded"); } } })); } else { handler.handle(new Either.Right<String, JsonArray>(new fr.wseduc.webutils.collections.JsonArray())); } }
From source file:org.entcore.workspace.service.impl.WorkspaceSearchingEvents.java
License:Open Source License
private void findFoldersIdAndFormatResult(final JsonArray globalJa, QueryBuilder queryFindFolderIds, final JsonArray columnsHeader, final List<String> searchWordsLst, final String locale, final String userId, final Handler<Either<String, JsonArray>> handler) { final JsonObject projection = new JsonObject(); projection.put("folder", 1); projection.put("owner", 1); mongo.find(collection, MongoQueryBuilder.build(queryFindFolderIds), null, projection, new Handler<Message<JsonObject>>() { @Override/*from www .j a va 2s.c o m*/ public void handle(Message<JsonObject> event) { final Either<String, JsonArray> ei = validResults(event); if (ei.isRight()) { final JsonArray folderJa = ei.right().getValue(); final Map<String, Map<String, String>> mapOwnerMapNameFolderId = new HashMap<>(); // fill the map owner key with map folder name key, folder id value for (int i = 0; i < folderJa.size(); i++) { final JsonObject j = folderJa.getJsonObject(i); if (j != null) { final String owner = j.getString("owner", ""); if (mapOwnerMapNameFolderId.containsKey(owner)) { mapOwnerMapNameFolderId.get(owner).put(j.getString("folder"), j.getString("_id")); } else { final Map<String, String> mapFolderId = new HashMap<>(); mapFolderId.put(j.getString("folder"), j.getString("_id")); mapOwnerMapNameFolderId.put(owner, mapFolderId); } } } final JsonArray res = formatSearchResult(globalJa, columnsHeader, searchWordsLst, locale, userId, mapOwnerMapNameFolderId); handler.handle(new Either.Right<String, JsonArray>(res)); } else { handler.handle(new Either.Left<String, JsonArray>(ei.left().getValue())); } } }); }
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 w w w .j a v a2 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.impl.WorkspaceSearchingEvents.java
License:Open Source License
private Map<String, Object> formatDescription(JsonArray ja, final List<String> words, Date defaultDate, String locale) {//from w ww . j a v a 2 s .c om final Map<String, Object> map = new HashMap<>(); Integer countMatchComment = 0; Date modifiedRes = null; Date modifiedMarker = null; String comment = ""; final List<String> unaccentWords = new ArrayList<>(); for (final String word : words) { unaccentWords.add(StringUtils.stripAccentsToLowerCase(word)); } //get the last modified comment that match with searched words for create the description for (int i = 0; i < ja.size(); i++) { final JsonObject jO = ja.getJsonObject(i); final String commentTmp = jO.getString("comment", ""); Date currentDate = null; try { currentDate = DateUtils.parse(jO.getString("posted"), PATTERN); } catch (ParseException e) { log.error("Can't parse date from posted", e); } int match = unaccentWords.size(); for (final String word : unaccentWords) { if (StringUtils.stripAccentsToLowerCase(commentTmp).contains(word)) { match--; } } if (countMatchComment == 0 && match == 0) { modifiedRes = currentDate; } else if (countMatchComment > 0 && match == 0 && currentDate != null && modifiedMarker != null && modifiedMarker.before(currentDate)) { modifiedMarker = currentDate; modifiedRes = currentDate; } if (match == 0) { comment = commentTmp; if (currentDate != null) { modifiedMarker = currentDate; } countMatchComment++; } } if (countMatchComment == 0) { map.put("modified", defaultDate); map.put("description", ""); } else if (countMatchComment == 1) { map.put("modified", modifiedRes); map.put("description", i18n.translate("workspace.search.description.one", I18n.DEFAULT_DOMAIN, locale, comment)); } else { map.put("modified", modifiedRes); map.put("description", i18n.translate("workspace.search.description.several", I18n.DEFAULT_DOMAIN, locale, countMatchComment.toString(), comment)); } return map; }
From source file:org.mustertech.webapp.vertxutils.VerticleDeployer.java
License:Open Source License
public static void deploy(final Vertx vertx, final String cfgJson, Handler<AsyncResult<JsonObject>> handler) { if (null == vertx) { NullPointerException e = new NullPointerException("NULL vertxutils instance is passed!"); handler.handle(makeAsyncResult(e, null)); return;/*w w w.j a v a2s . c o m*/ } // Store the vertx instance VerticleDeployer.vertx = vertx; try { InputStream schStream = VerticleDeployer.class.getResourceAsStream("/schema/deploy-schema.json"); StringWriter strWriter = new StringWriter(); IOUtils.copy(schStream, strWriter, "UTF-8"); JsonValidator.validateJson(strWriter.toString(), cfgJson); IOUtils.closeQuietly(schStream); JsonObject cfgObj = new JsonObject(cfgJson); JsonObject globalCfg = null; JsonObject optObj = null, optCfg = null; JsonArray deployOpts = cfgObj.getJsonArray("deployOpts"); int optsLen = deployOpts.size(); ArrayList<Promise<JsonObject, Exception, Double>> promises = new ArrayList<Promise<JsonObject, Exception, Double>>(); if (cfgObj.containsKey("globalConf")) { globalCfg = cfgObj.getJsonObject("globalConf"); } for (int idx = 0; idx < optsLen; idx++) { optObj = (JsonObject) deployOpts.getJsonObject(idx); if (cfgObj.containsKey("appendGlobal") && cfgObj.getBoolean("appendGlobal")) { if (optObj.containsKey("config")) { optCfg = optObj.getJsonObject("config"); if (!optCfg.containsKey("global")) { optCfg.put("global", globalCfg); } } else { optCfg = new JsonObject(); optCfg.put("global", globalCfg); optObj.put("config", optCfg); } } promises.add(deployWithOpts(optObj)); } DeferredManager defMgr = new DefaultDeferredManager(); defMgr.when(promises.toArray(new Promise[] {})).done(new DoneCallback<MultipleResults>() { public void onDone(MultipleResults results) { JsonArray resArr = new JsonArray(); Iterator<OneResult> oneResIter = results.iterator(); while (oneResIter.hasNext()) { resArr.add(oneResIter.next().getResult()); } JsonObject resObj = new JsonObject(); resObj.put("deployInfo", resArr); handler.handle(makeAsyncResult(null, resObj)); } }).fail(new FailCallback<OneReject>() { public void onFail(OneReject err) { handler.handle(makeAsyncResult((Throwable) err.getReject(), null)); } }); } catch (Exception e) { handler.handle(makeAsyncResult(e, null)); } }
From source file:org.pac4j.vertx.core.DefaultJsonConverter.java
License:Apache License
@Override public Object decodeObject(Object value) { if (value == null) { return null; } else if (isPrimitiveType(value)) { return value; } else if (value instanceof JsonArray) { JsonArray src = (JsonArray) value; List<Object> list = new ArrayList<>(src.size()); for (Object object : src) { list.add(decodeObject(object)); }/*from w w w .j a v a 2 s .co m*/ return list.toArray(); } else if (value instanceof JsonObject) { JsonObject src = (JsonObject) value; try { return decode(src.getJsonObject("value").encode(), Class.forName(src.getString("class"))); } catch (Exception e) { throw new TechnicalException("Error while decoding object", e); } } return null; }