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 2015/08/21 02:41:45 UTC

[3/6] incubator-tamaya git commit: Implemented, moved experimental modules and added them to non experimental parts: - functions (operators and queries) - model (validation and documentation) - management (jmx bean support)

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/main/resources/META-INF/services/org.apache.tamaya.model.spi.ValidationProviderSpi
----------------------------------------------------------------------
diff --git a/modules/model/src/main/resources/META-INF/services/org.apache.tamaya.model.spi.ValidationProviderSpi b/modules/model/src/main/resources/META-INF/services/org.apache.tamaya.model.spi.ValidationProviderSpi
new file mode 100644
index 0000000..47c18de
--- /dev/null
+++ b/modules/model/src/main/resources/META-INF/services/org.apache.tamaya.model.spi.ValidationProviderSpi
@@ -0,0 +1,21 @@
+#
+# 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.model.internal.ConfiguredPropertiesValidationProviderSpi
+org.apache.tamaya.model.internal.ConfiguredInlineModelProviderSpi
+org.apache.tamaya.model.internal.ConfiguredResourcesModelProviderSpi

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/java/org/apache/tamaya/model/TestConfigValidationProvider.java
----------------------------------------------------------------------
diff --git a/modules/model/src/test/java/org/apache/tamaya/model/TestConfigValidationProvider.java b/modules/model/src/test/java/org/apache/tamaya/model/TestConfigValidationProvider.java
new file mode 100644
index 0000000..b923ed3
--- /dev/null
+++ b/modules/model/src/test/java/org/apache/tamaya/model/TestConfigValidationProvider.java
@@ -0,0 +1,66 @@
+/*
+ * 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.model;
+
+import org.apache.tamaya.model.spi.AreaValidation;
+import org.apache.tamaya.model.spi.ParameterValidation;
+import org.apache.tamaya.model.spi.ValidationGroup;
+import org.apache.tamaya.model.spi.ValidationProviderSpi;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Created by Anatole on 09.08.2015.
+ */
+public class TestConfigValidationProvider implements ValidationProviderSpi{
+
+    private List<Validation> validations = new ArrayList<>(1);
+
+    public TestConfigValidationProvider(){
+        validations.add(new TestConfigValidation());
+        validations = Collections.unmodifiableList(validations);
+    }
+
+    @Override
+    public Collection<Validation> getValidations() {
+        return validations;
+    }
+
+    private static final class TestConfigValidation extends ValidationGroup{
+
+        public TestConfigValidation(){
+            super("TestConfig", "test", new AreaValidation.Builder("a.test.existing").setRequired(true).build(),
+                    ParameterValidation.of("a.test.existing.aParam", true),
+                    ParameterValidation.of("a.test.existing.optionalParam"),
+                    ParameterValidation.of("a.test.existing.aABCParam", false, "[ABC].*"),
+                    new AreaValidation.Builder("a.test.notexisting").setRequired(true).build(),
+                    ParameterValidation.of("a.test.notexisting.aParam", true),
+                    ParameterValidation.of("a.test.notexisting.optionalParam"),
+                    ParameterValidation.of("a.test.existing.aABCParam2", false, "[ABC].*"));
+        }
+        @Override
+        public String getName() {
+            return "TestConfigValidation";
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/java/org/apache/tamaya/model/ValidationTests.java
----------------------------------------------------------------------
diff --git a/modules/model/src/test/java/org/apache/tamaya/model/ValidationTests.java b/modules/model/src/test/java/org/apache/tamaya/model/ValidationTests.java
new file mode 100644
index 0000000..53496ea
--- /dev/null
+++ b/modules/model/src/test/java/org/apache/tamaya/model/ValidationTests.java
@@ -0,0 +1,42 @@
+/*
+ * 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.model;
+
+import org.junit.Test;
+
+/**
+ * Created by Anatole on 10.08.2015.
+ */
+public class ValidationTests {
+
+    @Test
+    public void testDefaults(){
+        System.err.println(ConfigValidator.validate());
+    }
+
+    @Test
+    public void testAllValidations(){
+        System.err.println(ConfigValidator.getValidations());
+    }
+
+    @Test
+    public void testAllValidationsInclUndefined(){
+        System.err.println("Including UNDEFINED: \n" + ConfigValidator.validate(true));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/java/org/apache/tamaya/model/internal/ConfigDocumentationBeanTest.java
----------------------------------------------------------------------
diff --git a/modules/model/src/test/java/org/apache/tamaya/model/internal/ConfigDocumentationBeanTest.java b/modules/model/src/test/java/org/apache/tamaya/model/internal/ConfigDocumentationBeanTest.java
new file mode 100644
index 0000000..4763a01
--- /dev/null
+++ b/modules/model/src/test/java/org/apache/tamaya/model/internal/ConfigDocumentationBeanTest.java
@@ -0,0 +1,112 @@
+/*
+ * 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.model.internal;
+
+import org.apache.tamaya.model.ValidationType;
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Created by Anatole on 19.08.2015.
+ */
+public class ConfigDocumentationBeanTest {
+
+    private ConfigDocumentationBean mbean = new ConfigDocumentationBean();
+
+    @Test
+    public void testValidate_NoUnknowns() throws Exception {
+        String results = mbean.validate(false);
+        assertNotNull(results);
+        assertFalse(results.trim().isEmpty());
+        assertTrue(results.contains("\"type\":\"Parameter\""));
+        assertTrue(results.contains("\"result\":\"MISSING\""));
+        assertFalse(results.contains("\"description\":\"Undefined key: "));
+        assertFalse(results.contains(" \"result\":\"UNDEFINED\""));
+    }
+
+    @Test
+    public void testValidate_WithUnknowns() throws Exception {
+        String results = mbean.validate(true);
+        assertNotNull(results);
+        assertFalse(results.trim().isEmpty());
+        // test transitive excludes of default sys properties
+        assertFalse(results.contains("\"name\":\"java"));
+        assertFalse(results.contains("\"name\":\"sun."));
+        assertFalse(results.contains("\"name\":\"file."));
+        // test others
+        assertTrue(results.contains("\"type\":\"Parameter\""));
+        assertTrue(results.contains("\"type\":\"Section\""));
+        assertTrue(results.contains("\"result\":\"MISSING\""));
+        assertTrue(results.contains("\"description\":\"Undefined key: "));
+        assertTrue(results.contains(" \"result\":\"UNDEFINED\""));
+    }
+
+    @Test
+    public void testGetConfigurationModel() throws Exception {
+        String results = mbean.getConfigurationModel();
+        assertNotNull(results);
+        assertFalse(results.trim().isEmpty());
+        assertTrue(results.contains("\"type\":\"Parameter\""));
+        assertTrue(results.contains("\"name\":\"MyNumber\""));
+        assertTrue(results.contains("\"name\":\"a.b.c\""));
+        assertTrue(results.contains("\"required\":true"));
+    }
+
+    @Test
+    public void testGetConfigurationModel_WithSection() throws Exception {
+        String results = mbean.getConfigurationModel(ValidationType.Parameter);
+        assertNotNull(results);
+        assertFalse(results.trim().isEmpty());
+        assertTrue(results.contains("\"type\":\"Parameter\""));
+        assertFalse(results.contains("\"type\":\"Section\""));
+        assertTrue(results.contains("\"required\":true"));
+    }
+
+    @Test
+    public void testFindConfigurationModels() throws Exception {
+        String results = mbean.findConfigurationModels("a");
+        assertNotNull(results);
+        assertFalse(results.trim().isEmpty());
+        assertFalse(results.contains("\"type\":\"Parameter\""));
+        assertTrue(results.contains("\"type\":\"Section\""));
+    }
+
+    @Test
+    public void testFindValidationModels() throws Exception {
+        String results = mbean.findValidationModels(ValidationType.Section, "a");
+        assertNotNull(results);
+        assertFalse(results.trim().isEmpty());
+        assertFalse(results.contains("\"type\":\"Parameter\""));
+        assertTrue(results.contains("\"type\":\"Section\""));
+        results = mbean.findValidationModels(ValidationType.CombinationPolicy, "a");
+        assertFalse(results.trim().isEmpty());
+        assertFalse(results.contains("\"type\":\"Parameter\""));
+        assertFalse(results.contains("\"type\":\"Section\""));
+        System.out.println(results);
+    }
+
+    @Test
+    public void testToString() throws Exception {
+        String toString = mbean.toString();
+        System.out.println(toString);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/resources/META-INF/configmodel.properties
----------------------------------------------------------------------
diff --git a/modules/model/src/test/resources/META-INF/configmodel.properties b/modules/model/src/test/resources/META-INF/configmodel.properties
new file mode 100644
index 0000000..af37705
--- /dev/null
+++ b/modules/model/src/test/resources/META-INF/configmodel.properties
@@ -0,0 +1,96 @@
+#
+# 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.
+#
+
+###################################################################################
+# Example of a configuration metamodel expressed via properties.
+####################################################################################
+
+# Metamodel information
+{model}.provider=ConfigModel Extension
+
+# reusable parameter definition, referenceable as MyNumber
+{model}.MyNumber.class=Parameter
+{model}.MyNumber.type=Integer
+{model}.MyNumber.description=a (reusable) number type parameter (optional)
+
+####################################################################################
+# Description of Configuration Sections (minimal, can be extended by other modules).
+# By default its interpreted as a section !
+####################################################################################
+
+# a (section)
+{model}.a.class=Section
+{model}.a.params2.class=Parameter
+{model}.a.params2.type=String
+{model}.a.params2.required=true
+{model}.a.params2.description=a required parameter
+
+{model}.a.paramInt.class=Parameter
+{model}.a.paramInt.type=ref:MyNumber
+{model}.a.paramInt.description=an optional parameter (default)
+
+{model}.a._number.class=Parameter
+{model}.a._number.type=Integer
+{model}.a._number.deprecated=true
+{model}.a._number.mappedTo=a.paramInt
+
+# a.b.c (section)
+{model}.a.b.c.class=Section
+{model}.a.b.c.description=Just a test section
+
+# a.b.c.aRequiredSection (section)
+{model}.a.b.c.aRequiredSection.class=Section
+{model}.a.b.c.aRequiredSection.required=true
+{model}.a.b.c.aRequiredSection.description=A section containing required parameters is called a required section.\
+         Sections can also explicitly be defined to be required, but without\
+         specifying the paramteres to be contained.,
+
+# a.b.c.aRequiredSection.subsection (section)
+{model}.a.b.c.aRequiredSection.subsection.class=Section
+
+{model}.a.b.c.aRequiredSection.subsection.param0.class=Parameter
+{model}.a.b.c.aRequiredSection.subsection.param0.type=String
+{model}.a.b.c.aRequiredSection.subsection.param0.description=a minmally documented String parameter
+# A minmal String parameter
+{model}.a.b.c.aRequiredSection.subsection.param00.class=Parameter
+{model}.a.b.c.aRequiredSection.subsection.param00.type=String
+
+# a.b.c.aRequiredSection.subsection (section)
+{model}.a.b.c.aRequiredSection.subsection.param1.class=Parameter
+{model}.a.b.c.aRequiredSection.subsection.param1.type = String
+{model}.a.b.c.aRequiredSection.subsection.param1.required = true
+{model}.a.b.c.aRequiredSection.subsection.intParam.class=Parameter
+{model}.a.b.c.aRequiredSection.subsection.intParam.type = Integer
+{model}.a.b.c.aRequiredSection.subsection.intParam.description=an optional parameter (default)
+
+# a.b.c.aRequiredSection.nonempty-subsection (section)
+{model}.a.b.c.aRequiredSection.nonempty-subsection.class=Section
+{model}.a.b.c.aRequiredSection.nonempty-subsection.required=true
+
+# a.b.c.aRequiredSection.optional-subsection (section)
+{model}.a.b.c.aRequiredSection.optional-subsection.class=Section
+
+# a.b.c.aValidatedSection (section)
+{model}.a.b.c.aValidatedSection.class=Section
+{model}.a.b.c.aValidatedSection.description=A validated section.
+{model}.a.b.c.aValidatedSection.validations=org.apache.tamaya.model.TestValidator
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/modules/model/src/test/resources/META-INF/javaconfiguration.properties b/modules/model/src/test/resources/META-INF/javaconfiguration.properties
new file mode 100644
index 0000000..b0b8c22
--- /dev/null
+++ b/modules/model/src/test/resources/META-INF/javaconfiguration.properties
@@ -0,0 +1,22 @@
+#
+# 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.
+#
+a.test.existing.aParam=existingValue
+a.test.existing.optionalParam=optionalValue
+a.test.existing.aABCParam=ABCparam
+a.test.existing.aABCParam2=MMM

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/resources/META-INF/services/org.apache.tamaya.model.spi.ValidationProviderSpi
----------------------------------------------------------------------
diff --git a/modules/model/src/test/resources/META-INF/services/org.apache.tamaya.model.spi.ValidationProviderSpi b/modules/model/src/test/resources/META-INF/services/org.apache.tamaya.model.spi.ValidationProviderSpi
new file mode 100644
index 0000000..45c1b86
--- /dev/null
+++ b/modules/model/src/test/resources/META-INF/services/org.apache.tamaya.model.spi.ValidationProviderSpi
@@ -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.model.TestConfigValidationProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/resources/examples/configmodel.ini
----------------------------------------------------------------------
diff --git a/modules/model/src/test/resources/examples/configmodel.ini b/modules/model/src/test/resources/examples/configmodel.ini
new file mode 100644
index 0000000..ec4070c
--- /dev/null
+++ b/modules/model/src/test/resources/examples/configmodel.ini
@@ -0,0 +1,76 @@
+#
+# 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.
+#
+
+###################################################################################
+# Example of a configuration metamodel expressed via ini(tm).
+####################################################################################
+
+####################################################################################
+# Description of Configuration Sections (minimal, can be extended by other modules).
+# By default its interpreted as a section !
+####################################################################################
+[{model}a]
+class = Section
+params2.type = String
+params2.required = true
+params2.description = "a required parameter"
+paramInt.ref = MyNumber
+paramInt.description = "an optional parameter (default)"
+_number.type = Integer
+_number.deprecated = true
+_number.mappedTo = "a.paramInt"
+
+[{model}a.b.c]
+class = Section
+description = Just a test section
+
+[{model}a.b.c.aRequiredSection]
+class = Section
+required = true
+description = A section containing required parameters is called a required section.\
+         Sections can also explicitly be defined to be required, but without\
+         specifying the paramteres to be contained.,
+
+[{model}a.b.c.aRequiredSection.subsection]
+class = Section
+param0.type = String
+param0.description = "a minmally documented String parameter"
+# A minmal String parameter
+param00.type = String
+# description is optional
+param1.type = String
+param1.required = true
+intParam.type = Integer
+intParam.description = "an optional parameter (default)"
+
+[{model}a.b.c.aRequiredSection.nonempty-subsection]
+class = Section
+required = true
+
+[{model}a.b.c.aRequiredSection.optional-subsection]
+class = Section
+
+[{model}a.b.c.aValidatedSection]
+class = Section
+description = "A validation section."
+validations = org.apache.tamaya.model.TestValidator?max=3
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/resources/examples/configmodel.json
----------------------------------------------------------------------
diff --git a/modules/model/src/test/resources/examples/configmodel.json b/modules/model/src/test/resources/examples/configmodel.json
new file mode 100644
index 0000000..1fd831e
--- /dev/null
+++ b/modules/model/src/test/resources/examples/configmodel.json
@@ -0,0 +1,113 @@
+/*
+* 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.
+*/
+
+//##################################################################################
+// Example of a configuration metamodel expressed via YAML(tm).
+//  Structure is shown through indentation (one or more spaces).
+//  Sequence items are denoted by a dash,
+//  key value pairs within a map are separated by a colon.
+//##################################################################################
+
+//##################################################################################
+// Metamodel information
+//##################################################################################
+{
+  "{model}": {
+    "__name": "testmodel",
+    "__provider": "ConfigModel Extension",
+    "__version": "1.0",
+    "__release-date": "2001-01-23",
+    "__author": "Anatole Tresch",
+    // "modelformat": "alternate format reader type"
+    "__comments": "Late afternoon is best. Backup contact is Nancy.",
+    // reusable parameter definition
+    "MyNumber": {
+      "class": "Parameter",
+      "type": "Integer",
+      "template": true,
+      "description": "an (reusable) number type parameter (optional)"
+    },
+    //##################################################################################
+    // Description of Configuration Sections (minimal, can be extended by other modules).
+    //##################################################################################
+    "a": {
+      "class": "Section",
+      // required, default is parameter!
+      "params2": {
+        "required": true,
+        "description": "a required parameter"
+      },
+      "paramInt": {
+        // references a shared parameter definition.
+        "ref": "MyNumber",
+        "description": "an optional parameter (default)"
+      },
+      "_number": {
+        "type": "Integer",
+        "deprecated": true,
+        // references a deprecated parameter, now mapped to 'a.paramInt'.
+        "mappedto": "a.paramInt"
+      }
+    },
+    "a.b.c": {
+      "class": "Section",
+      "description": "Just a test section."
+      // a subsection, directly configured as child element.
+      "aRequiredSection": {
+        "class": "Section",
+        "required": true,
+        "description": "A section containing required parameters is called a required section."
+      }
+    },
+    // a subsection, configured in its own section.
+    "a.b.c.aRequiredSection.subsection": {
+      "class": "Section",
+      "param0": {
+        "type": "String",
+        "description": "a minmally documented String parameter"
+      },
+      // A minmally defined String parameter
+      "param00": {},
+      "param1": {
+        "type": "String",
+        "required": true,
+        "description": "a required parameter"
+      },
+      "intParam": {
+        "type": "Integer",
+        "required": true,
+        "description": "an optional parameter (default)"
+      }
+    },
+    "a.b.c.aRequiredSection.nonempty-subsection": {
+      "class": "Section",
+      "required": true
+    },
+    "a.b.c.aRequiredSection.optional-subsection": {
+      "class": "Section"
+    },
+    "a.b.c.aRequiredSection.aValidatedSection": {
+      "class": "Section",
+      "description": "A validated section.",
+      "validations": "org.apache.tamaya.model.validation.MaxItemValidator?max=3"
+    }
+  }
+}
+
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/resources/examples/configmodel.properties
----------------------------------------------------------------------
diff --git a/modules/model/src/test/resources/examples/configmodel.properties b/modules/model/src/test/resources/examples/configmodel.properties
new file mode 100644
index 0000000..4e69549
--- /dev/null
+++ b/modules/model/src/test/resources/examples/configmodel.properties
@@ -0,0 +1,96 @@
+#
+# 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.
+#
+
+###################################################################################
+# Example of a configuration metamodel expressed via properties.
+####################################################################################
+
+# Metamodel information
+{model}.__provider=ConfigModel Extension
+
+# reusable parameter definition, referenceable as MyNumber
+{model}.MyNumber.class=Parameter
+{model}.MyNumber.type=Integer
+{model}.MyNumber.description=a (reusable) number type parameter (optional)
+
+####################################################################################
+# Description of Configuration Sections (minimal, can be extended by other modules).
+# By default its interpreted as a section !
+####################################################################################
+
+# a (section)
+{model}.a.class=Section
+{model}.a.params2.class=Parameter
+{model}.a.params2.type=String
+{model}.a.params2.required=true
+{model}.a.params2.description=a required parameter
+
+{model}.a.paramInt.class=Parameter
+{model}.a.paramInt.type=ref:MyNumber
+{model}.a.paramInt.description=an optional parameter (default)
+
+{model}.a._number.class=Parameter
+{model}.a._number.type=Integer
+{model}.a._number.deprecated=true
+{model}.a._number.mappedTo=a.paramInt
+
+# a.b.c (section)
+{model}.a.b.c.class=Section
+{model}.a.b.c.description=Just a test section
+
+# a.b.c.aRequiredSection (section)
+{model}.a.b.c.aRequiredSection.class=Section
+{model}.a.b.c.aRequiredSection.required=true
+{model}.a.b.c.aRequiredSection.description=A section containing required parameters is called a required section.\
+         Sections can also explicitly be defined to be required, but without\
+         specifying the paramteres to be contained.,
+
+# a.b.c.aRequiredSection.subsection (section)
+{model}.a.b.c.aRequiredSection.subsection.class=Section
+
+{model}.a.b.c.aRequiredSection.subsection.param0.class=Parameter
+{model}.a.b.c.aRequiredSection.subsection.param0.type=String
+{model}.a.b.c.aRequiredSection.subsection.param0.description=a minmally documented String parameter
+# A minmal String parameter
+{model}.a.b.c.aRequiredSection.subsection.param00.class=Parameter
+{model}.a.b.c.aRequiredSection.subsection.param00.type=String
+
+# a.b.c.aRequiredSection.subsection (section)
+{model}.a.b.c.aRequiredSection.subsection.param1.class=Parameter
+{model}.a.b.c.aRequiredSection.subsection.param1.type = String
+{model}.a.b.c.aRequiredSection.subsection.param1.required = true
+{model}.a.b.c.aRequiredSection.subsection.intParam.class=Parameter
+{model}.a.b.c.aRequiredSection.subsection.intParam.type = Integer
+{model}.a.b.c.aRequiredSection.subsection.intParam.description=an optional parameter (default)
+
+# a.b.c.aRequiredSection.nonempty-subsection (section)
+{model}.a.b.c.aRequiredSection.nonempty-subsection.class=Section
+{model}.a.b.c.aRequiredSection.nonempty-subsection.required=true
+
+# a.b.c.aRequiredSection.optional-subsection (section)
+{model}.a.b.c.aRequiredSection.optional-subsection.class=Section
+
+# a.b.c.aValidatedSection (section)
+{model}.a.b.c.aValidatedSection.class=Section
+{model}.a.b.c.aValidatedSection.description=A validated section.
+{model}.a.b.c.aValidatedSection.validations=org.apache.tamaya.model.TestValidator
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/resources/examples/configmodel.xml
----------------------------------------------------------------------
diff --git a/modules/model/src/test/resources/examples/configmodel.xml b/modules/model/src/test/resources/examples/configmodel.xml
new file mode 100644
index 0000000..dd78c05
--- /dev/null
+++ b/modules/model/src/test/resources/examples/configmodel.xml
@@ -0,0 +1,97 @@
+<!--
+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.
+-->
+
+<!--################################################################################
+# Example of a configuration metamodel expressed via YAML(tm).
+#   Structure is shown through indentation (one or more spaces).
+#   Sequence items are denoted by a dash,
+#   key value pairs within a map are separated by a colon.
+#################################################################################-->
+
+<!--################################################################################
+# Metamodel information
+#################################################################################-->
+
+<configuration>
+    <section name="{model}" __provider="ConfigModel Extension" version="1.0" __release-date="2001-01-23"
+            author="Anatole Tresch">
+        <!-- model-format>alternate format reader type</model-format -->
+        <__description>Late afternoon is best.
+            Backup contact is Nancy.
+        </__description>
+
+        <!--################################################################################
+        # Description of Configuration Sections (minimal, can be extended by other modules).
+        #################################################################################-->
+        <section name="a">
+            <param name="params">
+                <type>String</type>
+                <required>true</required>
+                <description>a required parameter</description>
+            </param>
+            <param name="paramInt">
+                <ref>MyNumber</ref>
+                <required>true</required>
+                <description>an optional parameter (default)</description>
+            </param>
+            <param name="_number">
+                <type>Integer</type>
+                <deprecated>true</deprecated>
+                <mappedto>a.paramInt</mappedto>
+            </param>
+            <section name="b.c">
+                <description>Just a test section.</description>
+                <section name="aRequiredSection">
+                    <description>A section containing required parameters is called a required section.
+                        Sections can also explicitly be defined to be required, but without
+                        specifying the paramteres to be contained.
+                    </description>
+                </section>
+            </section>
+        </section>
+
+        <section name="a.b.c.aRequiredSection.subsection">
+            <param name="param0" type="String">a minmally documented String parameter</param>
+            <!-- # A minmally defined String parameter -->
+            <param name="param00">
+                <type>String</type>
+            </param>
+            <param name="param1">
+                <type>String</type>
+                <required>true</required>
+                <description>a required parameter</description>description>
+            </param>
+            <param name="intParam">
+                <type>Integer</type>
+                <description>an optional parameter (default)</description>
+            </param>
+            <section name="b.c">
+                <description>Just a test section.</description>
+            </section>
+        </section>
+        <section name="a.b.c.aRequiredSection.nonempty-subsection">
+            <required>true</required>
+        </section>
+        <section name="a.b.c.aRequiredSection.optional-subsection"/>
+        <section name="a.b.c.aRequiredSection.aValidatedSection">
+            <validations>org.apache.tamaya.model.validation.MaxItemValidator?max=3"</validations>
+            <description>A validation section.</description>
+        </section>
+    </section>
+</configuration>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/model/src/test/resources/examples/configmodel.yaml
----------------------------------------------------------------------
diff --git a/modules/model/src/test/resources/examples/configmodel.yaml b/modules/model/src/test/resources/examples/configmodel.yaml
new file mode 100644
index 0000000..a59246a
--- /dev/null
+++ b/modules/model/src/test/resources/examples/configmodel.yaml
@@ -0,0 +1,106 @@
+#
+# 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.
+#
+
+##################################################################################
+# Example of a configuration metamodel expressed via YAML(tm).
+#   Structure is shown through indentation (one or more spaces).
+#   Sequence items are denoted by a dash,
+#   key value pairs within a map are separated by a colon.
+####################################################################################
+
+####################################################################################
+# Metamodel information
+####################################################################################
+{model}: {
+  __name           :  'testmodel',
+  __provider       :  'ValidationProviderSpi Extension',
+  __version        :  '1.0',
+  __release-date   :  2001-01-23,
+  __author         :  'Anatole Tresch',
+  # model-format: 'alternate format reader type'
+  __description: >
+    Late afternoon is best.
+    Backup contact is Nancy.
+}
+
+####################################################################################
+# Description of Configuration Sections (minimal, can be extended by other modules).
+####################################################################################
+---
+{model}.a.params2: {
+  type          : 'String',
+  required      : true,
+  description   : 'a required parameter',
+  paramInt: 'Integer',                 'an optional parameter (default)',
+}
+---
+{model}.a.paramInt: {
+  type          : 'Integer',
+  description   : 'an optional parameter (default)',
+}
+---
+{model}.a.b.c: {
+  description:  'Just a test section.'
+}
+---
+{model}.a.b.c.aRequiredSection: {
+  required: true,
+  description: |
+             A section containing required parameters is called a required section.
+             Sections can also explicitly be defined to be required, but without
+             specifying the paramteres to be contained.,
+}
+---
+{model}.a.b.c.aRequiredSection.subsection: {
+  param0: {
+    type: 'String',
+    description: 'a minmally documented String parameter}'
+  },                 ,
+  param00:{
+    type: 'String'        # A minmally defined String parameter
+  },
+  param1: {
+    tpye: 'String',
+    required: true,
+    description: 'a required parameter'
+  },
+  intParam: {
+    type: 'Integer',
+    description: 'an optional parameter (default)'
+  }
+}
+...
+
+---
+{model}.a.b.c.aRequiredSection.nonempty-subsection: {
+  required: true
+}
+...
+
+---
+{model}.a.b.c.aRequiredSection.optional-subsection: {}
+...
+
+---
+{model}.a.b.c.aRequiredSection.aValidatedSection: {
+  description: 'A validation section.',
+  validations: 'org.apache.tamaya.model.validation.MaxItemValidator?max=3'
+}
+
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/modules/pom.xml
----------------------------------------------------------------------
diff --git a/modules/pom.xml b/modules/pom.xml
index 8dc401d..638fc88 100644
--- a/modules/pom.xml
+++ b/modules/pom.xml
@@ -40,6 +40,9 @@ under the License.
         <module>json</module>
         <module>resolver</module>
         <module>resources</module>
+        <module>functions</module>
+        <module>model</module>
+        <module>management</module>
     </modules>
 
     <build>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/functions/pom.xml b/sandbox/functions/pom.xml
deleted file mode 100644
index 06dd0ed..0000000
--- a/sandbox/functions/pom.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<!-- 
-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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-sandbox</artifactId>
-        <version>0.1-incubating-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-    <artifactId>tamaya-functions</artifactId>
-    <name>Apache Tamaya Common Functional Extensions</name>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!-- Test scope only, do not create a code dependency! -->
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-    </dependencies>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
deleted file mode 100644
index 9a588fc..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * 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.functions;
-
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.function.BiPredicate;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-/**
- * Accessor that provides useful functions along with configuration.
- */
-public final class ConfigurationFunctions {
-    /**
-     * Private singleton constructor.
-     */
-    private ConfigurationFunctions() {
-    }
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration containing only keys
-     * that are contained in the given area (non recursive). Hereby
-     * the area key is stripped away fromMap the resulting key.
-     *
-     * @param filter the filter, not null
-     * @return the area configuration, with the areaKey stripped away.
-     */
-    public static ConfigOperator filter(BiPredicate<String, String> filter) {
-        return cfg -> new FilteredConfiguration(cfg, filter, null);
-    }
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration with keys mapped as
-     * defined by the given keyMapper.
-     *
-     * @param keyMapper the keyMapper, not null
-     * @return the area configuration, with the areaKey stripped away.
-     */
-    public static ConfigOperator map(Function<String, String> keyMapper) {
-        return cfg -> new MappedConfiguration(cfg, keyMapper, null);
-    }
-
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration containing only keys
-     * that are contained in the given area (non recursive). Hereby
-     * the area key is stripped away fromMap the resulting key.
-     *
-     * @param areaKey the area key, not null
-     * @return the area configuration, with the areaKey stripped away.
-     */
-    public static ConfigOperator area(String areaKey) {
-        return area(areaKey, true);
-    }
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration containing only keys
-     * that are contained in the given area (non recursive).
-     *
-     * @param areaKey   the area key, not null
-     * @param stripKeys if set to true, the area key is stripped away fromMap the resulting key.
-     * @return the area configuration, with the areaKey stripped away.
-     */
-    public static ConfigOperator area(String areaKey, boolean stripKeys) {
-        return config -> {
-            Configuration filtered = new FilteredConfiguration(config,
-                    (k,v) -> isKeyInArea(k, areaKey), "area: " + areaKey);
-            if(stripKeys){
-                return new MappedConfiguration(filtered, k -> k.substring(areaKey.length() + 1), "stripped");
-            }
-            return filtered;
-        };
-    }
-
-    /**
-     * Calculates the current area key and compares it with the given key.
-     *
-     * @param key     the fully qualified entry key, not null
-     * @param areaKey the area key, not null
-     * @return true, if the entry is exact in this area
-     */
-    public static boolean isKeyInArea(String key, String areaKey) {
-        int lastIndex = key.lastIndexOf('.');
-        String curAreaKey = lastIndex > 0 ? key.substring(0, lastIndex) : "";
-        return curAreaKey.equals(areaKey);
-    }
-
-    /**
-     * Calculates the current area key and compares it with the given area keys.
-     *
-     * @param key     the fully qualified entry key, not null
-     * @param areaKeys the area keys, not null
-     * @return true, if the entry is exact in this area
-     */
-    public static boolean isKeyInAreas(String key, String... areaKeys) {
-        for(String areaKey:areaKeys){
-            if(isKeyInArea(key, areaKey)){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return a query to evaluate the set with all fully qualifies area names. This method should return the areas as accurate as possible,
-     * but may not provide a complete set of areas that are finally accessible, especially when the underlying storage
-     * does not support key iteration.
-     *
-     * @return s set with all areas, never {@code null}.
-     */
-    public static ConfigQuery<Set<String>> areas() {
-        return config -> {
-            final Set<String> areas = new HashSet<>();
-            config.getProperties().keySet().forEach(s -> {
-                int index = s.lastIndexOf('.');
-                if (index > 0) {
-                    areas.add(s.substring(0, index));
-                } else {
-                    areas.add("<root>");
-                }
-            });
-            return areas;
-        };
-    }
-
-    /**
-     * Return a query to evaluate the set with all fully qualified area names, containing the transitive closure also including all
-     * subarea names, regardless if properties are accessible or not. This method should return the areas as accurate
-     * as possible, but may not provide a complete set of areas that are finally accessible, especially when the
-     * underlying storage does not support key iteration.
-     *
-     * @return s set with all transitive areas, never {@code null}.
-     */
-    public static ConfigQuery<Set<String>> transitiveAreas() {
-        return config -> {
-            final Set<String> transitiveAreas = new HashSet<>();
-            config.query(areas()).forEach(s -> {
-                int index = s.lastIndexOf('.');
-                if (index < 0) {
-                    transitiveAreas.add("<root>");
-                } else {
-                    while (index > 0) {
-                        s = s.substring(0, index);
-                        transitiveAreas.add(s);
-                        index = s.lastIndexOf('.');
-                    }
-                }
-            });
-            return transitiveAreas;
-        };
-    }
-
-    /**
-     * Return a query to evaluate the set with all fully qualified area names, containing only the
-     * areas that match the predicate and have properties attached. This method should return the areas as accurate as possible,
-     * but may not provide a complete set of areas that are finally accessible, especially when the underlying storage
-     * does not support key iteration.
-     *
-     * @param predicate A predicate to deternine, which areas should be returned, not {@code null}.
-     * @return s set with all areas, never {@code null}.
-     */
-    public static ConfigQuery<Set<String>> areas(final Predicate<String> predicate) {
-        return config ->
-            config.query(areas()).stream().filter(predicate).collect(Collectors.toCollection(TreeSet::new));
-    }
-
-    /**
-     * Return a query to evaluate the set with all fully qualified area names, containing the transitive closure also including all
-     * subarea names, regardless if properties are accessible or not. This method should return the areas as accurate as possible,
-     * but may not provide a complete set of areas that are finally accessible, especially when the underlying storage
-     * does not support key iteration.
-     *
-     * @param predicate A predicate to deternine, which areas should be returned, not {@code null}.
-     * @return s set with all transitive areas, never {@code null}.
-     */
-    public static ConfigQuery<Set<String>> transitiveAreas(Predicate<String> predicate) {
-        return config ->
-            config.query(transitiveAreas()).stream().filter(predicate).collect(Collectors.toCollection(TreeSet::new));
-    }
-
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration containing only keys
-     * that are contained in the given area (recursive). Hereby
-     * the area key is stripped away fromMap the resulting key.
-     *
-     * @param areaKeys the area keys, not null
-     * @return the area configuration, with the areaKey stripped away.
-     */
-    public static ConfigOperator areasRecursive(String... areaKeys) {
-        return areaRecursive(true, areaKeys);
-    }
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration containing only keys
-     * that are contained in the given area (recursive).
-     *
-     * @param areaKeys   the area keys, not null
-     * @param stripKeys if set to true, the area key is stripped away fromMap the resulting key.
-     * @return the area configuration, with the areaKey stripped away.
-     */
-    public static ConfigOperator areaRecursive(boolean stripKeys, String... areaKeys) {
-        return config -> {
-            Configuration filtered = new FilteredConfiguration(config,
-                    (k,v) -> isKeyInAreas(k, areaKeys), "areas: " + Arrays.toString(areaKeys));
-            if(stripKeys){
-                return new MappedConfiguration(filtered, PropertySourceFunctions::stripAreaKeys, "stripped");
-            }
-            return filtered;
-        };
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java
deleted file mode 100644
index 2f92331..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.functions;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.BiPredicate;
-import java.util.stream.Collectors;
-
-/**
- * Configuration that filters part of the entries defined by a filter predicate.
- */
-class FilteredConfiguration implements Configuration {
-
-    private final Configuration baseConfiguration;
-    private final BiPredicate<String, String> filter;
-    private String filterType;
-
-    FilteredConfiguration(Configuration baseConfiguration, BiPredicate<String, String> filter, String filterType) {
-        this.baseConfiguration = Objects.requireNonNull(baseConfiguration);
-        this.filter = Objects.requireNonNull(filter);
-        this.filterType = Optional.ofNullable(filterType).orElse(this.filter.toString());
-    }
-
-    @Override
-    public <T> T get(String key, TypeLiteral<T> type) {
-        String value = baseConfiguration.get(key);
-        if (filter.test(key, value)) {
-            return baseConfiguration.get(key, type);
-        }
-        return null;
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        return baseConfiguration.getProperties().entrySet().stream().filter(
-                en -> filter.test(en.getKey(), en.getValue())).collect(Collectors.toMap(
-                en -> en.getKey(), en -> en.getValue()
-        ));
-    }
-
-    @Override
-    public String toString() {
-        return "FilteredConfiguration{" +
-                "baseConfiguration=" + baseConfiguration +
-                ", filter=" + filter +
-                '}';
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java
deleted file mode 100644
index 38c29dd..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.functions;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.function.Predicate;
-
-class FilteredPropertySource implements PropertySource {
-
-    private PropertySource baseSource;
-    private Predicate<String> filter;
-
-    public FilteredPropertySource(PropertySource baseSource, Predicate<String> filter){
-        this.baseSource = Objects.requireNonNull(baseSource);
-        this.filter = Objects.requireNonNull(filter);
-    }
-
-    @Override
-    public int getOrdinal(){
-        return baseSource.getOrdinal();
-    }
-
-    @Override
-    public String getName() {
-        return baseSource.getName();
-    }
-
-    @Override
-    public Map<String,String> getProperties(){
-        final Map<String,String> result = new HashMap<>();
-        this.baseSource.getProperties().entrySet().forEach(e -> {
-            if(filter.test(e.getKey())){
-                result.put(e.getKey(), e.getValue());
-            }
-        });
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        return "FilteredPropertySource{" +
-                "baseSource=" + baseSource +
-                ", filter=" + filter +
-                '}';
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java
deleted file mode 100644
index df1f43c..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.functions;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.BiPredicate;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-/**
- * Configuration that filters part of the entries defined by a filter predicate.
- */
-class MappedConfiguration implements Configuration {
-
-    private final Configuration baseConfiguration;
-    private final Function<String, String> keyMapper;
-    private final String mapType;
-
-    MappedConfiguration(Configuration baseConfiguration, Function<String, String> keyMapper, String mapType) {
-        this.baseConfiguration = Objects.requireNonNull(baseConfiguration);
-        this.keyMapper = Objects.requireNonNull(keyMapper);
-        this.mapType = Optional.ofNullable(mapType).orElse(this.keyMapper.toString());
-    }
-
-    @Override
-    public <T> T get(String key, TypeLiteral<T> type) {
-        return baseConfiguration.get(this.keyMapper.apply(key), type);
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        return baseConfiguration.getProperties().entrySet().stream().collect(Collectors.toMap(
-                en -> keyMapper.apply(en.getKey()), en -> en.getValue()
-        ));
-    }
-
-    @Override
-    public String toString() {
-        return "FilteredConfiguration{" +
-                "baseConfiguration=" + baseConfiguration +
-                ", mapping=" + mapType +
-                '}';
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
deleted file mode 100644
index 8491fa6..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.functions;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.function.UnaryOperator;
-
-/**
- * PropertySource implementation that maps certain parts (defined by an {@code UnaryOperator<String>}) to alternate areas.
- */
-class MappedPropertySource implements PropertySource {
-
-	private static final long serialVersionUID = 8690637705511432083L;
-
-	/** The mapping operator. */
-    private UnaryOperator<String> keyMapper;
-    /** The base configuration. */
-    private PropertySource propertySource;
-
-    /**
-     * Creates a new instance.
-     * @param config the base configuration, not null
-     * @param keyMapper The mapping operator, not null
-     */
-    public MappedPropertySource(PropertySource config, UnaryOperator<String> keyMapper) {
-        this.propertySource = Objects.requireNonNull(config);
-        this.keyMapper = Objects.requireNonNull(keyMapper);
-    }
-
-    @Override
-    public int getOrdinal(){
-        return this.propertySource.getOrdinal();
-    }
-
-    @Override
-    public String getName(){
-        return this.propertySource.getName()+"[mapped]";
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        Map<String, String> result = new HashMap<>();
-        Map<String, String> map = this.propertySource.getProperties();
-        map.forEach((k,v) -> {
-            String targetKey = keyMapper.apply(k);
-            if(targetKey!=null){
-                result.put(targetKey, v);
-            }
-        });
-        return result;
-    }
-
-    @Override
-    public String get(String key){
-        return getProperties().get(key);
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/MetaEnrichedPropertySource.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/MetaEnrichedPropertySource.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/MetaEnrichedPropertySource.java
deleted file mode 100644
index 6ef32c3..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/MetaEnrichedPropertySource.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.functions;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * Configuration that filters part of the entries defined by a filter predicate.
- */
-class MetaEnrichedPropertySource implements PropertySource {
-
-    private final PropertySource basePropertySource;
-    private final Map<String, String> metaInfo;
-
-    MetaEnrichedPropertySource(PropertySource basePropertySource, Map<String, String> metaInfo) {
-        this.basePropertySource = Objects.requireNonNull(basePropertySource);
-        this.metaInfo = Objects.requireNonNull(metaInfo);
-    }
-
-    // [meta:origin]a.b.c
-    @Override
-    public String get(String key) {
-        if(key.startsWith("[meta:")){
-            key = key.substring(6);
-            int index = key.indexOf(']');
-            String metaKey = key.substring(0,index);
-            String entryKey = key.substring(index+1);
-            String value =  basePropertySource.get(entryKey);
-            if(value!=null) {
-                return metaInfo.get(metaKey);
-            }
-        }
-        return basePropertySource.get(key);
-    }
-
-    @Override
-    public String getName() {
-        return basePropertySource.getName();
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        Map<String, String> baseProperties = basePropertySource.getProperties();
-        Map<String, String> allProperties = new HashMap<>(baseProperties);
-        baseProperties.forEach((k,v) -> {
-            this.metaInfo.forEach(
-                (mk, mv) -> allProperties.put("[meta:"+mk+']'+k, mv));
-            });
-        return allProperties;
-    }
-
-    @Override
-    public String toString() {
-        return "MetaEnrichedPropertySource{" +
-                "basePropertySource=" + basePropertySource +
-                ", metaInfo=" + metaInfo +
-                '}';
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
deleted file mode 100644
index 52c306a..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * 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.functions;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-/**
- * Accessor that provides useful functions along with configuration.
- */
-public final class PropertySourceFunctions {
-    /**
-     * Private singleton constructor.
-     */
-    private PropertySourceFunctions() {
-    }
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration containing only keys
-     * that are contained in the given area (non recursive). Hereby
-     * the area key is stripped away fromMap the resulting key.
-     * <p>
-     * Metadata is added only for keys that are present on the original configuration.
-     * They are added in the following format:
-     * <pre>
-     *     Given are
-     *       1) a configuration with two entries: entry1, entry 2
-     *       2) metadata as metaKey1=metaValue1, metaKey2=metaValue2
-     *
-     * The final configuration will look like:
-     *
-     *     entry1=entry1Value;
-     *     entry2=entry2Value;
-     *     [meta:metaKey1]entry1=metaValue1
-     *     [meta:metaKey2]entry1=metaValue2
-     *     [meta:metaKey1]entry2=metaValue1
-     *     [meta:metaKey2]entry2=metaValue2
-     * </pre>
-     *
-     * This mechanism allows to add meta information such as origin, sensitivity, to all keys of a current
-     * PropertySource or Configuration. If done on multiple PropertySources that are combined the corresponding
-     * values are visible in synch with the values visible.
-     *
-     * @param propertySource the base propertySource, not null.
-     * @param metaData the metaData to be added, not null
-     * @return the metadata enriched configuration, not null.
-     */
-    public static PropertySource addMetaData(PropertySource propertySource, Map<String,String> metaData) {
-        return new MetaEnrichedPropertySource(propertySource, metaData);
-    }
-
-    /**
-     * Calculates the current area key and compares it with the given key.
-     *
-     * @param key     the fully qualified entry key, not null
-     * @param areaKey the area key, not null
-     * @return true, if the entry is exact in this area
-     */
-    public static boolean isKeyInArea(String key, String areaKey) {
-        int lastIndex = key.lastIndexOf('.');
-        String curAreaKey = lastIndex > 0 ? key.substring(0, lastIndex) : "";
-        return curAreaKey.equals(areaKey);
-    }
-
-    /**
-     * Calculates the current area key and compares it with the given area keys.
-     *
-     * @param key     the fully qualified entry key, not null
-     * @param areaKeys the area keys, not null
-     * @return true, if the entry is exact in this area
-     */
-    public static boolean isKeyInAreas(String key, String... areaKeys) {
-        for(String areaKey:areaKeys){
-            if(isKeyInArea(key, areaKey)){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return a query to evaluate the set with all fully qualifies area names. This method should return the areas as accurate as possible,
-     * but may not provide a complete set of areas that are finally accessible, especially when the underlying storage
-     * does not support key iteration.
-     *
-     * @return s set with all areas, never {@code null}.
-     */
-    public static Set<String> areas(Map<String,String> map) {
-            final Set<String> areas = new HashSet<>();
-            map.keySet().forEach(s -> {
-                int index = s.lastIndexOf('.');
-                if (index > 0) {
-                    areas.add(s.substring(0, index));
-                } else {
-                    areas.add("<root>");
-                }
-            });
-            return areas;
-    }
-
-    /**
-     * Return a query to evaluate the set with all fully qualified area names, containing the transitive closure also including all
-     * subarea names, regardless if properties are accessible or not. This method should return the areas as accurate
-     * as possible, but may not provide a complete set of areas that are finally accessible, especially when the
-     * underlying storage does not support key iteration.
-     *
-     * @return s set with all transitive areas, never {@code null}.
-     */
-    public static Set<String> transitiveAreas(Map<String,String> map) {
-            final Set<String> transitiveAreas = new HashSet<>();
-            areas(map).forEach(s -> {
-                int index = s.lastIndexOf('.');
-                if (index < 0) {
-                    transitiveAreas.add("<root>");
-                } else {
-                    while (index > 0) {
-                        s = s.substring(0, index);
-                        transitiveAreas.add(s);
-                        index = s.lastIndexOf('.');
-                    }
-                }
-            });
-            return transitiveAreas;
-    }
-
-    /**
-     * Return a query to evaluate the set with all fully qualified area names, containing only the
-     * areas that match the predicate and have properties attached. This method should return the areas as accurate as possible,
-     * but may not provide a complete set of areas that are finally accessible, especially when the underlying storage
-     * does not support key iteration.
-     *
-     * @param predicate A predicate to deternine, which areas should be returned, not {@code null}.
-     * @return s set with all areas, never {@code null}.
-     */
-    public static Set<String> areas(Map<String,String> map, final Predicate<String> predicate) {
-        return
-            areas(map).stream().filter(predicate).collect(Collectors.toCollection(TreeSet::new));
-    }
-
-    /**
-     * Return a query to evaluate the set with all fully qualified area names, containing the transitive closure also including all
-     * subarea names, regardless if properties are accessible or not. This method should return the areas as accurate as possible,
-     * but may not provide a complete set of areas that are finally accessible, especially when the underlying storage
-     * does not support key iteration.
-     *
-     * @param predicate A predicate to deternine, which areas should be returned, not {@code null}.
-     * @return s set with all transitive areas, never {@code null}.
-     */
-    public static Set<String> transitiveAreas(Map<String,String> map, Predicate<String> predicate) {
-        return
-            transitiveAreas(map).stream().filter(predicate).collect(Collectors.toCollection(TreeSet::new));
-    }
-
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration containing only keys
-     * that are contained in the given area (recursive). Hereby
-     * the area key is stripped away fromMap the resulting key.
-     *
-     * @param areaKeys the area keys, not null
-     * @return the area configuration, with the areaKey stripped away.
-     */
-    public static Map<String,String> areasRecursive(Map<String,String> map, String... areaKeys) {
-        return areaRecursive(map, true, areaKeys);
-    }
-
-    /**
-     * Creates a ConfigOperator that creates a Configuration containing only keys
-     * that are contained in the given area (recursive).
-     *
-     * @param areaKeys   the area keys, not null
-     * @param stripKeys if set to true, the area key is stripped away fromMap the resulting key.
-     * @return the area configuration, with the areaKey stripped away.
-     */
-    public static Map<String,String> areaRecursive(Map<String,String> map, boolean stripKeys, String... areaKeys) {
-        if(stripKeys) {
-            return map.entrySet().stream().filter(
-                    (e) -> isKeyInAreas(e.getKey(), areaKeys))
-                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
-        }
-        else {
-            return map.entrySet().stream().filter(
-                    (e) -> isKeyInAreas(e.getKey(), areaKeys))
-                    .collect(Collectors.toMap(en -> stripAreaKeys(en.getKey(), areaKeys), Map.Entry::getValue));
-        }
-    }
-
-    /**
-     * Strips the area key of the given absolute key, if it is one of the areaKeys passed.
-     * @param key the current key, not null.
-     * @param areaKeys the areaKeys, not null.
-     * @return the stripped key, or the original key (if no area was matching).
-     */
-    static String stripAreaKeys(String key, String... areaKeys) {
-        for(String areaKey:areaKeys) {
-            if(key.startsWith(areaKey+'.')) {
-                return key.substring(areaKey.length() + 1);
-            }
-        }
-        return key;
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/ValueFilteredPropertySource.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/ValueFilteredPropertySource.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/ValueFilteredPropertySource.java
deleted file mode 100644
index 3180b0c..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/ValueFilteredPropertySource.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.functions;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.function.BiFunction;
-
-/**
- * Property source which filters any key/values dynamically.
- */
-class ValueFilteredPropertySource implements PropertySource{
-
-    private String name;
-    private BiFunction<String, String, String> valueFilter;
-    private PropertySource source;
-
-    public ValueFilteredPropertySource(String name, BiFunction<String, String, String> valueFilter, PropertySource current) {
-        this.name = Optional.ofNullable(name).orElse("<valueFiltered> -> name="+current.getName()+", valueFilter="+valueFilter.toString());
-    }
-
-    @Override
-    public int getOrdinal() {
-        return source.getOrdinal();
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public String get(String key) {
-        String value = this.source.get(key);
-        if(value!=null) {
-            return valueFilter.apply(key, value);
-        }
-        return null;
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        Map<String, String> map = new HashMap<>(source.getProperties());
-        map.replaceAll(valueFilter);
-        return map;
-    }
-
-    @Override
-    public String toString() {
-        return "ValueFilteredPropertySource{" +
-                "source=" + source.getName() +
-                ", name='" + name + '\'' +
-                ", valueFilter=" + valueFilter +
-                '}';
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/functions/src/main/java/org/apache/tamaya/functions/package-info.java
----------------------------------------------------------------------
diff --git a/sandbox/functions/src/main/java/org/apache/tamaya/functions/package-info.java b/sandbox/functions/src/main/java/org/apache/tamaya/functions/package-info.java
deleted file mode 100644
index fa908e9..0000000
--- a/sandbox/functions/src/main/java/org/apache/tamaya/functions/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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.
- */
-/**
- * Contains additional useful operators and queries.
- */
-package org.apache.tamaya.resource.internal;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/management/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/management/pom.xml b/sandbox/management/pom.xml
deleted file mode 100644
index 07812e1..0000000
--- a/sandbox/management/pom.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!-- 
-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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-sandbox</artifactId>
-        <version>0.1-incubating-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-
-    <artifactId>tamaya-management</artifactId>
-    <name>Apache Tamaya Modules - Java Management Extensions</name>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/c5343410/sandbox/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java
----------------------------------------------------------------------
diff --git a/sandbox/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java b/sandbox/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java
deleted file mode 100644
index db013ac..0000000
--- a/sandbox/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.management;
-
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Created by Anatole on 24.11.2014.
- */
-public class ManagedConfig implements ManagedConfigMBean{
-    @Override
-    public String getConfigurationInfo() {
-        return null;
-    }
-
-    @Override
-    public Map<String, String> getConfiguration() {
-        return ConfigurationProvider.getConfiguration().getProperties();
-    }
-
-    @Override
-    public Map<String, String> getConfigurationArea(String area, boolean recursive) {
-        return ConfigurationProvider.getConfiguration().with(ConfiguationFunctions.getArea(area, recursive);
-    }
-
-    @Override
-    public Set<String> getAreas() {
-        return ConfigurationProvider.getConfiguration().with(ConfiguationFunctions.getAreas();
-    }
-
-    @Override
-    public Set<String> getTransitiveAreas() {
-        return ConfigurationProvider.getConfiguration().with(ConfiguationFunctions.getTransitiveAreas();
-    }
-
-    @Override
-    public boolean isAreaExisting(String area) {
-        return false;
-    }
-}
-