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.directory.security.TeacherOfUser.java

License:Open Source License

private void validateQuery(final HttpServerRequest request, final Handler<Boolean> handler, String query,
        JsonObject params) {/*from w  w w  . j a  v  a  2 s. c  o m*/
    request.pause();
    neo.execute(query, params, new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> r) {
            request.resume();
            JsonArray res = r.body().getJsonArray("result");
            handler.handle("ok".equals(r.body().getString("status")) && res.size() == 1
                    && (res.getJsonObject(0)).getBoolean("exists", false));
        }
    });
}

From source file:org.entcore.directory.services.impl.DefaultClassService.java

License:Open Source License

@Override
public void addUser(final String classId, final String userId, final UserInfos user,
        final Handler<Either<String, JsonObject>> result) {
    if (validationParamsError(result, classId, userId))
        return;//from   w w w  .  j  a  v  a 2  s.com
    if (user == null) {
        result.handle(new Either.Left<String, JsonObject>("invalid.userinfos"));
        return;
    }
    neo.execute(
            "MATCH (u:`User` {id : {id}})-[:IN]->(pg:ProfileGroup)-[:HAS_PROFILE]->(p:Profile) "
                    + "RETURN distinct p.name as type",
            new JsonObject().put("id", userId), new Handler<Message<JsonObject>>() {
                @Override
                public void handle(Message<JsonObject> r) {
                    JsonArray res = r.body().getJsonArray("result");
                    if ("ok".equals(r.body().getString("status")) && res != null && res.size() == 1) {
                        final String t = (res.getJsonObject(0)).getString("type");
                        String customReturn = "MATCH (c:`Class` { id : {classId}})<-[:DEPENDS]-(cpg:ProfileGroup)"
                                + "-[:DEPENDS]->(spg:ProfileGroup)-[:HAS_PROFILE]->(p:Profile {name : {profile}}), "
                                + "c-[:BELONGS]->(s:Structure) " + "WHERE visibles.id = {uId} "
                                + "CREATE UNIQUE visibles-[:IN]->cpg "
                                + "RETURN DISTINCT visibles.id as id, s.id as schoolId";
                        JsonObject params = new JsonObject().put("classId", classId).put("uId", userId)
                                .put("profile", t);
                        UserUtils.findVisibleUsers(eb, user.getUserId(), false, customReturn, params,
                                new Handler<JsonArray>() {

                                    @Override
                                    public void handle(final JsonArray users) {
                                        if (users != null && users.size() == 1) {
                                            if ("Student".equals(t)) {
                                                String query = "MATCH (c:`Class` { id : {classId}})<-[:DEPENDS]-(cpg:ProfileGroup)-[:DEPENDS]->(spg:ProfileGroup)"
                                                        + "-[:HAS_PROFILE]->(p:Profile {name : 'Relative'}), "
                                                        + "(u:User {id: {uId}})-[:RELATED]->(relative: User) "
                                                        + "CREATE UNIQUE relative-[:IN]->cpg "
                                                        + "RETURN count(relative) as relativeNb";

                                                JsonObject params = new JsonObject().put("classId", classId)
                                                        .put("uId", userId);

                                                neo.execute(query, params, Neo4jResult.validEmptyHandler(
                                                        new Handler<Either<String, JsonObject>>() {
                                                            public void handle(
                                                                    Either<String, JsonObject> event) {
                                                                if (event.isLeft()) {
                                                                    result.handle(
                                                                            new Either.Left<String, JsonObject>(
                                                                                    "error.while.attaching.relatives"));
                                                                } else {
                                                                    result.handle(
                                                                            new Either.Right<String, JsonObject>(
                                                                                    users.getJsonObject(0)));
                                                                }
                                                            }
                                                        }));
                                            } else {
                                                result.handle(new Either.Right<String, JsonObject>(
                                                        users.getJsonObject(0)));
                                            }
                                        } else {
                                            result.handle(
                                                    new Either.Left<String, JsonObject>("user.not.visible"));
                                        }
                                    }
                                });
                    } else {
                        result.handle(new Either.Left<String, JsonObject>("invalid.user"));
                    }
                }
            });
}

