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

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

Introduction

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

Prototype

public JsonArray getJsonArray(int pos) 

Source Link

Document

Get the JsonArray at position pos in the array.

Usage

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

License:Open Source License

public void findExternalIds(final String structureId, final String path, final String profile,
        final List<String> columns, final int eII, final String charset, final Handler<JsonArray> handler) {
    final boolean additionalColumn;
    final int externalIdIdx;
    if (eII >= 0) {
        additionalColumn = false;//from   w ww .j a  va  2s  .  co  m
        externalIdIdx = eII;
    } else {
        additionalColumn = true;
        externalIdIdx = 0;
    }
    final JsonArray errors = new fr.wseduc.webutils.collections.JsonArray();
    String filter = "";
    if ("Student".equals(profile)) {
        filter = "AND u.birthDate = {birthDate} ";
    }
    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) = {profile} "
            + filter + "RETURN DISTINCT u.externalId as externalId";
    final List<String[]> lines = new ArrayList<>();
    final TransactionHelper tx;
    try {
        tx = TransactionManager.getTransaction();
    } catch (TransactionException e) {
        addError(errors, "transaction.error");
        handler.handle(errors);
        return;
    }

    try {
        CSVReader csvReader = getCsvReader(path, charset);
        final int nbColumns = columns.size();
        String[] values;
        int rowIdx = 0;
        while ((values = csvReader.readNext()) != null) {
            if (emptyLine(values)) {
                continue;
            }
            if (values.length > nbColumns) {
                values = Arrays.asList(values).subList(0, nbColumns).toArray(new String[nbColumns]);
            } else if (values.length < nbColumns) {
                values = Arrays.copyOf(values, nbColumns);
            }
            final List<String> line = new LinkedList<>(Arrays.asList(values));
            if (additionalColumn) {
                line.add(0, "");
            }
            lines.add(line.toArray(new String[line.size()]));
            if (rowIdx == 0) {
                if (additionalColumn) {
                    lines.get(0)[externalIdIdx] = "externalId";
                }
                rowIdx++;
                continue;
            }

            final JsonObject params = new JsonObject();
            if (!additionalColumn && values[externalIdIdx] != null && !values[externalIdIdx].isEmpty()) {
                tx.add(NOP_QUERY, params.put("externalId", values[externalIdIdx]));
            } else {
                params.put("id", structureId).put("profile", profile);
                try {
                    int i = 0;
                    for (String c : columns) {
                        //   if (i >=  values.length) break;
                        switch (c) {
                        case "lastName":
                            params.put("lastName", sanitize(values[i]));
                            break;
                        case "firstName":
                            params.put("firstName", sanitize(values[i]));
                            break;
                        case "birthDate":
                            if ("Student".equals(profile)) {
                                Matcher m;

                                if (values[i] != null
                                        && (m = CsvFeeder.frenchDatePatter.matcher(values[i])).find()) {
                                    params.put("birthDate", m.group(3) + "-" + m.group(2) + "-" + m.group(1));
                                } else {
                                    params.put("birthDate", 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))));
                }

                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
                    && results.size() + 1 == lines.size()) {
                for (int i = 0; i < results.size(); i++) {
                    JsonArray line = results.getJsonArray(i);
                    if (line.size() == 1) { // Si 0 ou plusieurs utilisateurs, on laisse la ligne d'origine
                        String eId = line.getJsonObject(0).getString("externalId", "");
                        lines.get(i + 1)[externalIdIdx] = eId;
                    }
                }
                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);
                }
                if ("Relative".equals(profile) && columns.contains("childLastName")
                        && !columns.contains("childExternalId")) {
                    if (additionalColumn) {
                        columns.add(0, "externalId");
                    }
                    findChildExternalIds(structureId, path, charset, columns, errors, handler);
                } else {
                    handler.handle(errors);
                }
            } else {
                addError(errors, "error.find.ids");
                handler.handle(errors);
            }
        }
    });
}

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  ww  .  ja v  a2  s. com
    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

