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.feeder.dictionary.structures.DuplicateUsers.java

License:Open Source License

public void mergeDuplicate(final Message<JsonObject> message, final TransactionHelper tx) {
    String userId1 = message.body().getString("userId1");
    String userId2 = message.body().getString("userId2");
    if (userId1 == null || userId2 == null || userId1.trim().isEmpty() || userId2.trim().isEmpty()) {
        message.reply(new JsonObject().put("status", "error").put("message", "invalid.id"));
        return;// ww w  .java  2 s. c om
    }
    String query = "MATCH (u1:User {id: {userId1}})-[r:DUPLICATE]-(u2:User {id: {userId2}}) "
            + "RETURN DISTINCT u1.id as userId1, u1.source as source1, NOT(HAS(u1.activationCode)) as activatedU1, "
            + "u1.disappearanceDate as disappearanceDate1, u1.deleteDate as deleteDate1, "
            + "u2.id as userId2, u2.source as source2, NOT(HAS(u2.activationCode)) as activatedU2, "
            + "u2.disappearanceDate as disappearanceDate2, u2.deleteDate as deleteDate2";
    JsonObject params = new JsonObject().put("userId1", userId1).put("userId2", userId2);
    TransactionManager.getNeo4jHelper().execute(query, params, new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> event) {
            JsonArray res = event.body().getJsonArray("result");
            JsonObject error = new JsonObject().put("status", "error");
            if ("ok".equals(event.body().getString("status")) && res != null && res.size() == 1) {
                JsonObject r = res.getJsonObject(0);
                if (r.getBoolean("activatedU1", true) && r.getBoolean("activatedU2", true)) {
                    message.reply(error.put("message", "two.users.activated"));
                } else {
                    mergeDuplicate(r, message, tx);
                }
            } else if ("ok".equals(event.body().getString("status"))) {
                message.reply(error.put("message", "not.found.duplicate"));
            } else {
                message.reply(event.body());
            }
        }
    });
}

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

License:Open Source License