From source file:org.entcore.directory.services.impl.DefaultUserBookService.java

License:Open Source License

@Override
public void update(String userId, JsonObject userBook, final Handler<Either<String, JsonObject>> result) {
    JsonObject u = Utils.validAndGet(userBook, UPDATE_USERBOOK_FIELDS, Collections.<String>emptyList());
    if (Utils.defaultValidationError(u, result, userId))
        return;// w w w.  j  ava2s .  c  o  m
    // OVERRIDE AVATAR URL
    Optional<String> pictureId = getPictureIdForUserbook(userBook);
    if (pictureId.isPresent()) {
        String fileId = avatarFileNameFromUserId(userId, Optional.empty());
        u.put("picture", "/userbook/avatar/" + fileId);
    }

    StatementsBuilder b = new StatementsBuilder();
    String query = "MATCH (u:`User` { id : {id}})-[:USERBOOK]->(ub:UserBook) WITH ub.picture as oldpic,ub,u SET "
            + nodeSetPropertiesFromJson("ub", u);
    query += " RETURN oldpic,ub.picture as picture";
    boolean updateUserBook = u.size() > 0;
    if (updateUserBook) {
        b.add(query, u.put("id", userId));
    }
    String q2 = "MATCH (u:`User` { id : {id}})-[:USERBOOK]->(ub:UserBook)"
            + "-[:PUBLIC|PRIVE]->(h:`Hobby` { category : {category}}) " + "SET h.values = {values} ";
    JsonArray hobbies = userBook.getJsonArray("hobbies");
    if (hobbies != null) {
        for (Object o : hobbies) {
            if (!(o instanceof JsonObject))
                continue;
            JsonObject j = (JsonObject) o;
            b.add(q2, j.put("id", userId));
        }
    }
    neo.executeTransaction(b.build(), null, true, new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> r) {
            if ("ok".equals(r.body().getString("status"))) {
                if (updateUserBook) {
                    JsonArray results = r.body().getJsonArray("results", new JsonArray());
                    JsonArray firstStatement = results.getJsonArray(0);
                    if (firstStatement != null && firstStatement.size() > 0) {
                        JsonObject object = firstStatement.getJsonObject(0);
                        String picture = object.getString("picture", "");
                        cacheAvatarFromUserBook(userId, pictureId, StringUtils.isEmpty(picture))
                                .setHandler(e -> {
                                    if (e.succeeded()) {
                                        result.handle(new Either.Right<String, JsonObject>(new JsonObject()));
                                    } else {
                                        result.handle(new Either.Left<String, JsonObject>(
                                                r.body().getString("message", "update.error")));
                                    }
                                });
                    }
                } else {
                    result.handle(new Either.Right<String, JsonObject>(new JsonObject()));
                }
            } else {
                result.handle(
                        new Either.Left<String, JsonObject>(r.body().getString("message", "update.error")));
            }
        }
    });
}

From source file:org.entcore.directory.services.impl.DefaultUserService.java

License:Open Source License

@Override
public void addFunction(String id, String functionCode, JsonArray scope, String inherit,
        Handler<Either<String, JsonObject>> result) {
    JsonObject action = new JsonObject().put("action", "manual-add-user-function").put("userId", id)
            .put("function", functionCode).put("inherit", inherit).put("scope", scope);
    eb.send(Directory.FEEDER, action, ar -> {
        if (ar.succeeded()) {
            JsonArray res = ((JsonObject) ar.result().body()).getJsonArray("results");
            JsonObject json = new JsonObject();
            if (res.size() == 2) {
                JsonArray r = res.getJsonArray(1);
                if (r.size() == 1) {
                    json = r.getJsonObject(0);
                }//from  w w w.  j  a v  a  2 s  .  c o  m
            }
            result.handle(new Either.Right<>(json));
        } else {
            result.handle(new Either.Left<>(ar.cause().getMessage()));
        }
    });
}