private void scoreDuplicates(final String profile, final JsonArray search, final Handler<Void> handler) {
    final String query = "START u=node:node_auto_index({luceneQuery}) "
            + "WHERE HEAD(u.profiles) = {profile} AND u.id <> {id} AND NOT(HAS(u.deleteDate)) "
            + "RETURN u.id as id, u.firstName as firstName, u.lastName as lastName, "
            + "u.birthDate as birthDate, u.email as email, u.source as source, u.disappearanceDate as disappearanceDate";
    final JsonObject params = new JsonObject().put("profile", profile);
    TransactionHelper tx;//from  ww w  . ja  va 2s. c  o  m
    try {
        tx = TransactionManager.getTransaction(false);
    } catch (TransactionException e) {
        log.error("Error when find duplicate users.", e);
        return;
    }
    final JsonArray result = new fr.wseduc.webutils.collections.JsonArray();
    for (int i = 0; i < search.size(); i++) {
        final JsonObject json = search.getJsonObject(i);
        final String firstNameAttr = luceneAttribute("firstName", json.getString("firstName"), 0.6);
        final String lastNameAttr = luceneAttribute("lastName", json.getString("lastName"), 0.6);
        String luceneQuery;
        if (firstNameAttr != null && lastNameAttr != null && !firstNameAttr.trim().isEmpty()
                && !lastNameAttr.trim().isEmpty()) {
            luceneQuery = firstNameAttr + " AND " + lastNameAttr;
            result.add(json);
            tx.add(query, params.copy().put("luceneQuery", luceneQuery).put("id", json.getString("id")));
        }
    }
    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 && results.size() > 0) {
                TransactionHelper tx;
                try {
                    tx = TransactionManager.getTransaction();
                    tx.setAutoSend(false);
                } catch (TransactionException e) {
                    log.error("Error when score duplicate users.", e);
                    return;
                }
                for (int i = 0; i < results.size(); i++) {
                    JsonArray findUsers = results.getJsonArray(i);
                    if (findUsers == null || findUsers.size() == 0)
                        continue;
                    JsonObject searchUser = result.getJsonObject(i);
                    calculateAndStoreScore(searchUser, findUsers, tx);
                }
                if (!tx.isEmpty()) {
                    tx.commit(new Handler<Message<JsonObject>>() {
                        @Override
                        public void handle(Message<JsonObject> event) {
                            if ("ok".equals(event.body().getString("status"))) {
                                log.info("Mark duplicates " + profile + " finished.");
                            } else {
                                log.error("Error marking duplicates : " + event.body().getString("message"));
                            }
                            handler.handle(null);
                        }
                    });
                } else {
                    log.info("No duplicate user with score > 3 found in profile " + profile);
                    handler.handle(null);
                }
            } else {
                if ("ok".equals(event.body().getString("status"))) {
                    log.info("No duplicate user found in profile " + profile);
                } else {
                    log.error(
                            "Error finding users for search duplicates : " + event.body().getString("message"));
                }
                handler.handle(null);
            }
        }
    });
}

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

License:Open Source License

private void publishClassesUpdate() {
    final String query = "MATCH (u:User) "
            + "WHERE (has(u.classes) AND not(has(u.oldClasses))) OR u.classes <> u.oldClasses "
            + "RETURN u.id as userId, u.externalId as userExternalId, u.classes as classes, "
            + "u.oldClasses as oldClasses, u.created as created, timestamp() as timestamp";
    final String setOldClasses = "MATCH (u:User) " + "WHERE has(u.classes) " + "SET u.oldClasses = u.classes ";
    try {/*from w w w  .j a  va  2s. c  o  m*/
        final TransactionHelper tx = TransactionManager.getTransaction();
        final JsonObject params = new JsonObject();
        tx.add(query, params);
        tx.add(setOldClasses, params);
        tx.commit(res -> {
            if ("ok".equals(res.body().getString("status"))) {
                JsonArray r = res.body().getJsonArray("results");
                if (r != null && r.getJsonArray(0) != null && r.getJsonArray(0).size() > 0) {
                    eb.publish(Feeder.USER_REPOSITORY, new JsonObject().put("action", "users-classes-update")
                            .put("users-classes-update", r.getJsonArray(0)));
                }
            } else {
                logger.error(
                        "Error in publish classes update transaction : " + res.body().getString("message"));
            }
        });
    } catch (TransactionException e) {
        logger.error("Error in publish classes update transaction.", e);
    }
}

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

