List of usage examples for io.vertx.core.json JsonArray getJsonObject
public JsonObject getJsonObject(int pos)
From source file:org.entcore.directory.security.TeacherOfUser.java
License:Open Source License
private void validateQuery(final HttpServerRequest request, final Handler<Boolean> handler, String query, JsonObject params) {/*from w w w . j a v a 2 s. c o m*/ request.pause(); neo.execute(query, params, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> r) { request.resume(); JsonArray res = r.body().getJsonArray("result"); handler.handle("ok".equals(r.body().getString("status")) && res.size() == 1 && (res.getJsonObject(0)).getBoolean("exists", false)); } }); }
From source file:org.entcore.directory.services.impl.DefaultClassService.java
License:Open Source License
@Override public void addUser(final String classId, final String userId, final UserInfos user, final Handler<Either<String, JsonObject>> result) { if (validationParamsError(result, classId, userId)) return;//from w w w . j a v a 2 s.com if (user == null) { result.handle(new Either.Left<String, JsonObject>("invalid.userinfos")); return; } neo.execute( "MATCH (u:`User` {id : {id}})-[:IN]->(pg:ProfileGroup)-[:HAS_PROFILE]->(p:Profile) " + "RETURN distinct p.name as type", new JsonObject().put("id", userId), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> r) { JsonArray res = r.body().getJsonArray("result"); if ("ok".equals(r.body().getString("status")) && res != null && res.size() == 1) { final String t = (res.getJsonObject(0)).getString("type"); String customReturn = "MATCH (c:`Class` { id : {classId}})<-[:DEPENDS]-(cpg:ProfileGroup)" + "-[:DEPENDS]->(spg:ProfileGroup)-[:HAS_PROFILE]->(p:Profile {name : {profile}}), " + "c-[:BELONGS]->(s:Structure) " + "WHERE visibles.id = {uId} " + "CREATE UNIQUE visibles-[:IN]->cpg " + "RETURN DISTINCT visibles.id as id, s.id as schoolId"; JsonObject params = new JsonObject().put("classId", classId).put("uId", userId) .put("profile", t); UserUtils.findVisibleUsers(eb, user.getUserId(), false, customReturn, params, new Handler<JsonArray>() { @Override public void handle(final JsonArray users) { if (users != null && users.size() == 1) { if ("Student".equals(t)) { String query = "MATCH (c:`Class` { id : {classId}})<-[:DEPENDS]-(cpg:ProfileGroup)-[:DEPENDS]->(spg:ProfileGroup)" + "-[:HAS_PROFILE]->(p:Profile {name : 'Relative'}), " + "(u:User {id: {uId}})-[:RELATED]->(relative: User) " + "CREATE UNIQUE relative-[:IN]->cpg " + "RETURN count(relative) as relativeNb"; JsonObject params = new JsonObject().put("classId", classId) .put("uId", userId); neo.execute(query, params, Neo4jResult.validEmptyHandler( new Handler<Either<String, JsonObject>>() { public void handle( Either<String, JsonObject> event) { if (event.isLeft()) { result.handle( new Either.Left<String, JsonObject>( "error.while.attaching.relatives")); } else { result.handle( new Either.Right<String, JsonObject>( users.getJsonObject(0))); } } })); } else { result.handle(new Either.Right<String, JsonObject>( users.getJsonObject(0))); } } else { result.handle( new Either.Left<String, JsonObject>("user.not.visible")); } } }); } else { result.handle(new Either.Left<String, JsonObject>("invalid.user")); } } }); }
From source file:org.entcore.directory.services.impl.DefaultUserBookService.java
License:Open Source License
@Override public void update(String userId, JsonObject userBook, final Handler<Either<String, JsonObject>> result) { JsonObject u = Utils.validAndGet(userBook, UPDATE_USERBOOK_FIELDS, Collections.<String>emptyList()); if (Utils.defaultValidationError(u, result, userId)) return;// w w w. j ava2s . c o m // OVERRIDE AVATAR URL Optional<String> pictureId = getPictureIdForUserbook(userBook); if (pictureId.isPresent()) { String fileId = avatarFileNameFromUserId(userId, Optional.empty()); u.put("picture", "/userbook/avatar/" + fileId); } StatementsBuilder b = new StatementsBuilder(); String query = "MATCH (u:`User` { id : {id}})-[:USERBOOK]->(ub:UserBook) WITH ub.picture as oldpic,ub,u SET " + nodeSetPropertiesFromJson("ub", u); query += " RETURN oldpic,ub.picture as picture"; boolean updateUserBook = u.size() > 0; if (updateUserBook) { b.add(query, u.put("id", userId)); } String q2 = "MATCH (u:`User` { id : {id}})-[:USERBOOK]->(ub:UserBook)" + "-[:PUBLIC|PRIVE]->(h:`Hobby` { category : {category}}) " + "SET h.values = {values} "; JsonArray hobbies = userBook.getJsonArray("hobbies"); if (hobbies != null) { for (Object o : hobbies) { if (!(o instanceof JsonObject)) continue; JsonObject j = (JsonObject) o; b.add(q2, j.put("id", userId)); } } neo.executeTransaction(b.build(), null, true, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> r) { if ("ok".equals(r.body().getString("status"))) { if (updateUserBook) { JsonArray results = r.body().getJsonArray("results", new JsonArray()); JsonArray firstStatement = results.getJsonArray(0); if (firstStatement != null && firstStatement.size() > 0) { JsonObject object = firstStatement.getJsonObject(0); String picture = object.getString("picture", ""); cacheAvatarFromUserBook(userId, pictureId, StringUtils.isEmpty(picture)) .setHandler(e -> { if (e.succeeded()) { result.handle(new Either.Right<String, JsonObject>(new JsonObject())); } else { result.handle(new Either.Left<String, JsonObject>( r.body().getString("message", "update.error"))); } }); } } else { result.handle(new Either.Right<String, JsonObject>(new JsonObject())); } } else { result.handle( new Either.Left<String, JsonObject>(r.body().getString("message", "update.error"))); } } }); }
From source file:org.entcore.directory.services.impl.DefaultUserService.java
License:Open Source License
@Override public void addFunction(String id, String functionCode, JsonArray scope, String inherit, Handler<Either<String, JsonObject>> result) { JsonObject action = new JsonObject().put("action", "manual-add-user-function").put("userId", id) .put("function", functionCode).put("inherit", inherit).put("scope", scope); eb.send(Directory.FEEDER, action, ar -> { if (ar.succeeded()) { JsonArray res = ((JsonObject) ar.result().body()).getJsonArray("results"); JsonObject json = new JsonObject(); if (res.size() == 2) { JsonArray r = res.getJsonArray(1); if (r.size() == 1) { json = r.getJsonObject(0); }//from w w w. j a v a 2 s . c o m } result.handle(new Either.Right<>(json)); } else { result.handle(new Either.Left<>(ar.cause().getMessage())); } }); }
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/* ww w.j a v a 2 s . c om*/ 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
@Override public void handle(Long event) { final FileSystem fs = vertx.fileSystem(); fs.readDir(path, ".*.zip", new Handler<AsyncResult<List<String>>>() { @Override//w ww . j a v a2s . com public void handle(final AsyncResult<List<String>> event) { if (event.succeeded()) { Collections.sort(event.result()); final Handler[] handlers = new Handler[event.result().size() + 1]; handlers[handlers.length - 1] = new Handler<Void>() { @Override public void handle(Void v) { postImport.execute(); } }; for (int i = event.result().size() - 1; i >= 0; i--) { final int j = i; handlers[i] = new Handler<Void>() { @Override public void handle(Void v) { final String file = event.result().get(j); log.info("Importing file : " + file); Matcher matcher; Matcher nameMatcher; if (file != null && (matcher = UAI_PATTERN.matcher(file)).find() && (nameMatcher = namePattern.matcher(file)).find()) { final String uai = matcher.group(1); final String structureName = nameMatcher.group(1); TransactionManager.getNeo4jHelper().execute( "MATCH (s:Structure {UAI:{uai}}) return s.externalId as externalId", new JsonObject().put("uai", uai), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { final String structureExternalId; JsonArray res = event.body().getJsonArray("result"); if ("ok".equals(event.body().getString("status")) && res.size() > 0) { structureExternalId = res.getJsonObject(0) .getString("externalId"); } else { structureExternalId = null; } final String parentDir = path + File.separator + UUID.randomUUID().toString(); final String dirName = parentDir + File.separator + structureName + (structureExternalId != null ? "@" + structureExternalId : "") + "_" + uai; fs.mkdirs(dirName, new Handler<AsyncResult<Void>>() { @Override public void handle(AsyncResult<Void> event) { try { FileUtils.unzip(file.replaceAll("\\s", "%20"), dirName); moveCsvFiles(structureExternalId, fs, dirName, parentDir, handlers, j); } catch (IOException e) { fs.deleteRecursive(parentDir, true, null); log.error("Error unzip : " + file, e); handlers[j + 1].handle(null); } } }); } }); } else { log.error("UAI not found in filename : " + file); handlers[j + 1].handle(null); } } }; } handlers[0].handle(null); } else { log.error("Error reading directory."); } } }); }
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/*from w w w.java 2 s . c om*/ 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 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 ava 2 s .co 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); } } } }); }
From source file:org.entcore.feeder.csv.MappingFinder.java
License:Open Source License
private void findChildExternalIds(final String structureId, final String path, final String charset, final List<String> columns, final JsonArray errors, final Handler<JsonArray> handler) { final List<String[]> lines = new ArrayList<>(); final JsonArray childLastNameIndex = new fr.wseduc.webutils.collections.JsonArray(); final JsonArray childUsernameIndex = new fr.wseduc.webutils.collections.JsonArray(); int idx = 0;/*from w w w. j a v a 2s. c om*/ for (String c : columns) { if ("childLastName".equals(c)) { childLastNameIndex.add(idx); } else if ("childUsername".equals(c)) { childUsernameIndex.add(idx); } idx++; } if (childLastNameIndex.size() == 0) { addError(errors, "missing.childLastName"); handler.handle(errors); return; } else if (childUsernameIndex.size() != 0 && childLastNameIndex.size() != childUsernameIndex.size()) { addError(errors, "mismatch.childLastName.childUsername"); handler.handle(errors); return; } final int maxNbChild = childLastNameIndex.size(); final int appendIdx; if (childUsernameIndex.size() > 0) { appendIdx = childLastNameIndex.getInteger(0) > childUsernameIndex.getInteger(0) ? childUsernameIndex.getInteger(0) : childLastNameIndex.getInteger(0); } else { appendIdx = childLastNameIndex.getInteger(0); } final String query = "MATCH (s:Structure {externalId : {id}})<-[:DEPENDS]-(:ProfileGroup)<-[:IN]-(u:User) " + "WHERE u.firstNameSearchField = {firstName} AND u.lastNameSearchField = {lastName} AND head(u.profiles) = 'Student' " + "RETURN DISTINCT u.externalId as externalId, {rowIdx} as line, {itemIdx} as item "; final TransactionHelper tx; try { tx = TransactionManager.getTransaction(); } catch (TransactionException e) { addError(errors, "transaction.error"); handler.handle(errors); return; } try { CSVReader csvReader = getCsvReader(path, charset); String[] values; int rowIdx = 0; while ((values = csvReader.readNext()) != null) { if (emptyLine(values)) { continue; } final List<String> line = new LinkedList<>(Arrays.asList(values)); for (int i = 0; i < maxNbChild; i++) { if (rowIdx == 0) { line.add(appendIdx, "childExternalId"); } else { line.add(appendIdx, ""); } } lines.add(line.toArray(new String[line.size()])); if (rowIdx == 0) { rowIdx++; continue; } final JsonArray firstNames = new fr.wseduc.webutils.collections.JsonArray(); final JsonArray lastNames = new fr.wseduc.webutils.collections.JsonArray(); try { int i = 0; for (String c : columns) { if (i >= values.length) break; switch (c) { case "childLastName": lastNames.add(sanitize(values[i])); break; case "childFirstName": firstNames.add(sanitize(values[i])); break; } i++; } } catch (Exception e) { errors.add(new JsonObject().put("key", "parse.line.error").put("params", new fr.wseduc.webutils.collections.JsonArray().add(Integer.toString(rowIdx)))); } final int fns = firstNames.size(); if (fns != lastNames.size()) { errors.add(new JsonObject().put("key", "child.lastName.firstName.mismatch").put("params", new fr.wseduc.webutils.collections.JsonArray().add(Integer.toString(rowIdx)))); } else if (fns > 0) { // if (fns > maxNbChild) { // maxNbChild = fns; // } for (int i = 0; i < fns; i++) { JsonObject params = new JsonObject().put("id", structureId) .put("firstName", firstNames.getString(i)).put("lastName", lastNames.getString(i)) .put("rowIdx", rowIdx).put("itemIdx", i); tx.add(query, params); } } rowIdx++; } } catch (Exception e) { addError(errors, "error.read.file", path); handler.handle(errors); } 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) { for (int i = 0; i < results.size(); i++) { JsonArray item = results.getJsonArray(i); if (item.size() == 1) { // Si 0 ou plusieurs utilisateurs, on laisse la ligne d'origine String eId = item.getJsonObject(0).getString("externalId", ""); int lineIdx = item.getJsonObject(0).getInteger("line", -1); int itemIdx = item.getJsonObject(0).getInteger("item", -1); if (lineIdx > 0 && itemIdx >= 0) { String[] line = lines.get(lineIdx); line[itemIdx + appendIdx] = eId; line[childLastNameIndex.getInteger(itemIdx) + maxNbChild] = ""; if (childUsernameIndex.size() > 0) { line[childUsernameIndex.getInteger(itemIdx) + maxNbChild] = ""; } } } } vertx.fileSystem().deleteBlocking(path); try { CSVWriter writer = getCsvWriter(path, charset); writer.writeAll(lines); writer.close(); } catch (IOException e) { log.error("Error writing file.", e); addError(errors, "error.write.file", path); } handler.handle(errors); } else { addError(errors, "error.find.ids"); handler.handle(errors); } } }); }
From source file:org.entcore.feeder.dictionary.structures.DuplicateUsers.java
License:Open Source License
public void markDuplicates(final Message<JsonObject> message, final Handler<JsonObject> handler) { final String now = DateTime.now().toString(); final String query = "MATCH (s:System {name : 'Starter'}) return s.lastSearchDuplicates as lastSearchDuplicates "; TransactionManager.getNeo4jHelper().execute(query, new JsonObject(), new Handler<Message<JsonObject>>() { @Override/*from ww w. j a va2s .co m*/ public void handle(Message<JsonObject> event) { JsonArray res = event.body().getJsonArray("result"); if ("ok".equals(event.body().getString("status")) && res != null && res.size() == 1 && res.getJsonObject(0).getString("lastSearchDuplicates") != null) { final String last = res.getJsonObject(0).getString("lastSearchDuplicates"); final String[] profiles = ManualFeeder.profiles.keySet() .toArray(new String[ManualFeeder.profiles.keySet().size()]); final Handler[] handlers = new Handler[profiles.length + 1]; final long start = System.currentTimeMillis(); handlers[handlers.length - 1] = new Handler<Void>() { @Override public void handle(Void v) { final String updateDate = "MATCH (s:System {name : 'Starter'}) set s.lastSearchDuplicates = {now} "; TransactionManager.getNeo4jHelper().execute(updateDate, new JsonObject().put("now", now), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { if (!"ok".equals(event.body().getString("status"))) { log.error("Error updating last search duplicate date : " + event.body().getString("message")); } } }); log.info("Mark duplicates users finished - elapsed time " + (System.currentTimeMillis() - start) + " ms."); if (message != null) { message.reply(new JsonObject().put("status", "ok")); } if (handler != null) { handler.handle(new JsonObject().put("status", "ok")); } } }; for (int i = profiles.length - 1; i >= 0; i--) { final int j = i; handlers[i] = new Handler<Void>() { @Override public void handle(Void v) { searchDuplicatesByProfile(last, profiles[j], handlers[j + 1]); } }; } handlers[0].handle(null); } else { log.warn("lastSearchDuplicates not found."); message.reply(new JsonObject().put("status", "ok")); } } }); }