/* * Copyright 2016 the original author or authors. * * Licensed 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.vertx.example.util; import io.vertx.core.DeploymentOptions; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; import java.io.File; import java.io.IOException; import java.util.function.Consumer; public class Runner { private static final String AMQP_BRIDGE_EXAMPLES_DIR = "amqp-bridge-examples"; private static final String AMQP_BRIDGE_EXAMPLES_DIR_JAVA = AMQP_BRIDGE_EXAMPLES_DIR + "/src/main/java/"; public static void runExample(Class<?> clazz) { runExample(AMQP_BRIDGE_EXAMPLES_DIR_JAVA, clazz, new VertxOptions().setClustered(false), null); } public static void runExample(String exampleDir, Class<?> clazz, VertxOptions options, DeploymentOptions deploymentOptions) { runExample(exampleDir + clazz.getPackage().getName().replace(".", "/"), clazz.getName(), options, deploymentOptions); } public static void runExample(String exampleDir, String verticleID, VertxOptions options, DeploymentOptions deploymentOptions) { if (options == null) { // Default parameter options = new VertxOptions(); } // Smart cwd detection // Based on the current directory (.) and the desired directory (exampleDir), we try to compute the vertx.cwd // directory: try { // We need to use the canonical file. Without the file name is . File current = new File(".").getCanonicalFile(); if (exampleDir.startsWith(current.getName()) && !exampleDir.equals(current.getName())) { exampleDir = exampleDir.substring(current.getName().length() + 1); } } catch (IOException e) { // Ignore it. } System.setProperty("vertx.cwd", exampleDir); Consumer<Vertx> runner = vertx -> { try { if (deploymentOptions != null) { vertx.deployVerticle(verticleID, deploymentOptions); } else { vertx.deployVerticle(verticleID); } } catch (Throwable t) { t.printStackTrace(); } }; if (options.isClustered()) { Vertx.clusteredVertx(options, res -> { if (res.succeeded()) { Vertx vertx = res.result(); runner.accept(vertx); } else { res.cause().printStackTrace(); } }); } else { Vertx vertx = Vertx.vertx(options); runner.accept(vertx); } } }