Example usage for io.vertx.core.eventbus Message reply

List of usage examples for io.vertx.core.eventbus Message reply

Introduction

In this page you can find the example usage for io.vertx.core.eventbus Message reply.

Prototype

default void reply(@Nullable Object message) 

Source Link

Document

Reply to this message.

Usage

From source file:org.entcore.directory.controllers.TimetableController.java

License:Open Source License

private Handler<Either<String, JsonArray>> getBusResultHandler(final Message<JsonObject> message) {
    return new Handler<Either<String, JsonArray>>() {
        @Override//  w  w  w.j  av  a2s. c  om
        public void handle(Either<String, JsonArray> result) {
            if (result.isRight()) {
                message.reply(new JsonObject().put("status", "ok").put("results", result.right().getValue()));
            } else {
                message.reply(new JsonObject().put("status", "error").put("message", result.left().getValue()));
            }
        }
    };
}

From source file:org.entcore.directory.controllers.UserBookController.java

License:Open Source License

@BusAddress("userbook.preferences")
public void getUserPreferences(final Message<JsonObject> message) {
    final HttpServerRequest request = new JsonHttpServerRequest(message.body().getJsonObject("request"));
    final String application = message.body().getString("application");
    final String action = message.body().getString("action");

    if (action == null) {
        log.warn("[@BusAddress](userbook.preferences) Invalid action.");
        message.reply(new JsonObject().put("status", "error").put("message", "Invalid action."));
        return;/*from   w ww .  ja va  2s  .  co m*/
    }

    switch (action) {
    case "get.currentuser":
        UserUtils.getUserInfos(eb, request, new Handler<UserInfos>() {
            public void handle(UserInfos user) {
                getUserPrefs(user, request, application, new Handler<Either<String, JsonObject>>() {
                    public void handle(Either<String, JsonObject> result) {
                        if (result.isLeft()) {
                            message.reply(new JsonObject().put("status", "error").put("message",
                                    result.left().getValue()));
                        } else {
                            message.reply(new JsonObject().put("status", "ok").put("value",
                                    result.right().getValue()));
                        }
                    }
                });
            }
        });
        break;
    case "get.userlist":
        final JsonArray userIds = message.body().getJsonArray("userIds",
                new fr.wseduc.webutils.collections.JsonArray());
        String query = "MATCH (u:User) " + message.body().getString("additionalMatch", "")
                + "WHERE u.id IN {userIds} AND u.activationCode IS NULL "
                + message.body().getString("additionalWhere", "")
                + "OPTIONAL MATCH (u)-[:PREFERS]->(uac:UserAppConf)  "
                + "RETURN COLLECT(DISTINCT {userId: u.id, userMail: u.email, lastDomain: u.lastDomain, preferences: uac"
                + message.body().getString("additionalCollectFields", "") + "}) AS preferences";
        neo.execute(query, new JsonObject().put("userIds", userIds),
                Neo4jResult.validResultHandler(new Handler<Either<String, JsonArray>>() {
                    public void handle(Either<String, JsonArray> event) {
                        if (event.isLeft()) {
                            message.reply(new JsonObject().put("status", "error").put("message",
                                    event.left().getValue()));
                            return;
                        }
                        JsonArray results = (event.right().getValue().getJsonObject(0))
                                .getJsonArray("preferences", new fr.wseduc.webutils.collections.JsonArray());
                        for (Object resultObj : results) {
                            JsonObject result = (JsonObject) resultObj;
                            JsonObject prefs = new JsonObject();
                            try {
                                prefs = new JsonObject(
                                        getOrElse(
                                                getOrElse(
                                                        getOrElse(result.getJsonObject("preferences"),
                                                                new JsonObject(), false).getJsonObject("data"),
                                                        new JsonObject(), false).getString(application),
                                                "{}", false));
                            } catch (Exception e) {
                                log.error("UserId [" + result.getString("userId", "")
                                        + "] - Bad application preferences format");
                            }
                            result.put("preferences", prefs);
                        }
                        message.reply(new JsonObject().put("status", "ok").put("results", results));
                    }
                }));
        break;
    default:
        message.reply(new JsonObject().put("status", "error").put("message", "Invalid action."));
        break;
    }

}

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 w w  w.  j a v  a  2 s  . c  o  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"));
            }
        }
    });
}

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

License:Open Source License

public void ignoreDuplicate(final Message<JsonObject> message) {
    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;/*from  ww  w  .  j a va  2  s  .co m*/
    }
    String query = "MATCH (u1:User {id: {userId1}})-[r:DUPLICATE]-(u2:User {id: {userId2}}) "
            + "SET u1.ignoreDuplicates = coalesce(u1.ignoreDuplicates, []) + u2.id, "
            + "u2.ignoreDuplicates = coalesce(u2.ignoreDuplicates, []) + u1.id " + "DELETE r";
    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) {
            message.reply(event.body());
        }
    });
}

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

