List of usage examples for io.vertx.core.eventbus Message reply
default void reply(@Nullable Object message)
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()); } }); } }