Example usage for io.vertx.core CompositeFuture setHandler

List of usage examples for io.vertx.core CompositeFuture setHandler

Introduction

In this page you can find the example usage for io.vertx.core CompositeFuture setHandler.

Prototype

@Override
    default CompositeFuture setHandler(Handler<AsyncResult<CompositeFuture>> handler) 

Source Link

Usage

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

}