List of usage examples for io.vertx.core CompositeFuture setHandler
@Override
default CompositeFuture setHandler(Handler<AsyncResult<CompositeFuture>> handler)
From source file:com.github.ithildir.airbot.AirBotVerticle.java
License:Open Source License
@Override public void start(Future<Void> startFuture) throws Exception { ConfigRetriever configRetriever = ConfigRetriever.create(vertx); Future<JsonObject> configFuture = ConfigRetriever.getConfigAsFuture(configRetriever); Future<HttpServer> httpServerFuture = configFuture.compose(this::_startHttpServer); CompositeFuture compositeFuture = CompositeFuture.all( _deployVerticle(AirNowMeasurementServiceVerticle.class), _deployVerticle(GeoServiceVerticle.class), _deployVerticle(UserServiceVerticle.class), _deployVerticle(WaqiMeasurementServiceVerticle.class), httpServerFuture);/*from w ww .j av a 2 s .c o m*/ compositeFuture.setHandler(asyncResult -> { if (asyncResult.failed()) { startFuture.fail(asyncResult.cause()); return; } if (_logger.isInfoEnabled()) { _logger.info("AirBot started succesfully"); } startFuture.complete(); }); }
From source file:com.github.ithildir.airbot.util.AirQualityMessageBuilder.java
License:Open Source License
public Future<String> getMessage(Location location, String locationString, Locale locale) { Future<String> future = Future.future(); MeasurementService measurementService = _getMeasurementService(location); Future<Measurement> measurementFuture = Future.future(); Future<String> nameFuture = Future.future(); measurementService.getMeasurement(location.getLatitude(), location.getLongitude(), measurementFuture); measurementService.getName(nameFuture); CompositeFuture compositeFuture = CompositeFuture.all(measurementFuture, nameFuture); compositeFuture.setHandler(asyncResult -> { if (asyncResult.failed()) { future.fail(asyncResult.cause()); return; }/*from w w w . j av a 2 s .c o m*/ CompositeFuture resultCompositeFuture = asyncResult.result(); Measurement measurement = (Measurement) resultCompositeFuture.resultAt(0); String name = (String) resultCompositeFuture.resultAt(1); String message = _getMessage(measurement, name, locationString, locale); future.complete(message); }); return future; }
From source file:io.engagingspaces.vertx.dataloader.DataLoader.java
License:Open Source License
/** * Dispatches the queued load requests to the batch execution function and returns a composite future of the result. * <p>// w w w .ja v a2 s. c o m * If batching is disabled, or there are no queued requests, then a succeeded composite future is returned. * * @return the composite future of the queued load requests */ public CompositeFuture dispatch() { if (!loaderOptions.batchingEnabled() || loaderQueue.size() == 0) { return CompositeFuture.join(Collections.emptyList()); } CompositeFuture batch = batchLoadFunction.load(loaderQueue.keySet()); dispatchedQueues.put(batch, new LinkedHashMap<>(loaderQueue)); batch.setHandler(rh -> { AtomicInteger index = new AtomicInteger(0); dispatchedQueues.get(batch).forEach((key, future) -> { if (batch.succeeded(index.get())) { future.complete(batch.resultAt(index.get())); } else { future.fail(batch.cause(index.get())); } index.incrementAndGet(); }); dispatchedQueues.remove(batch); }); loaderQueue.clear(); return batch; }
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 v a2 s . c o m*/ 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 ww w .j a v a 2s . c o 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 ww w .j a v a2 s .co 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"); } }