Repository: incubator-tamaya-extensions Updated Branches: refs/heads/master 668053c7c -> d503ef491
TAMAYA-318 Added config demo feature. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/d503ef49 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/d503ef49 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/d503ef49 Branch: refs/heads/master Commit: d503ef491289cd2a3a0b7841dc6415703ce80cfc Parents: 668053c Author: Anatole Tresch <[email protected]> Authored: Mon Nov 20 10:40:30 2017 +0100 Committer: Anatole Tresch <[email protected]> Committed: Mon Nov 20 10:40:30 2017 +0100 ---------------------------------------------------------------------- .../tamaya/springexample/ColorConverter.java | 41 ++++++++++++ .../tamaya/springexample/WelcomeController.java | 43 +++++++++++- .../org.apache.tamaya.spi.PropertyConverter | 19 ++++++ .../src/main/resources/templates/config.ftl | 29 ++++++++ .../src/main/resources/templates/welcome.ftl | 69 ++++++++++++++++++-- 5 files changed, 196 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/d503ef49/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/ColorConverter.java ---------------------------------------------------------------------- diff --git a/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/ColorConverter.java b/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/ColorConverter.java new file mode 100644 index 0000000..3ec3977 --- /dev/null +++ b/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/ColorConverter.java @@ -0,0 +1,41 @@ +/* + * Copyright 2012-2014 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 org.apache.tamaya.springexample; + +import org.apache.tamaya.spi.ConversionContext; +import org.apache.tamaya.spi.PropertyConverter; + +import java.awt.*; + +/** + * Simple demo converter for Color. + */ +public class ColorConverter implements PropertyConverter<Color>{ + + @Override + public Color convert(String value, ConversionContext context) { + if(value.length()<7){ + return null; + } + if(!value.startsWith("#")){ + throw new IllegalArgumentException("Invalid color, format is: #RRGGBB"); + } + int r = Integer.parseInt(value.substring(1,3),8); + int g = Integer.parseInt(value.substring(3,5),8); + int b = Integer.parseInt(value.substring(5,7),8); + return new Color(r, g, b); + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/d503ef49/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/WelcomeController.java ---------------------------------------------------------------------- diff --git a/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/WelcomeController.java b/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/WelcomeController.java index bbe921f..172c4d5 100644 --- a/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/WelcomeController.java +++ b/examples/05-spring-example/src/main/java/org/apache/tamaya/springexample/WelcomeController.java @@ -15,15 +15,21 @@ */ package org.apache.tamaya.springexample; +import java.awt.*; import java.util.Date; import java.util.Map; +import org.apache.tamaya.Configuration; +import org.apache.tamaya.ConfigurationProvider; +import org.apache.tamaya.functions.ConfigurationFunctions; import org.apache.tamaya.inject.api.Config; import org.apache.tamaya.inject.api.DynamicValue; import org.apache.tamaya.inject.api.UpdatePolicy; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.*; + +import javax.websocket.server.PathParam; @Controller public class WelcomeController { @@ -37,6 +43,9 @@ public class WelcomeController { @Config(value = "foreground.color", required = false, defaultValue = "#DDDDDD") private DynamicValue<String> foregroundColor; + @Config(value = "background.color", required = false) + private Color bgColor; + @GetMapping("/") public String welcome(Map<String, Object> model) { foregroundColor.setUpdatePolicy(UpdatePolicy.IMMEDIATE); @@ -47,4 +56,36 @@ public class WelcomeController { return "welcome"; } + @GetMapping("/update") + public String update(@RequestParam("foreground") String newForeground, Map<String, Object> model) { + foregroundColor.setUpdatePolicy(UpdatePolicy.IMMEDIATE); + if(newForeground!=null){ + System.out.println("Setting new foreground: " + newForeground+"..."); + System.setProperty("foreground.color", newForeground); + } + model.put("time", new Date()); + model.put("message", this.message); + model.put("background", this.backgroundColor); + model.put("foreground", this.foregroundColor.get()); + return "welcome"; + } + + @GetMapping("/config") + public String config(Map<String, Object> model) { + Configuration config = ConfigurationProvider.getConfiguration(); + model.put("filter", "NO FILTER"); + model.put("config", config + .query(ConfigurationFunctions.textInfo())); + return "config"; + } + + @GetMapping(value="/config/{path}") + public String config(@PathVariable("path") String path, Map<String, Object> model) { + Configuration config = ConfigurationProvider.getConfiguration(); + model.put("filter", path); + model.put("config", config.with(ConfigurationFunctions.section(path)) + .query(ConfigurationFunctions.textInfo())); + return "config"; + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/d503ef49/examples/05-spring-example/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter ---------------------------------------------------------------------- diff --git a/examples/05-spring-example/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/examples/05-spring-example/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter new file mode 100644 index 0000000..f1a29ee --- /dev/null +++ b/examples/05-spring-example/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter @@ -0,0 +1,19 @@ +# +# 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 current 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. +# +org.apache.tamaya.springexample.ColorConverter \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/d503ef49/examples/05-spring-example/src/main/resources/templates/config.ftl ---------------------------------------------------------------------- diff --git a/examples/05-spring-example/src/main/resources/templates/config.ftl b/examples/05-spring-example/src/main/resources/templates/config.ftl new file mode 100644 index 0000000..26c0e03 --- /dev/null +++ b/examples/05-spring-example/src/main/resources/templates/config.ftl @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<!-- +# 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 current 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. +--> +<html lang="en"> + +<body> + <h1>Tamaya - Current Configuration</h1> + Current Tamaya Configuration, filter applied: ${filter}.<br/> + <a href="/">Go back</a><br/> + <pre>${config}</pre> +</body> + +</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/d503ef49/examples/05-spring-example/src/main/resources/templates/welcome.ftl ---------------------------------------------------------------------- diff --git a/examples/05-spring-example/src/main/resources/templates/welcome.ftl b/examples/05-spring-example/src/main/resources/templates/welcome.ftl index 696e4bc..da57937 100644 --- a/examples/05-spring-example/src/main/resources/templates/welcome.ftl +++ b/examples/05-spring-example/src/main/resources/templates/welcome.ftl @@ -19,14 +19,75 @@ --> <html lang="en"> -<body bgcolor="${background}"> - <font color="${foreground}}"> +<body> + <h1>Tamaya - Spring Boot Example</h1> + This example show how Tamaya Configuration can be used with Spring Boot to enable Spring with Tamaya + dynamic configuration features and Tamaya Configuration Injection. + <h2>Accessing properties programmatically</h2> + Configuration properties can be easily accessed with Tamaya's Java API:<br/> +<pre> +Configuration config = ConfigurationProvider.getConfiguration(); +String value = config.get("foreground.color"); +</pre> + Hereby Tamaya also offers type safe access:<br/> +<pre> +Color color = config.get("foreground.color", Color.class); +</pre> + <h2>Annotating properties</h2> + Configuration properties on beans can be easily annotated with Tamaya. + <ul> + <li>You can use default Spring mechanism, e.g.:<br/> +<pre> +@Value("$\{application.message\:Hello World}") +private String message = "Hello World"; +</pre></li> + <li>You can use the Tamaya injection API, e.g.<br/> +<pre> +@Config(value = "background.color", required = false) +private String backgroundColor = "#BBBBBB"; +</pre></li> + <li>You can also use Tamaya's dynmic configuration features:<br/> +<pre> +@Config(value = "foreground.color", required = false, defaultValue = "#DDDDDD") +private DynamicValue<String> foregroundColor; +</pre> + </li> + <li>As with the programmatic API, type safe configuration is supported similarly:<br/> +<pre> +@Config(value = "background.color", required = false)< +<b>private</b> Color bgColor = "#BBBBBB"; +</pre></li> + </ul> + <h2>Demo: setting the foreground color</h2> + This small form allows you to set the foreground color of the following box. For simplicity it + uses standard system property, but configuration could also be accessed from any kind of remote or local + resource: + <p/> + <form action="/update"> + <input type="text" name="foreground" value="${foreground}"/> + <input type="submit" name="action-update"/> + </form> + <br/> + </p> + <table> + <tr><td> + <p> + Foreground Color: ${foreground}<br/> + Background Color: ${background}</p> + </td> + <td bgcolor="${background}"> + <font color="${foreground}"> Date: ${time?date} - <br> + <br/> Time: ${time?time} - <br> + <br/> Message: ${message} </font> + </p> + </td></tr></table> + <h2>Configuration Data</h2> + Cou can access the current configuration using the following URL: <a href="/config">/config</a>. <br/> + Add additional path parameter for filtering... </body> </html> \ No newline at end of file