public void mergeBykeys(final Message<JsonObject> message) {
    final JsonObject error = new JsonObject().put("status", "error");
    final String originalUserId = message.body().getString("originalUserId");
    if (originalUserId == null || originalUserId.isEmpty()) {
        message.reply(error.put("message", "invalid.original.user"));
        return;/*w ww .j  a  v a  2 s  . c  o  m*/
    }
    final JsonArray mergeKeys = message.body().getJsonArray("mergeKeys");
    if (mergeKeys == null || mergeKeys.size() < 1) {
        message.reply(error.put("message", "invalid.merge.keys"));
        return;
    }
    final JsonObject params = new JsonObject().put("userId", originalUserId);
    TransactionManager.getNeo4jHelper().execute("MATCH (u:User {id: {userId}}) RETURN u.mergeKey as mergeKey",
            params, new Handler<Message<JsonObject>>() {
                @Override
                public void handle(Message<JsonObject> event) {
                    JsonArray result = event.body().getJsonArray("result");
                    if ("ok".equals(event.body().getString("status")) && result.size() == 1) {
                        String mergeKey = result.getJsonObject(0).getString("mergeKey");
                        if (mergeKey != null && mergeKeys.contains(mergeKey)) {
                            final JsonArray tmp = new fr.wseduc.webutils.collections.JsonArray();
                            for (Object o : mergeKeys) {
                                if (!mergeKey.equals(o)) {
                                    tmp.add(o);
                                }
                            }
                            if (tmp.size() > 0) {
                                params.put("mergeKeys", tmp);
                            } else {
                                message.reply(error.put("message", "invalid.merge.keys"));
                                return;
                            }
                        } else {
                            params.put("mergeKeys", mergeKeys);
                        }
                        try {
                            TransactionHelper tx = TransactionManager.getTransaction();

                            tx.add("MATCH (u:User {id: {userId}}), (mu:User)-[rin:IN]->(gin:Group) "
                                    + "WHERE HEAD(u.profiles) = 'Relative' AND HEAD(mu.profiles) = 'Relative' "
                                    + "AND NOT(HAS(u.mergedWith)) AND mu.mergeKey IN {mergeKeys} "
                                    + "MERGE u-[:IN]->gin " + "DELETE rin ", params);
                            tx.add("MATCH (u:User {id: {userId}}), (mu:User)-[rcom:COMMUNIQUE]->(gcom:Group) "
                                    + "WHERE HEAD(u.profiles) = 'Relative' AND HEAD(mu.profiles) = 'Relative' "
                                    + "AND NOT(HAS(u.mergedWith)) AND mu.mergeKey IN {mergeKeys} "
                                    + "MERGE  u-[:COMMUNIQUE]->gcom " + "DELETE rcom ", params);
                            tx.add("MATCH (u:User {id: {userId}}), (mu:User)<-[rcomr:COMMUNIQUE]-(gcomr:Group) "
                                    + "WHERE HEAD(u.profiles) = 'Relative' AND HEAD(mu.profiles) = 'Relative' "
                                    + "AND NOT(HAS(u.mergedWith)) AND mu.mergeKey IN {mergeKeys} "
                                    + "MERGE u<-[:COMMUNIQUE]-gcomr " + "DELETE rcomr ", params);
                            tx.add("MATCH (u:User {id: {userId}}), (mu:User)-[rr:RELATED]->(ur:User) "
                                    + "WHERE HEAD(u.profiles) = 'Relative' AND HEAD(mu.profiles) = 'Relative' "
                                    + "AND NOT(HAS(u.mergedWith)) AND mu.mergeKey IN {mergeKeys} "
                                    + "MERGE u-[:RELATED]->ur " + "DELETE rr ", params);
                            tx.add("MATCH (u:User {id: {userId}}), (mu:User)<-[rrr:RELATED]-(urr:User) "
                                    + "WHERE HEAD(u.profiles) = 'Relative' AND HEAD(mu.profiles) = 'Relative' "
                                    + "AND NOT(HAS(u.mergedWith)) AND mu.mergeKey IN {mergeKeys} "
                                    + "MERGE u<-[:RELATED]-urr " + "DELETE rrr ", params);
                            tx.add("MATCH (u:User {id: {userId}}), (mu:User) "
                                    + "WHERE HEAD(u.profiles) = 'Relative' AND HEAD(mu.profiles) = 'Relative' "
                                    + "AND NOT(HAS(u.mergedWith)) AND mu.mergeKey IN {mergeKeys} " + // AND LENGTH(mu.joinKey) < 2  " +
                            "SET mu.mergedWith = {userId}, mu.mergeKey = null, u.mergedLogins = coalesce(u.mergedLogins, []) + mu.login "
                                    +
                            //               ", u.joinKey =  FILTER(eId IN u.joinKey WHERE eId <> mu.externalId) + mu.externalId " +
                            "MERGE mu-[:MERGED]->u " + "RETURN u.mergedLogins as mergedLogins ", params);
                            tx.commit(new Handler<Message<JsonObject>>() {
                                @Override
                                public void handle(Message<JsonObject> event) {
                                    message.reply(event.body());
                                }
                            });
                        } catch (TransactionException e) {
                            log.error("transaction.error", e);
                            message.reply(error.put("message", "transaction.error"));
                        }
                    } else {
                        message.reply(error.put("message", "user.not.found"));
                    }
                }
            });

}

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 w w w. ja  v a 2s. co  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.DuplicateUsers.java

License:Open Source License

