List of usage examples for io.vertx.core CompositeFuture all
static CompositeFuture all(List<Future> futures)
When the list is empty, the returned future will be already completed.
From source file:org.eclipse.hono.service.amqp.AmqpServiceBase.java
License:Open Source License
private Future<Void> startEndpoints() { @SuppressWarnings("rawtypes") List<Future> endpointFutures = new ArrayList<>(endpoints.size()); for (AmqpEndpoint ep : endpoints.values()) { LOG.info("starting endpoint [name: {}, class: {}]", ep.getName(), ep.getClass().getName()); Future<Void> endpointFuture = Future.future(); endpointFutures.add(endpointFuture); ep.start(endpointFuture);/*from w w w .j av a2s . com*/ } final Future<Void> startFuture = Future.future(); CompositeFuture.all(endpointFutures).setHandler(startup -> { if (startup.succeeded()) { startFuture.complete(); } else { startFuture.fail(startup.cause()); } }); return startFuture; }
From source file:org.eclipse.hono.service.http.HttpServiceBase.java
License:Open Source License
private Future<Router> startEndpoints() { final Future<Router> startFuture = Future.future(); final Router router = createRouter(); if (router == null) { startFuture.fail("no router configured"); } else {//from ww w .j a va 2 s . c o m addEndpointRoutes(router); addCustomRoutes(router); @SuppressWarnings("rawtypes") List<Future> endpointFutures = new ArrayList<>(endpoints.size()); for (HttpEndpoint ep : endpoints) { LOG.info("starting endpoint [name: {}, class: {}]", ep.getName(), ep.getClass().getName()); Future<Void> endpointFuture = Future.future(); endpointFutures.add(endpointFuture); ep.start(endpointFuture); } CompositeFuture.all(endpointFutures).setHandler(startup -> { if (startup.succeeded()) { startFuture.complete(router); } else { startFuture.fail(startup.cause()); } }); } return startFuture; }
From source file:org.entcore.directory.services.impl.DefaultUserBookService.java
License:Open Source License
public void cleanAvatarCache(List<String> usersId, final Handler<Boolean> handler) { @SuppressWarnings("rawtypes") List<Future> futures = new ArrayList<>(); for (String u : usersId) { Future<Boolean> future = Future.future(); futures.add(future);//from w w w. j a v a2 s . c o m futures.add(cleanAvatarCache(u)); } CompositeFuture.all(futures).setHandler(finishRes -> handler.handle(finishRes.succeeded())); }
From source file:org.entcore.directory.services.impl.DefaultUserBookService.java
License:Open Source License
private Future<Boolean> cacheAvatarFromUserBook(String userId, Optional<String> pictureId, Boolean remove) { // clean avatar when changing or when removing Future<Boolean> futureClean = (pictureId.isPresent() || remove) ? cleanAvatarCache(userId) : Future.succeededFuture(); return futureClean.compose(res -> { if (!pictureId.isPresent()) { return Future.succeededFuture(); }/*from w w w . ja v a2s.c o m*/ Future<Boolean> futureCopy = Future.future(); this.wsHelper.getDocument(pictureId.get(), resDoc -> { if (resDoc.succeeded() && "ok".equals(resDoc.result().body().getString("status"))) { JsonObject document = resDoc.result().body().getJsonObject("result"); String fileId = document.getString("file"); // Extensions are not used by storage String defaultFilename = avatarFileNameFromUserId(userId, Optional.empty()); // JsonObject thumbnails = document.getJsonObject("thumbnails", new JsonObject()); Map<String, String> filenamesByIds = new HashMap<>(); filenamesByIds.put(fileId, defaultFilename); for (String size : thumbnails.fieldNames()) { filenamesByIds.put(thumbnails.getString(size), avatarFileNameFromUserId(userId, Optional.of(size))); } // TODO avoid buffer to improve performances and avoid cache every time List<Future> futures = new ArrayList<>(); for (Entry<String, String> entry : filenamesByIds.entrySet()) { String cFileId = entry.getKey(); String cFilename = entry.getValue(); Future<JsonObject> future = Future.future(); futures.add(future); this.wsHelper.readFile(cFileId, buffer -> { if (buffer != null) { this.avatarStorage.writeBuffer(FileUtils.stripExtension(cFilename), buffer, "", cFilename, wRes -> { future.complete(wRes); }); } else { future.fail("Cannot read file from workspace storage. ID =: " + cFileId); } }); } // CompositeFuture.all(futures) .setHandler(finishRes -> futureCopy.complete(finishRes.succeeded())); } }); return futureCopy; }); }
From source file:org.folio.auth.permissions_module.impl.MongoPermissionsStore.java
@Override public Future<JsonArray> getExpandedPermissions(String permission, String tenant) { //System.out.println("Permissions> Expanding permission '"+ permission + "' on tenant '"+ // tenant + "'"); JsonObject query = new JsonObject().put("permission_name", permission).put("tenant", tenant); JsonArray permList = new JsonArray(); Future<JsonArray> future = Future.future(); mongoClient.find("permissions", query, res -> { if (res.succeeded() && res.result().size() > 0) { //System.out.println("Permissions> Successfully queried mongo for '"+ permission + "' on tenant '"+ // tenant + "'"); /*//from w w w . ja va 2 s. c om If there are no subpermissions, go ahead and complete the future with the given value of the JsonArray If there are subpermissions, create a list of new futures, by calling walkPerms for each sub permission, then create a composite future from these new futures, with a handler that completes the original future when they return */ JsonObject permObj = res.result().get(0); permList.add(permission); JsonArray subPerms = permObj.getJsonArray("sub_permissions"); LinkedList<Future> futureList = new LinkedList<>(); if (subPerms != null && !subPerms.isEmpty()) { logger.debug("Permissions> " + subPerms.size() + " subs to process for '" + permission + "'"); for (Object o : subPerms) { String sub = (String) o; Future<JsonArray> newFuture = getExpandedPermissions(sub, tenant); futureList.add(newFuture); } logger.debug("Permissions> Creating CompositeFuture to expand " + permission + " into " + futureList.size() + " subs: " + subPerms.encode()); CompositeFuture compositeFuture = CompositeFuture.all(futureList); compositeFuture.setHandler(res2 -> { if (res2.succeeded()) { //Get output of contained futures and complete the future here for (Future f : futureList) { JsonArray arr = (JsonArray) f.result(); for (Object o : arr) { permList.add(o); } } future.complete(permList); } else { future.fail("Unable to populate permissions: " + res2.cause().getMessage()); } }); } else { //System.out.println("Permissions> No sub-permissions found for '" + permission + "'"); future.complete(permList); } } else { future.fail("No permission '" + permission + "' found for tenant '" + tenant + "'"); } }); return future; }
From source file:org.folio.auth.permissions_module.impl.MongoPermissionsStore.java
public Future<JsonArray> getPermissionsForUser(String user, String tenant, Boolean expand) { JsonObject query = new JsonObject().put("username", user).put("tenant", tenant); Future<JsonArray> future = Future.future(); mongoClient.find("users", query, (AsyncResult<List<JsonObject>> res) -> { if (res.result().size() < 1) { future.fail("No such user"); } else {//from w w w .ja va 2 s . co m JsonObject userObject = res.result().get(0); logger.debug("Permissions> Permissions for user " + user + ": " + userObject.encode()); JsonArray permissions = userObject.getJsonArray("permissions"); if (expand) { ArrayList<Future> futureList = new ArrayList<>(); for (Object o : permissions) { String permissionName = (String) o; Future<JsonArray> expandPermissionFuture = this.getExpandedPermissions(permissionName, tenant); futureList.add(expandPermissionFuture); } logger.debug("Permissions> Assembling CompositeFuture of " + futureList.size() + " permissions to expand"); CompositeFuture compositeFuture = CompositeFuture.all(futureList); compositeFuture.setHandler(res2 -> { if (res2.failed()) { future.fail(res2.cause()); } else { JsonArray allPermissions = new JsonArray(); for (Future f : futureList) { JsonArray arr = (JsonArray) f.result(); for (Object o : arr) { String perm = (String) o; if (!allPermissions.contains(perm)) { allPermissions.add(perm); } } } logger.debug( "Permissions> Returning list of " + allPermissions.size() + " permissions"); future.complete(allPermissions); } }); } else { future.complete(permissions); } } }); return future; }
From source file:org.folio.auth.permissions_module.MainVerticle.java
private void handlePermission(RoutingContext context) { String tenant = context.request().headers().get(TENANT_HEADER); String postData = null;//from w w w.j a v a2s . c o m if (context.request().method() == HttpMethod.POST) { postData = context.getBodyAsString(); } if (context.request().method() == HttpMethod.POST) { String permissionName = context.request().getParam("permissionname"); if (permissionName == null) { //Adding new permission JsonObject perm; String permName; JsonArray permSubs; try { perm = new JsonObject(postData); } catch (Exception e) { context.response().setStatusCode(400).end("Unable to parse " + postData + " into valid JSON"); return; } permName = perm.getString("permission_name"); if (permName == null) { context.response().setStatusCode(400).end("permission_name field is not present"); } permSubs = perm.getJsonArray("sub_permissions"); store.addPermission(permName, tenant).setHandler(res -> { if (res.failed()) { logger.debug("Unable to add permission: " + res.cause().getMessage()); context.response().setStatusCode(500).end("Unable to add permission"); } else { if (permSubs == null) { context.response().setStatusCode(201).end("Permission added"); } else { ArrayList<Future> futureList = new ArrayList<>(); for (Object o : permSubs) { String sub = (String) o; futureList.add(store.addSubPermission(permName, sub, tenant)); } CompositeFuture compFut = CompositeFuture.all(futureList); compFut.setHandler(res2 -> { if (res2.failed()) { logger.debug("Error adding subpermissions: " + res2.cause().getMessage()); context.response().setStatusCode(500).end("Error adding sub permission"); } else { context.response().setStatusCode(201).end("Permission added"); } }); } } }); } else { //Adding new sub-permission store.addSubPermission(permissionName, postData, tenant).setHandler(res -> { if (!res.succeeded()) { context.response().setStatusCode(500).end("Unable to add permission"); return; } context.response().setStatusCode(201).end("Sub-Permission added"); }); } } else if (context.request().method() == HttpMethod.GET) { String permissionName = context.request().getParam("permissionname"); if (permissionName == null) { context.response().setStatusCode(400).end("You must specify a permission name"); return; } //store.getSubPermissions(permissionName, tenant).setHandler(res -> { store.getPermission(permissionName, tenant).setHandler(res -> { if (!res.succeeded()) { context.response().setStatusCode(500).end("Unable to retrieve permissions"); return; } context.response().setStatusCode(200).putHeader("Content-Type", "application/json") .end(res.result().encode()); }); } else if (context.request().method() == HttpMethod.DELETE) { String permissionName = context.request().getParam("permissionname"); String subPermissionName = context.request().getParam("subpermissionname"); if (permissionName == null && subPermissionName == null) { context.response().setStatusCode(400).end("Unsupported path"); return; } else if (subPermissionName == null) { //remove permission store.removePermission(permissionName, tenant).setHandler(res -> { if (!res.succeeded()) { context.response().setStatusCode(500).end("Unable to delete permission"); return; } context.response().setStatusCode(200).end("Permission deleted"); }); } else { //remove sub permission store.removeSubPermission(permissionName, subPermissionName, tenant).setHandler(res -> { if (!res.succeeded()) { context.response().setStatusCode(500).end("Unable to delete subpermission"); return; } context.response().setStatusCode(200).end("Sub permission deleted"); }); } } else { context.response().setStatusCode(400).end("Unsupported method"); } }