License:Open Source License

private Handler<Message<JsonObject>> commitHandler(final Handler<Message<JsonObject>> resHandler,
        final Handler<Message<JsonObject>> handler, final JsonObject structure) {
    return new Handler<Message<JsonObject>>() {
        @Override//from   ww w  . j a  v  a2s  .co  m
        public void handle(Message<JsonObject> m) {
            if ("ok".equals(m.body().getString("status"))) {
                try {
                    TransactionManager.getInstance().persist(GRAPH_DATA_UPDATE, false,
                            new Handler<Message<JsonObject>>() {
                                @Override
                                public void handle(Message<JsonObject> event) {
                                    JsonArray results = m.body().getJsonArray("results");
                                    if ("ok".equals(event.body().getString("status")) && results != null
                                            && results.size() == 2) {
                                        JsonArray r = getOrElse(results.getJsonArray(0),
                                                new fr.wseduc.webutils.collections.JsonArray());
                                        publishTransition(structure, results.getJsonArray(1));
                                        if (r.size() > 0) {
                                            publishDeleteGroups(vertx.eventBus(), log, r);
                                            if (handler != null) {
                                                vertx.setTimer(delayBetweenStructure, eventTimer -> next(r));
                                            } else {
                                                next(r);
                                            }
                                        } else {
                                            next(r);
                                        }
                                    } else {
                                        log.error("Transition commit error");
                                        log.error(event.body().encode());
                                        if (resHandler != null) {
                                            resHandler.handle(event);
                                        }
                                    }
                                }
                            });
                } catch (Exception e) {
                    log.error("Transition commit error");
                    log.error(e.getMessage(), e);
                    if (resHandler != null) {
                        resHandler.handle(new ResultMessage().error(e.getMessage()));
                    }
                }
            } else {
                TransactionManager.getInstance().rollback(GRAPH_DATA_UPDATE);
                log.error("Transition error");
                log.error(m.body().encode());
                if (resHandler != null) {
                    resHandler.handle(m);
                }
            }
        }

        protected void next(JsonArray r) {
            if (handler != null) {
                if (getTransaction(resHandler) == null)
                    return;
            }
            if (handler != null) {
                handler.handle(new ResultMessage());
            } else {
                resHandler.handle(new ResultMessage().put("result", r));
            }
        }
    };
}

From source file:org.entcore.feeder.export.eliot.EliotExporter.java

License:Open Source License

@Override
public void export(final Handler<Message<JsonObject>> handler) throws Exception {
    TransactionManager.executeTransaction(new Function<TransactionHelper, Message<JsonObject>>() {
        @Override/*from www .  j  av a 2  s  . co m*/
        public void apply(TransactionHelper value) {
            Tenant.list(new fr.wseduc.webutils.collections.JsonArray().add("name").add("academy"), null, null,
                    value);
            Structure.list(ELIOT, new fr.wseduc.webutils.collections.JsonArray().add("academy"), null, null,
                    value);
        }

        @Override
        public void handle(Message<JsonObject> result) {
            JsonArray r = result.body().getJsonArray("results");
            if ("ok".equals(result.body().getString("status")) && r != null && r.size() == 2) {
                final String tenant = r.getJsonArray(0).getJsonObject(0).getString("name");
                final String academy = r.getJsonArray(0).getJsonObject(0).getString("academy",
                        r.getJsonArray(1).getJsonObject(0).getString("academy"));
                final Date exportDate = new Date();
                final String path = exportBasePath + File.separator + tenant + "_Complet_"
                        + datetime.format(exportDate) + "_Export";
                log.info("Export path " + path);
                vertx.fileSystem().mkdirs(path, new Handler<AsyncResult<Void>>() {
                    @Override
                    public void handle(AsyncResult<Void> ar) {
                        if (ar.succeeded()) {
                            new EleveExportProcessing(path, date.format(exportDate), tenant + "_" + academy,
                                    concatFiles).start(new Handler<Message<JsonObject>>() {
                                        @Override
                                        public void handle(Message<JsonObject> message) {
                                            if ("ok".equals(message.body().getString("status"))) {
                                                if (exportDestination != null
                                                        && !exportDestination.trim().isEmpty()) {
                                                    zipAndSend(path, handler);
                                                } else {
                                                    log.warn("export not send");
                                                    message.body().put("exportPath", path);
                                                    handler.handle(message);
                                                }
                                            } else {
                                                log.error(message.body().encode());
                                                handler.handle(message);
                                            }
                                        }
                                    });
                        } else {
                            log.error(ar.cause().getMessage(), ar.cause());
                            handler.handle(new ResultMessage().error(ar.cause().getMessage()));
                        }
                    }
                });
            } else {
                log.error(result.body().encode());
                handler.handle(result);
            }
        }
    });
}

