Java tutorial
/* * Copyright 2014 Red Hat, Inc. * * Red Hat licenses this file to you under the Apache License, version 2.0 * (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package io.rebind.vertx.orientdb; import io.rebind.vertx.orientdb.OrientDBService; import io.vertx.core.Vertx; import io.vertx.core.Handler; import io.vertx.core.AsyncResult; import io.vertx.core.eventbus.EventBus; import io.vertx.core.eventbus.Message; import io.vertx.core.eventbus.MessageConsumer; import io.vertx.core.eventbus.DeliveryOptions; import io.vertx.core.eventbus.ReplyException; import io.vertx.core.json.JsonObject; import io.vertx.core.json.JsonArray; import java.util.Collection; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; import io.vertx.serviceproxy.ProxyHelper; import io.vertx.serviceproxy.ProxyHandler; import java.util.List; import io.rebind.vertx.orientdb.OrientDBService; import io.vertx.core.Vertx; import io.vertx.core.json.JsonObject; import io.rebind.vertx.orientdb.model.Record; import io.vertx.core.AsyncResult; import io.vertx.core.Handler; /* Generated Proxy code - DO NOT EDIT @author Roger the Robot */ public class OrientDBServiceVertxProxyHandler extends ProxyHandler { public static final long DEFAULT_CONNECTION_TIMEOUT = 5 * 60; // 5 minutes private final Vertx vertx; private final OrientDBService service; private final long timerID; private long lastAccessed; private final long timeoutSeconds; public OrientDBServiceVertxProxyHandler(Vertx vertx, OrientDBService service) { this(vertx, service, DEFAULT_CONNECTION_TIMEOUT); } public OrientDBServiceVertxProxyHandler(Vertx vertx, OrientDBService service, long timeoutInSecond) { this(vertx, service, true, timeoutInSecond); } public OrientDBServiceVertxProxyHandler(Vertx vertx, OrientDBService service, boolean topLevel, long timeoutSeconds) { this.vertx = vertx; this.service = service; this.timeoutSeconds = timeoutSeconds; if (timeoutSeconds != -1 && !topLevel) { long period = timeoutSeconds * 1000 / 2; if (period > 10000) { period = 10000; } this.timerID = vertx.setPeriodic(period, this::checkTimedOut); } else { this.timerID = -1; } accessed(); } public MessageConsumer<JsonObject> registerHandler(String address) { MessageConsumer<JsonObject> consumer = vertx.eventBus().<JsonObject>consumer(address).handler(this); this.setConsumer(consumer); return consumer; } private void checkTimedOut(long id) { long now = System.nanoTime(); if (now - lastAccessed > timeoutSeconds * 1000000000) { close(); } } @Override public void close() { if (timerID != -1) { vertx.cancelTimer(timerID); } super.close(); } private void accessed() { this.lastAccessed = System.nanoTime(); } public void handle(Message<JsonObject> msg) { try { JsonObject json = msg.body(); String action = msg.headers().get("action"); if (action == null) { throw new IllegalStateException("action not specified"); } accessed(); switch (action) { case "addVertex": { service.addVertex((java.lang.String) json.getValue("iClassName"), (java.lang.String) json.getValue("iClusterName"), (io.vertx.core.json.JsonObject) json.getValue("properties"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(res.result() == null ? null : res.result().toJson()); } }); break; } case "updateVertex": { service.updateVertex((java.lang.String) json.getValue("id"), (io.vertx.core.json.JsonObject) json.getValue("properties"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(res.result() == null ? null : res.result().toJson()); } }); break; } case "removeVertex": { service.removeVertex((java.lang.String) json.getValue("id"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(res.result() == null ? null : res.result().toJson()); } }); break; } case "getVertex": { service.getVertex((java.lang.String) json.getValue("id"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(res.result() == null ? null : res.result().toJson()); } }); break; } case "getVerticesOfClass": { service.getVerticesOfClass((java.lang.String) json.getValue("iClassName"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(new JsonArray( res.result().stream().map(Record::toJson).collect(Collectors.toList()))); } }); break; } case "getVertices": { service.getVertices((java.lang.String) json.getValue("iClassName"), (io.vertx.core.json.JsonObject) json.getValue("vertexQuery"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(new JsonArray( res.result().stream().map(Record::toJson).collect(Collectors.toList()))); } }); break; } case "getRelatedVertices": { service.getRelatedVertices((java.lang.String) json.getValue("sourceId"), (java.lang.String) json.getValue("label"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(new JsonArray( res.result().stream().map(Record::toJson).collect(Collectors.toList()))); } }); break; } case "addEdge": { service.addEdge((java.lang.String) json.getValue("sourceId"), (java.lang.String) json.getValue("destinationId"), (java.lang.String) json.getValue("label"), (io.vertx.core.json.JsonObject) json.getValue("properties"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(res.result() == null ? null : res.result().toJson()); } }); break; } case "removeEdge": { service.removeEdge((java.lang.String) json.getValue("id"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(res.result() == null ? null : res.result().toJson()); } }); break; } case "removeEdges": { service.removeEdges((java.lang.String) json.getValue("sourceId"), (java.lang.String) json.getValue("destinationId"), (java.lang.String) json.getValue("label"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(new JsonArray( res.result().stream().map(Record::toJson).collect(Collectors.toList()))); } }); break; } case "getEdges": { service.getEdges((java.lang.String) json.getValue("sourceId"), (java.lang.String) json.getValue("destinationId"), (java.lang.String) json.getValue("label"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(new JsonArray( res.result().stream().map(Record::toJson).collect(Collectors.toList()))); } }); break; } case "getEdge": { service.getEdge((io.vertx.core.json.JsonObject) json.getValue("edgeQuery"), res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(new JsonArray( res.result().stream().map(Record::toJson).collect(Collectors.toList()))); } }); break; } case "close": { service.close(); break; } default: { throw new IllegalStateException("Invalid action: " + action); } } } catch (Throwable t) { msg.fail(-1, t.getMessage()); throw t; } } private <T> Handler<AsyncResult<T>> createHandler(Message msg) { return res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { if (res.result() != null && res.result().getClass().isEnum()) { msg.reply(((Enum) res.result()).name()); } else { msg.reply(res.result()); } } }; } private <T> Handler<AsyncResult<List<T>>> createListHandler(Message msg) { return res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(new JsonArray(res.result())); } }; } private <T> Handler<AsyncResult<Set<T>>> createSetHandler(Message msg) { return res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { msg.reply(new JsonArray(new ArrayList<>(res.result()))); } }; } private Handler<AsyncResult<List<Character>>> createListCharHandler(Message msg) { return res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { JsonArray arr = new JsonArray(); for (Character chr : res.result()) { arr.add((int) chr); } msg.reply(arr); } }; } private Handler<AsyncResult<Set<Character>>> createSetCharHandler(Message msg) { return res -> { if (res.failed()) { msg.fail(-1, res.cause().getMessage()); } else { JsonArray arr = new JsonArray(); for (Character chr : res.result()) { arr.add((int) chr); } msg.reply(arr); } }; } private <T> Map<String, T> convertMap(Map map) { return (Map<String, T>) map; } private <T> List<T> convertList(List list) { return (List<T>) list; } private <T> Set<T> convertSet(List list) { return new HashSet<T>((List<T>) list); } }