From source file:org.entcore.feeder.csv.CsvFeeder.java

License:Open Source License

private void queryNotModifiableIds(final Handler<Message<JsonObject>> handler, JsonArray externalIds) {
    if (externalIds.size() > 0) {
        String query = "MATCH (u:User) where u.externalId IN {ids} AND u.source IN ['AAF', 'AAF1D'] "
                + "AND NOT(HAS(u.deleteDate)) AND NOT(HAS(u.disappearanceDate)) "
                + "RETURN COLLECT(u.externalId) as ids";
        TransactionManager.getNeo4jHelper().execute(query, new JsonObject().put("ids", externalIds),
                new Handler<Message<JsonObject>>() {
                    @Override/*  ww  w.j  a v  a 2 s .  c om*/
                    public void handle(Message<JsonObject> event) {
                        if ("ok".equals(event.body().getString("status"))) {
                            JsonArray res = event.body().getJsonArray("result");
                            JsonArray ids;
                            if (res != null && res.size() > 0 && res.getJsonObject(0) != null
                                    && (ids = res.getJsonObject(0).getJsonArray("ids")) != null
                                    && ids.size() > 0) {
                                handler.handle(
                                        new ResultMessage().error("unmodifiable.externalId-" + ids.encode()));
                            } else {
                                handler.handle(new ResultMessage());
                            }
                        } else {
                            handler.handle(event);
                        }
                    }
                });
    } else {
        handler.handle(new ResultMessage());
    }
}

From source file:org.entcore.feeder.csv.CsvImportsLauncher.java

License:Open Source License

@Override
public void handle(Long event) {
    final FileSystem fs = vertx.fileSystem();
    fs.readDir(path, ".*.zip", new Handler<AsyncResult<List<String>>>() {
        @Override//w  ww .  j a v  a2s  . com
        public void handle(final AsyncResult<List<String>> event) {
            if (event.succeeded()) {
                Collections.sort(event.result());
                final Handler[] handlers = new Handler[event.result().size() + 1];
                handlers[handlers.length - 1] = new Handler<Void>() {
                    @Override
                    public void handle(Void v) {
                        postImport.execute();
                    }
                };
                for (int i = event.result().size() - 1; i >= 0; i--) {
                    final int j = i;
                    handlers[i] = new Handler<Void>() {
                        @Override
                        public void handle(Void v) {
                            final String file = event.result().get(j);
                            log.info("Importing file : " + file);
                            Matcher matcher;
                            Matcher nameMatcher;
                            if (file != null && (matcher = UAI_PATTERN.matcher(file)).find()
                                    && (nameMatcher = namePattern.matcher(file)).find()) {
                                final String uai = matcher.group(1);
                                final String structureName = nameMatcher.group(1);
                                TransactionManager.getNeo4jHelper().execute(
                                        "MATCH (s:Structure {UAI:{uai}}) return s.externalId as externalId",
                                        new JsonObject().put("uai", uai), new Handler<Message<JsonObject>>() {
                                            @Override
                                            public void handle(Message<JsonObject> event) {
                                                final String structureExternalId;
                                                JsonArray res = event.body().getJsonArray("result");
                                                if ("ok".equals(event.body().getString("status"))
                                                        && res.size() > 0) {
                                                    structureExternalId = res.getJsonObject(0)
                                                            .getString("externalId");
                                                } else {
                                                    structureExternalId = null;
                                                }
                                                final String parentDir = path + File.separator
                                                        + UUID.randomUUID().toString();
                                                final String dirName = parentDir + File.separator
                                                        + structureName
                                                        + (structureExternalId != null
                                                                ? "@" + structureExternalId
                                                                : "")
                                                        + "_" + uai;
                                                fs.mkdirs(dirName, new Handler<AsyncResult<Void>>() {
                                                    @Override
                                                    public void handle(AsyncResult<Void> event) {
                                                        try {
                                                            FileUtils.unzip(file.replaceAll("\\s", "%20"),
                                                                    dirName);
                                                            moveCsvFiles(structureExternalId, fs, dirName,
                                                                    parentDir, handlers, j);
                                                        } catch (IOException e) {
                                                            fs.deleteRecursive(parentDir, true, null);
                                                            log.error("Error unzip : " + file, e);
                                                            handlers[j + 1].handle(null);
                                                        }
                                                    }
                                                });
                                            }
                                        });
                            } else {
                                log.error("UAI not found in filename : " + file);
                                handlers[j + 1].handle(null);
                            }
                        }
                    };
                }
                handlers[0].handle(null);
            } else {
                log.error("Error reading directory.");
            }
        }
    });
}

