You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2016/02/02 17:16:14 UTC

[5/8] incubator-tamaya git commit: TAMAYA-136: Adding PropertyValue for PropertySource SPI.

TAMAYA-136: Adding PropertyValue for PropertySource SPI.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/0be037b8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/0be037b8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/0be037b8

Branch: refs/heads/master
Commit: 0be037b844450e30ab58a78cab9ddd9bd07585c1
Parents: 80432ae
Author: anatole <an...@apache.org>
Authored: Tue Feb 2 15:24:18 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Tue Feb 2 15:24:18 2016 +0100

----------------------------------------------------------------------
 .../core/internal/DefaultConfiguration.java     |  17 +-
 .../tamaya/core/internal/PropertyFiltering.java |  40 ++--
 .../core/propertysource/BasePropertySource.java |  30 ++-
 .../EnvironmentPropertySource.java              |   5 +-
 .../propertysource/SystemPropertySource.java    |   6 +-
 .../ConverterTestsPropertySource.java           | 189 ++++++++++---------
 .../propertysource/BasePropertySourceTest.java  |   7 +-
 .../EnvironmentPropertySourceTest.java          |   2 +-
 .../PropertiesFilePropertySourceTest.java       |   9 +-
 .../SystemPropertySourceTest.java               |   6 +-
 .../provider/JavaConfigurationProviderTest.java |   2 +-
 .../core/testdata/TestPropertyFilter.java       |   5 +-
 .../testdata/TestRemovingPropertyFilter.java    |   7 +-
 13 files changed, 187 insertions(+), 138 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
index f7c363c..0f74628 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
@@ -23,7 +23,12 @@ import org.apache.tamaya.ConfigOperator;
 import org.apache.tamaya.ConfigQuery;
 import org.apache.tamaya.Configuration;
 import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.*;
