List of usage examples for io.vertx.core Future compose
default <U> Future<U> compose(Function<T, Future<U>> mapper)
When this future (the one on which compose is called) succeeds, the mapper will be called with the completed value and this mapper returns another future object.
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 ww w . j a v a2 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.BaseMeasurementServiceVerticle.java
License:Open Source License
@Override protected Future<Void> start(JsonObject configJsonObject) { Future<Void> future = super.start(configJsonObject); future = future.compose(v -> _init()); long initInterval = getInitInterval(); if (initInterval > 0) { vertx.setPeriodic(initInterval, timerId -> _init()); }//from ww w . j a v a2 s.com return future; }
From source file:com.github.ithildir.airbot.server.api.ai.AirQualityApiAiFulfillmentBuilder.java
License:Open Source License
private Future<Fulfillment> _buildFulfillment(Location location, String locationString, Locale locale) { Future<String> messageFuture = _airQualityMessageBuilder.getMessage(location, locationString, locale); return messageFuture.compose(message -> { Fulfillment fulfillment = new Fulfillment(); fulfillment.setSpeech(message);//from w w w .jav a 2 s . c o m return Future.succeededFuture(fulfillment); }); }
From source file:com.github.ithildir.airbot.server.api.ai.AirQualityApiAiFulfillmentBuilder.java
License:Open Source License
private Future<Fulfillment> _buildLocationFulfillment(String locationString, Locale locale) { Future<Location> locationFuture = Future.future(); _geoService.getLocationByQuery(locationString, locationFuture); return locationFuture.compose(location -> _buildFulfillment(location, locationString, locale)); }
From source file:com.github.ithildir.airbot.server.api.ai.AirQualityApiAiFulfillmentBuilder.java
License:Open Source License
private Future<Fulfillment> _buildUserFulfillment(Locale locale, AIResponse aiResponse, JsonObject responseJsonObject) { String userId = aiResponse.getSessionId(); Future<Location> locationFuture = _getReponseLocation(responseJsonObject); locationFuture = locationFuture.compose(location -> { if (location != null) { return Future.succeededFuture(location); }//from ww w . ja va2s . co m Future<Location> future = Future.future(); _userService.getUserLocation(userId, future); return future; }); return locationFuture.compose(location -> { if (location == null) { Fulfillment fulfillment = ApiAiUtil.buildGooglePermissionFulfillment( "in-order-to-get-information-about-the-air-" + "quality-around-you", "DEVICE_PRECISE_LOCATION", locale); return Future.succeededFuture(fulfillment); } _updateUserLocation(userId, location); return _buildFulfillment(location, null, locale); }); }
From source file:org.dfr.dfr.worker.MemberWorker.java
@Override public void start(Future<Void> fut) { JsonObject config = new JsonObject(); config.put("url", "jdbc:mysql://localhost:3306/latihan"); config.put("driver_class", "com.mysql.jdbc.Driver"); config.put("user", "root"); config.put("password", "admin"); JDBCClient client = JDBCClient.createShared(vertx, config, "memberds"); final Validator v = Validation.buildDefaultValidatorFactory().getValidator(); SimpleDateFormat mysqlFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); vertx.eventBus().consumer("MemberWorker#Register").handler(h -> { MemberRegisterRequest req = null; try {//from w ww . java 2 s . c om req = Json.decodeValue(h.body().toString(), MemberRegisterRequest.class); } catch (Exception e) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } Set<ConstraintViolation<MemberRegisterRequest>> vr = v.validate(req); if (!vr.isEmpty()) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON) .setMessage(vr.iterator().next().getMessage()))); return; } final MemberRegisterRequest r = req; final HashMap<String, Object> smap = new HashMap(); client.getConnection(ch -> { if (ch.succeeded()) { SQLConnection c = ch.result(); Future<Void> f1 = Future.future(); c.setAutoCommit(false, f1.completer()); f1.compose(o -> { Future<ResultSet> f2 = Future.future(); c.queryWithParams("select username from member where username=?", new JsonArray().add(r.getUsername()), f2.completer()); return f2; }).compose(res -> { Future<ResultSet> f2 = Future.future(); if (res.getNumRows() != 0) { f2.fail(ErrorCode.USER_EXIST); } else { c.queryWithParams("select email from member where email=?", new JsonArray().add(r.getEmail()), f2.completer()); } return f2; }).compose(res -> { if (res.getNumRows() > 0) { return Future.failedFuture(ErrorCode.EMAIL_EXIST); } else { try { r.setPassword(hash(r.getPassword())); } catch (Exception e) { return Future.failedFuture(ErrorCode.SERVER_ERROR); } Future<UpdateResult> f2 = Future.future(); c.updateWithParams("insert into member(username,password,email) values (?,?,?)", new JsonArray().add(r.getUsername()).add(r.getPassword()).add(r.getEmail()), f2.completer()); return f2; } }).compose(res -> { Future<UpdateResult> f2 = Future.future(); c.updateWithParams("insert into profile(member_id) values(?)", new JsonArray().add(res.getKeys().getLong(0)), f2.completer()); return f2; }).compose(res -> { Future<Void> cfut = Future.future(); c.commit(cfut.completer()); return cfut; }).setHandler(ch1 -> { if (ch1.succeeded()) { c.close(close -> { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.COMPLETE))); }); } else { c.rollback(rr -> { c.close(close -> { h.reply(Json.encode(new GeneralResponse().setCode(ch1.cause().getMessage()) .setMessage(ErrorCode.getMessage(ch1.cause().getMessage())))); }); }); } }); } else { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.SERVER_ERROR) .setMessage(ErrorCode.getMessage(ErrorCode.SERVER_ERROR)))); } }); }); vertx.eventBus().consumer("MemberWorker#ProfileUpdate").handler(h -> { ProfileUpdateRequest req = null; try { req = Json.decodeValue(h.body().toString(), ProfileUpdateRequest.class); } catch (Exception e) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } Set<ConstraintViolation<ProfileUpdateRequest>> vr = v.validate(req); if (!vr.isEmpty()) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON) .setMessage(vr.iterator().next().getMessage()))); return; } ProfileUpdateRequest rq = req; client.getConnection(connection -> { if (connection.succeeded()) { HashMap<String, Object> sm = new HashMap<String, Object>(); SQLConnection con = connection.result(); Future<Void> ac = Future.future(); con.setAutoCommit(false, ac.completer()); ac.compose(rv -> { Future<ResultSet> lock = Future.future(); con.queryWithParams( "select p.* from profile p inner join member m on p.member_id=m.member_id where m.username=? and m.password=? for update", new JsonArray().add(rq.getUsername()).add(rq.getPassword()), lock.completer()); return lock; }).compose(r -> { if (r.getNumRows() == 0) { return Future.failedFuture(ErrorCode.USERNAME_PASSWORD_NOT_MATCH); } long member_id = r.getRows().iterator().next().getLong("member_id"); Future<UpdateResult> up = Future.future(); con.updateWithParams( "update profile set name=?, phone=?, address=?, company_name=?, company_address=? where member_id=?", new JsonArray().add(rq.getName()).add(rq.getPhone()).add(rq.getAddress()) .add(rq.getCompanyName()).add(rq.getCompanyAddress()).add(member_id), up.completer()); return up; }).compose(ok -> { Future<Void> commitFu = Future.future(); con.commit(commitFu.completer()); return commitFu; }).setHandler(th -> { if (th.succeeded()) { con.close(cr -> { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.COMPLETE))); }); } else { con.rollback(rh -> { con.close(cl -> { h.reply(Json.encode(new GeneralResponse().setCode(th.cause().getMessage()) .setMessage(ErrorCode.getMessage(th.cause().getMessage())))); }); }); } }); } else { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.SERVER_ERROR) .setMessage(ErrorCode.getMessage(ErrorCode.SERVER_ERROR)))); } }); }); vertx.eventBus().consumer("MemberWorker#GetProfile").handler(h -> { ProfileRequest req = null; try { req = Json.decodeValue(h.body().toString(), ProfileRequest.class); } catch (Exception e) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } Set<ConstraintViolation<ProfileRequest>> rV = v.validate(req); if (!rV.isEmpty()) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } final ProfileRequest r = req; client.getConnection(cH -> { if (cH.succeeded()) { SQLConnection c = cH.result(); Future<Void> f = Future.future(); c.setAutoCommit(true, f.completer()); f.compose(res -> { Future<ResultSet> f0 = Future.future(); c.queryWithParams("select member_id from member m where m.username=? and m.password=?", new JsonArray().add(r.getUsername()).add(r.getPassword()), f0.completer()); return f0; }).compose(res -> { Future<ResultSet> f0 = Future.future(); if (res.getNumRows() <= 0) { f0.fail(ErrorCode.USERNAME_PASSWORD_NOT_MATCH); } else { c.queryWithParams("select * from profile where member_id=?", new JsonArray().add(res.getRows().iterator().next().getLong("member_id")), f0.completer()); } return f0; }).setHandler(rh -> { c.close(); if (rh.succeeded()) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.COMPLETE) .setData(rh.result().getRows().get(0)))); } else { h.reply(Json.encode(new GeneralResponse().setCode(rh.cause().getMessage()) .setMessage(ErrorCode.getMessage(rh.cause().getMessage())))); } }); } else { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.SERVER_ERROR) .setMessage(ErrorCode.getMessage(ErrorCode.SERVER_ERROR)))); } }); }); vertx.eventBus().consumer("MemberWorker#ChangePassword").handler(h -> { ChangePasswordRequest req = null; try { req = Json.decodeValue(h.body().toString(), ChangePasswordRequest.class); } catch (Exception e) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } Set<ConstraintViolation<ChangePasswordRequest>> rV = v.validate(req); if (!rV.isEmpty()) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } final ChangePasswordRequest r = req; client.getConnection(connection -> { if (connection.succeeded()) { SQLConnection c = connection.result(); Future<Void> f1 = Future.future(); c.setAutoCommit(false, f1.completer()); f1.compose(vo -> { Future<ResultSet> f = Future.future(); c.queryWithParams("select member_id from member where username=? and password=? for update", new JsonArray().add(r.getUsername()).add(r.getPassword()), f.completer()); return f; }).compose(res -> { Future<UpdateResult> f0 = Future.future(); if (res.getNumRows() <= 0) { f0.fail(ErrorCode.USERNAME_PASSWORD_NOT_MATCH); } else { long member_id = res.getRows().iterator().next().getLong("member_id"); String hash = null; try { hash = hash(r.getNewPassword()); } catch (Exception e) { return Future.failedFuture(ErrorCode.SERVER_ERROR); } c.updateWithParams("update member set password=? where member_id=?", new JsonArray().add(hash).add(member_id), f0.completer()); } return f0; }).compose(res -> { Future<Void> cf = Future.future(); c.commit(cf.completer()); return cf; }).setHandler(ch -> { if (ch.succeeded()) { c.close(); h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.COMPLETE))); } else { ch.cause().printStackTrace(); c.rollback(rh -> { c.close(); h.reply(Json.encode(new GeneralResponse().setCode(ch.cause().getMessage()) .setMessage(ErrorCode.getMessage(ch.cause().getMessage())))); }); } }); } else { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.SERVER_ERROR) .setMessage(ErrorCode.getMessage(ErrorCode.SERVER_ERROR)))); } }); }); vertx.eventBus().consumer("MembrWorker#AddAsset").handler(h -> { AddAssetRequest req = null; try { req = Json.decodeValue(h.body().toString(), AddAssetRequest.class); } catch (Exception e) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } Set<ConstraintViolation<AddAssetRequest>> res = v.validate(req); if (!res.isEmpty()) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON) .setMessage(res.iterator().next().getMessage()))); return; } AddAssetRequest r = req; client.getConnection(connection -> { if (connection.succeeded()) { SQLConnection con = connection.result(); Future<Void> f = Future.future(); con.setAutoCommit(false, f.completer()); f.compose(vo -> { Future<ResultSet> f1 = Future.future(); con.queryWithParams("select * from member where username=? and password=?", new JsonArray().add(r.getUsername()).add(r.getPassword()), f1.completer()); return f1; }).compose(re -> { Future<UpdateResult> f1 = Future.future(); if (re.getNumRows() <= 0) { System.out.println(Json.encode(re)); System.out.println(Json.encode(r)); f1.fail(ErrorCode.USERNAME_PASSWORD_NOT_MATCH); } else { long member_id = re.getRows().iterator().next().getLong("member_id"); con.updateWithParams( "insert into assets (member_id,debit_credit,asset_name,asset_value,date_time,description) values(?,?,?,?,?,?)", new JsonArray().add(member_id).add(r.getDebitCredit()).add(r.getAssetName()) .add(r.getAssetValue()).add(mysqlFormat.format(new Date())) .add(r.getDescription()), f1.completer()); } return f1; }).compose(re -> { Future<Void> end = Future.future(); con.commit(end.completer()); return end; }).setHandler(ch -> { if (ch.succeeded()) { con.close(); h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.COMPLETE))); } else { con.rollback(rh -> { con.close(); h.reply(Json.encode(new GeneralResponse().setCode(ch.cause().getMessage()) .setMessage(ErrorCode.getMessage(ch.cause().getMessage())))); }); } }); } else { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.SERVER_ERROR) .setMessage(ErrorCode.getMessage(ErrorCode.SERVER_ERROR)))); } }); }); vertx.eventBus().consumer("AssetWorker#GetAsset").handler(h -> { GetAssetRequest req = null; try { req = Json.decodeValue(h.body().toString(), GetAssetRequest.class); } catch (Exception e) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } Set<ConstraintViolation<GetAssetRequest>> res = v.validate(req); if (!res.isEmpty()) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON) .setMessage(res.iterator().next().getMessage()))); return; } GetAssetRequest r = req; client.getConnection(connection -> { if (connection.succeeded()) { SQLConnection c = connection.result(); Future<Void> vo = Future.future(); c.setAutoCommit(true, vo.completer()); vo.compose(re -> { Future<ResultSet> f0 = Future.future(); c.queryWithParams("select member_id from member where username=? and password=?", new JsonArray().add(r.getUsername()).add(r.getPassword()), f0.completer()); return f0; }).compose(re -> { Future<ResultSet> f0 = Future.future(); if (re.getNumRows() <= 0) { f0.fail(ErrorCode.USERNAME_PASSWORD_NOT_MATCH); } else { long member_id = re.getRows().iterator().next().getLong("member_id"); c.queryWithParams("select * from assets where member_id=?", new JsonArray().add(member_id), f0.completer()); } return f0; }).setHandler(resp -> { if (resp.succeeded()) { h.reply(Json.encodePrettily(new GeneralResponse().setCode(ErrorCode.COMPLETE) .setData(resp.result().getRows()))); } else { h.reply(Json.encode(new GeneralResponse().setCode(resp.cause().getMessage()) .setMessage(ErrorCode.getMessage(resp.cause().getMessage())))); } c.close(); }); } else { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.SERVER_ERROR) .setMessage(connection.cause().getMessage()))); } }); }); vertx.eventBus().consumer("AssetWorker#UpdateAsset").handler(h -> { UpdateAssetRequest req = null; try { req = Json.decodeValue(h.body().toString(), UpdateAssetRequest.class); } catch (Exception e) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON))); return; } Set<ConstraintViolation<UpdateAssetRequest>> res = v.validate(req); if (!res.isEmpty()) { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.INVALID_JSON) .setMessage(res.iterator().next().getMessage()))); return; } final UpdateAssetRequest r = req; client.getConnection(connection -> { if (connection.succeeded()) { SQLConnection con = connection.result(); Future<Void> f = Future.future(); con.setAutoCommit(false, f.completer()); f.compose(vo -> { Future<ResultSet> f0 = Future.future(); con.queryWithParams("select member_id from member where username=? and password=?", new JsonArray().add(r.getUsername()).add(r.getPassword()), f0.completer()); return f0; }).compose(rs -> { Future<ResultSet> f0 = Future.future(); if (rs.getNumRows() <= 0) { f0.fail(ErrorCode.USERNAME_PASSWORD_NOT_MATCH); } else { long member_id = rs.getRows().iterator().next().getLong("member_id"); con.queryWithParams("select * from assets where asset_id=? and member_id=? for update", new JsonArray().add(r.getAssetId()).add(member_id), f0.completer()); } return f0; }).compose(rs -> { Future<UpdateResult> f0 = Future.future(); con.updateWithParams( "update assets set debit_credit=?,asset_name=?,asset_value=?,date_time=?,description=? where asset_id=?", new JsonArray().add(r.getDebitCredit()).add(r.getAssetName()).add(r.getAssetValue()) .add(mysqlFormat.format(new Date())).add(r.getDescription()) .add(r.getAssetId()), f0.completer()); return f0; }).compose(rs -> { Future<Void> cf = Future.future(); con.commit(cf.completer()); return cf; }).setHandler(sh -> { if (sh.succeeded()) { con.close(); h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.COMPLETE))); } else { con.rollback(rh -> { con.close(); h.reply(Json.encode(new GeneralResponse().setCode(sh.cause().getMessage()) .setMessage(ErrorCode.getMessage(sh.cause().getMessage())))); }); } }); } else { h.reply(Json.encode(new GeneralResponse().setCode(ErrorCode.SERVER_ERROR))); } }); }); fut.complete(); }
From source file:org.eclipse.hono.deviceregistry.FileBasedTenantService.java
License:Open Source License
Future<Void> loadTenantData() { if (getConfig().getFilename() == null) { return Future.succeededFuture(); } else {//www.ja v a2 s. c o m final Future<Buffer> readResult = Future.future(); vertx.fileSystem().readFile(getConfig().getFilename(), readResult.completer()); return readResult.compose(buffer -> { return addAll(buffer); }).recover(t -> { log.debug("cannot load tenants from file [{}]: {}", getConfig().getFilename(), t.getMessage()); return Future.succeededFuture(); }); } }
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(); }// w ww. j a v a2 s . 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; }); }