From source file:org.entcore.feeder.csv.CsvValidator.java

License:Open Source License

private void filterExternalIdExists(JsonArray externalIds, final Handler<JsonArray> handler) {
    String query = "MATCH (u:User) where u.externalId in {externalIds} return collect(u.externalId) as ids";
    TransactionManager.getNeo4jHelper().execute(query, new JsonObject().put("externalIds", externalIds),
            new Handler<Message<JsonObject>>() {
                @Override/*from  w  w w.java  2 s . c om*/
                public void handle(Message<JsonObject> event) {
                    JsonArray result = event.body().getJsonArray("result");
                    if ("ok".equals(event.body().getString("status")) && result.size() == 1) {
                        handler.handle(result.getJsonObject(0).getJsonArray("ids"));
                    } else {
                        handler.handle(null);
                    }
                }
            });
}

From source file:org.entcore.feeder.csv.CsvValidator.java

License:Open Source License

private void getStructure(final String path, final Handler<Structure> handler) {
    String query = "MATCH (s:Structure {externalId:{id}})"
            + "return s.id as id, s.externalId as externalId, s.UAI as UAI, s.name as name";
    TransactionManager.getNeo4jHelper().execute(query, new JsonObject().put("id", structureId),
            new Handler<Message<JsonObject>>() {
                @Override/*from   w  w  w .  j  ava  2  s  .co  m*/
                public void handle(Message<JsonObject> event) {
                    JsonArray result = event.body().getJsonArray("result");
                    if ("ok".equals(event.body().getString("status")) && result != null && result.size() == 1) {
                        final Structure s = new Structure(result.getJsonObject(0));
                        try {
                            final JsonObject structure = CSVUtil.getStructure(path);
                            final String overrideClass = structure.getString("overrideClass");
                            if (isNotEmpty(overrideClass)) {
                                s.setOverrideClass(overrideClass);
                            }
                        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
                            log.error("Error parsing structure path : " + path, e);
                        }
                        handler.handle(s);
                    } else {
                        try {
                            final JsonObject structure = CSVUtil.getStructure(path);
                            final String overrideClass = structure.getString("overrideClass");
                            final Structure s = new Structure(structure);
                            if (isNotEmpty(overrideClass)) {
                                s.setOverrideClass(overrideClass);
                            }
                            handler.handle(s);
                        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
                            handler.handle(null);
                        }
                    }
                }
            });
}

From source file:org.entcore.feeder.csv.MappingFinder.java

License:Open Source License

