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

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

Introduction

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

Prototype

@Override
public JsonObject copy() 

Source Link

Document

Copy the JSON object

Usage

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 www  .  j a  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  .j  ava  2  s .c  om
    }
}

From source file:org.entcore.feeder.dictionary.structures.Importer.java

License:Open Source License

public static void markMissingUsers(String structureExternalId, String currentSource,
        final Set<String> userImportedExternalId, final TransactionHelper transactionHelper, String prefix,
        final Handler<Void> handler) {
    String query;//from   w ww.java2 s.c  o m
    JsonObject params = new JsonObject().put("currentSource", currentSource);
    String filter = "";
    if (isNotEmpty(prefix)) {
        filter = "AND u.externalId STARTS WITH {prefix} ";
        params.put("prefix", prefix);
    }
    if (structureExternalId != null) {
        query = "MATCH (:Structure {externalId : {externalId}})<-[:DEPENDS]-(:ProfileGroup)<-[:IN]-(u:User) "
                + "WHERE u.source = {currentSource} " + filter + "RETURN u.externalId as externalId";
        params.put("externalId", structureExternalId);
    } else {
        query = "MATCH (u:User) WHERE u.source = {currentSource} " + filter
                + "RETURN u.externalId as externalId";
    }
    TransactionManager.getNeo4jHelper().execute(query, params, new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> message) {
            JsonArray res = message.body().getJsonArray("result");
            if ("ok".equals(message.body().getString("status")) && res != null) {
                Set<String> existingUser = new TreeSet<>();
                for (Object o : res) {
                    if (!(o instanceof JsonObject))
                        continue;
                    String externalId = ((JsonObject) o).getString("externalId");
                    if (externalId != null) {
                        existingUser.add(externalId);
                    }
                }
                existingUser.removeAll(userImportedExternalId); // set difference
                String q = // mark missing users
                        "START u=node:node_auto_index(externalId={externalId}) "
                                + "WHERE NOT(HAS(u.disappearanceDate)) " + "SET u.disappearanceDate = {date} ";
                JsonObject p = new JsonObject().put("date", System.currentTimeMillis());
                for (String eId : existingUser) {
                    transactionHelper.add(q, p.copy().put("externalId", eId));
                }
                String q2 = // remove mark of imported users
                        "START u=node:node_auto_index(externalId={externalId}) "
                                + "WHERE HAS(u.disappearanceDate) " + "REMOVE u.disappearanceDate ";
                for (String eId : userImportedExternalId) {
                    transactionHelper.add(q2, new JsonObject().put("externalId", eId));
                }
            }
            handler.handle(null);
        }
    });
}

From source file:org.entcore.feeder.dictionary.structures.Structure.java

License:Open Source License

public void update(JsonObject struct) {
    if (this.struct.equals(struct)) {
        return;//  w  w w .  j  ava  2s.  c o m
    }
    String query = "MATCH (s:Structure { externalId : {externalId}}) " + "WITH s "
            + "WHERE s.checksum IS NULL OR s.checksum <> {checksum} " + "SET "
            + Neo4jUtils.nodeSetPropertiesFromJson("s", struct, "id", "externalId", "created");
    getTransaction().add(query, struct);

    if (this.struct.getString("name") != null
            && !this.struct.getString("name").equals(struct.getString("name"))) {
        String updateGroupsStructureName = "MATCH (s:Structure { externalId : {externalId}})<-[:DEPENDS]-(g:Group) "
                + "WHERE s.checksum = {checksum} and has(g.structureName) " + "SET g.structureName = {name} ";
        getTransaction().add(updateGroupsStructureName, struct);
        String updateGroupsName = "MATCH (s:Structure { externalId : {externalId}})<-[:DEPENDS]-(g:Group) "
                + "WHERE s.checksum = {checksum} and last(split(g.name, '-')) IN "
                + "['Student','Teacher','Personnel','Relative','Guest','AdminLocal','HeadTeacher', 'SCOLARITE'] "
                + "SET g.name = {name} + '-' + last(split(g.name, '-')), g.displayNameSearchField = {sanitizeName} ";
        getTransaction().add(updateGroupsName,
                struct.copy().put("sanitizeName", Validator.sanitize(struct.getString("name"))));
    }
    this.struct = struct;
}