License:Open Source License

public void listDuplicates(final Message<JsonObject> message) {
    JsonArray structures = message.body().getJsonArray("structures");
    boolean inherit = message.body().getBoolean("inherit");
    final Integer minScore = message.body().getInteger("minScore");
    final boolean inSameStructure = message.body().getBoolean("inSameStructure", false);

    final String filter = (minScore != null) ? ((inSameStructure) ? "AND" : "WHERE") + " r.score >= {minScore} "
            : "";
    String query;/*from w  w  w.j a  va  2s  .com*/
    if (structures != null && structures.size() > 0) {
        if (inherit) {
            query = "MATCH (s:Structure)<-[:HAS_ATTACHMENT*0..]-(so:Structure)<-[:DEPENDS]-(pg:ProfileGroup) ";
        } else {
            query = "MATCH (s:Structure)<-[:DEPENDS]-(pg:ProfileGroup) ";
        }
        query += "WHERE s.id IN {structures} " + "WITH COLLECT(pg.id) as groupIds "
                + "MATCH (g1:ProfileGroup)<-[:IN]-(u1:User)-[r:DUPLICATE]->(u2:User)-[:IN]->(g2:ProfileGroup) "
                + "WHERE g1.id IN groupIds AND g2.id IN groupIds " + "MATCH (s1:Structure)<-[:DEPENDS]-(g1) "
                + filter + "OPTIONAL MATCH (s2:Structure)<-[:DEPENDS]-(g2) ";
        query += "RETURN r.score as score, "
                + "{id: u1.id, firstName: u1.firstName, lastName: u1.lastName, birthDate: u1.birthDate, email: u1.email, profiles: u1.profiles, structures: collect(distinct s1.id)} as user1, "
                + "{id: u2.id, firstName: u2.firstName, lastName: u2.lastName, birthDate: u2.birthDate, email: u2.email, profiles: u2.profiles, structures: collect(distinct s2.id)} as user2 "
                + "ORDER BY score DESC";
    } else {
        if (inSameStructure) {
            query = "match (s:Structure)<-[:DEPENDS]-(:ProfileGroup)<-[:IN]-(u1:User)-[r:DUPLICATE]-(u2:User) WHERE u2-[:IN]->(:ProfileGroup)-[:DEPENDS]->(s) ";
        } else {
            query = "MATCH (u1:User)-[r:DUPLICATE]->(u2:User) ";
        }
        query += filter + "RETURN r.score as score, "
                + "{id: u1.id, firstName: u1.firstName, lastName: u1.lastName, birthDate: u1.birthDate, email: u1.email, profiles: u1.profiles} as user1, "
                + "{id: u2.id, firstName: u2.firstName, lastName: u2.lastName, birthDate: u2.birthDate, email: u2.email, profiles: u2.profiles} as user2 "
                + "ORDER BY score DESC";
    }
    JsonObject params = new JsonObject().put("structures", structures).put("minScore", minScore);
    TransactionManager.getNeo4jHelper().execute(query, params, new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> event) {
            message.reply(event.body());
        }
    });
}

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;/*from  ww w. java  2  s . c  o m*/
    }
    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

