TAMAYA-358 Merged patch from @peculator with existing improvements.

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/bf0cd8b3
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/bf0cd8b3
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/bf0cd8b3

Branch: refs/heads/master
Commit: bf0cd8b36a1a289f63911ac54305f5b91bff3dc7
Parents: e729bd0
Author: Anatole Tresch <[email protected]>
Authored: Fri Nov 16 22:29:54 2018 +0100
Committer: Anatole Tresch <[email protected]>
Committed: Fri Nov 16 22:29:54 2018 +0100

----------------------------------------------------------------------
 .../tamaya/cdi/ConfigurationProducer.java       |  5 +-
 .../org/apache/tamaya/cdi/ConfiguredBTest.java  | 18 ++---
 .../org/apache/tamaya/cdi/ConfiguredClass.java  | 69 +++++++++++++++++++-
 .../tamaya/cdi/cfg/TestPropertySource.java      |  5 +-
 .../META-INF/javaconfiguration.properties       |  2 +
 5 files changed, 85 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java
----------------------------------------------------------------------
diff --git 
a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java
 
b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java
index ee0f592..c7523be 100644
--- 
a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java
+++ 
b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java
@@ -78,6 +78,7 @@ public class ConfigurationProducer {
         // enforces the resolvability of the config
 
         String defaultTextValue = 
annotation.defaultValue().equals(Config.UNCONFIGURED_VALUE) ? null : 
annotation.defaultValue();
+        boolean required = annotation.required();
         String textValue = null;
         Configuration config = Configuration.current();
         if(operator!=null) {
@@ -98,9 +99,11 @@ public class ConfigurationProducer {
         ConversionContext conversionContext = 
createConversionContext(keyFound, keys, injectionPoint);
         Object value = convertValue(textValue, conversionContext, 
injectionPoint, customConverter);
         if (value == null) {
-            throw new ConfigException(String.format(
+            if (required){
+                throw new ConfigException(String.format(
                     "Can't resolve any of the possible config keys: %s to the 
required target type: %s, supported formats: %s",
                     keys, conversionContext.getTargetType(), 
conversionContext.getSupportedFormats().toString()));
+            }
         }
         LOGGER.finest(String.format("Injecting %s for key %s in class %s", 
keyFound, value.toString(), injectionPoint.toString()));
         return value;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java
----------------------------------------------------------------------
diff --git 
a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java
 
b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java
index 34bfd95..83367fd 100644
--- 
a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java
+++ 
b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java
@@ -20,23 +20,18 @@
 package org.apache.tamaya.cdi;
 
 import org.hamcrest.MatcherAssert;
-import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.AdditionalMatchers;
+import org.mockito.internal.matchers.NotNull;
 
 import javax.enterprise.inject.spi.CDI;
-import javax.enterprise.inject.spi.Extension;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.internal.matchers.NotNull.NOT_NULL;
 
 /**
  * Tests for CDI integration.
@@ -51,9 +46,10 @@ public class ConfiguredBTest extends BaseTestConfiguration {
         System.out.println("********************************************");
         double actual = 1234.5678;
         MatcherAssert.assertThat(item.getDoubleValue(), is(actual));
-        assertTrue(item.getExistingDouble()!=null);
-        assertTrue(item.getNonExistingDouble()!=null);
-        assertTrue(item.getExistingDouble().isPresent());
-        assertFalse(item.getNonExistingDouble().isPresent());
+        MatcherAssert.assertThat(item.getExistingDouble(), is(NOT_NULL));
+        MatcherAssert.assertThat(item.getNonExistingDouble(), is(NOT_NULL));
+        MatcherAssert.assertThat(item.getExistingDouble().isPresent(), 
is(true));
+        MatcherAssert.assertThat(item.getNonExistingDouble().isPresent(), 
is(false));
+        MatcherAssert.assertThat(item.getExistingDouble().get(), is(actual));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
----------------------------------------------------------------------
diff --git 
a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
 
b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
index a2dc7ce..b159a47 100644
--- 
a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
+++ 
b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
@@ -22,9 +22,10 @@ package org.apache.tamaya.cdi;
 
 import org.apache.tamaya.inject.api.Config;
 
+import java.util.Optional;
 import javax.inject.Singleton;
 import java.math.BigDecimal;
-import java.util.Optional;
+import javax.inject.Inject;
 
 /**
  * Class to be loaded from CDI to ensure fields are correctly configured using 
CDI injection mechanisms.
@@ -32,9 +33,22 @@ import java.util.Optional;
 @Singleton
 public class ConfiguredClass{
 
+    //Config values come from the TestPropertySource during 
ConfigurationProducerTest
     @Config
     private String testProperty;
 
+    //Inject+Config values come from javaconfiguration.properties during 
ConfiguredBTest
+    @Inject
+    @Config
+    private String injectedTestProperty;
+
+    //@Inject will throw an NPE with a null assignment, before getting to 
required=false
+    //  because our provider runs in @ApplicationScope, and null @Producer has 
to be in
+    //  @Dependent scope (CDI 2.0 spec section 3.2).  Optional<> below is 
probably your
+    //  better idea.
+    @Config(value="stringMissingValue", required=false)
+    private String stringMissingValue;
+
     @Config(value = {"a.b.c.key1","a.b.c.key2","a.b.c.key3"}, defaultValue = 
"The current \\${JAVA_HOME} env property is ${env:JAVA_HOME}.")
     String value1;
 
@@ -62,6 +76,27 @@ public class ConfiguredClass{
     @Config("double1")
     private double doubleValue;
 
+    @Config
+    private Optional<String> optionalStringWithValue;
+
+    @Inject
+    @Config
+    private Optional<String> injectedOptionalStringWithValue;
+
+    @Config(value="optionalStringMissingValue", required=false)
+    private Optional<String> optionalStringMissingValue;
+
+    @Inject
+    @Config(value="injectedOptionalStringMissingValue", required=false)
+    private Optional<String> injectedOptionalStringMissingValue;
+
+    @Config(value="optionalStringMissingValueWithDefault", 
defaultValue="optionalStringDefaultValue", required=false)
+    private Optional<String> optionalStringMissingValueWithDefault;
+
+    @Inject
+    @Config(value="injectedOptionalStringMissingValueWithDefault", 
defaultValue="injectedOptionalStringDefaultValue", required=false)
+    private Optional<String> injectedOptionalStringMissingValueWithDefault;
+
     @Config("double1")
     private Optional<Double> existingDouble;
 
@@ -72,6 +107,10 @@ public class ConfiguredClass{
         return testProperty;
     }
 
+    public String getInjectedTestProperty() {
+        return injectedTestProperty;
+    }
+
     public String getValue1() {
         return value1;
     }
@@ -116,6 +155,34 @@ public class ConfiguredClass{
         return nonExistingDouble;
     }
 
+    public Optional<String> getOptionalStringWithValue() {
+        return optionalStringWithValue;
+    }
+
+    public String getStringMissingValue() {
+        return stringMissingValue;
+    }
+
+    public Optional<String> getInjectedOptionalStringWithValue() {
+        return injectedOptionalStringWithValue;
+    }
+
+    public Optional<String> getOptionalStringMissingValue() {
+        return optionalStringMissingValue;
+    }
+
+    public Optional<String> getInjectedOptionalStringMissingValue() {
+        return injectedOptionalStringMissingValue;
+    }
+
+    public Optional<String> getOptionalStringMissingValueWithDefault() {
+        return optionalStringMissingValueWithDefault;
+    }
+
+    public Optional<String> getInjectedOptionalStringMissingValueWithDefault() 
{
+        return injectedOptionalStringMissingValueWithDefault;
+    }
+
     @Override
        public String toString(){
         return super.toString() + ": testProperty="+testProperty+", 
value1="+value1+", value2="+value2

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
----------------------------------------------------------------------
diff --git 
a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
 
b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
index 64d4105..6fb7b6f 100644
--- 
a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
+++ 
b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
@@ -44,12 +44,15 @@ public class TestPropertySource implements PropertySource{
         config.put("int1", "123456");
         config.put("int2", "111222");
         config.put("testProperty", "testPropertyValue!");
+        config.put("injectedTestProperty", "injectedTestPropertyValue!");
         config.put("booleanT", "true");
         config.put("double1", "1234.5678");
         config.put("BD", 
"123456789123456789123456789123456789.123456789123456789123456789123456789");
         config.put("testProperty", "keys current testProperty");
         config.put("runtimeVersion", "${java.version}");
-        config.put("{getMeta}source.type:"+getClass().getName(), 
"PropertySource");
+        config.put("{meta}source.type:"+getClass().getName(), 
"PropertySource");
+        config.put("optionalStringWithValue", "Optional value");
+        config.put("injectedOptionalStringWithValue", "Injected Optional 
String");
     }
 
     public int getOrdinal() {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git 
a/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties
 
b/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties
index c72446e..ac0e67c 100644
--- 
a/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties
+++ 
b/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties
@@ -33,3 +33,5 @@ file.value = ./conf
 duration.value = 10 minutes and 57 seconds
 boolean.value = true
 integer.value = 123
+
+injectedTestProperty="injected Test Property from javaconfiguration.properties"

Reply via email to