List of usage examples for io.vertx.core.json JsonObject getString
public String getString(String key)
From source file:org.entcore.feeder.export.eliot.BaseExportProcessing.java
License:Open Source License
private void addAttribute(JsonObject object, Object value, XMLEventWriter writer, XMLEventFactory eventFactory) throws XMLStreamException { final Object v = AAFUtil.convert(value, object.getString("converter")); if (v instanceof JsonObject) { JsonObject j = (JsonObject) v;/*from w w w. ja v a 2 s . c o m*/ for (String attr : j.fieldNames()) { addSingleAttribute(attr, j.getValue(attr), writer, eventFactory); } } else { String attr = object.getString("attribute"); if (attr != null) { addSingleAttribute(attr, v, writer, eventFactory); } } }
From source file:org.entcore.feeder.Feeder.java
License:Open Source License
@Override public void start() { super.start(); String node = (String) vertx.sharedData().getLocalMap("server").get("node"); if (node == null) { node = ""; }/*from ww w . j ava 2 s .co m*/ String neo4jConfig = (String) vertx.sharedData().getLocalMap("server").get("neo4jConfig"); if (neo4jConfig != null) { neo4j = Neo4j.getInstance(); neo4j.init(vertx, new JsonObject(neo4jConfig)); } MongoDb.getInstance().init(vertx.eventBus(), node + "wse.mongodb.persistor"); TransactionManager.getInstance().setNeo4j(neo4j); EventStoreFactory.getFactory().setVertx(vertx); defaultFeed = config.getString("feeder", "AAF"); feeds.put("AAF", new AafFeeder(vertx, getFilesDirectory("AAF"))); feeds.put("AAF1D", new Aaf1dFeeder(vertx, getFilesDirectory("AAF1D"))); feeds.put("CSV", new CsvFeeder(vertx, config.getJsonObject("csvMappings", new JsonObject()))); final long deleteUserDelay = config.getLong("delete-user-delay", 90 * 24 * 3600 * 1000l); final long preDeleteUserDelay = config.getLong("pre-delete-user-delay", 90 * 24 * 3600 * 1000l); final String deleteCron = config.getString("delete-cron", "0 0 2 * * ? *"); final String preDeleteCron = config.getString("pre-delete-cron", "0 0 3 * * ? *"); final String importCron = config.getString("import-cron"); final JsonObject imports = config.getJsonObject("imports"); final JsonObject preDelete = config.getJsonObject("pre-delete"); final TimelineHelper timeline = new TimelineHelper(vertx, eb, config); try { new CronTrigger(vertx, deleteCron).schedule(new User.DeleteTask(deleteUserDelay, eb, vertx)); if (preDelete != null) { if (preDelete.size() == ManualFeeder.profiles.size() && ManualFeeder.profiles.keySet().containsAll(preDelete.fieldNames())) { for (String profile : preDelete.fieldNames()) { final JsonObject profilePreDelete = preDelete.getJsonObject(profile); if (profilePreDelete == null || profilePreDelete.getString("cron") == null || profilePreDelete.getLong("delay") == null) continue; new CronTrigger(vertx, profilePreDelete.getString("cron")).schedule( new User.PreDeleteTask(profilePreDelete.getLong("delay"), profile, timeline)); } } } else { new CronTrigger(vertx, preDeleteCron) .schedule(new User.PreDeleteTask(preDeleteUserDelay, timeline)); } if (imports != null) { if (feeds.keySet().containsAll(imports.fieldNames())) { for (String f : imports.fieldNames()) { final JsonObject i = imports.getJsonObject(f); if (i != null && i.getString("cron") != null) { new CronTrigger(vertx, i.getString("cron")) .schedule(new ImporterTask(vertx, f, i.getBoolean("auto-export", false), config.getLong("auto-export-delay", 1800000l))); } } } else { logger.error("Invalid imports configuration."); } } else if (importCron != null && !importCron.trim().isEmpty()) { new CronTrigger(vertx, importCron).schedule(new ImporterTask(vertx, defaultFeed, config.getBoolean("auto-export", false), config.getLong("auto-export-delay", 1800000l))); } } catch (ParseException e) { logger.fatal(e.getMessage(), e); vertx.close(); return; } Validator.initLogin(neo4j, vertx); manual = new ManualFeeder(neo4j); duplicateUsers = new DuplicateUsers(config.getBoolean("timetable", true), config.getBoolean("autoMergeOnlyInSameStructure", true), vertx.eventBus()); postImport = new PostImport(vertx, duplicateUsers, config); vertx.eventBus().localConsumer(config.getString("address", FEEDER_ADDRESS), this); switch (config.getString("exporter", "")) { case "ELIOT": exporter = new EliotExporter(config.getString("export-path", "/tmp"), config.getString("export-destination"), config.getBoolean("concat-export", false), config.getBoolean("delete-export", true), vertx); break; } final JsonObject edt = config.getJsonObject("edt"); if (edt != null) { final String pronotePrivateKey = edt.getString("pronote-private-key"); if (isNotEmpty(pronotePrivateKey)) { edtUtils = new EDTUtils(vertx, pronotePrivateKey, config.getString("pronote-partner-name", "NEO-Open")); final String edtPath = edt.getString("path"); final String edtCron = edt.getString("cron"); if (isNotEmpty(edtPath) && isNotEmpty(edtCron)) { try { new CronTrigger(vertx, edtCron).schedule(new ImportsLauncher(vertx, edtPath, postImport, edtUtils, config.getBoolean("udt-user-creation", true))); } catch (ParseException e) { logger.error("Error in cron edt", e); } } } } final JsonObject udt = config.getJsonObject("udt"); if (udt != null) { final String udtPath = udt.getString("path"); final String udtCron = udt.getString("cron"); if (isNotEmpty(udtPath) && isNotEmpty(udtCron)) { try { new CronTrigger(vertx, udtCron).schedule(new ImportsLauncher(vertx, udtPath, postImport, edtUtils, config.getBoolean("udt-user-creation", true))); } catch (ParseException e) { logger.error("Error in cron udt", e); } } } final JsonObject csv = config.getJsonObject("csv"); if (csv != null) { final String csvPath = csv.getString("path"); final String csvCron = csv.getString("cron"); final JsonObject csvConfig = csv.getJsonObject("config"); if (isNotEmpty(csvPath) && isNotEmpty(csvCron) && csvConfig != null) { try { new CronTrigger(vertx, csvCron) .schedule(new CsvImportsLauncher(vertx, csvPath, csvConfig, postImport)); } catch (ParseException e) { logger.error("Error in cron csv", e); } } } I18n.getInstance().init(vertx); }
From source file:org.entcore.feeder.Feeder.java
License:Open Source License
private void launchImportValidation(final Message<JsonObject> message, final Handler<Report> handler) { logger.info(message.body().encodePrettily()); final String acceptLanguage = getOrElse(message.body().getString("language"), "fr"); final String source = getOrElse(message.body().getString("feeder"), defaultFeed); // TODO make validator factory final ImportValidator v; switch (source) { case "CSV": v = new CsvValidator(vertx, acceptLanguage, config.getJsonObject("csvMappings", new JsonObject())); break;/*www. j a va 2 s. c o m*/ case "AAF": case "AAF1D": final Report report = new Report(acceptLanguage); if (handler != null) { handler.handle(report); } else { sendOK(message, new JsonObject().put("result", report.getResult())); } return; default: sendError(message, "invalid.type"); return; } final String structureExternalId = message.body().getString("structureExternalId"); final boolean preDelete = getOrElse(message.body().getBoolean("preDelete"), false); String path = message.body().getString("path"); if (path == null && !"CSV".equals(source)) { path = config.getString("import-files"); } v.validate(path, new Handler<JsonObject>() { @Override public void handle(final JsonObject result) { final Report r = (Report) v; if (preDelete && structureExternalId != null && !r.containsErrors()) { final JsonArray externalIds = r.getUsersExternalId(); final JsonArray profiles = r.getResult().getJsonArray(Report.PROFILES); new User.PreDeleteTask(0).findMissingUsersInStructure(structureExternalId, source, externalIds, profiles, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { final JsonArray res = event.body().getJsonArray("result"); if ("ok".equals(event.body().getString("status")) && res != null) { for (Object o : res) { if (!(o instanceof JsonObject)) continue; JsonObject j = (JsonObject) o; String filename = j.getString("profile"); r.addUser(filename, j.put("state", r.translate(Report.State.DELETED.name())).put( "translatedProfile", r.translate(j.getString("profile")))); } r.getResult().put("usersExternalIds", externalIds); } else { r.addError("error.find.preDelete"); } if (handler != null) { handler.handle(r); } else { sendOK(message, new JsonObject().put("result", r.getResult())); } } }); } else { if (handler != null) { handler.handle(r); } else { sendOK(message, new JsonObject().put("result", r.getResult())); } } } }); }
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 a v a2 s . co 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()); } }); } }
From source file:org.entcore.feeder.ManualFeeder.java
License:Open Source License
public void createClass(final Message<JsonObject> message) { JsonObject c = getMandatoryObject("data", message); if (c == null) return;/*from w ww . j a v a 2s . c o m*/ String structureId = getMandatoryString("structureId", message); if (structureId == null) return; if (c.getString("externalId") == null || c.getString("externalId").isEmpty()) { c.put("externalId", structureId + "$" + c.getString("name")); } final String error = classValidator.validate(c); if (error != null) { logger.error(error); sendError(message, error); } else { String query = "MATCH (s:Structure { id : {structureId}}) " + "CREATE s<-[:BELONGS]-(c:Class {props}) " + "SET c.externalId = s.externalId + '$' + c.name " + "WITH s, c " + "MATCH s<-[:DEPENDS]-(g:ProfileGroup)-[:HAS_PROFILE]->(p:Profile) " + "CREATE c<-[:DEPENDS]-(pg:Group:ProfileGroup {name : c.name+'-'+p.name, displayNameSearchField: {groupSearchField}})-[:DEPENDS]->g " + "SET pg.id = id(pg)+'-'+timestamp() " + "RETURN DISTINCT c.id as id "; JsonObject params = new JsonObject().put("structureId", structureId) .put("groupSearchField", Validator.sanitize(c.getString("name"))).put("props", c); neo4j.execute(query, params, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { message.reply(m.body()); } }); } }
From source file:org.entcore.feeder.ManualFeeder.java
License:Open Source License
public void updateClass(final Message<JsonObject> message) { JsonObject c = getMandatoryObject("data", message); if (c == null) return;//from w w w. java2 s . co m String classId = getMandatoryString("classId", message); if (classId == null) return; final String error = classValidator.modifiableValidate(c); if (error != null) { logger.error(error); sendError(message, error); } else { String rename = ""; if (c.getString("name") != null) { rename = "WITH c " + "MATCH c<-[:DEPENDS]-(cpg:ProfileGroup)-[:DEPENDS]->" + "(spg:ProfileGroup)-[:HAS_PROFILE]->(p:Profile) " + "SET cpg.name = c.name+'-'+p.name "; } String query = "MATCH (c:`Class` { id : {classId}}) " + "SET " + Neo4jUtils.nodeSetPropertiesFromJson("c", c) + rename + "RETURN DISTINCT c.id as id "; JsonObject params = c.put("classId", classId); neo4j.execute(query, params, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { message.reply(m.body()); } }); } }
From source file:org.entcore.feeder.ManualFeeder.java
License:Open Source License
public void createUser(final Message<JsonObject> message) { final JsonObject user = getMandatoryObject("data", message); if (user == null) return;// ww w . ja v a 2 s. c om if (user.getString("externalId") == null) { user.put("externalId", UUID.randomUUID().toString()); } final String profile = message.body().getString("profile", ""); if (!profiles.containsKey(profile)) { sendError(message, "Invalid profile : " + profile); return; } JsonArray childrenIds = null; if ("Relative".equals(profile)) { childrenIds = user.getJsonArray("childrenIds"); } final String error = profiles.get(profile).validate(user); if (error != null) { logger.error(error); sendError(message, error); return; } user.put("source", SOURCE); final String structureId = message.body().getString("structureId"); if (structureId != null && !structureId.trim().isEmpty()) { createUserInStructure(message, user, profile, structureId, childrenIds); return; } final String classId = message.body().getString("classId"); if (classId != null && !classId.trim().isEmpty()) { createUserInClass(message, user, profile, classId, childrenIds); return; } sendError(message, "structureId or classId must be specified"); }
From source file:org.entcore.feeder.ManualFeeder.java
License:Open Source License
private void createUserInStructure(final Message<JsonObject> message, final JsonObject user, String profile, String structureId, JsonArray childrenIds) { String related = ""; JsonObject params = new JsonObject().put("structureId", structureId).put("profile", profile).put("props", user);// w w w .ja v a 2 s . co m if (childrenIds != null && childrenIds.size() > 0) { related = "WITH u " + "MATCH (student:User) " + "WHERE student.id IN {childrenIds} " + "CREATE student-[:RELATED]->u " + "SET student.relative = coalesce(student.relative, []) + (u.externalId + '$10$1$1$0$0') "; params.put("childrenIds", childrenIds); } String query = "MATCH (s:Structure { id : {structureId}})<-[:DEPENDS]-" + "(pg:ProfileGroup)-[:HAS_PROFILE]->(p:Profile { name : {profile}}) " + "CREATE UNIQUE pg<-[:IN]-(u:User {props}) " + "SET u.structures = [s.externalId] " + related + "RETURN DISTINCT u.id as id"; neo4j.execute(query, params, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { message.reply(m.body()); if ("ok".equals(m.body().getString("status"))) { eventStore.createAndStoreEvent(Feeder.FeederEvent.CREATE_USER.name(), (UserInfos) null, new JsonObject().put("new-user", user.getString("id"))); } } }); }
From source file:org.entcore.feeder.ManualFeeder.java
License:Open Source License
private void createUserInClass(final Message<JsonObject> message, final JsonObject user, String profile, String classId, JsonArray childrenIds) { String related = ""; JsonObject params = new JsonObject().put("classId", classId).put("profile", profile).put("props", user); if (childrenIds != null && childrenIds.size() > 0) { related = "WITH u " + "MATCH (student:User) " + "WHERE student.id IN {childrenIds} " + "CREATE student-[:RELATED]->u " + "SET student.relative = coalesce(student.relative, []) + (u.externalId + '$10$1$1$0$0') "; params.put("childrenIds", childrenIds); }//w ww. j av a 2s . co m String query = "MATCH (s:Class { id : {classId}})<-[:DEPENDS]-(cpg:ProfileGroup)-[:DEPENDS]->" + "(pg:ProfileGroup)-[:HAS_PROFILE]->(p:Profile { name : {profile}}), s-[:BELONGS]->(struct:Structure) " + "CREATE UNIQUE pg<-[:IN]-(u:User {props}), cpg<-[:IN]-u " + "SET u.classes = [s.externalId], u.structures = [struct.externalId] " + related + "RETURN DISTINCT u.id as id"; neo4j.execute(query, params, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { message.reply(m.body()); if ("ok".equals(m.body().getString("status"))) { eventStore.createAndStoreEvent(Feeder.FeederEvent.CREATE_USER.name(), (UserInfos) null, new JsonObject().put("new-user", user.getString("id"))); } } }); }
From source file:org.entcore.feeder.ManualFeeder.java
License:Open Source License
public void updateStructure(final Message<JsonObject> message) { JsonObject s = getMandatoryObject("data", message); if (s == null) return;/* w w w. j a v a2s. c o m*/ String structureId = getMandatoryString("structureId", message); if (structureId == null) return; final String error = structureValidator.modifiableValidate(s); if (error != null) { logger.error(error); sendError(message, error); } else { String query; JsonObject params = s.copy().put("structureId", structureId); if (s.getString("name") != null) { query = "MATCH (s:`Structure` { id : {structureId}})<-[:DEPENDS]-(g:Group) " + "WHERE last(split(g.name, '-')) IN ['Student','Teacher','Personnel','Relative','Guest','AdminLocal','HeadTeacher', 'SCOLARITE'] " + "SET g.name = {name} + '-' + last(split(g.name, '-')), g.displayNameSearchField = {sanitizeName}, "; params.put("sanitizeName", Validator.sanitize(s.getString("name"))); } else { query = "MATCH (s:`Structure` { id : {structureId}}) SET"; } query = query + Neo4jUtils.nodeSetPropertiesFromJson("s", s) + "RETURN DISTINCT s.id as id "; neo4j.execute(query, params, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { message.reply(m.body()); } }); } }