From source file:org.entcore.feeder.dictionary.structures.Transition.java

License:Open Source License

private void publishTransition(JsonObject struct, JsonArray classes) {
    if (struct == null)
        return;//  w w  w . j  a v  a2  s. c om
    final JsonObject structure = struct.copy();
    structure.put("classes", classes);
    structure.remove("created");
    structure.remove("modified");
    structure.remove("checksum");
    log.info("Publish transition : " + structure.encode());
    vertx.eventBus().publish(Feeder.USER_REPOSITORY,
            new JsonObject().put("action", "transition").put("structure", structure));
}

From source file:org.entcore.feeder.dictionary.users.PersEducNat.java

License:Open Source License

public void createOrUpdatePersonnel(JsonObject object, String profileExternalId,
        JsonArray structuresByFunctions, String[][] linkClasses, String[][] linkGroups, boolean nodeQueries,
        boolean relationshipQueries) {
    final String error = personnelValidator.validate(object);
    if (error != null) {
        if (object.getJsonArray("profiles") != null && object.getJsonArray("profiles").size() == 1) {
            report.addIgnored(object.getJsonArray("profiles").getString(0), error, object);
        } else {/*from   w  w  w  .j  a  v a2  s .com*/
            report.addIgnored("Personnel", error, object);
        }
        log.warn(error);
    } else {
        if (nodeQueries) {
            object.put("source", currentSource);
            if (userImportedExternalId != null) {
                userImportedExternalId.add(object.getString("externalId"));
            }
            StringBuilder sb = new StringBuilder();
            JsonObject params;
            sb.append("MERGE (u:`User` { externalId : {externalId}}) ");
            sb.append("ON CREATE SET u.id = {id}, u.login = {login}, u.activationCode = {activationCode}, ");
            sb.append("u.displayName = {displayName}, u.created = {created} ");
            sb.append("WITH u ");
            if (!EDTImporter.EDT.equals(currentSource)) {
                sb.append("WHERE u.checksum IS NULL OR u.checksum <> {checksum} ");
            }
            sb.append("SET ").append(Neo4jUtils.nodeSetPropertiesFromJson("u", object, "id", "externalId",
                    "login", "activationCode", "displayName", "email", "created"));
            if (EDTImporter.EDT.equals(currentSource)) {
                sb.append("RETURN u.id as id, u.IDPN as IDPN, head(u.profiles) as profile");
            }
            params = object;
            transactionHelper.add(sb.toString(), params);
            checkUpdateEmail(object);
        }
        if (relationshipQueries) {
            final String externalId = object.getString("externalId");
            JsonArray structures = getMappingStructures(object.getJsonArray("structures"));
            if (externalId != null && structures != null && structures.size() > 0) {
                String query;
                JsonObject p = new JsonObject().put("userExternalId", externalId);
                if (structures.size() == 1) {
                    query = "MATCH (s:Structure {externalId : {structureAdmin}}), (u:User {externalId : {userExternalId}}) "
                            + "MERGE u-[:ADMINISTRATIVE_ATTACHMENT]->s ";
                    p.put("structureAdmin", structures.getString(0));
                } else {
                    query = "MATCH (s:Structure), (u:User {externalId : {userExternalId}}) "
                            + "WHERE s.externalId IN {structuresAdmin} "
                            + "MERGE u-[:ADMINISTRATIVE_ATTACHMENT]->s ";
                    p.put("structuresAdmin", structures);
                }
                transactionHelper.add(query, p);
            }
            if (externalId != null && structuresByFunctions != null && structuresByFunctions.size() > 0) {
                String query;
                structuresByFunctions = getMappingStructures(structuresByFunctions);
                JsonObject p = new JsonObject().put("userExternalId", externalId);
                if (structuresByFunctions.size() == 1) {
                    query = "MATCH (s:Structure {externalId : {structureAdmin}})<-[:DEPENDS]-(g:ProfileGroup)-[:HAS_PROFILE]->(p:Profile {externalId : {profileExternalId}}), "
                            + "(u:User { externalId : {userExternalId}}) " + "WHERE NOT(HAS(u.mergedWith)) "
                            + "MERGE u-[:IN]->g";
                    p.put("structureAdmin", structuresByFunctions.getString(0)).put("profileExternalId",
                            profileExternalId);
                } else {
                    query = "MATCH (s:Structure)<-[:DEPENDS]-(g:ProfileGroup)-[:HAS_PROFILE]->(p:Profile), "
                            + "(u:User { externalId : {userExternalId}}) "
                            + "WHERE s.externalId IN {structuresAdmin} AND NOT(HAS(u.mergedWith)) "
                            + "AND p.externalId = {profileExternalId} " + "MERGE u-[:IN]->g ";
                    p.put("structuresAdmin", structuresByFunctions).put("profileExternalId", profileExternalId);
                }
                transactionHelper.add(query, p);
                String qs = "MATCH (:User {externalId : {userExternalId}})-[r:IN|COMMUNIQUE]-(:Group)-[:DEPENDS]->(s:Structure) "
                        + "WHERE NOT(s.externalId IN {structures}) AND (NOT(HAS(r.source)) OR r.source = {source}) "
                        + "DELETE r";
                JsonObject ps = new JsonObject().put("userExternalId", externalId).put("source", currentSource)
                        .put("structures", structuresByFunctions);
                transactionHelper.add(qs, ps);
                final String daa = "MATCH (u:User {externalId : {userExternalId}})-[r:ADMINISTRATIVE_ATTACHMENT]->(s:Structure) "
                        + "WHERE NOT(s.externalId IN {structures}) AND (NOT(HAS(r.source)) OR r.source = {source}) "
                        + "DELETE r";
                transactionHelper.add(daa, ps.copy().put("structures", getOrElse(structures, new JsonArray())));
            }
            final JsonObject fosm = new JsonObject();
            final JsonArray classes = new fr.wseduc.webutils.collections.JsonArray();
            if (externalId != null && linkClasses != null) {
                final JsonObject fcm = new JsonObject();
                for (String[] structClass : linkClasses) {
                    if (structClass != null && structClass[0] != null && structClass[1] != null) {
                        classes.add(structClass[1]);
                        if (structClass.length > 2 && isNotEmpty(structClass[2])) {
                            JsonArray fClasses = fcm.getJsonArray(structClass[2]);
                            if (fClasses == null) {
                                fClasses = new fr.wseduc.webutils.collections.JsonArray();
                                fcm.put(structClass[2], fClasses);
                            }
                            fClasses.add(structClass[1]);
                        }
                    }
                }
                String query = "MATCH (c:Class)<-[:DEPENDS]-(g:ProfileGroup)"
                        + "-[:DEPENDS]->(pg:ProfileGroup)-[:HAS_PROFILE]->(p:Profile {externalId : {profileExternalId}}), "
                        + "(u:User { externalId : {userExternalId}}) "
                        + "WHERE c.externalId IN {classes} AND NOT(HAS(u.mergedWith)) " + "MERGE u-[:IN]->g";
                JsonObject p0 = new JsonObject().put("userExternalId", externalId)
                        .put("profileExternalId", profileExternalId).put("classes", classes);
                transactionHelper.add(query, p0);
                JsonObject p = new JsonObject().put("userExternalId", externalId).put("source", currentSource)
                        .put("classes", classes);
                fosm.mergeIn(fcm);
                for (String fos : fcm.fieldNames()) {
                    String q2 = "MATCH (u:User {externalId : {userExternalId}}), (f:FieldOfStudy {externalId:{feId}}) "
                            + "MERGE u-[r:TEACHES_FOS]->f " + "SET r.classes = {classes} ";
                    transactionHelper.add(q2, p.copy().put("classes", fcm.getJsonArray(fos)).put("feId", fos));
                }
            }
            if (externalId != null) {
                String q = "MATCH (:User {externalId : {userExternalId}})-[r:IN|COMMUNIQUE]-(:Group)-[:DEPENDS]->(c:Class) "
                        + "WHERE NOT(c.externalId IN {classes}) AND (NOT(HAS(r.source)) OR r.source = {source}) "
                        + "DELETE r";
                JsonObject p = new JsonObject().put("userExternalId", externalId).put("source", currentSource)
                        .put("classes", classes);
                transactionHelper.add(q, p);
            }
            final JsonArray groups = new fr.wseduc.webutils.collections.JsonArray();
            final JsonObject fgm = new JsonObject();
            if (externalId != null && linkGroups != null) {
                for (String[] structGroup : linkGroups) {
                    if (structGroup != null && structGroup[0] != null && structGroup[1] != null) {
                        groups.add(structGroup[1]);
                        if (structGroup.length > 2 && isNotEmpty(structGroup[2])) {
                            JsonArray fGroups = fgm.getJsonArray(structGroup[2]);
                            if (fGroups == null) {
                                fGroups = new fr.wseduc.webutils.collections.JsonArray();
                                fgm.put(structGroup[2], fGroups);
                            }
                            fGroups.add(structGroup[1]);
                        }
                    }
                }
                String query = "MATCH (g:Group), (u:User {externalId : {userExternalId}}) "
                        + "WHERE (g:FunctionalGroup OR g:FunctionGroup OR g:HTGroup) AND g.externalId IN {groups} "
                        + "MERGE u-[:IN]->g";
                JsonObject p = new JsonObject().put("userExternalId", externalId).put("groups", groups);
                transactionHelper.add(query, p);
            }
            if (externalId != null) {
                final String qdfg = "MATCH (:User {externalId : {userExternalId}})-[r:IN|COMMUNIQUE]-(g:Group) "
                        + "WHERE (g:FunctionalGroup OR g:FunctionGroup OR g:HTGroup) AND "
                        + "NOT(g.externalId IN {groups}) AND (NOT(HAS(r.source)) OR r.source = {source}) "
                        + "DELETE r";
                final JsonObject pdfg = new JsonObject().put("userExternalId", externalId)
                        .put("source", currentSource).put("groups", groups);
                transactionHelper.add(qdfg, pdfg);
                fosm.mergeIn(fgm);
                final String deleteOldFoslg = "MATCH (u:User {externalId : {userExternalId}})-[r:TEACHES_FOS]->(f:FieldOfStudy) "
                        + "WHERE NOT(f.externalId IN {fos}) AND (NOT(HAS(r.source)) OR r.source = {source}) "
                        + "DELETE r";
                transactionHelper.add(deleteOldFoslg, pdfg.copy().put("fos",
                        new fr.wseduc.webutils.collections.JsonArray(new ArrayList<>(fosm.fieldNames()))));
                for (String fos : fgm.fieldNames()) {
                    String q2 = "MATCH (u:User {externalId : {userExternalId}}), (f:FieldOfStudy {externalId:{feId}}) "
                            + "MERGE u-[r:TEACHES_FOS]->f " + "SET r.groups = {groups} ";
                    transactionHelper.add(q2,
                            pdfg.copy().put("groups", fgm.getJsonArray(fos)).put("feId", fos));
                }
            }
        }
    }
}

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  .  com*/
    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());
            }
        });
    }
}