private void calculateAndStoreScore(JsonObject searchUser, JsonArray findUsers, TransactionHelper tx) {
    String query = "MATCH (u:User {id : {sId}}), (d:User {id : {dId}}) "
            + "WHERE NOT({dId} IN coalesce(u.ignoreDuplicates, [])) AND NOT({sId} IN coalesce(d.ignoreDuplicates, [])) "
            + "AND (has(u.activationCode) OR has(d.activationCode)) "
            + "MERGE u-[:DUPLICATE {score:{score}}]-d ";
    JsonObject params = new JsonObject().put("sId", searchUser.getString("id"));

    final String lastName = cleanAttribute(searchUser.getString("lastName"));
    final String firstName = cleanAttribute(searchUser.getString("firstName"));
    final String birthDate = cleanAttribute(searchUser.getString("birthDate"));
    final String email = cleanAttribute(searchUser.getString("email"));
    final String source = searchUser.getString("source");
    final Long disappearanceDate = searchUser.getLong("disappearanceDate");

    for (int i = 0; i < findUsers.size(); i++) {
        int score = 2;
        JsonObject fu = findUsers.getJsonObject(i);
        score += exactMatch(lastName, cleanAttribute(fu.getString("lastName")));
        score += exactMatch(firstName, cleanAttribute(fu.getString("firstName")));
        score += exactMatch(birthDate, cleanAttribute(fu.getString("birthDate")));
        score += exactMatch(email, cleanAttribute(fu.getString("email")));
        if (score > 3 && ((!source.equals(fu.getString("source")) && (notDeduplicateSource.contains(source)
                ^ notDeduplicateSource.contains(fu.getString("source")))) || disappearanceDate != null
                || fu.getLong("disappearanceDate") != null)) {
            tx.add(query, params.copy().put("dId", fu.getString("id")).put("score", score));
        }/*from  w w  w  .  ja  v  a 2  s  . c o m*/
    }
}

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

License:Open Source License

private void wsCall(JsonObject object) {
    for (String url : object.fieldNames()) {
        final JsonArray endpoints = object.getJsonArray(url);
        if (endpoints == null || endpoints.size() < 1)
            continue;
        try {/*from  ww  w  .java2s.c  o m*/
            final URI uri = new URI(url);
            HttpClientOptions options = new HttpClientOptions().setDefaultHost(uri.getHost())
                    .setDefaultPort(uri.getPort()).setMaxPoolSize(16).setSsl("https".equals(uri.getScheme()))
                    .setConnectTimeout(10000).setKeepAlive(false);
            final HttpClient client = vertx.createHttpClient(options);

            final Handler[] handlers = new Handler[endpoints.size() + 1];
            handlers[handlers.length - 1] = new Handler<Void>() {
                @Override
                public void handle(Void v) {
                    client.close();
                }
            };
            for (int i = endpoints.size() - 1; i >= 0; i--) {
                final int ji = i;
                handlers[i] = new Handler<Void>() {
                    @Override
                    public void handle(Void v) {
                        final JsonObject j = endpoints.getJsonObject(ji);
                        logger.info("endpoint : " + j.encode());
                        final HttpClientRequest req = client.request(HttpMethod.valueOf(j.getString("method")),
                                j.getString("uri"), new Handler<HttpClientResponse>() {
                                    @Override
                                    public void handle(HttpClientResponse resp) {
                                        if (resp.statusCode() >= 300) {
                                            logger.warn("Endpoint " + j.encode() + " error : "
                                                    + resp.statusCode() + " " + resp.statusMessage());
                                        }
                                        handlers[ji + 1].handle(null);
                                    }
                                });
                        JsonObject headers = j.getJsonObject("headers");
                        if (headers != null && headers.size() > 0) {
                            for (String h : headers.fieldNames()) {
                                req.putHeader(h, headers.getString(h));
                            }
                        }
                        req.exceptionHandler(
                                e -> logger.error("Error in ws call post import : " + j.encode(), e));
                        if (j.getString("body") != null) {
                            req.end(j.getString("body"));
                        } else {
                            req.end();
                        }
                    }
                };
            }
            handlers[0].handle(null);
        } catch (URISyntaxException e) {
            logger.error("Invalid uri in ws call after import : " + url, e);
        }
    }
}

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

License:Open Source License

