Example usage for io.vertx.core.eventbus Message body

List of usage examples for io.vertx.core.eventbus Message body

Introduction

In this page you can find the example usage for io.vertx.core.eventbus Message body.

Prototype

@CacheReturn
T body();

Source Link

Document

The body of the message.

Usage

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