List of usage examples for io.vertx.core.json JsonArray getJsonObject
public JsonObject getJsonObject(int pos)
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); } }); }