From source file:org.entcore.feeder.timetable.AbstractTimetableImporter.java

License:Open Source License

private void persEducNatToClasses(JsonObject object) {
    final JsonArray classes = object.getJsonArray("classes");
    if (classes != null) {
        final JsonObject params = new JsonObject().put("structureExternalId", structureExternalId)
                .put("classes", classes).put("source", getSource())
                .put("outDate", DateTime.now().plusDays(1).getMillis()).put("now", importTimestamp);
        final JsonArray teacherIds = object.getJsonArray("teacherIds");
        if (teacherIds != null && teacherIds.size() > 0) {
            params.put("profile", "Teacher");
            for (Object id : teacherIds) {
                if (id != null) {
                    txXDT.add(PERSEDUCNAT_TO_CLASSES, params.copy().put("id", id.toString()));
                }/*from   w  ww.j a v  a  2  s .  c  o  m*/
            }
        }
        final JsonArray personnelIds = object.getJsonArray("personnelIds");
        if (personnelIds != null && personnelIds.size() > 0) {
            params.put("profile", "Personnel");
            for (Object id : personnelIds) {
                if (id != null) {
                    txXDT.add(PERSEDUCNAT_TO_CLASSES, params.copy().put("id", id.toString()));
                }
            }
        }
    }
}

