Example usage for io.vertx.core.json JsonArray getJsonObject

List of usage examples for io.vertx.core.json JsonArray getJsonObject

Introduction

In this page you can find the example usage for io.vertx.core.json JsonArray getJsonObject.

Prototype

public JsonObject getJsonObject(int pos) 

Source Link

Document

Get the JsonObject at position pos in the array.

Usage

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;
}