TAMAYA-60 Automatic loading of provided PropertyFilter service providers is now 
configurable.


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

Branch: refs/heads/master
Commit: 8908758046deca512c08b16e21ab8c3658669f48
Parents: b51df05
Author: Oliver B. Fischer <[email protected]>
Authored: Sun Feb 8 22:02:20 2015 +0100
Committer: Oliver B. Fischer <[email protected]>
Committed: Sun Feb 8 22:02:20 2015 +0100

----------------------------------------------------------------------
 .../tamaya/builder/ConfigurationBuilder.java    | 26 ++++++++
 .../ProgrammaticConfigurationContext.java       | 17 ++++-
 .../builder/ConfigurationBuilderTest.java       | 68 ++++++++++++++++++++
 .../tamaya/builder/TestPropertyFilter.java      | 34 ++++++++++
 .../org.apache.tamaya.spi.PropertyFilter        | 19 ++++++
 5 files changed, 163 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/89087580/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git 
a/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
 
b/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
index a773527..f60294d 100644
--- 
a/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
+++ 
b/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
@@ -35,6 +35,7 @@ import java.util.Objects;
  * - configurable loading of provided PropertyConverter DONE
  * - configurable loading of provided PropertySources DONE
  * - configurable loading of provided PropertySourceProviders DONE
+ * - configurable loading of provided PropertyFilters DONE
  * - Rethink the default behaviour for SPI loading
  * - Work on all TODOs for TAMAYA-60
  * - Write JavaDoc
