List of usage examples for io.vertx.core.eventbus Message body
@CacheReturn T body();
From source file:org.entcore.feeder.aaf.BaseImportProcessing.java
License:Open Source License
protected void next(final Handler<Message<JsonObject>> handler, final ImportProcessing importProcessing) { preCommit();/* w w w. j av a 2s . c om*/ if (importProcessing != null) { importer.persist(new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> message) { if ("ok".equals(message.body().getString("status"))) { importProcessing.start(handler); } else { error(message, handler); } } }); } else { importer.persist(handler); } }
From source file:org.entcore.feeder.aaf.BaseImportProcessing.java
License:Open Source License
protected void error(Message<JsonObject> message, Handler<Message<JsonObject>> handler) { log.error(message.body().getString("message")); if (handler != null) { handler.handle(message);/* ww w . j a va 2 s .c o m*/ } }
From source file:org.entcore.feeder.aaf1d.Aaf1dFeeder.java
License:Open Source License
@Override public void launch(Importer importer, final Handler<Message<JsonObject>> handler) throws Exception { vertx.fileSystem().readFile(path + File.separator + AafFeeder.IMPORT_DIRECTORIES_JSON, new Handler<AsyncResult<Buffer>>() { @Override//from ww w .ja v a2s . c om public void handle(AsyncResult<Buffer> f) { if (f.succeeded()) { final JsonArray importSubDirectories; try { importSubDirectories = new fr.wseduc.webutils.collections.JsonArray( f.result().toString()); } catch (RuntimeException e) { handler.handle(new ResultMessage().error("invalid.importDirectories.file")); log.error("Invalid importDirectories file.", e); return; } vertx.fileSystem().readDir(path, new Handler<AsyncResult<List<String>>>() { @Override public void handle(AsyncResult<List<String>> event) { if (event.succeeded()) { final List<String> importsDirs = new ArrayList<>(); for (String dir : event.result()) { final int idx = dir.lastIndexOf(File.separator); if (idx >= 0 && dir.length() > idx && importSubDirectories.contains(dir.substring(idx + 1))) { importsDirs.add(dir); } } if (importsDirs.size() < 1) { handler.handle(new ResultMessage().error("missing.subdirectories")); return; } final Handler<Message<JsonObject>>[] handlers = new Handler[importsDirs .size()]; handlers[handlers.length - 1] = new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { handler.handle(m); } }; for (int i = importsDirs.size() - 2; i >= 0; i--) { final int j = i + 1; handlers[i] = new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { if (m != null && "ok".equals(m.body().getString("status"))) { new StructureImportProcessing1d(importsDirs.get(j), vertx) .start(handlers[j]); } else { handler.handle(m); } } }; } new StructureImportProcessing1d(importsDirs.get(0), vertx) .start(handlers[0]); } else { handler.handle(new ResultMessage().error(event.cause().getMessage())); } } }); } else { new StructureImportProcessing1d(path, vertx).start(handler); } } }); }
From source file:org.entcore.feeder.csv.CsvFeeder.java
License:Open Source License
private void parse(final Importer importer, final String p, final Handler<Message<JsonObject>> handler) { vertx.fileSystem().readDir(p, new Handler<AsyncResult<List<String>>>() { @Override//from w w w .j av a 2 s . co m public void handle(AsyncResult<List<String>> event) { if (event.succeeded() && event.result().size() == 1) { final String path = event.result().get(0); final Structure s; try { JsonObject structure = CSVUtil.getStructure(path); final String overrideClass = structure.getString("overrideClass"); // final boolean isUpdate = importer.getStructure(structure.getString("externalId")) != null; s = importer.createOrUpdateStructure(structure); if (s == null) { log.error("Structure error with directory " + path + "."); handler.handle(new ResultMessage().error("structure.error")); return; } if (isNotEmpty(overrideClass)) { s.setOverrideClass(overrideClass); } } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { log.error("Structure error with directory " + path + "."); handler.handle(new ResultMessage().error("structure.error")); return; } vertx.fileSystem().readDir(path, new Handler<AsyncResult<List<String>>>() { @Override public void handle(final AsyncResult<List<String>> event) { if (event.succeeded()) { checkNotModifiableExternalId(event.result(), path, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { if ("ok".equals(m.body().getString("status"))) { launchFiles(path, event.result(), s, importer, handler); } else { handler.handle(m); } } }); } else { handler.handle(new ResultMessage().error("error.list.files")); } } }); } else { handler.handle(new ResultMessage().error("error.list.files")); } } }); }
From source file:org.entcore.feeder.csv.CsvFeeder.java
License:Open Source License
private void launchFiles(final String path, final List<String> files, final Structure structure, final Importer importer, final Handler<Message<JsonObject>> handler) { Collections.sort(files, Collections.reverseOrder()); final Set<String> parsedFiles = new HashSet<>(); final Handler[] handlers = new Handler[files.size() + 1]; handlers[handlers.length - 1] = new Handler<Void>() { @Override// w w w.j a v a2s . c om public void handle(Void v) { importer.restorePreDeletedUsers(); importer.addStructureNameInGroups(structure.getExternalId(), null); importer.persist(handler); } }; for (int i = files.size() - 1; i >= 0; i--) { final int j = i; handlers[i] = new Handler<Void>() { @Override public void handle(Void v) { final String file = files.get(j); if (!parsedFiles.add(file)) { return; } try { log.info("Parsing file : " + file); final String profile = file.substring(path.length() + 1).replaceFirst(".csv", ""); CSVUtil.getCharset(vertx, file, new Handler<String>() { @Override public void handle(String charset) { start(profile, structure, file, charset, importer, handler); importer.flush(new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> message) { if ("ok".equals(message.body().getString("status"))) { handlers[j + 1].handle(null); } else { importer.getReport().addErrorWithParams("file.error", file); handler.handle(null); } } }); } }); } catch (Exception e) { importer.getReport().addErrorWithParams("file.error", file); handler.handle(null); log.error("file.error", e); } } }; } handlers[0].handle(null); }
From source file:org.entcore.feeder.csv.CsvFeeder.java
License:Open Source License
private void queryNotModifiableIds(final Handler<Message<JsonObject>> handler, JsonArray externalIds) { if (externalIds.size() > 0) { String query = "MATCH (u:User) where u.externalId IN {ids} AND u.source IN ['AAF', 'AAF1D'] " + "AND NOT(HAS(u.deleteDate)) AND NOT(HAS(u.disappearanceDate)) " + "RETURN COLLECT(u.externalId) as ids"; TransactionManager.getNeo4jHelper().execute(query, new JsonObject().put("ids", externalIds), new Handler<Message<JsonObject>>() { @Override//from w w w . j a v a 2 s . c o m public void handle(Message<JsonObject> event) { if ("ok".equals(event.body().getString("status"))) { JsonArray res = event.body().getJsonArray("result"); JsonArray ids; if (res != null && res.size() > 0 && res.getJsonObject(0) != null && (ids = res.getJsonObject(0).getJsonArray("ids")) != null && ids.size() > 0) { handler.handle( new ResultMessage().error("unmodifiable.externalId-" + ids.encode())); } else { handler.handle(new ResultMessage()); } } else { handler.handle(event); } } }); } else { handler.handle(new ResultMessage()); } }
From source file:org.entcore.feeder.csv.CsvImportsLauncher.java
License:Open Source License
private void importFiles(AtomicInteger validFilesCount, final String dirName, String structureExternalId, final Handler<Void>[] handlers, final int j, final FileSystem fs) { if (validFilesCount.get() > 0) { JsonObject action = new JsonObject().put("action", "import").put("feeder", "CSV").put("path", dirName) .put("structureExternalId", structureExternalId).put("postImport", false) .put("preDelete", preDelete); vertx.eventBus().send("entcore.feeder", action, handlerToAsyncHandler(new Handler<Message<JsonObject>>() { @Override// w w w. ja va 2 s. com public void handle(Message<JsonObject> event) { log.info(event.body().encodePrettily()); fs.deleteRecursive(dirName, true, new Handler<AsyncResult<Void>>() { @Override public void handle(AsyncResult<Void> event) { handlers[j + 1].handle(null); } }); } })); } else { emptyDirectory(fs, dirName, handlers, j); } }
From source file:org.entcore.feeder.csv.CsvValidator.java
License:Open Source License
private void filterExternalIdExists(JsonArray externalIds, final Handler<JsonArray> handler) { String query = "MATCH (u:User) where u.externalId in {externalIds} return collect(u.externalId) as ids"; TransactionManager.getNeo4jHelper().execute(query, new JsonObject().put("externalIds", externalIds), new Handler<Message<JsonObject>>() { @Override// w ww . j a v a 2s . co m public void handle(Message<JsonObject> event) { JsonArray result = event.body().getJsonArray("result"); if ("ok".equals(event.body().getString("status")) && result.size() == 1) { handler.handle(result.getJsonObject(0).getJsonArray("ids")); } else { handler.handle(null); } } }); }
From source file:org.entcore.feeder.csv.CsvValidator.java
License:Open Source License
private void validateFile(final String path, final String profile, final List<String> columns, final JsonArray existExternalId, final String charset, final Handler<JsonObject> handler) { addProfile(profile);/*from w w w . ja v a2s.c o m*/ final Validator validator = profiles.get(profile); getStructure(path.substring(0, path.lastIndexOf(File.separator)), new Handler<Structure>() { @Override public void handle(final Structure structure) { if (structure == null) { addError(profile, "invalid.structure"); handler.handle(result); return; } final JsonObject checkChildExists = new JsonObject(); try { CSVReader csvParser = getCsvReader(path, charset, 1); final int nbColumns = columns.size(); String[] strings; int i = 1; csvParserWhile: while ((strings = csvParser.readNext()) != null) { if (emptyLine(strings)) { i++; continue; } if (strings.length > nbColumns) { strings = Arrays.asList(strings).subList(0, nbColumns).toArray(new String[nbColumns]); } // if (strings.length != nbColumns) { // addErrorByFile(profile, "bad.columns.number", "" + ++i); // continue; // } final JsonArray classesNames = new fr.wseduc.webutils.collections.JsonArray(); JsonObject user = new JsonObject(); user.put("structures", new fr.wseduc.webutils.collections.JsonArray().add(structure.getExternalId())); user.put("profiles", new fr.wseduc.webutils.collections.JsonArray().add(profile)); List<String[]> classes = new ArrayList<>(); for (int j = 0; j < strings.length; j++) { if (j >= columns.size()) { addErrorByFile(profile, "out.columns", "" + i); return; } final String c = columns.get(j); final String v = strings[j].trim(); if (v.isEmpty() && !c.startsWith("child")) continue; switch (validator.getType(c)) { case "string": if ("birthDate".equals(c)) { Matcher m = frenchDatePatter.matcher(v); if (m.find()) { user.put(c, m.group(3) + "-" + m.group(2) + "-" + m.group(1)); } else { user.put(c, v); } } else { user.put(c, v); } break; case "array-string": JsonArray a = user.getJsonArray(c); if (a == null) { a = new fr.wseduc.webutils.collections.JsonArray(); user.put(c, a); } if (("classes".equals(c) || "subjectTaught".equals(c) || "functions".equals(c)) && !v.startsWith(structure.getExternalId() + "$")) { a.add(structure.getExternalId() + "$" + v); } else { a.add(v); } break; case "boolean": user.put(c, "true".equals(v.toLowerCase())); break; default: Object o = user.getValue(c); final String v2; if ("childClasses".equals(c) && !v.startsWith(structure.getExternalId() + "$")) { v2 = structure.getExternalId() + "$" + v; } else { v2 = v; } if (o != null) { if (o instanceof JsonArray) { ((JsonArray) o).add(v2); } else { JsonArray array = new fr.wseduc.webutils.collections.JsonArray(); array.add(o).add(v2); user.put(c, array); } } else { user.put(c, v2); } } if ("classes".equals(c)) { String eId = structure.getExternalId() + '$' + v; String[] classId = new String[2]; classId[0] = structure.getExternalId(); classId[1] = eId; classes.add(classId); classesNames.add(v); } } String ca; long seed; JsonArray classesA; Object co = user.getValue("classes"); if (co != null && co instanceof JsonArray) { classesA = (JsonArray) co; } else if (co instanceof String) { classesA = new fr.wseduc.webutils.collections.JsonArray().add(co); } else { classesA = null; } if ("Student".equals(profile) && classesA != null && classesA.size() == 1) { seed = defaultStudentSeed; ca = classesA.getString(0); } else { ca = String.valueOf(i); seed = System.currentTimeMillis(); } final State state; final String externalId = user.getString("externalId"); if (externalId == null || externalId.trim().isEmpty()) { generateUserExternalId(user, ca, structure, seed); state = State.NEW; } else { if (existExternalId.contains(externalId)) { state = State.UPDATED; studentExternalIdMapping.put(getHashMapping(user, ca, structure, seed), externalId); } else { state = State.NEW; } } switch (profile) { case "Relative": boolean checkChildMapping = true; JsonArray linkStudents = new fr.wseduc.webutils.collections.JsonArray(); if ("Intitul".equals(strings[0]) && "Adresse Organisme".equals(strings[1])) { break csvParserWhile; } user.put("linkStudents", linkStudents); for (String attr : user.fieldNames()) { if ("childExternalId".equals(attr)) { if (checkChildMapping) { checkChildMapping = false; } Object o = user.getValue(attr); if (o instanceof JsonArray) { for (Object c : (JsonArray) o) { linkStudents.add(c); } } else { linkStudents.add(o); } } else if ("childUsername".equals(attr)) { Object childUsername = user.getValue(attr); Object childLastName = user.getValue("childLastName"); Object childFirstName = user.getValue("childFirstName"); Object childClasses; if (isNotEmpty(structure.getOverrideClass())) { childClasses = structure.getOverrideClass(); } else { childClasses = user.getValue("childClasses"); } if (childUsername instanceof JsonArray && childLastName instanceof JsonArray && childFirstName instanceof JsonArray && childClasses instanceof JsonArray && ((JsonArray) childClasses).size() == ((JsonArray) childLastName) .size() && ((JsonArray) childFirstName).size() == ((JsonArray) childLastName) .size()) { for (int j = 0; j < ((JsonArray) childUsername).size(); j++) { String mapping = structure.getExternalId() + ((JsonArray) childUsername).getString(j).trim() + ((JsonArray) childLastName).getString(j).trim() + ((JsonArray) childFirstName).getString(j).trim() + ((JsonArray) childClasses).getString(j).trim() + defaultStudentSeed; relativeStudentMapping(linkStudents, mapping); } } else if (childUsername instanceof String && childLastName instanceof String && childFirstName instanceof String && childClasses instanceof String) { String mapping = structure.getExternalId() + childLastName.toString().trim() + childFirstName.toString().trim() + childClasses.toString().trim() + defaultStudentSeed; relativeStudentMapping(linkStudents, mapping); } else { addErrorByFile(profile, "invalid.child.mapping", "" + (i + 1), "childLUsername"); handler.handle(result); return; } } else if ("childLastName".equals(attr) && !user.fieldNames().contains("childUsername")) { Object childLastName = user.getValue(attr); Object childFirstName = user.getValue("childFirstName"); Object childClasses; if (isNotEmpty(structure.getOverrideClass())) { childClasses = structure.getOverrideClass(); } else { childClasses = user.getValue("childClasses"); } if (childLastName instanceof JsonArray && childFirstName instanceof JsonArray && childClasses instanceof JsonArray && ((JsonArray) childClasses).size() == ((JsonArray) childLastName) .size() && ((JsonArray) childFirstName).size() == ((JsonArray) childLastName) .size()) { for (int j = 0; j < ((JsonArray) childLastName).size(); j++) { String mapping = structure.getExternalId() + ((JsonArray) childLastName).getString(j) + ((JsonArray) childFirstName).getString(j) + ((JsonArray) childClasses).getString(j) + defaultStudentSeed; relativeStudentMapping(linkStudents, mapping); } } else if (childLastName instanceof String && childFirstName instanceof String && childClasses instanceof String) { String mapping = structure.getExternalId() + childLastName.toString().trim() + childFirstName.toString().trim() + childClasses.toString().trim() + defaultStudentSeed; relativeStudentMapping(linkStudents, mapping); } else { addErrorByFile(profile, "invalid.child.mapping", "" + (i + 1), "childLastName & childFirstName"); handler.handle(result); return; } } } if (checkChildMapping || classesNamesMapping.size() > 0) { for (Object o : linkStudents) { if (!(o instanceof String)) continue; if (classesNamesMapping.get(o) != null) { classesNames.add(classesNamesMapping.get(o)); } } if (classesNames.size() == 0) { addSoftErrorByFile(profile, "missing.student.soft", "" + (i + 1), user.getString("firstName"), user.getString("lastName")); } } else { Object c = user.getValue("childExternalId"); JsonObject u = new JsonObject().put("lastName", user.getString("lastName")) .put("firstName", user.getString("firstName")).put("line", i); if (c instanceof String) { c = new JsonArray().add(c); } if (c instanceof JsonArray) { for (Object ceId : ((JsonArray) c)) { if (isEmpty((String) ceId)) continue; JsonArray jr = checkChildExists.getJsonArray((String) ceId); if (jr == null) { jr = new JsonArray(); checkChildExists.put((String) ceId, jr); } jr.add(u); } } } break; } String error = validator.validate(user, acceptLanguage); if (error != null) { log.warn(error); addErrorByFile(profile, "validator.errorWithLine", "" + (i + 1), error); // Note that 'error' is already translated } else { final String classesStr = Joiner.on(", ").join(classesNames); if (!"Relative".equals(profile)) { classesNamesMapping.put(user.getString("externalId"), classesStr); } addUser(profile, user.put("state", translate(state.name())) .put("translatedProfile", translate(profile)).put("classesStr", classesStr)); } i++; } } catch (Exception e) { addError(profile, "csv.exception"); log.error("csv.exception", e); } if (!checkChildExists.isEmpty()) { final String query = "MATCH (u:User) " + "WHERE u.externalId IN {childExternalIds} " + "RETURN COLLECT(u.externalId) as childExternalIds "; final JsonObject params = new JsonObject().put("childExternalIds", new JsonArray(new ArrayList<>(checkChildExists.fieldNames()))); Neo4j.getInstance().execute(query, params, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { if ("ok".equals(event.body().getString("status"))) { JsonArray existsChilds = getOrElse( getOrElse(getOrElse(event.body().getJsonArray("result"), new JsonArray()) .getJsonObject(0), new JsonObject()) .getJsonArray("childExternalIds"), new JsonArray()); for (String cexternalId : checkChildExists.fieldNames()) { if (!existsChilds.contains(cexternalId)) { for (Object o : checkChildExists.getJsonArray(cexternalId)) { if (!(o instanceof JsonObject)) continue; JsonObject user = (JsonObject) o; addSoftErrorByFile(profile, "missing.student.soft", "" + (user.getInteger("line") + 1), user.getString("firstName"), user.getString("lastName")); } } } } handler.handle(result); } }); } else { handler.handle(result); } } }); }
From source file:org.entcore.feeder.csv.CsvValidator.java
License:Open Source License
private void getStructure(final String path, final Handler<Structure> handler) { String query = "MATCH (s:Structure {externalId:{id}})" + "return s.id as id, s.externalId as externalId, s.UAI as UAI, s.name as name"; TransactionManager.getNeo4jHelper().execute(query, new JsonObject().put("id", structureId), new Handler<Message<JsonObject>>() { @Override/*from w w w. j av a2 s .c o m*/ public void handle(Message<JsonObject> event) { JsonArray result = event.body().getJsonArray("result"); if ("ok".equals(event.body().getString("status")) && result != null && result.size() == 1) { final Structure s = new Structure(result.getJsonObject(0)); try { final JsonObject structure = CSVUtil.getStructure(path); final String overrideClass = structure.getString("overrideClass"); if (isNotEmpty(overrideClass)) { s.setOverrideClass(overrideClass); } } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { log.error("Error parsing structure path : " + path, e); } handler.handle(s); } else { try { final JsonObject structure = CSVUtil.getStructure(path); final String overrideClass = structure.getString("overrideClass"); final Structure s = new Structure(structure); if (isNotEmpty(overrideClass)) { s.setOverrideClass(overrideClass); } handler.handle(s); } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { handler.handle(null); } } } }); }