private void storeImportedEvent() {
    String countQuery = "MATCH (:User) WITH count(*) as nbUsers "
            + "MATCH (:Structure) WITH count(*) as nbStructures, nbUsers "
            + "MATCH (:Class) RETURN nbUsers, nbStructures, count(*) as nbClasses ";
    neo4j.execute(countQuery, (JsonObject) null, new Handler<Message<JsonObject>>() {
        @Override/* w  ww .j  av  a 2s  . c  om*/
        public void handle(Message<JsonObject> event) {
            JsonArray res = event.body().getJsonArray("result");
            if ("ok".equals(event.body().getString("status")) && res != null && res.size() == 1) {
                eventStore.createAndStoreEvent(Feeder.FeederEvent.IMPORT.name(), (UserInfos) null,
                        res.getJsonObject(0));
            } else {
                logger.error(event.body().getString("message"));
            }
        }
    });
}

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

License:Open Source License

private void applyComRules(final Handler<Void> handler) {
    if (config.getBoolean("apply-communication-rules", false)) {
        String q = "MATCH (s:Structure) return COLLECT(s.id) as ids";
        neo4j.execute(q, new JsonObject(), new Handler<Message<JsonObject>>() {
            @Override/* www .  j a v a 2s . c o  m*/
            public void handle(Message<JsonObject> message) {
                JsonArray ids = message.body().getJsonArray("result",
                        new fr.wseduc.webutils.collections.JsonArray());
                if ("ok".equals(message.body().getString("status")) && ids != null && ids.size() == 1) {
                    JsonObject j = new JsonObject().put("action", "initAndApplyDefaultCommunicationRules")
                            .put("schoolIds", (ids.getJsonObject(0)).getJsonArray("ids",
                                    new fr.wseduc.webutils.collections.JsonArray()));
                    eb.send("wse.communication", j, new DeliveryOptions().setSendTimeout(3600 * 1000l),
                            handlerToAsyncHandler(new Handler<Message<JsonObject>>() {
                                @Override
                                public void handle(Message<JsonObject> event) {
                                    if (!"ok".equals(event.body().getString("status"))) {
                                        logger.error("Init rules error : " + event.body().getString("message"));
                                    } else {
                                        logger.info("Communication rules applied.");
                                    }
                                    handler.handle(null);
                                }
                            }));
                } else {
                    logger.error(message.body().getString("message"));
                    handler.handle(null);
                }
            }
        });
    } else {
        handler.handle(null);
    }
}

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

License:Open Source License

public void transition(final Handler<Message<JsonObject>> handler) {
    final TransactionHelper tx = TransactionManager.getInstance().getTransaction("GraphDataUpdate");
    String query = "MATCH (s:Structure {id : {id}})<-[:BELONGS]-(c:Class)"
            + "<-[:DEPENDS]-(cpg:Group)<-[:IN]-(u:User) " + "OPTIONAL MATCH s<-[:DEPENDS]-(fg:FunctionalGroup) "
            + "RETURN collect(distinct u.id) as users, collect(distinct cpg.id) as profileGroups, "
            + "collect(distinct fg.id) as functionalGroups";
    JsonObject params = new JsonObject().put("id", id);
    tx.getNeo4j().execute(query, params, new Handler<Message<JsonObject>>() {
        @Override//  ww w .j  av a2s . c  om
        public void handle(Message<JsonObject> event) {
            JsonArray r = event.body().getJsonArray("result");
            if ("ok".equals(event.body().getString("status")) && r != null && r.size() == 1) {
                final JsonObject res = r.getJsonObject(0);
                usersInGroups(new Handler<Message<JsonObject>>() {

                    @Override
                    public void handle(Message<JsonObject> event) {
                        if ("ok".equals(event.body().getString("status"))) {
                            for (Object u : res.getJsonArray("users")) {
                                User.backupRelationship(u.toString(), tx);
                                User.transition(u.toString(), tx);
                            }
                            transitionClassGroup();
                            handler.handle(event);
                        } else {
                            log.error("Structure " + id + " transition error - useringroups.");
                            log.error(event.body().encode());
                            handler.handle(event);
                        }
                    }
                });
            } else {
                log.error("Structure " + id + " transition error.");
                log.error(event.body().encode());
                handler.handle(event);
            }
        }
    });
}

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/* w  w  w  .  j  a v  a2  s  . 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.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 a2s . com*/
        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);
        }
    });
}