@@ -71,6 +72,8 @@ public class ConfigurationBuilder {
     private boolean loadProvidedPropertySources = false;
     private boolean loadProvidedPropertySourceProviders = false;
 
+    private boolean isLoadProvidedPropertyFilters = false;
+
 
     /**
      * Allows to set configuration context during unit tests.
@@ -171,6 +174,28 @@ public class ConfigurationBuilder {
         return loadProvidedPropertySources;
     }
 
+
+    public boolean isPropertyFilterLoadingEnabled() {
+        return isLoadProvidedPropertyFilters;
+    }
+
+
+    public ConfigurationBuilder enabledProvidedPropertyFilters() {
+        checkBuilderState();
+
+        isLoadProvidedPropertyFilters = true;
+
+        return this;
+    }
+
+    public ConfigurationBuilder disableProvidedPropertyFilters() {
+        checkBuilderState();
+
+        isLoadProvidedPropertyFilters = false;
+
+        return this;
+    }
+
     public ConfigurationBuilder disableProvidedPropertySources() {
         checkBuilderState();
 
@@ -215,6 +240,7 @@ public class ConfigurationBuilder {
         
contextBuilder.loadProvidedPropertyConverters(isPropertyConverterLoadingEnabled());
         
contextBuilder.loadProvidedPropertySources(isPropertySourcesLoadingEnabled());
         
contextBuilder.loadProvidedPropertySourceProviders(isPropertySourceProvidersLoadingEnabled());
+        
contextBuilder.loadProvidedPropertyFilters(isLoadProvidedPropertyFilters);
 
         return new DefaultConfiguration(contextBuilder.build());
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/89087580/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java
----------------------------------------------------------------------
diff --git 
a/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java
 
b/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java
index fc1e653..faf5960 100644
--- 
a/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java
+++ 
b/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java
@@ -96,7 +96,7 @@ class ProgrammaticConfigurationContext implements 
ConfigurationContext {
         LOG.info(() -> "Using " + immutablePropertySources.size() + " property 
sources: " +
                 createStringList(immutablePropertySources, ps -> ps.getName() 
+ '[' + ps.getClass().getName() + ']'));
 
-        immutablePropertyFilters.addAll(builder.propertyFilters);
+        immutablePropertyFilters.addAll(getPropertyFilters(builder));
         Collections.sort(immutablePropertyFilters, 
this::comparePropertyFilters);
         immutablePropertyFilters = 
Collections.unmodifiableList(immutablePropertyFilters);
         LOG.info(() -> "Using " + immutablePropertyFilters.size() + " property 
filters: " +
@@ -117,6 +117,16 @@ class ProgrammaticConfigurationContext implements 
ConfigurationContext {
         LOG.info(() -> "Using PropertyValueCombinationPolicy: " + 
propertyValueCombinationPolicy);
     }
 
+    private List<PropertyFilter> getPropertyFilters(Builder builder) {
+        List<PropertyFilter> provided = builder.loadProvidedPropertyFilters
+                ? 
ServiceContext.getInstance().getServices(PropertyFilter.class)
+                : new ArrayList<>(0);
+
+        List<PropertyFilter> configured = builder.propertyFilters;
+
+        return join(provided, configured);
+    }
+
     private List<PropertySource> getAllPropertySources(Builder builder) {
         List<PropertySource> provided = builder.loadProvidedPropertySources
                 ? 
ServiceContext.getInstance().getServices(PropertySource.class)
@@ -273,6 +283,7 @@ class ProgrammaticConfigurationContext implements 
ConfigurationContext {
         private boolean loadProvidedPropertyConverters;
         private boolean loadProvidedPropertySources;
         private boolean loadProvidedPropertySourceProviders;
+        private boolean loadProvidedPropertyFilters;
 
         public Builder 
setPropertyValueCombinationPolicy(PropertyValueCombinationPolicy policy) {
             this.propertyValueCombinationPolicy = 
Objects.requireNonNull(policy);
@@ -354,6 +365,10 @@ class ProgrammaticConfigurationContext implements 
ConfigurationContext {
         public void loadProvidedPropertySourceProviders(boolean state) {
             loadProvidedPropertySourceProviders = state;
         }
+
+        public void loadProvidedPropertyFilters(boolean state) {
+            loadProvidedPropertyFilters = state;
+        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/89087580/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
 
b/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
index 5c2f2b4..e3faed2 100644
--- 
a/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
+++ 
b/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.builder;
 
+import jdk.nashorn.internal.runtime.regexp.joni.Config;
 import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.Configuration;
 import org.apache.tamaya.TypeLiteral;
@@ -450,6 +451,73 @@ public class ConfigurationBuilderTest {
 
     /*********************************************************************
      * Tests for enabling and disabling of automatic loading of
+     * P r o p e r t y F i l t e r s
+     */
+
+    @Test
+    public void enablingOfPropertyFiltersLoadingIsOk() {
+        PropertySource source = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("source").when(source).getName();
+        doReturn("A").when(source).get("key");
+        doReturn(100).when(source).getOrdinal();
+
+        ConfigurationBuilder builder = new ConfigurationBuilder();
+
+        Configuration config = builder.disableProvidedPropertyFilters()
+                                      .enabledProvidedPropertyFilters()
+                                      .addPropertySources(source)
+                                      .build();
+
+        String property = config.get("key");
+
+        assertThat(property, CoreMatchers.notNullValue());
+        assertThat(property, Matchers.equalTo("AinBerlin"));
+    }
+
+    @Test
+    public void disablingOfPropertyFiltersLoadingIsOk() {
+        ConfigurationBuilder builder = new ConfigurationBuilder();
+
+        builder.enabledProvidedPropertyFilters()
+               .disableProvidedPropertyFilters();
+
+        assertThat(builder.isPropertyFilterLoadingEnabled(), is(false));
+    }
+
+    @Test
+    public void loadingOfPropertyFiltersCanBeDisabled() {
+        ConfigurationBuilder builder = new ConfigurationBuilder();
+
+        builder.disableProvidedPropertyFilters()
+               .enabledProvidedPropertyFilters();
+
+        assertThat(builder.isPropertyFilterLoadingEnabled(), is(true));
+    }
+
+    @Test
+    public void loadingOfPropertyFiltersCanBeEnabled() {
+        PropertySource source = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("source").when(source).getName();
+        doReturn("A").when(source).get("key");
+        doReturn(100).when(source).getOrdinal();
+
+        ConfigurationBuilder builder = new ConfigurationBuilder();
+
+        Configuration config = builder.enabledProvidedPropertyFilters()
+                                      .disableProvidedPropertyFilters()
+                                      .addPropertySources(source)
+                                      .build();
+
+        String property = config.get("key");
+
+        assertThat(property, CoreMatchers.notNullValue());
+        assertThat(property, Matchers.equalTo("A"));
+    }
+
+    /*********************************************************************
+     * Tests for enabling and disabling of automatic loading of
      * P r o p e r t y S o u r c e P r o v i d e r s
      */
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/89087580/modules/builder/src/test/java/org/apache/tamaya/builder/TestPropertyFilter.java
----------------------------------------------------------------------
diff --git 
a/modules/builder/src/test/java/org/apache/tamaya/builder/TestPropertyFilter.java
 
b/modules/builder/src/test/java/org/apache/tamaya/builder/TestPropertyFilter.java
new file mode 100644
index 0000000..80c4cb3
--- /dev/null
+++ 
b/modules/builder/src/test/java/org/apache/tamaya/builder/TestPropertyFilter.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.builder;
+
+import org.apache.tamaya.spi.PropertyFilter;
+
+public class TestPropertyFilter implements PropertyFilter {
+    @Override
+    public String filterProperty(String key, String value) {
+        String result = value;
+
+        if (!result.contains(("inBerlin"))) {
+            result = value + "inBerlin";
+        }
+
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/89087580/modules/builder/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyFilter
----------------------------------------------------------------------
diff --git 
a/modules/builder/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyFilter
 
b/modules/builder/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyFilter
new file mode 100644
index 0000000..f35e9c5
--- /dev/null
+++ 
b/modules/builder/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyFilter
@@ -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.builder.TestPropertyFilter

Reply via email to