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