From source file:org.entcore.feeder.timetable.AbstractTimetableImporter.java

License:Open Source License

private void end() {
    if (endHandler != null && countMongoQueries.get() == 0) {
        final JsonObject baseQuery = new JsonObject().put("structureId", structureId);
        if (txSuccess) {
            mongoDb.update(COURSES, baseQuery.copy().put("pending", importTimestamp),
                    new JsonObject().put("$rename", new JsonObject().put("pending", "modified")), false, true,
                    new Handler<Message<JsonObject>>() {
                        @Override
                        public void handle(Message<JsonObject> event) {
                            if ("ok".equals(event.body().getString("status"))) {
                                mongoDb.update(COURSES,
                                        baseQuery.copy().put("deleted", new JsonObject().put("$exists", false))
                                                .put("modified", new JsonObject().put("$ne", importTimestamp)),
                                        new JsonObject().put("$set",
                                                new JsonObject().put("deleted", importTimestamp)),
                                        false, true, new Handler<Message<JsonObject>>() {
                                            @Override
                                            public void handle(Message<JsonObject> event) {
                                                if (!"ok".equals(event.body().getString("status"))) {
                                                    report.addError("error.set.deleted.courses");
                                                }
                                                endHandler.handle(new DefaultAsyncResult<>(report));
                                            }
                                        });
                            } else {
                                report.addError("error.renaming.pending");
                                endHandler.handle(new DefaultAsyncResult<>(report));
                            }/* ww w.j  a v a2 s . co m*/
                        }
                    });
        } else {
            mongoDb.delete(COURSES, baseQuery.copy().put("pending", importTimestamp).put("modified",
                    new JsonObject().put("$exists", false)), new Handler<Message<JsonObject>>() {
                        @Override
                        public void handle(Message<JsonObject> event) {
                            if ("ok".equals(event.body().getString("status"))) {
                                mongoDb.update(COURSES, baseQuery.copy().put("pending", importTimestamp),
                                        new JsonObject().put("$unset", new JsonObject().put("pending", "")),
                                        false, true, new Handler<Message<JsonObject>>() {
                                            @Override
                                            public void handle(Message<JsonObject> event) {
                                                if (!"ok".equals(event.body().getString("status"))) {
                                                    report.addError("error.unset.pending");
                                                }
                                                endHandler.handle(new DefaultAsyncResult<>(report));
                                            }
                                        });
                            } else {
                                report.addError("error.removing.inconsistencies.courses");
                                endHandler.handle(new DefaultAsyncResult<>(report));
                            }
                        }
                    });
        }
    }
}