private void findChildExternalIds(final String structureId, final String path, final String charset,
        final List<String> columns, final JsonArray errors, final Handler<JsonArray> handler) {
    final List<String[]> lines = new ArrayList<>();

    final JsonArray childLastNameIndex = new fr.wseduc.webutils.collections.JsonArray();
    final JsonArray childUsernameIndex = new fr.wseduc.webutils.collections.JsonArray();
    int idx = 0;/*from   w  w  w. j  a v  a  2s.  c  om*/
    for (String c : columns) {
        if ("childLastName".equals(c)) {
            childLastNameIndex.add(idx);
        } else if ("childUsername".equals(c)) {
            childUsernameIndex.add(idx);
        }
        idx++;
    }
    if (childLastNameIndex.size() == 0) {
        addError(errors, "missing.childLastName");
        handler.handle(errors);
        return;
    } else if (childUsernameIndex.size() != 0 && childLastNameIndex.size() != childUsernameIndex.size()) {
        addError(errors, "mismatch.childLastName.childUsername");
        handler.handle(errors);
        return;
    }

    final int maxNbChild = childLastNameIndex.size();
    final int appendIdx;
    if (childUsernameIndex.size() > 0) {
        appendIdx = childLastNameIndex.getInteger(0) > childUsernameIndex.getInteger(0)
                ? childUsernameIndex.getInteger(0)
                : childLastNameIndex.getInteger(0);
    } else {
        appendIdx = childLastNameIndex.getInteger(0);
    }
    final String query = "MATCH (s:Structure {externalId : {id}})<-[:DEPENDS]-(:ProfileGroup)<-[:IN]-(u:User) "
            + "WHERE u.firstNameSearchField = {firstName} AND u.lastNameSearchField = {lastName} AND head(u.profiles) = 'Student' "
            + "RETURN DISTINCT u.externalId as externalId, {rowIdx} as line, {itemIdx} as item ";
    final TransactionHelper tx;
    try {
        tx = TransactionManager.getTransaction();
    } catch (TransactionException e) {
        addError(errors, "transaction.error");
        handler.handle(errors);
        return;
    }
    try {
        CSVReader csvReader = getCsvReader(path, charset);
        String[] values;
        int rowIdx = 0;
        while ((values = csvReader.readNext()) != null) {
            if (emptyLine(values)) {
                continue;
            }

            final List<String> line = new LinkedList<>(Arrays.asList(values));
            for (int i = 0; i < maxNbChild; i++) {
                if (rowIdx == 0) {
                    line.add(appendIdx, "childExternalId");
                } else {
                    line.add(appendIdx, "");
                }
            }
            lines.add(line.toArray(new String[line.size()]));
            if (rowIdx == 0) {
                rowIdx++;
                continue;
            }

            final JsonArray firstNames = new fr.wseduc.webutils.collections.JsonArray();
            final JsonArray lastNames = new fr.wseduc.webutils.collections.JsonArray();
            try {
                int i = 0;
                for (String c : columns) {
                    if (i >= values.length)
                        break;
                    switch (c) {
                    case "childLastName":
                        lastNames.add(sanitize(values[i]));
                        break;
                    case "childFirstName":
                        firstNames.add(sanitize(values[i]));
                        break;
                    }
                    i++;
                }
            } catch (Exception e) {
                errors.add(new JsonObject().put("key", "parse.line.error").put("params",
                        new fr.wseduc.webutils.collections.JsonArray().add(Integer.toString(rowIdx))));
            }
            final int fns = firstNames.size();
            if (fns != lastNames.size()) {
                errors.add(new JsonObject().put("key", "child.lastName.firstName.mismatch").put("params",
                        new fr.wseduc.webutils.collections.JsonArray().add(Integer.toString(rowIdx))));
            } else if (fns > 0) {
                //               if (fns > maxNbChild) {
                //                  maxNbChild = fns;
                //               }
                for (int i = 0; i < fns; i++) {
                    JsonObject params = new JsonObject().put("id", structureId)
                            .put("firstName", firstNames.getString(i)).put("lastName", lastNames.getString(i))
                            .put("rowIdx", rowIdx).put("itemIdx", i);
                    tx.add(query, params);
                }
            }
            rowIdx++;
        }
    } catch (Exception e) {
        addError(errors, "error.read.file", path);
        handler.handle(errors);
    }
    tx.commit(new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> event) {
            JsonArray results = event.body().getJsonArray("results");
            if ("ok".equals(event.body().getString("status")) && results != null) {
                for (int i = 0; i < results.size(); i++) {
                    JsonArray item = results.getJsonArray(i);
                    if (item.size() == 1) { // Si 0 ou plusieurs utilisateurs, on laisse la ligne d'origine
                        String eId = item.getJsonObject(0).getString("externalId", "");
                        int lineIdx = item.getJsonObject(0).getInteger("line", -1);
                        int itemIdx = item.getJsonObject(0).getInteger("item", -1);
                        if (lineIdx > 0 && itemIdx >= 0) {
                            String[] line = lines.get(lineIdx);
                            line[itemIdx + appendIdx] = eId;
                            line[childLastNameIndex.getInteger(itemIdx) + maxNbChild] = "";
                            if (childUsernameIndex.size() > 0) {
                                line[childUsernameIndex.getInteger(itemIdx) + maxNbChild] = "";
                            }
                        }
                    }
                }
                vertx.fileSystem().deleteBlocking(path);

                try {
                    CSVWriter writer = getCsvWriter(path, charset);
                    writer.writeAll(lines);
                    writer.close();
                } catch (IOException e) {
                    log.error("Error writing file.", e);
                    addError(errors, "error.write.file", path);
                }
                handler.handle(errors);
            } else {
                addError(errors, "error.find.ids");
                handler.handle(errors);
            }
        }
    });
}

