Example usage for io.vertx.core.json JsonObject getString

List of usage examples for io.vertx.core.json JsonObject getString

Introduction

In this page you can find the example usage for io.vertx.core.json JsonObject getString.

Prototype

public String getString(String key) 

Source Link

Document

Get the string value with the specified key, special cases are addressed for extended JSON types Instant , byte[] and Enum which can be converted to String.

Usage

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());
            }
        });
    }
}