From source file:org.entcore.feeder.timetable.AbstractTimetableImporter.java

License:Open Source License

protected void commit(final Handler<AsyncResult<Report>> handler) {
    final JsonObject params = new JsonObject().put("structureExternalId", structureExternalId)
            .put("source", getSource()).put("now", importTimestamp);
    persistBulKCourses();/*www  . j  a v  a  2  s .com*/
    txXDT.add(DELETE_SUBJECT, params.copy().put("subjects",
            new fr.wseduc.webutils.collections.JsonArray(new ArrayList<>(subjects.values()))));
    txXDT.add(UNLINK_SUBJECT, params);
    txXDT.add(UNLINK_GROUP, params);
    txXDT.add(DELETE_GROUPS, params);
    txXDT.add(UNSET_OLD_GROUPS, params);
    txXDT.add(SET_GROUPS, params);
    Importer.markMissingUsers(structureExternalId, getSource(), userImportedExternalId, txXDT,
            new Handler<Void>() {
                @Override
                public void handle(Void event) {
                    Importer.restorePreDeletedUsers(getSource(), txXDT);
                    txXDT.commit(new Handler<Message<JsonObject>>() {
                        @Override
                        public void handle(Message<JsonObject> event) {
                            if (!"ok".equals(event.body().getString("status"))) {
                                report.addError("error.commit.timetable.transaction");
                            } else {
                                txSuccess = true;
                            }
                            endHandler = handler;
                            end();
                        }
                    });
                }
            });
}