+import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+import org.apache.tamaya.spi.PropertyFilter;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -61,12 +66,16 @@ public class DefaultConfiguration implements Configuration {
 
 
     public String get(String key) {
-        return PropertyFiltering.applyFilter(key, evaluteRawValue(key), configurationContext);
+        Map<String,String> value = evaluteRawValue(key);
+        if(value==null || value.get(key)==null){
+            return null;
+        }
+        return PropertyFiltering.applyFilter(key, value, configurationContext);
     }
 
-    protected String evaluteRawValue(String key) {
+    protected Map<String,String> evaluteRawValue(String key) {
         List<PropertySource> propertySources = configurationContext.getPropertySources();
-        String unfilteredValue = null;
+        Map<String,String> unfilteredValue = null;
         PropertyValueCombinationPolicy combinationPolicy = this.configurationContext
                 .getPropertyValueCombinationPolicy();
         for (PropertySource propertySource : propertySources) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java
index 9f84e7c..f0d15bc 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java
@@ -19,9 +19,11 @@
 package org.apache.tamaya.core.internal;
 
 import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 import org.apache.tamaya.spi.PropertySource;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -38,6 +40,7 @@ public final class PropertyFiltering{
      * The logger.
      */
     private static final Logger LOG = Logger.getLogger(PropertyFiltering.class.getName());
+
     /**
      * The maximal number of filter cycles performed before aborting.
      */
@@ -48,25 +51,27 @@ public final class PropertyFiltering{
      */
     private PropertyFiltering(){}
 
-    public static String applyFilter(String key, String unfilteredValue, ConfigurationContext configurationContext) {
+    public static String applyFilter(String key, Map<String,String> configData, ConfigurationContext configurationContext) {
         // Apply filters to values, prevent values filtered to null!
+        String result = configData.get(key);
         for (int i = 0; i < MAX_FILTER_LOOPS; i++) {
             boolean changed = false;
             // Apply filters to values, prevent values filtered to null!
+            FilterContext filterContext = new FilterContext(key, configData);
             for (PropertyFilter filter : configurationContext.getPropertyFilters()) {
-                String newValue = filter.filterProperty(key, unfilteredValue);
-                if (newValue != null && !newValue.equals(unfilteredValue)) {
+                String newValue = filter.filterProperty(result, filterContext);
+                if (newValue != null && !newValue.equals(result)) {
                     changed = true;
                     if (LOG.isLoggable(Level.FINEST)) {
-                        LOG.finest("Filter - " + key + ": " + unfilteredValue + " -> " + newValue + " by " + filter);
+                        LOG.finest("Filter - " + key + ": " + result + " -> " + newValue + " by " + filter);
                     }
-                } else if (unfilteredValue != null && !unfilteredValue.equals(newValue)) {
+                } else if (result != null && !result.equals(newValue)) {
                     changed = true;
                     if (LOG.isLoggable(Level.FINEST)) {
-                        LOG.finest("Filter - " + key + ": " + unfilteredValue + " -> " + newValue + " by " + filter);
+                        LOG.finest("Filter - " + key + ": " + result + " -> " + newValue + " by " + filter);
                     }
                 }
-                unfilteredValue = newValue;
+                result = newValue;
             }
             if (!changed) {
                 LOG.finest("Finishing filter loop, no changes detected.");
@@ -81,20 +86,21 @@ public final class PropertyFiltering{
                 }
             }
         }
-        return unfilteredValue;
+        return result;
     }
 
     public static Map<String, String> applyFilters(Map<String, String> inputMap, ConfigurationContext configurationContext) {
         Map<String, String> resultMap = new HashMap<>(inputMap);
         // Apply filters to values, prevent values filtered to null!
+        Map<String, String> metaData = filterMetadata(inputMap);
         for (int i = 0; i < MAX_FILTER_LOOPS; i++) {
             AtomicInteger changes = new AtomicInteger();
-            for (PropertyFilter filter : configurationContext.getPropertyFilters()) {
-                for (Map.Entry<String, String> entry : inputMap.entrySet()) {
+            for (Map.Entry<String, String> entry : inputMap.entrySet()) {
+                FilterContext filterContext = new FilterContext(entry.getKey(), inputMap);
+                for (PropertyFilter filter : configurationContext.getPropertyFilters()) {
                     final String k = entry.getKey();
                     final String v = entry.getValue();
-
-                    String newValue = filter.filterProperty(k, v);
+                    String newValue = filter.filterProperty(v, filterContext);
                     if (newValue != null && !newValue.equals(v)) {
                         changes.incrementAndGet();
                         LOG.finest("Filter - " + k + ": " + v + " -> " + newValue + " by " + filter);
@@ -128,4 +134,14 @@ public final class PropertyFiltering{
         return resultMap;
     }
 
+    private static Map<String, String> filterMetadata(Map<String, String> inputMap) {
+        Map<String,String> result = new HashMap<>();
+        for(Map.Entry<String,String> en:inputMap.entrySet()){
+            if(en.getKey().startsWith("_")){
+                result.put(en.getKey(), en.getValue());
+            }
+        }
+        return Collections.unmodifiableMap(result);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java b/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
index e9f53f9..b5c7378 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/propertysource/BasePropertySource.java
@@ -19,7 +19,10 @@
 package org.apache.tamaya.core.propertysource;
 
 import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spi.PropertyValueBuilder;
 
+import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -53,13 +56,14 @@ public abstract class BasePropertySource implements PropertySource{
 
     @Override
     public int getOrdinal() {
-        String configuredOrdinal = get(TAMAYA_ORDINAL);
+        PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
+
         if(configuredOrdinal!=null){
-            try{
-                return Integer.parseInt(configuredOrdinal);
-            } catch(Exception e){
+            try {
+                return Integer.parseInt(configuredOrdinal.getValue());
+            } catch (Exception e) {
                 Logger.getLogger(getClass().getName()).log(Level.WARNING,
-                        "Configured Ordinal is not an int number: " + configuredOrdinal, e);
+                        "Configured Ordinal is not an int number: " + configuredOrdinal.getValue(), e);
             }
         }
         return getDefaultOrdinal();
@@ -74,8 +78,20 @@ public abstract class BasePropertySource implements PropertySource{
     }
 
     @Override
-    public String get(String key) {
-        return getProperties().get(key);
+    public PropertyValue get(String key) {
+        Map<String,String> properties = getProperties();
+        String val = properties.get(key);
+        if(val==null){
+            return null;
+        }
+        PropertyValueBuilder b = new PropertyValueBuilder(key, val, getName());
+        String metaKeyStart = "_" + key + ".";
+        for(Map.Entry<String,String> en:properties.entrySet()) {
+            if(en.getKey().startsWith(metaKeyStart)){
+                b.addContextData(en.getKey().substring(metaKeyStart.length()), en.getValue());
+            }
+        }
+        return b.build();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java b/code/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java
index c8c1aa3..841d432 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySource.java
@@ -19,6 +19,7 @@
 package org.apache.tamaya.core.propertysource;
 
 import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
 
 import java.util.Map;
 
@@ -46,8 +47,8 @@ public class EnvironmentPropertySource implements PropertySource {
     }
 
     @Override
-    public String get(String key) {
-        return getProperties().get(key);
+    public PropertyValue get(String key) {
+        return PropertyValue.of(key, System.getenv(key), getName());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java b/code/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java
index 9093f25..80cd140 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/propertysource/SystemPropertySource.java
@@ -19,6 +19,8 @@
 package org.apache.tamaya.core.propertysource;
 
 import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spi.PropertyValueBuilder;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -69,8 +71,8 @@ public class SystemPropertySource implements PropertySource {
     }
 
     @Override
-    public String get(String key) {
-        return getProperties().get(key);
+    public PropertyValue get(String key) {
+        return PropertyValue.of(key, System.getProperty(key), getName());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/test/java/org/apache/tamaya/core/internal/converters/ConverterTestsPropertySource.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/converters/ConverterTestsPropertySource.java b/code/core/src/test/java/org/apache/tamaya/core/internal/converters/ConverterTestsPropertySource.java
index 26ad140..c2fe2d3 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/internal/converters/ConverterTestsPropertySource.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/internal/converters/ConverterTestsPropertySource.java
@@ -19,6 +19,7 @@
 package org.apache.tamaya.core.internal.converters;
 
 import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
 
 import java.util.Collections;
 import java.util.Map;
@@ -38,204 +39,204 @@ public class ConverterTestsPropertySource implements PropertySource{
     }
 
     @Override
-    public String get(String key) {
+    public PropertyValue get(String key) {
         switch(key){
             // Bytes
             case "tests.converter.byte.decimal":
-                return "101";
+                return PropertyValue.of(key, "101", getName());
             case "tests.converter.byte.octal":
-                return "02";
+                return PropertyValue.of(key, "02", getName());
             case "tests.converter.byte.hex.lowerX":
-                return "0x2F";
+                return PropertyValue.of(key, "0x2F", getName());
             case "tests.converter.byte.hex.upperX":
-                return "0X3F";
+                return PropertyValue.of(key, "0X3F", getName());
             case "tests.converter.byte.min":
-                return "min";
+                return PropertyValue.of(key, "min", getName());
             case "tests.converter.byte.max":
-                return "MAX_Value";
+                return PropertyValue.of(key, "MAX_Value", getName());
             // Boolean
             case "tests.converter.boolean.y1":
-                return "y";
+                return PropertyValue.of(key, "y", getName());
             case "tests.converter.boolean.y2":
-                return "Y";
+                return PropertyValue.of(key, "Y", getName());
             case "tests.converter.boolean.yes1":
-                return "yes";
+                return PropertyValue.of(key, "yes", getName());
             case "tests.converter.boolean.yes2":
-                return "Yes";
+                return PropertyValue.of(key, "Yes", getName());
             case "tests.converter.boolean.yes3":
-                return "yeS";
+                return PropertyValue.of(key, "yeS", getName());
             case "tests.converter.boolean.true1":
-                return "true";
+                return PropertyValue.of(key, "true", getName());
             case "tests.converter.boolean.true2":
-                return "True";
+                return PropertyValue.of(key, "True", getName());
             case "tests.converter.boolean.true3":
-                return "trUe";
+                return PropertyValue.of(key, "trUe", getName());
             case "tests.converter.boolean.t1":
-                return "t";
+                return PropertyValue.of(key, "t", getName());
             case "tests.converter.boolean.t2":
-                return "T";
+                return PropertyValue.of(key, "T", getName());
             case "tests.converter.boolean.n1":
-                return "n";
+                return PropertyValue.of(key, "n", getName());
             case "tests.converter.boolean.n2":
-                return "N";
+                return PropertyValue.of(key, "N", getName());
             case "tests.converter.boolean.no1":
-                return "no";
+                return PropertyValue.of(key, "no", getName());
             case "tests.converter.boolean.no2":
-                return "No";
+                return PropertyValue.of(key, "No", getName());
             case "tests.converter.boolean.no3":
-                return "nO";
+                return PropertyValue.of(key, "nO", getName());
             case "tests.converter.boolean.false1":
-                return "false";
+                return PropertyValue.of(key, "false", getName());
             case "tests.converter.boolean.false2":
-                return "False";
+                return PropertyValue.of(key, "False", getName());
             case "tests.converter.boolean.false3":
-                return "falSe";
+                return PropertyValue.of(key, "falSe", getName());
             case "tests.converter.boolean.f1":
-                return "f";
+                return PropertyValue.of(key, "f", getName());
             case "tests.converter.boolean.f2":
-                return "F";
+                return PropertyValue.of(key, "F", getName());
             // Character
             case "tests.converter.char.f":
-                return "f";
+                return PropertyValue.of(key, "f", getName());
             case "tests.converter.char.d":
-                return "'d'";
+                return PropertyValue.of(key, "'d'", getName());
             case "tests.converter.char.f-before":
-                return "  f";
+                return PropertyValue.of(key, "  f", getName());
             case "tests.converter.char.f-after":
-                return "f   ";
+                return PropertyValue.of(key, "f   ", getName());
             case "tests.converter.char.f-around":
-                return "   f      ";
+                return PropertyValue.of(key, "   f      ", getName());
             case "tests.converter.char.f-numeric":
-                return "101";
+                return PropertyValue.of(key, "101", getName());
             // currency
             case "tests.converter.currency.code1":
-                return "CHF";
+                return PropertyValue.of(key, "CHF", getName());
             case "tests.converter.currency.code2":
-                return "cHf";
+                return PropertyValue.of(key, "cHf", getName());
             case "tests.converter.currency.code3":
-                return "  CHF";
+                return PropertyValue.of(key, "  CHF", getName());
             case "tests.converter.currency.code4":
-                return "CHF   ";
+                return PropertyValue.of(key, "CHF   ", getName());
             case "tests.converter.currency.code5":
-                return "  CHF   ";
+                return PropertyValue.of(key, "  CHF   ", getName());
             case "tests.converter.currency.code-numeric1":
-                return "100";
+                return PropertyValue.of(key, "100", getName());
             case "tests.converter.currency.code-numeric2":
-                return "  100";
+                return PropertyValue.of(key, "  100", getName());
             case "tests.converter.currency.code-numeric3":
-                return "100  ";
+                return PropertyValue.of(key, "100  ", getName());
             case "tests.converter.currency.code-numeric4":
-                return "  100  ";
+                return PropertyValue.of(key, "  100  ", getName());
             case "tests.converter.currency.code-locale1":
-                return "DE";
+                return PropertyValue.of(key, "DE", getName());
             case "tests.converter.currency.code-locale2":
-                return "  DE";
+                return PropertyValue.of(key, "  DE", getName());
             case "tests.converter.currency.code-locale3":
-                return "DE  ";
+                return PropertyValue.of(key, "DE  ", getName());
             case "tests.converter.currency.code-locale4":
-                return "  DE  ";
+                return PropertyValue.of(key, "  DE  ", getName());
             //double
             case "tests.converter.double.decimal":
-                return "1.23456789";
+                return PropertyValue.of(key, "1.23456789", getName());
             case "tests.converter.double.decimalNegative":
-                return "-1.23456789";
+                return PropertyValue.of(key, "-1.23456789", getName());
             case "tests.converter.double.integer":
-                return "  100";
+                return PropertyValue.of(key, "  100", getName());
             case "tests.converter.double.hex1":
-                return " 0XFF";
+                return PropertyValue.of(key, " 0XFF", getName());
             case "tests.converter.double.hex2":
-                return "-0xFF  ";
+                return PropertyValue.of(key, "-0xFF  ", getName());
             case "tests.converter.double.hex3":
-                return "#FF";
+                return PropertyValue.of(key, "#FF", getName());
             case "tests.converter.double.octal":
-                return "0013";
+                return PropertyValue.of(key, "0013", getName());
             case "tests.converter.double.min":
-                return "MIN_Value";
+                return PropertyValue.of(key, "MIN_Value", getName());
             case "tests.converter.double.max":
-                return "max";
+                return PropertyValue.of(key, "max", getName());
             case "tests.converter.double.nan":
-                return "NAN";
+                return PropertyValue.of(key, "NAN", getName());
             case "tests.converter.double.pi":
-                return "positive_infinity";
+                return PropertyValue.of(key, "positive_infinity", getName());
             case "tests.converter.double.ni":
-                return "Negative_Infinity";
+                return PropertyValue.of(key, "Negative_Infinity", getName());
             //float
             case "tests.converter.float.decimal":
-                return "1.23456789";
+                return PropertyValue.of(key, "1.23456789", getName());
             case "tests.converter.float.decimalNegative":
-                return "-1.23456789";
+                return PropertyValue.of(key, "-1.23456789", getName());
             case "tests.converter.float.integer":
-                return "  100";
+                return PropertyValue.of(key, "  100", getName());
             case "tests.converter.float.hex1":
-                return " 0XFF";
+                return PropertyValue.of(key, " 0XFF", getName());
             case "tests.converter.float.hex2":
-                return "-0xFF  ";
+                return PropertyValue.of(key, "-0xFF  ", getName());
             case "tests.converter.float.hex3":
-                return "#FF";
+                return PropertyValue.of(key, "#FF", getName());
             case "tests.converter.float.octal":
-                return "0013";
+                return PropertyValue.of(key, "0013", getName());
             case "tests.converter.float.min":
-                return "MIN_Value";
+                return PropertyValue.of(key, "MIN_Value", getName());
             case "tests.converter.float.max":
-                return "max";
+                return PropertyValue.of(key, "max", getName());
             case "tests.converter.float.nan":
-                return "NAN";
+                return PropertyValue.of(key, "NAN", getName());
             case "tests.converter.float.pi":
-                return "positive_infinity";
+                return PropertyValue.of(key, "positive_infinity", getName());
             case "tests.converter.float.ni":
-                return "Negative_Infinity";
+                return PropertyValue.of(key, "Negative_Infinity", getName());
             // Integer
             case "tests.converter.integer.decimal":
-                return "101";
+                return PropertyValue.of(key, "101", getName());
             case "tests.converter.integer.octal":
-                return "02";
+                return PropertyValue.of(key, "02", getName());
             case "tests.converter.integer.hex.lowerX":
-                return "0x2F";
+                return PropertyValue.of(key, "0x2F", getName());
             case "tests.converter.integer.hex.upperX":
-                return "0X3F";
+                return PropertyValue.of(key, "0X3F", getName());
             case "tests.converter.integer.min":
-                return "min";
+                return PropertyValue.of(key, "min", getName());
             case "tests.converter.integer.max":
-                return "MAX_Value";
+                return PropertyValue.of(key, "MAX_Value", getName());
             // Long
             case "tests.converter.long.decimal":
-                return "101";
+                return PropertyValue.of(key, "101", getName());
             case "tests.converter.long.octal":
-                return "02";
+                return PropertyValue.of(key, "02", getName());
             case "tests.converter.long.hex.lowerX":
-                return "0x2F";
+                return PropertyValue.of(key, "0x2F", getName());
             case "tests.converter.long.hex.upperX":
-                return "0X3F";
+                return PropertyValue.of(key, "0X3F", getName());
             case "tests.converter.long.min":
-                return "min";
+                return PropertyValue.of(key, "min", getName());
             case "tests.converter.long.max":
-                return "MAX_Value";
+                return PropertyValue.of(key, "MAX_Value", getName());
             // Short
             case "tests.converter.short.decimal":
-                return "101";
+                return PropertyValue.of(key, "101", getName());
             case "tests.converter.short.octal":
-                return "02";
+                return PropertyValue.of(key, "02", getName());
             case "tests.converter.short.hex.lowerX":
-                return "0x2F";
+                return PropertyValue.of(key, "0x2F", getName());
             case "tests.converter.short.hex.upperX":
-                return "0X3F";
+                return PropertyValue.of(key, "0X3F", getName());
             case "tests.converter.short.min":
-                return "min";
+                return PropertyValue.of(key, "min", getName());
             case "tests.converter.short.max":
-                return "MAX_Value";
+                return PropertyValue.of(key, "MAX_Value", getName());
             // BigDecimal
             case "tests.converter.bd.decimal":
-                return "101";
+                return PropertyValue.of(key, "101", getName());
             case "tests.converter.bd.float":
-                return "101.36438746";
+                return PropertyValue.of(key, "101.36438746", getName());
             case "tests.converter.bd.big":
-                return "101666666666666662333337263723628763821638923628193612983618293628763";
+                return PropertyValue.of(key, "101666666666666662333337263723628763821638923628193612983618293628763", getName());
             case "tests.converter.bd.bigFloat":
-                return "1016666666666666623333372637236287638216389293628763.101666666666666662333337263723628763821638923628193612983618293628763";
+                return PropertyValue.of(key, "1016666666666666623333372637236287638216389293628763.101666666666666662333337263723628763821638923628193612983618293628763", getName());
             case "tests.converter.bd.hex.lowerX":
-                return "0x2F";
+                return PropertyValue.of(key, "0x2F", getName());
             case "tests.converter.bd.hex.upperX":
-                return "0X3F";
+                return PropertyValue.of(key, "0X3F", getName());
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/test/java/org/apache/tamaya/core/propertysource/BasePropertySourceTest.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/propertysource/BasePropertySourceTest.java b/code/core/src/test/java/org/apache/tamaya/core/propertysource/BasePropertySourceTest.java
index 8d3f086..8ab1baf 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/propertysource/BasePropertySourceTest.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/propertysource/BasePropertySourceTest.java
@@ -18,8 +18,9 @@
  */
 package org.apache.tamaya.core.propertysource;
 
-import org.apache.tamaya.core.propertysource.BasePropertySource;
 import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spi.PropertyValueBuilder;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -40,7 +41,7 @@ public class BasePropertySourceTest {
             }
 
             @Override
-            public String get(String key) {
+            public PropertyValue get(String key) {
                 return null;
             }
 
@@ -59,7 +60,7 @@ public class BasePropertySourceTest {
 
     @Test
     public void testGet() {
-        Assert.assertEquals("1000", new OverriddenOrdinalPropertySource().get(PropertySource.TAMAYA_ORDINAL));
+        Assert.assertEquals("1000", new OverriddenOrdinalPropertySource().get(PropertySource.TAMAYA_ORDINAL).get(PropertySource.TAMAYA_ORDINAL));
     }
 
     private static class OverriddenOrdinalPropertySource extends BasePropertySource {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/test/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySourceTest.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySourceTest.java b/code/core/src/test/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySourceTest.java
index f9feb4b..a0f1093 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySourceTest.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/propertysource/EnvironmentPropertySourceTest.java
@@ -45,7 +45,7 @@ public class EnvironmentPropertySourceTest {
     @Test
     public void testGet() throws Exception {
         for (Map.Entry<String, String> envEntry : System.getenv().entrySet()) {
-            assertEquals(envPropertySource.get(envEntry.getKey()), envEntry.getValue());
+            assertEquals(envPropertySource.get(envEntry.getKey()).get(envEntry.getKey()), envEntry.getValue());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/test/java/org/apache/tamaya/core/propertysource/PropertiesFilePropertySourceTest.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/propertysource/PropertiesFilePropertySourceTest.java b/code/core/src/test/java/org/apache/tamaya/core/propertysource/PropertiesFilePropertySourceTest.java
index 2028ceb..745feeb 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/propertysource/PropertiesFilePropertySourceTest.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/propertysource/PropertiesFilePropertySourceTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.tamaya.core.propertysource;
 
-import org.apache.tamaya.core.propertysource.SimplePropertySource;
 import org.apache.tamaya.spi.PropertySource;
 import org.junit.Assert;
 import org.junit.Test;
@@ -34,14 +33,16 @@ public class PropertiesFilePropertySourceTest {
     @Test
     public void testGetOrdinal() {
         Assert.assertEquals(0, testfilePropertySource.getOrdinal());
-        Assert.assertEquals(Integer.parseInt(overrideOrdinalPropertySource.get(PropertySource.TAMAYA_ORDINAL)), overrideOrdinalPropertySource.getOrdinal());
+        Assert.assertEquals(Integer.parseInt(overrideOrdinalPropertySource.get(PropertySource.TAMAYA_ORDINAL)
+                .get(PropertySource.TAMAYA_ORDINAL)),
+                overrideOrdinalPropertySource.getOrdinal());
     }
 
 
     @Test
     public void testGet() {
-        Assert.assertEquals("val3", testfilePropertySource.get("key3"));
-        Assert.assertEquals("myval5", overrideOrdinalPropertySource.get("mykey5"));
+        Assert.assertEquals("val3", testfilePropertySource.get("key3").get("key3"));
+        Assert.assertEquals("myval5", overrideOrdinalPropertySource.get("mykey5").get("mykey5"));
         Assert.assertNull(testfilePropertySource.get("nonpresentkey"));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/test/java/org/apache/tamaya/core/propertysource/SystemPropertySourceTest.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/propertysource/SystemPropertySourceTest.java b/code/core/src/test/java/org/apache/tamaya/core/propertysource/SystemPropertySourceTest.java
index f0eaf68..4848ab7 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/propertysource/SystemPropertySourceTest.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/propertysource/SystemPropertySourceTest.java
@@ -18,8 +18,8 @@
  */
 package org.apache.tamaya.core.propertysource;
 
-import org.apache.tamaya.core.propertysource.SystemPropertySource;
 import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -55,10 +55,10 @@ public class SystemPropertySourceTest {
     public void testGet() throws Exception {
         String propertyKeyToCheck = System.getProperties().stringPropertyNames().iterator().next();
 
-        String property = testPropertySource.get(propertyKeyToCheck);
+        PropertyValue property = testPropertySource.get(propertyKeyToCheck);
         Assert.assertNotNull("Property '" + propertyKeyToCheck + "' is not present in " +
                 SystemPropertySource.class.getSimpleName(), property);
-        Assert.assertEquals(System.getProperty(propertyKeyToCheck), property);
+        Assert.assertEquals(System.getProperty(propertyKeyToCheck), property.getValue());
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java b/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java
index f099da4..c81ae32 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/provider/JavaConfigurationProviderTest.java
@@ -48,7 +48,7 @@ public class JavaConfigurationProviderTest {
             String key = "confkey" + i;
             String value = "javaconf-value" + i;
 
-            Assert.assertEquals(value, propertySource.get(key));
+            Assert.assertEquals(value, propertySource.get(key).get(key));
 
             // check if we had our key in configuration.current
             Assert.assertTrue(ConfigurationProvider.getConfiguration().getProperties().containsKey(key));

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyFilter.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyFilter.java b/code/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyFilter.java
index 6faa831..071cbb1 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyFilter.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/testdata/TestPropertyFilter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.core.testdata;
 
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 
 import javax.annotation.Priority;
@@ -28,8 +29,8 @@ import javax.annotation.Priority;
 @Priority(100)
 public class TestPropertyFilter implements PropertyFilter{
     @Override
-    public String filterProperty(String key, String valueToBeFiltered) {
-        if("name4".equals(key)){
+    public String filterProperty(String valueToBeFiltered, FilterContext context) {
+        if("name4".equals(context.getKey())){
             return valueToBeFiltered + "(filtered)";
         }
         return valueToBeFiltered;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/0be037b8/code/core/src/test/java/org/apache/tamaya/core/testdata/TestRemovingPropertyFilter.java
----------------------------------------------------------------------
diff --git a/code/core/src/test/java/org/apache/tamaya/core/testdata/TestRemovingPropertyFilter.java b/code/core/src/test/java/org/apache/tamaya/core/testdata/TestRemovingPropertyFilter.java
index 5a57ad1..7a5b7a8 100644
--- a/code/core/src/test/java/org/apache/tamaya/core/testdata/TestRemovingPropertyFilter.java
+++ b/code/core/src/test/java/org/apache/tamaya/core/testdata/TestRemovingPropertyFilter.java
@@ -19,6 +19,7 @@
 package org.apache.tamaya.core.testdata;
 
 import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 
 import javax.annotation.Priority;
@@ -29,11 +30,11 @@ import javax.annotation.Priority;
 @Priority(200)
 public class TestRemovingPropertyFilter implements PropertyFilter{
     @Override
-    public String filterProperty(String key, String valueToBeFiltered) {
-        if("name5".equals(key)){
+    public String filterProperty(String valueToBeFiltered, FilterContext context) {
+        if("name5".equals(context.getKey())){
             return null;
         }
-        else if("name3".equals(key)){
+        else if("name3".equals(context.getKey())){
             return "Mapped to name: " + ConfigurationProvider.getConfiguration().get("name");
         }
         return valueToBeFiltered;