From source file:org.entcore.feeder.dictionary.structures.DuplicateUsers.java

License:Open Source License

public void markDuplicates(final Message<JsonObject> message, final Handler<JsonObject> handler) {
    final String now = DateTime.now().toString();
    final String query = "MATCH (s:System {name : 'Starter'}) return s.lastSearchDuplicates as lastSearchDuplicates ";
    TransactionManager.getNeo4jHelper().execute(query, new JsonObject(), new Handler<Message<JsonObject>>() {
        @Override/*from  ww  w. j  a va2s  .co  m*/
        public void handle(Message<JsonObject> event) {
            JsonArray res = event.body().getJsonArray("result");
            if ("ok".equals(event.body().getString("status")) && res != null && res.size() == 1
                    && res.getJsonObject(0).getString("lastSearchDuplicates") != null) {
                final String last = res.getJsonObject(0).getString("lastSearchDuplicates");
                final String[] profiles = ManualFeeder.profiles.keySet()
                        .toArray(new String[ManualFeeder.profiles.keySet().size()]);
                final Handler[] handlers = new Handler[profiles.length + 1];
                final long start = System.currentTimeMillis();
                handlers[handlers.length - 1] = new Handler<Void>() {
                    @Override
                    public void handle(Void v) {
                        final String updateDate = "MATCH (s:System {name : 'Starter'}) set s.lastSearchDuplicates = {now} ";
                        TransactionManager.getNeo4jHelper().execute(updateDate,
                                new JsonObject().put("now", now), new Handler<Message<JsonObject>>() {
                                    @Override
                                    public void handle(Message<JsonObject> event) {
                                        if (!"ok".equals(event.body().getString("status"))) {
                                            log.error("Error updating last search duplicate date : "
                                                    + event.body().getString("message"));
                                        }
                                    }
                                });
                        log.info("Mark duplicates users finished - elapsed time "
                                + (System.currentTimeMillis() - start) + " ms.");
                        if (message != null) {
                            message.reply(new JsonObject().put("status", "ok"));
                        }
                        if (handler != null) {
                            handler.handle(new JsonObject().put("status", "ok"));
                        }
                    }
                };
                for (int i = profiles.length - 1; i >= 0; i--) {
                    final int j = i;
                    handlers[i] = new Handler<Void>() {
                        @Override
                        public void handle(Void v) {
                            searchDuplicatesByProfile(last, profiles[j], handlers[j + 1]);
                        }
                    };
                }
                handlers[0].handle(null);
            } else {
                log.warn("lastSearchDuplicates not found.");
                message.reply(new JsonObject().put("status", "ok"));
            }
        }
    });
}