Repository: incubator-tamaya-sandbox
Updated Branches:
  refs/heads/master 57e984010 -> 99e685002


TAMAYA-252: Unified PropertyValue API and usage, also separating key, value, 
source and other meta-data and defining a clear builder policy.


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

Branch: refs/heads/master
Commit: 80d6ec20ca5a7773efde56c509a0d25e3d49d091
Parents: 57e9840
Author: anatole <anat...@apache.org>
Authored: Sun Mar 5 21:29:39 2017 +0100
Committer: anatole <anat...@apache.org>
Committed: Sun Mar 5 21:29:39 2017 +0100

----------------------------------------------------------------------
 .../commons/CommonsConfigPropertySource.java    |  12 +--
 .../tamaya/consul/ConsulPropertySource.java     |   4 +-
 .../tamaya/consul/ConsulPropertySourceTest.java |   7 +-
 .../apache/tamaya/consul/ConsulWriteTest.java   |   3 +-
 .../apache/tamaya/etcd/EtcdPropertySource.java  | 102 +++++++++++++------
 .../tamaya/etcd/EtcdPropertySourceTest.java     |   7 +-
 .../hazelcast/HazelcastPropertySource.java      |  15 +--
 .../tamaya/metamodel/EnabledPropertySource.java |   3 +-
 .../metamodel/ext/FilteredPropertySource.java   |  32 +++---
 .../ext/RefreshablePropertySource.java          |   3 +-
 .../propertysources/PropertySourceBuilder.java  |   5 +-
 .../tamaya/remote/BaseRemotePropertySource.java |   6 +-
 .../apache/tamaya/usagetracker/UsageStat.java   |  12 ++-
 .../internal/DefaultConfigUsage.java            |   5 +-
 .../internal/UsageTrackerFilter.java            |   3 +-
 .../tamaya/usagetracker/spi/ConfigUsageSpi.java |   3 +-
 16 files changed, 139 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
----------------------------------------------------------------------
diff --git 
a/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
 
b/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
index 8e8ea2f..2383e68 100644
--- 
a/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
+++ 
b/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
@@ -22,10 +22,7 @@ import org.apache.commons.configuration.Configuration;
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertyValue;
 
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * PropertySource that wraps {@link 
org.apache.commons.configuration.Configuration}.
@@ -52,6 +49,7 @@ public class CommonsConfigPropertySource implements 
PropertySource {
         }
     }
 
+    @Override
     public int getOrdinal() {
         return ordinal;
     }
@@ -68,12 +66,12 @@ public class CommonsConfigPropertySource implements 
PropertySource {
     }
 
     @Override