private void mergeDuplicate(final JsonObject r, final Message<JsonObject> message, final TransactionHelper tx) {
    final String source1 = r.getString("source1");
    final String source2 = r.getString("source2");
    final boolean activatedU1 = r.getBoolean("activatedU1", false);
    final boolean activatedU2 = r.getBoolean("activatedU2", false);
    final String userId1 = r.getString("userId1");
    final String userId2 = r.getString("userId2");
    final boolean missing1 = r.getLong("disappearanceDate1") != null || r.getLong("deleteDate1") != null;
    final boolean missing2 = r.getLong("disappearanceDate2") != null || r.getLong("deleteDate2") != null;
    final JsonObject error = new JsonObject().put("status", "error");
    if (source1 != null && source1.equals(source2) && notDeduplicateSource.contains(source1) && !missing1
            && !missing2) {/*  w  w  w . ja v a2s.c o m*/
        message.reply(error.put("message", "two.users.in.same.source"));
        return;
    }
    String query;
    JsonObject params = new JsonObject();
    if ((activatedU1 && prioritySource(source1) >= prioritySource(source2))
            || (activatedU2 && prioritySource(source1) <= prioritySource(source2))
            || (!activatedU1 && !activatedU2)) {
        query = SIMPLE_MERGE_QUERY;
        if (prioritySource(source1) == prioritySource(source2) && notDeduplicateSource.contains(source1)) {
            if (!missing1 && activatedU1) {
                params.put("userId1", userId1).put("userId2", userId2);
            } else if (!missing2 && activatedU2) {
                params.put("userId1", userId2).put("userId2", userId1);
            } else {
                query = SWITCH_MERGE_QUERY;
                if (activatedU1) {
                    params.put("userId1", userId1).put("userId2", userId2);
                } else {
                    params.put("userId1", userId2).put("userId2", userId1);
                }
            }
        } else {
            if (activatedU1) {
                params.put("userId1", userId1).put("userId2", userId2);
            } else if (activatedU2) {
                params.put("userId1", userId2).put("userId2", userId1);
            } else {
                if (prioritySource(source1) > prioritySource(source2)) {
                    params.put("userId1", userId1).put("userId2", userId2);
                } else {
                    params.put("userId1", userId2).put("userId2", userId1);
                }
            }
        }
    } else if ((activatedU1 && prioritySource(source1) < prioritySource(source2))
            || (activatedU2 && prioritySource(source1) > prioritySource(source2))) {
        query = SWITCH_MERGE_QUERY;
        if (activatedU1) {
            params.put("userId1", userId1).put("userId2", userId2);
        } else {
            params.put("userId1", userId2).put("userId2", userId1);
        }
    } else {
        message.reply(error.put("message", "invalid.merge.case"));
        return;
    }
    if (tx != null) {
        tx.add(INCREMENT_RELATIVE_SCORE, params);
        tx.add(query, params);
        sendMergedEvent(params.getString("userId1"), params.getString("userId2"));
        message.reply(new JsonObject().put("status", "ok"));
    } else {
        try {
            TransactionHelper txl = TransactionManager.getTransaction();
            txl.add(INCREMENT_RELATIVE_SCORE, params);
            txl.add(query, params);
            txl.commit(new Handler<Message<JsonObject>>() {
                @Override
                public void handle(Message<JsonObject> event) {
                    if ("ok".equals(event.body().getString("status"))) {
                        log.info("Merge duplicates : " + r.encode());
                        if (updateCourses) {
                            AbstractTimetableImporter.updateMergedUsers(event.body().getJsonArray("results"));
                        }
                        sendMergedEvent(params.getString("userId1"), params.getString("userId2"));
                    }
                    message.reply(event.body());
                }
            });
        } catch (TransactionException e) {
            message.reply(error.put("message", "invalid.transaction"));
        }
    }
}

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

License:Open Source License

private void launchExport(final Message<JsonObject> message) {
    if (exporter == null) {
        sendError(message, "exporter.not.found");
        return;// w  w w .j  a  va  2 s . co  m
    }
    try {
        final long start = System.currentTimeMillis();
        exporter.export(new Handler<Message<JsonObject>>() {
            @Override
            public void handle(Message<JsonObject> m) {
                logger.info("Elapsed time " + (System.currentTimeMillis() - start) + " ms.");
                logger.info(m.body().encode());
                message.reply(m.body());
                eb.publish(USER_REPOSITORY,
                        new JsonObject().put("action", "exported").put("exportFormat", exporter.getName()));
            }
        });
    } catch (Exception e) {
        sendError(message, e.getMessage(), e);
    }
}

From source file:org.entcore.feeder.ManualFeeder.java

License:Open Source License

public void createStructure(final Message<JsonObject> message) {
    JsonObject struct = getMandatoryObject("data", message);
    if (struct == null)
        return;//from  w  ww.  j ava 2  s. c  o  m
    if (struct.getString("externalId") == null) {
        struct.put("externalId", UUID.randomUUID().toString());
    }
    final String error = structureValidator.validate(struct);
    if (error != null) {
        logger.error(error);
        sendError(message, error);
    } else {
        String query = "CREATE (s:Structure {props}) " + "WITH s " + "MATCH (p:Profile) "
                + "CREATE p<-[:HAS_PROFILE]-(g:Group:ProfileGroup {name : s.name+'-'+p.name, displayNameSearchField: {groupSearchField}})-[:DEPENDS]->s "
                + "SET g.id = id(g)+'-'+timestamp() " + "RETURN DISTINCT s.id as id ";
        JsonObject params = new JsonObject()
                .put("groupSearchField", Validator.sanitize(struct.getString("name"))).put("props", struct);
        neo4j.execute(query, params, new Handler<Message<JsonObject>>() {
            @Override
            public void handle(Message<JsonObject> m) {
                message.reply(m.body());
            }
        });
    }
}