From source file:org.entcore.feeder.export.eliot.EtabEducNatExportProcessing.java

License:Open Source License

@Override
protected void count(final Handler<Integer> handler) {
    TransactionManager.executeTransaction(new Function<TransactionHelper, Message<JsonObject>>() {
        @Override/*  ww  w  .ja  va  2s  .  c  o  m*/
        public void apply(TransactionHelper value) {
            Structure.count(EliotExporter.ELIOT, value);
        }

        @Override
        public void handle(Message<JsonObject> result) {
            JsonArray r = result.body().getJsonArray("results");
            if ("ok".equals(result.body().getString("status")) && r != null && r.size() == 1) {
                JsonArray rs = r.getJsonArray(0);
                if (rs != null && rs.size() == 1) {
                    JsonObject row = rs.getJsonObject(0);
                    handler.handle(row.getInteger("nb", 0));
                    return;
                }
            }
            handler.handle(null);
        }
    });
}

From source file:org.entcore.feeder.export.eliot.EtabEducNatExportProcessing.java

License:Open Source License

@Override
protected void list(final Integer skip, final Integer limit, final Handler<JsonArray> handler) {
    TransactionManager.executeTransaction(new Function<TransactionHelper, Message<JsonObject>>() {
        @Override/*from  www  .  jav a 2  s  .  c  o  m*/
        public void apply(TransactionHelper value) {
            Structure.list(EliotExporter.ELIOT, attributes, skip, limit, value);
        }

        @Override
        public void handle(Message<JsonObject> result) {
            JsonArray r = result.body().getJsonArray("results");
            if ("ok".equals(result.body().getString("status")) && r != null && r.size() == 1) {
                JsonArray rs = r.getJsonArray(0);
                handler.handle(rs);
            } else {
                handler.handle(null);
            }
        }
    });
}

From source file:org.entcore.feeder.export.eliot.PersALExportProcessing.java

License:Open Source License

@Override
protected void list(final Integer skip, final Integer limit, final Handler<JsonArray> handler) {
    TransactionManager.executeTransaction(new Function<TransactionHelper, Message<JsonObject>>() {
        @Override//from w  w w  .ja v  a2  s . c om
        public void apply(TransactionHelper value) {
            User.listByFunctions(EliotExporter.ELIOT, function, value);
        }

        @Override
        public void handle(Message<JsonObject> result) {
            JsonArray r = result.body().getJsonArray("results");
            if ("ok".equals(result.body().getString("status")) && r != null && r.size() == 1) {
                JsonArray rs = r.getJsonArray(0);
                handler.handle(rs);
            } else {
                handler.handle(null);
            }
        }
    });
}

From source file:org.entcore.feeder.export.eliot.PorteurENTExportProcessing.java

License:Open Source License

@Override
protected void count(final Handler<Integer> handler) {
    TransactionManager.executeTransaction(new Function<TransactionHelper, Message<JsonObject>>() {
        @Override/*from w w w  . j  a  v a  2  s.  c o m*/
        public void apply(TransactionHelper value) {
            Tenant.count(value);
        }

        @Override
        public void handle(Message<JsonObject> result) {
            JsonArray r = result.body().getJsonArray("results");
            if ("ok".equals(result.body().getString("status")) && r != null && r.size() == 1) {
                JsonArray rs = r.getJsonArray(0);
                if (rs != null && rs.size() == 1) {
                    JsonObject row = rs.getJsonObject(0);
                    handler.handle(row.getInteger("nb", 0));
                    return;
                }
            }
            handler.handle(null);
        }
    });
}