-    public Map<String, String> getProperties() {
-        Map<String, String> config = new HashMap<>();
+    public Map<String, PropertyValue> getProperties() {
+        Map<String,PropertyValue> config = new HashMap<>();
         Iterator<String> keyIter = commonsConfig.getKeys();
         while (keyIter.hasNext()) {
             String key = keyIter.next();
-            config.put(key, commonsConfig.getString(key));
+            config.put(key, PropertyValue.of(key, 
commonsConfig.getString(key), getName()));
         }
         return config;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
----------------------------------------------------------------------
diff --git 
a/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java 
b/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
index 7c0b017..d65ce35 100644
--- a/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
+++ b/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
@@ -147,7 +147,7 @@ implements MutablePropertySource{
                     props.put(reqKey+".modifyIndex", 
String.valueOf(value.getModifyIndex()));
                     props.put(reqKey+".lockIndex", 
String.valueOf(value.getLockIndex()));
                     props.put(reqKey+".flags", 
String.valueOf(value.getFlags()));
-                    return new PropertyValueBuilder(key, 
value.getValue().get(), getName()).setContextData(props).build();
+                    return new PropertyValueBuilder(key, 
value.getValue().get(), getName()).setMetaEntries(props).build();
                 }
             } catch(Exception e){
                 LOG.log(Level.FINE, "etcd access failed on " + hostAndPort + 
", trying next...", e);
@@ -157,7 +157,7 @@ implements MutablePropertySource{
     }
 
     @Override
-    public Map<String, String> getProperties() {
+    public Map<String, PropertyValue> getProperties() {
 //        for(HostAndPort hostAndPort: getConsulBackends()){
 //            try{
 //                Consul consul = 
Consul.builder().withHostAndPort(hostAndPort).build();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java
----------------------------------------------------------------------
diff --git 
a/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java 
b/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java
index 0c649a8..a71f577 100644
--- 
a/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java
+++ 
b/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java
@@ -19,6 +19,7 @@
 package org.apache.tamaya.consul;
 
 import org.apache.tamaya.consul.ConsulPropertySource;
+import org.apache.tamaya.spi.PropertyValue;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -56,15 +57,15 @@ public class ConsulPropertySourceTest {
 
     @Test
     public void testGet() throws Exception {
-        Map<String,String> props = propertySource.getProperties();
-        for(Map.Entry<String,String> en:props.entrySet()){
+        Map<String,PropertyValue> props = propertySource.getProperties();
+        for(Map.Entry<String,PropertyValue> en:props.entrySet()){
             assertNotNull("Key not found: " + en.getKey(), 
propertySource.get(en.getKey()));
         }
     }
 
     @Test
     public void testGetProperties() throws Exception {
-        Map<String,String> props = propertySource.getProperties();
+        Map<String,PropertyValue> props = propertySource.getProperties();
         assertNotNull(props);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java
----------------------------------------------------------------------
diff --git a/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java 
b/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java
index b66d68c..4b3452d 100644
--- a/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java
+++ b/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.consul;
 
 import com.google.common.net.HostAndPort;
 import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
+import org.apache.tamaya.spi.PropertyValue;
 import org.junit.BeforeClass;
 
 import java.net.MalformedURLException;
@@ -73,7 +74,7 @@ public class ConsulWriteTest {
     @org.junit.Test
     public void testGetProperties() throws Exception {
         if(!execute)return;
-        Map<String,String> result = propertySource.getProperties();
+        Map<String,PropertyValue> result = propertySource.getProperties();
         assertTrue(result.isEmpty());
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
----------------------------------------------------------------------
diff --git a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java 
b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
index b3469fc..e6175b7 100644
--- a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
+++ b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
@@ -47,6 +47,8 @@ public class EtcdPropertySource extends BasePropertySource
 
     private List<EtcdAccessor> etcdBackends;
 
+    private Map<String,String> metaData = new HashMap<>();
+
     public EtcdPropertySource(String prefix, Collection<String> backends){
         this.prefix = prefix==null?"":prefix;
         etcdBackends = new ArrayList<>();
@@ -55,6 +57,11 @@ public class EtcdPropertySource extends BasePropertySource
         }
         setDefaultOrdinal(1000);
         setName("etcd");
+        if(!prefix.isEmpty()){
+            metaData.put("prefix", prefix);
+        }
+        metaData.put("backend", "etcd");
+        metaData.put("backends", backends.toString());
     }
 
     public EtcdPropertySource(Collection<String> backends){
@@ -64,12 +71,27 @@ public class EtcdPropertySource extends BasePropertySource
         }
         setDefaultOrdinal(1000);
         setName("etcd");
+        metaData.put("backend", "etcd");
+        metaData.put("backends", backends.toString());
     }
 
     public EtcdPropertySource(){
         prefix = System.getProperty("tamaya.etcd.prefix", "");
         setDefaultOrdinal(1000);
         setName("etcd");
+        if(!prefix.isEmpty()){
+            metaData.put("prefix", prefix);
+        }
+        metaData.put("backend", "etcd");
+        String backendProp = "";
+        for(EtcdAccessor acc:getEtcdBackends()){
+            if(backendProp.isEmpty()){
+                backendProp += acc.getUrl();
+            }else{
+                backendProp += ", " + acc.getUrl();
+            }
+        }
+        metaData.put("backends", backendProp);
     }
 
     public EtcdPropertySource(String... backends){
@@ -79,6 +101,11 @@ public class EtcdPropertySource extends BasePropertySource
         }
         setDefaultOrdinal(1000);
         setName("etcd");
+        if(!prefix.isEmpty()){
+            metaData.put("prefix", prefix);
+        }
+        metaData.put("backend", "etcd");
+        metaData.put("backends", backends.toString());
     }
 
     public String getPrefix() {
@@ -86,7 +113,12 @@ public class EtcdPropertySource extends BasePropertySource
     }
 
     public EtcdPropertySource setPrefix(String prefix) {
-        this.prefix = prefix;
+        this.prefix = prefix==null?"":prefix;
+        if(!prefix.isEmpty()){
+            metaData.put("prefix", prefix);
+        }else{
+            metaData.remove("prefix");
+        }
         return this;
     }
 
@@ -114,27 +146,13 @@ public class EtcdPropertySource extends BasePropertySource
             key = key.substring(prefix.length());
         }
         Map<String,String> props;
-        String reqKey = key;
-        if(key.startsWith("_")){
-            reqKey = key.substring(1);
-            if(reqKey.endsWith(".createdIndex")){
-                reqKey = 
reqKey.substring(0,reqKey.length()-".createdIndex".length());
-            } else if(reqKey.endsWith(".modifiedIndex")){
-                reqKey = 
reqKey.substring(0,reqKey.length()-".modifiedIndex".length());
-            } else if(reqKey.endsWith(".ttl")){
-                reqKey = reqKey.substring(0,reqKey.length()-".ttl".length());
-            } else if(reqKey.endsWith(".expiration")){
-                reqKey = 
reqKey.substring(0,reqKey.length()-".expiration".length());
-            } else if(reqKey.endsWith(".source")){
-                reqKey = 
reqKey.substring(0,reqKey.length()-".source".length());
-            }
-        }
         for(EtcdAccessor accessor: EtcdBackendConfig.getEtcdBackends()){
             try{
-                props = accessor.get(reqKey);
+                props = accessor.get(key);
                 if(!props.containsKey("_ERROR")) {
                     // No repfix mapping necessary here, since we only 
access/return the value...
-                    return new PropertyValueBuilder(key, props.get(reqKey), 
getName()).setContextData(props).build();
+                    return PropertyValue.builder(key, props.get(key), 
getName()).setMetaEntries(metaData)
+                            
.addMetaEntries(props).removeMetaEntry(key).build();
                 } else{
                     LOG.log(Level.FINE, "etcd error on " + accessor.getUrl() + 
": " + props.get("_ERROR"));
                 }
@@ -146,7 +164,7 @@ public class EtcdPropertySource extends BasePropertySource
     }
 
     @Override
-    public Map<String, String> getProperties() {
+    public Map<String, PropertyValue> getProperties() {
         for(EtcdAccessor accessor: getEtcdBackends()){
             try{
                 Map<String, String> props = accessor.getProperties("");
@@ -162,19 +180,45 @@ public class EtcdPropertySource extends BasePropertySource
         return Collections.emptyMap();
     }
 
-    private Map<String, String> mapPrefix(Map<String, String> props) {
-        if(prefix.isEmpty()){
-            return props;
+    private Map<String, PropertyValue> mapPrefix(Map<String, String> props) {
+
+        Map<String, PropertyValueBuilder> builders = new HashMap<>();
+        // Evaluate keys
+        for(Map.Entry<String,String> entry:props.entrySet()) {
+            if (!entry.getKey().startsWith("_")) {
+                PropertyValueBuilder builder = builders.get(entry.getKey());
+                if (builder == null) {
+                    builder = PropertyValue.builder(entry.getKey(), "", 
getName()).setMetaEntries(metaData);
+                    builders.put(entry.getKey(), builder);
+                }
+            }
+        }
+        // add meta entries
+        for(Map.Entry<String,String> entry:props.entrySet()) {
+            if (entry.getKey().startsWith("_")) {
+                String key = entry.getKey().substring(1);
+                for(String field:new String[]{".createdIndex", 
".modifiedIndex", ".ttl",
+                        ".expiration", ".source"}) {
+                    if (key.endsWith(field)) {
+                        key = key.substring(0, key.length() - field.length());
+                        PropertyValueBuilder builder = builders.get(key);
+                        if (builder != null) {
+                            builder.addMetaEntry(field, entry.getValue());
+                        }
+                    }
+                }
+            }
         }
-        Map<String,String> map = new HashMap<>();
-        for(Map.Entry<String,String> entry:props.entrySet()){
-            if(entry.getKey().startsWith("_")){
-                map.put("_" + prefix + entry.getKey().substring(1), 
entry.getValue());
-            } else{
-                map.put(prefix+ entry.getKey(), entry.getValue());
+        // Map to value map.
+        Map<String, PropertyValue> values = new HashMap<>();
+        for(Map.Entry<String,PropertyValueBuilder> en:builders.entrySet()) {
+            if(prefix.isEmpty()){
+                values.put(en.getKey(), en.getValue().build());
+            }else{
+                values.put(prefix + en.getKey(), en.getValue().setKey(prefix + 
en.getKey()).build());
             }
         }
-        return map;
+        return values;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java
----------------------------------------------------------------------
diff --git 
a/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java 
b/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java
index 898a963..3766c1e 100644
--- a/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java
+++ b/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.etcd;
 
+import org.apache.tamaya.spi.PropertyValue;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -55,15 +56,15 @@ public class EtcdPropertySourceTest {
 
     @Test
     public void testGet() throws Exception {
-        Map<String,String> props = propertySource.getProperties();
-        for(Map.Entry<String,String> en:props.entrySet()){
+        Map<String,PropertyValue> props = propertySource.getProperties();
+        for(Map.Entry<String,PropertyValue> en:props.entrySet()){
             assertNotNull("Key not found: " + en.getKey(), 
propertySource.get(en.getKey()));
         }
     }
 
     @Test
     public void testGetProperties() throws Exception {
-        Map<String,String> props = propertySource.getProperties();
+        Map<String,PropertyValue> props = propertySource.getProperties();
         assertNotNull(props);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
----------------------------------------------------------------------
diff --git 
a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
 
b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
index 20d23f2..f883cc5 100644
--- 
a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
+++ 
b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
@@ -28,7 +28,6 @@ import 
org.apache.tamaya.mutableconfig.spi.MutablePropertySource;
 import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.spisupport.BasePropertySource;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -166,15 +165,19 @@ implements MutablePropertySource{
             return null;
         }
         return PropertyValue.builder(key, value, getName())
-                .addContextData("backend", "Hazelcast")
-                .addContextData("instance", hcConfig.getInstanceName())
-                .addContextData("mapReference", mapReference)
+                .addMetaEntry("backend", "Hazelcast")
+                .addMetaEntry("instance", hcConfig.getInstanceName())
+                .addMetaEntry("mapReference", mapReference)
                 .build();
     }
 
     @Override
-    public Map<String, String> getProperties() {
-        return Collections.unmodifiableMap(this.configMap);
+    public Map<String, PropertyValue> getProperties() {
+        Map<String,String> meta = new HashMap<>();
+        meta.put("backend", "Hazelcast");
+        meta.put("instance", hazelcastInstance.getConfig().getInstanceName());
+        meta.put("mapReference", mapReference);
+        return PropertyValue.map(this.configMap, getName(), meta);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/metamodel/src/main/java/org/apache/tamaya/metamodel/EnabledPropertySource.java
----------------------------------------------------------------------
diff --git 
a/metamodel/src/main/java/org/apache/tamaya/metamodel/EnabledPropertySource.java
 
b/metamodel/src/main/java/org/apache/tamaya/metamodel/EnabledPropertySource.java
index b425464..7e04499 100644
--- 
a/metamodel/src/main/java/org/apache/tamaya/metamodel/EnabledPropertySource.java
+++ 
b/metamodel/src/main/java/org/apache/tamaya/metamodel/EnabledPropertySource.java
@@ -95,6 +95,7 @@ public final class EnabledPropertySource
         this.enabled = enabled;
     }
 
+    @Override
     public int getOrdinal() {
         return PropertySourceComparator.getOrdinal(this.wrapped);
     }
@@ -113,7 +114,7 @@ public final class EnabledPropertySource
     }
 
     @Override
-    public Map<String, String> getProperties() {
+    public Map<String, PropertyValue> getProperties() {
         if(!isEnabled()){
             return Collections.emptyMap();
         }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
----------------------------------------------------------------------
diff --git 
a/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
 
b/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
index 0ad7dd2..f82e676 100644
--- 
a/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
+++ 
b/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
@@ -27,6 +27,7 @@ import org.apache.tamaya.spisupport.PropertySourceComparator;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -62,6 +63,7 @@ public final class FilteredPropertySource extends 
BasePropertySource {
         return new FilteredPropertySource(propertySource);
     }
 
+    @Override
     public int getOrdinal() {
         int ordinalSet = super.getOrdinal();
         if(ordinalSet == 0){
@@ -80,42 +82,38 @@ public final class FilteredPropertySource extends 
BasePropertySource {
         PropertyValue value = wrapped.get(key);
         if(value != null && value.getValue()!=null){
             if(filters!=null){
-                String filteredValue = value.getValue();
+                PropertyValue filteredValue = value;
                 for(PropertyFilter pf:filters){
-                    filteredValue = pf.filterProperty(filteredValue, new 
FilterContext(key, value.getConfigEntries(), true));
+                    filteredValue = pf.filterProperty(filteredValue, new 
FilterContext(key, value));
                 }
                 if(filteredValue!=null){
-                    return PropertyValue.builder(key, filteredValue, getName())
-                            .setContextData(value.getConfigEntries()).build();
+                    return filteredValue;
                 }
             }
         }
-        return value;
+        return null;
     }
 
     @Override
-    public Map<String, String> getProperties() {
-        Map<String, String> wrappedProps = wrapped.getProperties();
-        if(!filters.isEmpty()){
-            Map<String, String> result = new HashMap<>();
+    public Map<String, PropertyValue> getProperties() {
+        Map<String, PropertyValue> props = wrapped.getProperties();
+        if(!props.isEmpty()){
+            Map<String, PropertyValue> result = new HashMap<>();
             synchronized (filters) {
-                for (String key : wrappedProps.keySet()) {
-                    PropertyValue value = wrapped.get(key);
-                    FilterContext filterContext = new FilterContext(key, 
value.getConfigEntries(), true);
-                    String filteredValue = value.getValue();
+                for (PropertyValue value : props.values()) {
+                    FilterContext filterContext = new 
FilterContext(value.getKey(), props);
+                    PropertyValue filteredValue = value;
                     for (PropertyFilter pf : filters) {
                         filteredValue = pf.filterProperty(filteredValue, 
filterContext);
                     }
                     if (filteredValue != null) {
-                        result.putAll(value.getConfigEntries());
-                        result.put(key, filteredValue);
+                        result.put(filteredValue.getKey(), filteredValue);
                     }
-
                 }
             }
             return result;
         }
-        return wrappedProps;
+        return Collections.emptyMap();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/RefreshablePropertySource.java
----------------------------------------------------------------------
diff --git 
a/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/RefreshablePropertySource.java
 
b/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/RefreshablePropertySource.java
index 0ebbf45..b5152c7 100644
--- 
a/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/RefreshablePropertySource.java
+++ 
b/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/RefreshablePropertySource.java
@@ -117,6 +117,7 @@ public final class RefreshablePropertySource
         }
     }
 
+    @Override
     public int getOrdinal() {
         return PropertySourceComparator.getOrdinal(this.wrapped);
     }
@@ -132,7 +133,7 @@ public final class RefreshablePropertySource
     }
 
     @Override
-    public Map<String, String> getProperties() {
+    public Map<String, PropertyValue> getProperties() {
         return this.wrapped.getProperties();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/propertysources/src/main/java/org/apache/tamaya/propertysources/PropertySourceBuilder.java
----------------------------------------------------------------------
diff --git 
a/propertysources/src/main/java/org/apache/tamaya/propertysources/PropertySourceBuilder.java
 
b/propertysources/src/main/java/org/apache/tamaya/propertysources/PropertySourceBuilder.java
index ea81cbc..3d35863 100644
--- 
a/propertysources/src/main/java/org/apache/tamaya/propertysources/PropertySourceBuilder.java
+++ 
b/propertysources/src/main/java/org/apache/tamaya/propertysources/PropertySourceBuilder.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.propertysources;
 
 import org.apache.tamaya.core.propertysource.SimplePropertySource;
 import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -96,7 +97,9 @@ public final class PropertySourceBuilder {
      * @return the bulder for chaining.
      */
     public PropertySourceBuilder putAll(PropertySource propertySource){
-        this.properties.putAll(propertySource.getProperties());
+        for(PropertyValue val:propertySource.getProperties().values()) {
+            this.properties.put(val.getKey(), val.getValue());
+        }
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java
----------------------------------------------------------------------
diff --git 
a/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java 
b/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java
index fcf2256..de65fb7 100644
--- 
a/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java
+++ 
b/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java
@@ -53,8 +53,8 @@ public abstract class BaseRemotePropertySource implements 
PropertySource{
     }
 
     @Override
-    public Map<String, String> getProperties() {
-        return properties;
+    public Map<String, PropertyValue> getProperties() {
+        return PropertyValue.map(properties, getName());
     }
 
     /**
@@ -121,7 +121,7 @@ public abstract class BaseRemotePropertySource implements 
PropertySource{
 
     @Override
     public PropertyValue get(String key) {
-        return PropertyValue.of(key,getProperties().get(key),getName());
+        return getProperties().get(key);
     }
 
     public int getOrdinal(){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/usagetracker/src/main/java/org/apache/tamaya/usagetracker/UsageStat.java
----------------------------------------------------------------------
diff --git 
a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/UsageStat.java 
b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/UsageStat.java
index 6161644..d04f787 100644
--- a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/UsageStat.java
+++ b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/UsageStat.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tamaya.usagetracker;
 
+import org.apache.tamaya.spi.PropertyValue;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -167,7 +169,7 @@ public final class UsageStat {
      * stacktrace is shortened to a maximal size of 20 items.
      * @param value the value returned, not null.
      */
-    public void trackUsage(String value){
+    public void trackUsage(PropertyValue value){
         trackUsage(value, maxTrace);
     }
 
@@ -177,7 +179,7 @@ public final class UsageStat {
      * @param value the value returned, not null.
      * @param maxTraceLength the maximal length of the stored stacktrace.
      */
-    public void trackUsage(String value, int maxTraceLength){
+    public void trackUsage(PropertyValue value, int maxTraceLength){
         String accessPoint = null;
         if(maxTraceLength>0) {
             Exception e = new Exception();
@@ -230,7 +232,7 @@ public final class UsageStat {
         private long firstAccessTS;
         private String[] stackTrace;
         private String accessPoint;
-        private Map<Long, String> trackedValues;
+        private Map<Long, PropertyValue> trackedValues;
 
         public AccessDetail(String key, String accessPoint, String[] 
stackTrace){
             this.key = Objects.requireNonNull(key);
@@ -244,7 +246,7 @@ public final class UsageStat {
             accessCount.set(0);
         }
 
-        public long trackAccess(String value){
+        public long trackAccess(PropertyValue value){
             long count = accessCount.incrementAndGet();
             lastAccessTS = System.currentTimeMillis();
             if(firstAccessTS==0){
@@ -285,7 +287,7 @@ public final class UsageStat {
             return stackTrace.clone();
         }
 
-        public Map<Long, String> getTrackedValues(){
+        public Map<Long, PropertyValue> getTrackedValues(){
             synchronized (this) {
                 if (trackedValues == null) {
                     return Collections.emptyMap();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/DefaultConfigUsage.java
----------------------------------------------------------------------
diff --git 
a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/DefaultConfigUsage.java
 
b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/DefaultConfigUsage.java
index f268cc7..247d7a6 100644
--- 
a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/DefaultConfigUsage.java
+++ 
b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/DefaultConfigUsage.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.usagetracker.internal;
 
+import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.usagetracker.UsageStat;
 import org.apache.tamaya.usagetracker.spi.ConfigUsageSpi;
 
@@ -111,11 +112,11 @@ public class DefaultConfigUsage implements ConfigUsageSpi 
{
 
     @Override
     public void trackAllPropertiesAccess(){
-        trackSingleKeyAccess("<<all>>", "<not stored>");
+        trackSingleKeyAccess("<<all>>", PropertyValue.of("<<all>>","<not 
stored>","-"));
     }
 
     @Override
-    public void trackSingleKeyAccess(String key, String value){
+    public void trackSingleKeyAccess(String key, PropertyValue value){
         // Ignore meta-entries
         if(!isUsageTrackingEnabled() || key.startsWith("_")){
             return;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
----------------------------------------------------------------------
diff --git 
a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
 
b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
index 30a643d..610f7e8 100644
--- 
a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
+++ 
b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.usagetracker.internal;
 
 import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
+import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.usagetracker.spi.ConfigUsageSpi;
 
@@ -34,7 +35,7 @@ import javax.annotation.Priority;
 public class UsageTrackerFilter implements PropertyFilter{
 
     @Override
-    public String filterProperty(String value, FilterContext context) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext 
context) {
             ConfigUsageSpi tracker = 
ServiceContextManager.getServiceContext().getService(ConfigUsageSpi.class);
         if (context.isSinglePropertyScoped()) {
             tracker.trackSingleKeyAccess(context.getKey(), value);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80d6ec20/usagetracker/src/main/java/org/apache/tamaya/usagetracker/spi/ConfigUsageSpi.java
----------------------------------------------------------------------
diff --git 
a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/spi/ConfigUsageSpi.java
 
b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/spi/ConfigUsageSpi.java
index f76586c..b3a14bd 100644
--- 
a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/spi/ConfigUsageSpi.java
+++ 
b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/spi/ConfigUsageSpi.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.usagetracker.spi;
 
+import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.usagetracker.UsageStat;
 
 import java.util.Collection;
@@ -86,7 +87,7 @@ public interface ConfigUsageSpi {
      * @param key key to track for
      * @param value value to track for
      */
-    void trackSingleKeyAccess(String key, String value);
+    void trackSingleKeyAccess(String key, PropertyValue value);
 
     /**
      * Access the usage statistics for the recorded uses of configuration.

Reply via email to