Repository: incubator-tamaya-sandbox Updated Branches: refs/heads/master 99e685002 -> 7efb64e80
TAMAYA-256: Fixed Java version, tests and added documentation for Vertx support. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/204dc484 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/204dc484 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/204dc484 Branch: refs/heads/master Commit: 204dc4844552a6d5bff4938ac8b5a36f1c4b3f76 Parents: 99e6850 Author: anatole <[email protected]> Authored: Sat Mar 11 00:02:25 2017 +0100 Committer: anatole <[email protected]> Committed: Sat Mar 11 00:02:25 2017 +0100 ---------------------------------------------------------------------- vertx/bnd.bnd | 3 + vertx/pom.xml | 113 ++++++++++++++++ .../vertx/AbstractConfiguredVerticle.java | 76 +++++++++++ .../org/apache/tamaya/vertx/ConfigVerticle.java | 88 +++++++++++++ .../apache/tamaya/vertx/ConfigVerticleTest.java | 129 +++++++++++++++++++ .../org/apache/tamaya/vertx/TestVerticle.java | 42 ++++++ 6 files changed, 451 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/204dc484/vertx/bnd.bnd ---------------------------------------------------------------------- diff --git a/vertx/bnd.bnd b/vertx/bnd.bnd new file mode 100644 index 0000000..115c2e4 --- /dev/null +++ b/vertx/bnd.bnd @@ -0,0 +1,3 @@ +Export-Package: \ + org.apache.tamaya.vertx +Bundle-SymbolicName: org.apache.tamaya.vertx http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/204dc484/vertx/pom.xml ---------------------------------------------------------------------- diff --git a/vertx/pom.xml b/vertx/pom.xml new file mode 100644 index 0000000..058fbd3 --- /dev/null +++ b/vertx/pom.xml @@ -0,0 +1,113 @@ +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF 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. + --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.tamaya.ext</groupId> + <artifactId>tamaya-sandbox</artifactId> + <version>0.3-incubating-SNAPSHOT</version> + <relativePath>..</relativePath> + </parent> + + <artifactId>tamaya-vertx-alpha</artifactId> + <name>Apache Tamaya Modules - Vertx Support</name> + <description>This extension module provides functionality to integrate Tamaya configuration + with Vertx. + </description> + <packaging>jar</packaging> + + <properties> + <jdkVersion>1.8</jdkVersion> + <maven.compile.sourceLevel>${jdkVersion}</maven.compile.sourceLevel> + <maven.compile.targetLevel>${jdkVersion}</maven.compile.targetLevel> + <vertx.version>3.3.0</vertx.version> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.tamaya</groupId> + <artifactId>tamaya-api</artifactId> + <version>${project.parent.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tamaya</groupId> + <artifactId>tamaya-core</artifactId> + <version>${project.parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>io.vertx</groupId> + <artifactId>vertx-core</artifactId> + <version>${vertx.version}</version> + </dependency> + <dependency> + <groupId>io.vertx</groupId> + <artifactId>vertx-unit</artifactId> + <version>${vertx.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.tamaya.ext</groupId> + <artifactId>tamaya-injection-api</artifactId> + <version>${project.parent.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tamaya.ext</groupId> + <artifactId>tamaya-events</artifactId> + <version>${project.parent.version}</version> + <scope>provided</scope> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.apache.tamaya.ext</groupId> + <artifactId>tamaya-injection</artifactId> + <version>${project.parent.version}</version> + <scope>provided</scope> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>java-hamcrest</artifactId> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.5.1</version> + <configuration> + <debug>true</debug> + <optimize>${maven.compile.optimize}</optimize> + <source>${maven.compile.sourceLevel}</source> + <target>${maven.compile.targetLevel}</target> + <encoding>${project.build.sourceEncoding}</encoding> + <showDeprecation>${maven.compile.deprecation}</showDeprecation> + </configuration> + </plugin> + </plugins> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/204dc484/vertx/src/main/java/org/apache/tamaya/vertx/AbstractConfiguredVerticle.java ---------------------------------------------------------------------- diff --git a/vertx/src/main/java/org/apache/tamaya/vertx/AbstractConfiguredVerticle.java b/vertx/src/main/java/org/apache/tamaya/vertx/AbstractConfiguredVerticle.java new file mode 100644 index 0000000..495c62f --- /dev/null +++ b/vertx/src/main/java/org/apache/tamaya/vertx/AbstractConfiguredVerticle.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.tamaya.vertx; + +import io.vertx.core.AbstractVerticle; +import org.apache.tamaya.Configuration; +import org.apache.tamaya.ConfigurationProvider; +import org.apache.tamaya.inject.ConfigurationInjection; + +/** + * Base verticle class that adds some convenience methods for accessing configuration. + * The class also performs configuration injection using {@link ConfigurationInjection}. + */ +public abstract class AbstractConfiguredVerticle extends AbstractVerticle{ + + private Configuration configuration; + + public AbstractConfiguredVerticle() { + configure(); + } + + public Configuration getConfiguration(){ + if(configuration==null){ + return ConfigurationProvider.getConfiguration(); + } + return configuration; + } + + public void setConfiguration(Configuration configuration){ + this.configuration = configuration; + } + + protected void configure(){ + ConfigurationInjection.getConfigurationInjector().configure(this, getConfiguration()); + } + + protected final String getConfigProperty(String key){ + return getConfiguration().get(key); + } + + protected final String getConfigPropertyOrDefault(String key, String defaultValue){ + String val = getConfiguration().get(key); + if(val==null){ + return defaultValue; + } + return val; + } + + protected final <T> T getConfigProperty(String key, Class<T> type){ + return getConfiguration().get(key, type); + } + + protected final <T> T getConfigPropertyOrDefault(String key, Class<T> type, T defaultValue){ + T val = getConfiguration().get(key, type); + if(val==null){ + return defaultValue; + } + return val; + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/204dc484/vertx/src/main/java/org/apache/tamaya/vertx/ConfigVerticle.java ---------------------------------------------------------------------- diff --git a/vertx/src/main/java/org/apache/tamaya/vertx/ConfigVerticle.java b/vertx/src/main/java/org/apache/tamaya/vertx/ConfigVerticle.java new file mode 100644 index 0000000..228aece --- /dev/null +++ b/vertx/src/main/java/org/apache/tamaya/vertx/ConfigVerticle.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.tamaya.vertx; + +import io.vertx.core.Handler; +import io.vertx.core.eventbus.Message; +import io.vertx.core.eventbus.MessageConsumer; +import io.vertx.core.json.Json; +import org.apache.tamaya.Configuration; +import org.apache.tamaya.ConfigurationProvider; +import org.apache.tamaya.functions.ConfigurationFunctions; +import org.apache.tamaya.functions.PropertyMatcher; +import org.apache.tamaya.inject.api.Config; + +import java.util.Map; + +/** + * Small configured verticle for testing Tamaya's vertx support. + */ +public class ConfigVerticle extends AbstractConfiguredVerticle{ + + @Config(value = "tamaya.vertx.config.map", defaultValue = "CONFIG-MAP") + private String mapBusTarget; + + @Config(value = "tamaya.vertx.config.value", defaultValue = "CONFIG-VAL") + private String valBusTarget; + + private MessageConsumer<String> mapBusListener; + private MessageConsumer<String> valBusListener; + + @Override + public void start()throws Exception{ + mapBusListener = vertx.eventBus().consumer(mapBusTarget); + mapBusListener.handler(new Handler<Message<String>>(){ + @Override + public void handle(final Message<String> message) { + Configuration config = ConfigurationProvider.getConfiguration(); + Map<String,String> cfg = config.with(ConfigurationFunctions.filter( + new PropertyMatcher() { + @Override + public boolean test(String key, String value) { + return key.matches(message.body()); + } + } + )).getProperties(); + message.reply(Json.encodePrettily(cfg)); + } + }); + valBusListener = vertx.eventBus().consumer(valBusTarget); + valBusListener.handler(new Handler<Message<String>>(){ + @Override + public void handle(final Message<String> message) { + Configuration config = ConfigurationProvider.getConfiguration(); + message.reply(config.get(message.body())); + } + }); + } + + @Override + public void stop()throws Exception{ + mapBusListener.unregister(); + valBusListener.unregister(); + } + + @Override + public String toString() { + return "ConfigVerticle{" + + "mapBusTarget='" + mapBusTarget + '\'' + + ", valBusTarget='" + valBusTarget + '\'' + + '}'; + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/204dc484/vertx/src/test/java/org/apache/tamaya/vertx/ConfigVerticleTest.java ---------------------------------------------------------------------- diff --git a/vertx/src/test/java/org/apache/tamaya/vertx/ConfigVerticleTest.java b/vertx/src/test/java/org/apache/tamaya/vertx/ConfigVerticleTest.java new file mode 100644 index 0000000..734d27a --- /dev/null +++ b/vertx/src/test/java/org/apache/tamaya/vertx/ConfigVerticleTest.java @@ -0,0 +1,129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.tamaya.vertx; + +import io.vertx.core.AsyncResult; +import io.vertx.core.Handler; +import io.vertx.core.eventbus.Message; +import io.vertx.core.json.Json; +import io.vertx.ext.unit.Async; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.RunTestOnContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.apache.tamaya.ConfigurationProvider; +import org.apache.tamaya.functions.ConfigurationFunctions; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.math.BigDecimal; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Tests the Tamaya Vertx configuration support. + * Created by atsticks on 08.03.17. + */ +@RunWith(VertxUnitRunner.class) +public class ConfigVerticleTest { + + @Rule + public RunTestOnContext vertxContext = new RunTestOnContext(); + + private TestVerticle testVerticle = new TestVerticle(); + + @Before + public void prepare(){ + vertxContext.vertx().deployVerticle(testVerticle); + vertxContext.vertx().deployVerticle(new ConfigVerticle()); + } + + @Test + public void testSingle(final TestContext testContext){ + final Async async = testContext.async(); + vertxContext.vertx().eventBus().send("CONFIG-VAL", + "user.home", new Handler<AsyncResult<Message<String>>>() { + @Override + public void handle(AsyncResult<Message<String>> reply) { + testContext.assertEquals( + reply.result().body(), + System.getProperty("user.home")); + async.complete(); + } + }); + } + + @Test + public void testMap(final TestContext testContext){ + final Async async = testContext.async(); + String selector = "user."; + vertxContext.vertx().eventBus().send("CONFIG-MAP", + selector, new Handler<AsyncResult<Message<String>>>() { + @Override + public void handle(AsyncResult<Message<String>> reply) { + testContext.assertNotNull(reply.result()); + testContext.assertNotNull(reply.result().body()); + Map<String,String> config = Json.decodeValue(reply.result().body(), + Map.class); + Map<String,String> compareTo = ConfigurationProvider.getConfiguration() + .with(ConfigurationFunctions.filter((k,v) -> { + return k.matches("user."); + })).getProperties(); + testContext.assertEquals(config.size(), compareTo.size()); + for(Map.Entry<String,String> en:compareTo.entrySet()){ + testContext.assertEquals( + config.get(en.getKey()), en.getValue()); + } + async.complete(); + } + }); + } + + @Test + public void testConfigCalls(TestContext testContext){ + testContext.assertNotNull(testVerticle.getConfiguration()); + testContext.assertEquals( + testVerticle.getConfigProperty("user.home"), + System.getProperty("user.home")); + testContext.assertEquals( + testVerticle.getConfigPropertyOrDefault("foo.bar", "blabla"), + "blabla"); + testContext.assertEquals( + testVerticle.getConfigPropertyOrDefault("foo.bar", BigDecimal.class, new BigDecimal("1.12345")), + new BigDecimal("1.12345")); + } + + @Test + public void testInjection(TestContext testContext){ + testContext.assertNotNull(testVerticle.userHome); + testContext.assertNotNull(testVerticle.userName); + testContext.assertNotNull(testVerticle.anyNumber); + testContext.assertEquals( + testVerticle.userHome, + System.getProperty("user.home")); + testContext.assertEquals( + testVerticle.userName, + System.getProperty("user.name")); + testContext.assertEquals( + testVerticle.anyNumber, + new BigDecimal("1.123456789")); + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/204dc484/vertx/src/test/java/org/apache/tamaya/vertx/TestVerticle.java ---------------------------------------------------------------------- diff --git a/vertx/src/test/java/org/apache/tamaya/vertx/TestVerticle.java b/vertx/src/test/java/org/apache/tamaya/vertx/TestVerticle.java new file mode 100644 index 0000000..8ec90ec --- /dev/null +++ b/vertx/src/test/java/org/apache/tamaya/vertx/TestVerticle.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.tamaya.vertx; + +import org.apache.tamaya.inject.api.Config; + +import java.math.BigDecimal; + +/** + * Small configured verticle for testing Tamaya's vertx support. + */ +public class TestVerticle extends AbstractConfiguredVerticle{ + + @Config("user.name") + String userName; + + @Config("user.home") + String userHome; + + @Config(value = "any.number.BD", defaultValue = "1.123456789") + BigDecimal anyNumber; + + public TestVerticle(){ + super(); + } +}
