You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2016/11/13 22:28:12 UTC

[6/6] incubator-tamaya-sandbox git commit: TAMAYA-145: Further progress and preparation work. Factored out unrelated concerns into separate modules.

TAMAYA-145: Further progress and preparation work. Factored out unrelated concerns into separate modules.


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

Branch: refs/heads/master
Commit: 9f71f2d80c46547febb7a0224f1068eb5ed0c060
Parents: 791632b
Author: anatole <an...@apache.org>
Authored: Sun Nov 13 23:22:28 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Sun Nov 13 23:22:28 2016 +0100

----------------------------------------------------------------------
 metamodel/pom.xml                               |  42 +-
 .../metamodel/ConfigurationContextBuilder.java  | 354 --------------
 .../org/apache/tamaya/metamodel/Context.java    |  91 +++-
 .../tamaya/metamodel/dsl/DSLFormatManager.java  | 230 ++++-----
 .../tamaya/metamodel/dsl/MetaConfiguration.java | 264 +++++------
 .../tamaya/metamodel/dsl/ProfileManager.java    | 426 ++++++++---------
 .../metamodel/dsl/TamayaConfigurator.java       | 468 +++++++++----------
 .../metamodel/dsl/WrappedPropertySource.java    |  31 +-
 .../metamodel/internal/FactoryManager.java      |   4 +-
 .../spi/BaseStagedPropertySourceProvider.java   | 121 -----
 .../spi/DSLPropertySourceProvider.java          |  51 --
 .../metamodel/spi/MetaConfigurationReader.java  |  41 ++
 .../metamodel/spi/PropertySourceFactory.java    |   5 +-
 .../spi/PropertySourceProviderFactory.java      |   5 +-
 .../spi/StagedConfigPropertiesProvider.java     | 137 ------
 metamodel/src/test/resources/tamaya-TEST.yaml   |  27 --
 metamodel/src/test/resources/tamaya-config.json |  39 --
 metamodel/src/test/resources/tamaya-config.xml  |  63 ++-
 metamodel/src/test/resources/tamaya-config.yaml |  87 ----
 19 files changed, 885 insertions(+), 1601 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9f71f2d8/metamodel/pom.xml
----------------------------------------------------------------------
diff --git a/metamodel/pom.xml b/metamodel/pom.xml
index f7f9dd8..11301dd 100644
--- a/metamodel/pom.xml
+++ b/metamodel/pom.xml
@@ -71,24 +71,24 @@
             <artifactId>tamaya-formats</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-json</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.johnzon</groupId>
-            <artifactId>johnzon-core</artifactId>
-            <version>0.9-incubating</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-json_1.0_spec</artifactId>
-            <version>1.0-alpha-1</version>
-            <scope>compile</scope>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.apache.tamaya.ext</groupId>-->
+            <!--<artifactId>tamaya-json</artifactId>-->
+            <!--<version>${project.version}</version>-->
+            <!--<scope>provided</scope>-->
+            <!--<optional>true</optional>-->
+        <!--</dependency>-->
+        <!--<dependency>-->
+            <!--<groupId>org.apache.johnzon</groupId>-->
+            <!--<artifactId>johnzon-core</artifactId>-->
+            <!--<version>0.9-incubating</version>-->
+        <!--</dependency>-->
+        <!--<dependency>-->
+            <!--<groupId>org.apache.geronimo.specs</groupId>-->
+            <!--<artifactId>geronimo-json_1.0_spec</artifactId>-->
+            <!--<version>1.0-alpha-1</version>-->
+            <!--<scope>compile</scope>-->
+        <!--</dependency>-->
         <dependency>
             <groupId>org.hamcrest</groupId>
             <artifactId>java-hamcrest</artifactId>
@@ -108,11 +108,11 @@
                 <configuration>
                     <instructions>
                         <Export-Package>
-                            org.apache.tamaya.model,
-                            org.apache.tamaya.model.spi
+                            org.apache.tamaya.metamodel,
+                            org.apache.tamaya.metamodel.spi
                         </Export-Package>
                         <Private-Package>
-                            org.apache.tamaya.model.internal
+                            org.apache.tamaya.metamodel.internal
                         </Private-Package>
                     </instructions>
                 </configuration>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9f71f2d8/metamodel/src/main/java/org/apache/tamaya/metamodel/ConfigurationContextBuilder.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/ConfigurationContextBuilder.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/ConfigurationContextBuilder.java
deleted file mode 100644
index a84ab96..0000000
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/ConfigurationContextBuilder.java
+++ /dev/null
@@ -1,354 +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.metamodel;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.PropertyConverter;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Builder to create or change a {@link Configuration}. This build allows to programmatically
- * assemble any kind of configuration based on {@link PropertySource}s. It also provides
- * methods to change the overall ordering and add the source processors that are configured as
- * ServiceLoader services, either directly, or indirectly using the {@link org.apache.tamaya.spi.PropertySourceProvider}
- * SPI.
- *
- * Additionally this builder also implements the SPI that provides the default configuration
- * as returned by {@link org.apache.tamaya.ConfigurationProvider#getConfiguration()}, since by definition the
- * default configuration equals to the configuration that is created by calling
- * <pre>
- *     ConfigurationContextBuilderFactory factory = ...;
- *     Configuration config = factory.createBuilder().loadDefaults().build();
- * </pre>
- */
-public interface ConfigurationContextBuilder {
-
-    /**
-     * Adds one or more property filter instances to the configuration to be build.
-     *
-     * <pre>{@code PropertyFilter quoteReplacingFilter = new QuoteFilter();
-     * PropertyFilter commaRemovingFilter = new CommaFilter();
-     *
-     * builder.addPropertyFilters(commaRemovingFilter, quoteReplacingFilter)};
-     * </pre>
-     *
-     * @param filters list of property filter instances which should be applied
-     *                to the properties of the configuration to be build.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertyFilter
-     * @see #getDefaultPropertyFilters()
-     */
-    ConfigurationContextBuilder addPropertyFilters(PropertyFilter... filters);
-
-    /**
-     * Adds one or more property filter instances to the configuration to be build.
-     *
-     * <pre>{@code PropertyFilter quoteReplacingFilter = new QuoteFilter();
-     * PropertyFilter commaRemovingFilter = new CommaFilter();
-     *
-     * builder.addPropertyFilters(commaRemovingFilter, quoteReplacingFilter)};
-     * </pre>
-     *
-     * @param filters list of property filter instances which should be applied
-     *                to the properties of the configuration to be build.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertyFilter
-     * @see #getDefaultPropertyFilters()
-     */
-    ConfigurationContextBuilder addPropertyFilters(Collection<PropertyFilter> filters);
-
-    /**
-     * @param propertyValueCombinationPolicy combination policy to use for this builder.
-     * @return the builder instance currently in use.
-     */
-    ConfigurationContextBuilder setPropertyValueCombinationPolicy(
-            PropertyValueCombinationPolicy propertyValueCombinationPolicy);
-
-    /**
-     * Adds a property converter for the a given type to the configuration to
-     * be build.
-     *
-     * <pre>{@code PropertyConverter<MyType> converter = value -> new MyType(value, 42);
-     *
-     * builder.addPropertyConverters(MyType.class, converter}
-     * </pre>
-     *
-     * @param <T> the type of the configuration
-     * @param type the required target type the converter should be applied to
-     * @param converter the converter to be used to convert the string property
-     *                  to the given target type, not null.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertyConverter
-     * @see #getDefaultPropertyConverters()
-     */
-    <T> ConfigurationContextBuilder addPropertyConverter(Class<T> type, PropertyConverter<T>... converter);
-
-    /**
-     * Adds a property converter for the a given type to the configuration to
-     * be build.
-     *
-     * <pre>{@code PropertyConverter<MyType> converter = value -> new MyType(value, 42);
-     *
-     * builder.addPropertyConverters(MyType.class, converter}
-     * </pre>
-     *
-     * @param <T> the type of the configuration
-     * @param type the required target type the converter should be applied to
-     * @param converter the converter to be used to convert the string property
-     *                  to the given target type, not null.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertyConverter
-     * @see #getDefaultPropertyConverters()
-     */
-    <T> ConfigurationContextBuilder addPropertyConverter(Class<T> type, Collection<PropertyConverter<T>> converter);
-
-    /**
-     * Adds a propertyConverter of a given type.
-     *
-     * @param <T> the type of the configuration
-     * @param type type literal of this converter.
-     * @param propertyConverter property converter, not null.
-     * @return the builder instance currently used
-     */
-    <T> ConfigurationContextBuilder addPropertyConverter(TypeLiteral<T> type, PropertyConverter<T>... propertyConverter);
-
-    /**
-     * Adds a propertyConverter of a given type.
-     *
-     * @param <T> the type of the configuration
-     * @param type type literal of this converter.
-     * @param propertyConverter property converter, not null.
-     * @return the builder instance currently used
-     */
-    <T> ConfigurationContextBuilder addPropertyConverter(TypeLiteral<T> type, Collection<PropertyConverter<T>> propertyConverter);
-
-    /**
-     * Loads the {@link org.apache.tamaya.spi.PropertyConverter}s provided
-     * via the SPI API returns them for adding all or parts of it using the
-     * builder's add methods.
-     *
-     * @return the collection of default instances, not yet registered
-     * within this builder.
-     *
-     * @see #addPropertyConverter(TypeLiteral, PropertyConverter...)
-     * @see #addPropertyConverter(TypeLiteral, Collection)
-     * @see org.apache.tamaya.spi.PropertyConverter
-     */
-    Map<TypeLiteral<?>, Collection<PropertyConverter<?>>> getDefaultPropertyConverters();
-
-
-    /**
-     * Loads the {@link org.apache.tamaya.spi.PropertySource}s provided
-     * via the SPI API, but does not yet register them into this builder.
-     *
-     * @return the builder instance currently used
-     *
-     * @see #addPropertySources(Collection)
-     * @see #addPropertySources(PropertySource...)
-     * @see org.apache.tamaya.spi.PropertySource
-     */
-    Collection<PropertySource> getDefaultPropertySources();
-
-
-    /**
-     * Loads the {@link org.apache.tamaya.spi.PropertyFilter}s provided via the SPI API,
-     * but does not register them into this instance.
-     *
-     * @return the builder instance currently used
-     *
-     * @see #addPropertyFilters(Collection<PropertyFilter>)
-     * @see org.apache.tamaya.spi.PropertyFilter
-     */
-    Collection<PropertyFilter> getDefaultPropertyFilters();
-
-
-    /**
-     * Loads the {@link org.apache.tamaya.spi.PropertySourceProvider
-     * property source providers} provided via the SPI API and
-     * returns them. No property sources are registered.
-     *
-     * @return the builder instance currently used
-     *
-     * @see #addPropertySources(Collection)
-     * @see org.apache.tamaya.spi.PropertySourceProvider
-     */
-    Collection<PropertySourceProvider> getDefaultPropertySourceProviders();
-
-    /**
-     * This method loads the default configuration, which involves the following
-     * steps:
-     * <ol>
-     *     <li>Loading {@link PropertySource} instances registered with the
-     *     {@link java.util.ServiceLoader}.</li>
-     *     <li>Loading {@link org.apache.tamaya.spi.PropertySourceProvider} instances registered with the
-     *     {@link java.util.ServiceLoader}, extracting the provided processors and add them
-     *     to the list of loaded processors</li>
-     *     <li>Sorting the processors collecting based on {@link PropertySource#getOrdinal()} and the
-     *     fully qualified class name as an additional fallback criteria, when the ordinal
-     *     is the same.</li>
-     *     <li>Putting together a {@link Configuration} instance incorporating this
-     *     chain of processors. Hereby when {@link Configuration#get(String)} is called
-     *     the first processor in the chain is asked for a value. If the processor returns {@code null}
-     *     the processChain is repeated until the end of the chain is reached, or a processor returns
-     *     non non-null value. Hereby each processor can actively decide how and if its parent processors
-     *     will be included for subsequent value evaluation for a given key. In other words a processor
-     *     can either simply provide configuration properties (values) or implement a more active functionality
-     *     such as filtering or value collection.</li>
-     * </ol>
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder loadDefaults();
-
-    /**
-     * Get the current number of processors on the chain.
-     * @return the number of registered processors of this instance.
-     */
-    int getChainSize();
-
-    /**
-     * Increses the priority of the given processor instance, meaning moving the processor one
-     * position ahead in the overall processor chain. This will be done regardless of any
-     * ordinal value. If the procerssor already has maximal significance (is on the head of
-     * processors), this method does not have any effect.
-     * @param processor the target procerssor, not null.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder increasePriority(PropertySource processor);
-
-    /**
-     * Decreses the priority of the given processor instance, meaning moving the processor one
-     * position back in the overall processor chain. This will be done regardless of any
-     * ordinal value. If the procerssor already has minimal significance (is the tail of
-     * processors), this method does not have any effect.
-     * @param processor the target procerssor, not null.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder decreasePriority(PropertySource processor);
-
-    /**
-     * Maximizes the priority of the given processor instance, moving it to the head of the
-     * processor chain. This will be done regardless of any
-     * ordinal value. If the procerssor already has minimal significance (is the tail of
-     * processors), this method does not have any effect.
-     * @param processor the target procerssor, not null.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder highestPriority(PropertySource processor);
-
-    /**
-     * Minimizes the priority of the given property source instance, moving it to the tail of the
-     * property source chain. This will be done regardless of any
-     * ordinal value. If the property source already has minimal significance (is the tail of
-     * processors), this method does not have any effect.
-     * @param propertySource the target property source, not null.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder lowestPriority(PropertySource propertySource);
-
-    /**
-     * Add the property sources to the property source chain using thei provided ordinals
-     * for ordering.
-     * @param propertySources the property sources to add, not null.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder addPropertySources(PropertySource... propertySources);
-
-    /**
-     * Add the property sources to the property source chain.
-     * @param propertySources the property sources to add, not null.
-     * @param index index where the new property sources should be inserted.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder addPropertySources(int index, PropertySource... propertySources);
-
-    /**
-     * Add the property sources to the property source chain using thei provided ordinals
-     * for ordering.
-     * @param propertySources the property sources to add, not null.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder addPropertySources(Collection<PropertySource> propertySources);
-
-    /**
-     * Add the property sources to the property source chain with highest priority (as new chain head).
-     * @param propertySources the property sources to add, not null.
-     * @param index index where the new property sources should be inserted.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder addPropertySources(int index, Collection<PropertySource> propertySources);
-
-    /**
-     * Removes the given property source from the property source chain.
-     * @param propertySource the property source. not null.
-     * @return the builder for further chaining of logic.
-     */
-    ConfigurationContextBuilder removePropertySource(PropertySource propertySource);
-
-    /**
-     * Access a processor using it's unique property source name. If no such property source
-     * is present, this method has no effect.
-     * @param name the property source name, not null.
-     * @return the builder for further chaining of logic.
-     */
-    PropertySource getPropertySource(String name);
-
-    /**
-     * Get access to the current chain of property sources. This returns an immutable list. Use the
-     * methods of this factory to change the ordering or adding/removing of property sources.
-     * @return the current chain of property sources (immutable list).
-     */
-    List<PropertySource> getPropertySourcesChain();
-
-    /**
-     * Get access to the current property sources with a given type. This returns an immutable list. Use the
-     * methods of this factory to change the ordering or adding/removing of property sources.
-     * @return the current chain of property sources (immutable list).
-     */
-    List<PropertySource> getPropertySources(Class<? extends PropertySource> type);
-
-    /**
-     * Get access to the current chain of property sources. This returns an immutable list. Use the
-     * methods of this factory to change the ordering or adding/removing of property sources.
-     * @return the current chain of property sources as names (immutable list).
-     */
-    List<String> getPropertySourcesNames();
-
-    /**
-     * Builds a new configuration based on the current property sources chain.
-     * @return a new configuration instance, never null.
-     */
-    Configuration build();
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9f71f2d8/metamodel/src/main/java/org/apache/tamaya/metamodel/Context.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/Context.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/Context.java
index ce6d99c..b4b65d2 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/Context.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/Context.java
@@ -30,38 +30,62 @@ import java.util.concurrent.ConcurrentHashMap;
  */
 public final class Context {
 
-    private static final Map<String,Context> CONTEXTS = new ConcurrentHashMap();
+    private static final ThreadLocal<Context> THREAD_CONTEXT = new ThreadLocal<Context>(){
+        @Override
+        protected Context initialValue() {
+            return new Context();
+        }
+    };
+
     private final Map<String,String> properties = new ConcurrentHashMap<>();
 
-    public static Context getInstance(){
-        return getInstance("");
+    /**
+     * Access the thread-based context. If no such context
+     * exists a new one will be created.
+     * @return the corresponding context, never null.
+     */
+    public static Context getThreadInstance(){
+        return THREAD_CONTEXT.get();
     }
 
     /**
-     * Access the context with a goven contextId, this allows to manage multiple
-     * contexts, e.g. for different EE application's deployed. If no such context
-     * exists a new one will be created.
-     * @param contextId the contextId, not null.
+     * Access the current context, which actually is the current context, combined with the thread based
+     * context (overriding).
      * @return the corresponding context, never null.
      */
-    public static Context getInstance(String contextId){
-        Context context = CONTEXTS.get(contextId);
-        if(context==null){
-            synchronized (Context.class){
-                context = CONTEXTS.get(contextId);
-                if(context==null){
-                    context = new Context();
-                    CONTEXTS.put(contextId, context);
-                }
-            }
+    public Context getCurrentInstance(){
+        return this.combineWith(THREAD_CONTEXT.get());
+    }
+
+    /**
+     * Combine this context with the other contexts given.
+     * @param contexts the context to merge with this context.
+     * @return the newly created Context.
+     */
+    public Context combineWith(Context... contexts) {
+        Context newContext = new Context();
+        newContext.properties.putAll(getProperties());
+        for(Context ctx:contexts) {
+            newContext.properties.putAll(ctx.getProperties());
         }
-        return context;
+        return newContext;
     }
 
+    /**
+     * Access the given context property.
+     * @param key the key, not null
+     * @return the value, or null.
+     */
     public String getProperty(String key){
         return getProperty(key, null);
     }
 
+    /**
+     * Access the given context property.
+     * @param key the key, not the default value.
+     * @param defaultValue the default value to be returned, if no value is defined.
+     * @return the value, default value or null.
+     */
     public String getProperty(String key, String defaultValue){
         String value = this.properties.get(key);
         if(value==null){
@@ -70,10 +94,21 @@ public final class Context {
         return value;
     }
 
+    /**
+     * Sets the given context property.
+     * @param key the key, not null.
+     * @param value the value, not null.
+     * @return the porevious value, or null.
+     */
     public String setProperty(String key, String value){
        return this.properties.put(key,value);
     }
 
+    /**
+     * Sets the given property unless there is already a value defined.
+     * @param key the key, not null.
+     * @param value the value, not null.
+     */
     public void setPropertyIfAbsent(String key, String value){
         String prev = this.properties.get(key);
         if(prev==null){
@@ -81,10 +116,19 @@ public final class Context {
         }
     }
 
+    /**
+     * Adds all properties given, overriding any existing properties.
+     * @param properties the properties, not null.
+     */
     public void setProperties(Map<String,String> properties){
         this.properties.putAll(properties);
     }
 
+    /**
+     * Checks if all the given properties are present.
+     * @param keys the keys to check, not null.
+     * @return true, if all the given keys are existing.
+     */
     public boolean checkProperties(String... keys){
         for(String key:keys) {
             if (getProperty(key, null) == null) {
@@ -94,13 +138,10 @@ public final class Context {
         return true;
     }
 
-    public boolean checkProperty(String key, String value){
-        if(value!=null){
-            return value.equals(getProperty(key, null));
-        }
-        return !checkProperties(key);
-    }
-
+    /**
+     * Access all the current context properties.
+     * @return the properties, never null.
+     */
     public Map<String,String> getProperties(){
         return Collections.unmodifiableMap(this.properties);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9f71f2d8/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/DSLFormatManager.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/DSLFormatManager.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/DSLFormatManager.java
index b7c0074..2d84c48 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/DSLFormatManager.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/DSLFormatManager.java
@@ -1,115 +1,115 @@
-/*
- * 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.metamodel.dsl;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.format.ConfigurationFormat;
-import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.functions.ConfigurationFunctions;
-
-import java.util.*;
-
-/**
- * Component that manages the current supported formats:
- * <pre>
- * TAMAYA:
- *   FORMAT-DEF:
- *     - formats: yaml, properties, xml-properties
- * </pre>
- * Hereby:
- * <ul>
- *     <li><b>profiles</b> defines the available profiles, including implicit default profiles.</li>
- * </ul>
- */
-public final class DSLFormatManager {
-
-    private static final DSLFormatManager INSTANCE = new DSLFormatManager();
-
-    /** The currently active formats, in order of precedence, the most significant are the last ones. */
-    private List<ConfigurationFormat> formats = new ArrayList<>();
-    /** The currently active suffixes, in order of precedence, the most significant are the last ones. */
-    private List<String> suffixes = new ArrayList<>();
-
-
-    /**
-     * Get the current instance.
-     * @return the current profile manager, never null.
-     */
-    public static DSLFormatManager getInstance(){
-        return INSTANCE;
-    }
-
-    private DSLFormatManager(){
-        Configuration metaConfig = MetaConfiguration.getConfiguration();
-        Configuration formatsConfig = metaConfig.with(
-                ConfigurationFunctions.section("TAMAYA.FORMATS"));
-        String[] formats = formatsConfig.getOrDefault("formats","yamk,properties,ini").split(",");
-        this.formats.addAll(ConfigurationFormats.getFormats(formats));
-        String[] suffixes = formatsConfig.getOrDefault("suffixes","yml,properties,ini").split(",");
-        for(String sfx:suffixes){
-            sfx = sfx.trim();
-            if(sfx.isEmpty()){
-                continue;
-            }
-            this.suffixes.add(sfx);
-        }
-    }
-
-
-    /**
-     * Allows to check if a suffix is currently activated.
-     * @param suffix the suffix name, not null.
-     * @return true, if the profile is defined.
-     */
-    public boolean isSuffixDefined(String suffix){
-        return this.suffixes.contains(suffix);
-    }
-
-    /**
-     * Allows to check if a format is selected.
-     * @param formatName the format name, not null.
-     * @return true, if the format is a selected.
-     */
-    public boolean isFormatSelected(String formatName){
-        for(ConfigurationFormat format:formats){
-            if(format.getName().equals(formatName)){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Get the list of currently active suffixes.
-     * @return the list of currently active suffixes, never null.
-     */
-    public List<String> getSuffixes(){
-        return Collections.unmodifiableList(suffixes);
-    }
-
-    /**
-     * Get the list of currently active formats.
-     * @return the list of currently active formats, never null.
-     */
-    public List<ConfigurationFormat> getFormats(){
-        return Collections.unmodifiableList(formats);
-    }
-
-
-}
+///*
+// * 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.metamodel.dsl;
+//
+//import org.apache.tamaya.Configuration;
+//import org.apache.tamaya.format.ConfigurationFormat;
+//import org.apache.tamaya.format.ConfigurationFormats;
+//import org.apache.tamaya.functions.ConfigurationFunctions;
+//
+//import java.util.*;
+//
+///**
+// * Component that manages the current supported formats:
+// * <pre>
+// * TAMAYA:
+// *   FORMAT-DEF:
+// *     - formats: yaml, properties, xml-properties
+// * </pre>
+// * Hereby:
+// * <ul>
+// *     <li><b>profiles</b> defines the available profiles, including implicit default profiles.</li>
+// * </ul>
+// */
+//public final class DSLFormatManager {
+//
+//    private static final DSLFormatManager INSTANCE = new DSLFormatManager();
+//
+//    /** The currently active formats, in order of precedence, the most significant are the last ones. */
+//    private List<ConfigurationFormat> formats = new ArrayList<>();
+//    /** The currently active suffixes, in order of precedence, the most significant are the last ones. */
+//    private List<String> suffixes = new ArrayList<>();
+//
+//
+//    /**
+//     * Get the current instance.
+//     * @return the current profile manager, never null.
+//     */
+//    public static DSLFormatManager getInstance(){
+//        return INSTANCE;
+//    }
+//
+//    private DSLFormatManager(){
+//        Configuration metaConfig = MetaConfiguration.getConfiguration();
+//        Configuration formatsConfig = metaConfig.with(
+//                ConfigurationFunctions.section("TAMAYA.FORMATS"));
+//        String[] formats = formatsConfig.getOrDefault("formats","yamk,properties,ini").split(",");
+//        this.formats.addAll(ConfigurationFormats.getFormats(formats));
+//        String[] suffixes = formatsConfig.getOrDefault("suffixes","yml,properties,ini").split(",");
+//        for(String sfx:suffixes){
+//            sfx = sfx.trim();
+//            if(sfx.isEmpty()){
+//                continue;
+//            }
+//            this.suffixes.add(sfx);
+//        }
+//    }
+//
+//
+//    /**
+//     * Allows to check if a suffix is currently activated.
+//     * @param suffix the suffix name, not null.
+//     * @return true, if the profile is defined.
+//     */
+//    public boolean isSuffixDefined(String suffix){
+//        return this.suffixes.contains(suffix);
+//    }
+//
+//    /**
+//     * Allows to check if a format is selected.
+//     * @param formatName the format name, not null.
+//     * @return true, if the format is a selected.
+//     */
+//    public boolean isFormatSelected(String formatName){
+//        for(ConfigurationFormat format:formats){
+//            if(format.getName().equals(formatName)){
+//                return true;
+//            }
+//        }
+//        return false;
+//    }
+//
+//    /**
+//     * Get the list of currently active suffixes.
+//     * @return the list of currently active suffixes, never null.
+//     */
+//    public List<String> getSuffixes(){
+//        return Collections.unmodifiableList(suffixes);
+//    }
+//
+//    /**
+//     * Get the list of currently active formats.
+//     * @return the list of currently active formats, never null.
+//     */
+//    public List<ConfigurationFormat> getFormats(){
+//        return Collections.unmodifiableList(formats);
+//    }
+//
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9f71f2d8/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/MetaConfiguration.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/MetaConfiguration.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/MetaConfiguration.java
index b3f7da0..2e88c6b 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/MetaConfiguration.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/MetaConfiguration.java
@@ -1,142 +1,122 @@
-/*
- * 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.metamodel.dsl;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.format.ConfigurationData;
-import org.apache.tamaya.format.ConfigurationFormat;
-import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.json.YAMLFormat;
-import org.apache.tamaya.resource.ConfigResources;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Meta environment configuration builder and accessor. Normally this class shoulds never be accessed
- * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
- * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
- * setup whatever features they implement.
- */
-public final class MetaConfiguration {
-
-    private static final Logger LOGGER = Logger.getLogger(MetaConfiguration.class.getName());
-    private static MetaConfiguration INSTANCE = new MetaConfiguration();
-
-    private Configuration config;
-    private String resourceExpression;
-    private String[] formatNames;
-
-    /**
-     * Initializes the metaconfiguration.
-     * @param resourceExpression the resource expression that defines the resources to load.
-     * @param formatNames the format names to be used.
-     */
-    private void init(String resourceExpression, String... formatNames){
-        if(this.config!=null){
-            LOGGER.warning(">>> Reset of Meta-Configuration resource : " + resourceExpression);
-            LOGGER.warning(">>> Reset of Meta-Configuration formats  : " + Arrays.toString(formatNames));
-        }
-        if(resourceExpression==null){
-            resourceExpression = "tamaya-config.*";
-        }
-        LOGGER.info(">>> Meta-Configuration resource : " + resourceExpression);
-        ConfigurationFormat[] formats = loadFormats(formatNames);
-        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
-        for(URL url:ConfigResources.getResourceResolver().getResources(resourceExpression)) {
-            for(ConfigurationFormat format:formats) {
-                if(format.accepts(url)){
-                    try(InputStream is = url.openStream()){
-                        ConfigurationData data = format.readConfiguration(url.toString(), is);
-                        builder.addPropertySources(PropertySourceBuilder(
-                                url.toString(), data.getCombinedProperties()));
-                    }catch(Exception e){
-                        LOGGER.log(Level.INFO, "Failed to read " + url + " with format " + format, e);
-                    }
-                }
-            }
-        }
-        this.config = ConfigurationProvider.createConfiguration(builder.build());
-        LOGGER.info("Meta-Configuration read: " + this.config.getProperties().size() + " entries.");
-    }
-
-    private ConfigurationFormat[] loadFormats(String... formatNames) {
-        List<ConfigurationFormat> formats = new ArrayList<>();
-        if(formatNames.length==0) {
-            String metaFormats = System.getProperty("tamaya.meta-formats");
-            if (metaFormats != null) {
-                formatNames = metaFormats.split(",");
-            }
-        }
-        for (String formatName : formatNames) {
-            formats.addAll(ConfigurationFormats.getFormats(formatName));
-        }
-        if(formats.isEmpty()){
-            formats.addAll(ConfigurationFormats.getFormats("yaml"));
-        }
-        if(formats.isEmpty()){
-            formats.add(new YAMLFormat());
-        }
-        LOGGER.info(">>> Meta-Configuration formats  : " + formats);
-        return formats.toArray(new ConfigurationFormat[formats.size()]);
-    }
-
-    /**
-     * Access the system's meta-configuration, initialize if necessary. Normally this class shoulds never be accessed
-     * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
-     * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
-     * setup whatever features they implement.
-     * @return the meta-configuration instance used for setting up the Tamaya's application configuration
-     * model.
-     */
-    public static Configuration getConfiguration(){
-        if(INSTANCE.config==null) {
-            INSTANCE.init(null);
-        }
-        return INSTANCE.config;
-    }
-
-    /**
-     * Access the system's meta-configuration, initialize if necessary. Normally this class shoulds never be accessed
-     * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
-     * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
-     * setup whatever features they implement.
-     *
-     * @param resourceExpression the resource expression that defines where the metaconfiguration
-     *                           files/resources are located.
-     * @param formatNames        the formats supported, if null all formats found are tried for each resource(=URL).
-     * @return the meta-configuration instance used for setting up the Tamaya's application configuration
-     * model.
-     */
-    public static Configuration getConfiguration(String resourceExpression,
-                                                 String... formatNames){
-        if(INSTANCE.config==null) {
-            INSTANCE.init(resourceExpression, formatNames);
-        }
-        return INSTANCE.config;
-    }
-
-}
+///*
+// * 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.metamodel.dsl;
+//
+//import org.apache.tamaya.Configuration;
+//import org.apache.tamaya.ConfigurationProvider;
+//import org.apache.tamaya.format.ConfigurationData;
+//import org.apache.tamaya.format.ConfigurationFormat;
+//import org.apache.tamaya.format.ConfigurationFormats;
+//import org.apache.tamaya.json.YAMLFormat;
+//import org.apache.tamaya.resource.ConfigResources;
+//import org.apache.tamaya.spi.ConfigurationContextBuilder;
+//
+//import java.io.InputStream;
+//import java.net.URL;
+//import java.util.ArrayList;
+//import java.util.Arrays;
+//import java.util.List;
+//import java.util.logging.Level;
+//import java.util.logging.Logger;
+//
+///**
+// * Meta environment configuration builder and accessor. Normally this class shoulds never be accessed
+// * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
+// * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
+// * setup whatever features they implement.
+// */
+//public final class MetaConfiguration {
+//
+//    private static final Logger LOGGER = Logger.getLogger(MetaConfiguration.class.getName());
+//    private static MetaConfiguration INSTANCE = new MetaConfiguration();
+//
+//    private Configuration config;
+//    private String resourceExpression;
+//    private String[] formatNames;
+//
+//    /**
+//     * Initializes the metaconfiguration.
+//     * @param resourceExpression the resource expression that defines the resources to load.
+//     * @param formatNames the format names to be used.
+//     */
+//    private void init(String resourceExpression, String... formatNames){
+//        if(this.config!=null){
+//            LOGGER.warning(">>> Reset of Meta-Configuration resource : " + resourceExpression);
+//            LOGGER.warning(">>> Reset of Meta-Configuration formats  : " + Arrays.toString(formatNames));
+//        }
+//        if(resourceExpression==null){
+//            resourceExpression = "tamaya-config.*";
+//        }
+//        LOGGER.info(">>> Meta-Configuration resource : " + resourceExpression);
+//        ConfigurationFormat[] formats = loadFormats(formatNames);
+//        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
+//        for(URL url:ConfigResources.getResourceResolver().getResources(resourceExpression)) {
+//            for(ConfigurationFormat format:formats) {
+//                if(format.accepts(url)){
+//                    try(InputStream is = url.openStream()){
+//                        ConfigurationData data = format.readConfiguration(url.toString(), is);
+//                        builder.addPropertySources(PropertySourceBuilder(
+//                                url.toString(), data.getCombinedProperties()));
+//                    }catch(Exception e){
+//                        LOGGER.log(Level.INFO, "Failed to read " + url + " with format " + format, e);
+//                    }
+//                }
+//            }
+//        }
+//        this.config = ConfigurationProvider.createConfiguration(builder.build());
+//        LOGGER.info("Meta-Configuration read: " + this.config.getProperties().size() + " entries.");
+//    }
+//
+//
+//    /**
+//     * Access the system's meta-configuration, initialize if necessary. Normally this class shoulds never be accessed
+//     * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
+//     * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
+//     * setup whatever features they implement.
+//     * @return the meta-configuration instance used for setting up the Tamaya's application configuration
+//     * model.
+//     */
+//    public static Configuration getConfiguration(){
+//        if(INSTANCE.config==null) {
+//            INSTANCE.init(null);
+//        }
+//        return INSTANCE.config;
+//    }
+//
+//    /**
+//     * Access the system's meta-configuration, initialize if necessary. Normally this class shoulds never be accessed
+//     * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
+//     * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
+//     * setup whatever features they implement.
+//     *
+//     * @param resourceExpression the resource expression that defines where the metaconfiguration
+//     *                           files/resources are located.
+//     * @param formatNames        the formats supported, if null all formats found are tried for each resource(=URL).
+//     * @return the meta-configuration instance used for setting up the Tamaya's application configuration
+//     * model.
+//     */
+//    public static Configuration getConfiguration(String resourceExpression,
+//                                                 String... formatNames){
+//        if(INSTANCE.config==null) {
+//            INSTANCE.init(resourceExpression, formatNames);
+//        }
+//        return INSTANCE.config;
+//    }
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9f71f2d8/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/ProfileManager.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/ProfileManager.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/ProfileManager.java
index 6e95ffe..0d19d9c 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/ProfileManager.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/ProfileManager.java
@@ -1,213 +1,213 @@
-/*
- * 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.metamodel.dsl;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.functions.ConfigurationFunctions;
-import org.apache.tamaya.resolver.Resolver;
-import org.apache.tamaya.resolver.spi.ExpressionResolver;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Component that manages the current setup profiles for this environment/runtime. The profile manager
- * reads the profile meta configuration that looks as follows:
- * <pre>
- * TAMAYA:
- *   PROFILES-DEF:
- *     - profiles:          DEFAULTS,DEV,TEST,PTA,PROD
- *     - defaults:          DEFAULTS
- *     - default-active:    DEV
- *     - evaluation:        ${sys:ENV}, ${env:ENV}
- * </pre>
- * Hereby:
- * <ul>
- *     <li><b>profiles</b> defines the available profiles, including implicit default profiles.</li>
- *     <li><b>defaults</b> defines the profiles that are loaded implicitly first as defaults.</li>
- *     <li><b>default-active</b> defines the profile(s) activated by default, when no profile setting could be evaluated.
- *     <li><b>evaluation</b> defines the resolution expressions to be used to evaluate the current profiles active.
- *       By default {@code ${sys:ENV}, ${env:ENV}} is used, which tries to evaluate {@code ENV} using system and
- *       environment properties. Refere to the {@code tamaya-resolver} module for further details on resolvers and
- *       expressions and see {@link Resolver#evaluateExpression(String, boolean)}.
- * </ul>
- */
-public final class ProfileManager {
-
-    private static final Logger LOG = Logger.getLogger(ProfileManager.class.getName());
-    private static final ProfileManager INSTANCE = new ProfileManager();
-
-    /** The currently active profiles, in order of precedence, the most significant are the last ones. */
-    private List<String> activeProfiles = new ArrayList<>();
-    /** A set of all defined profiles. */
-    private Set<String> profiles = new HashSet<>();
-    /** The current used default profiles, loaded initially, before all other profiles are loaded. */
-    private List<String> defaultProfiles = new ArrayList<>();
-
-
-    /**
-     * Get the current instance.
-     * @return the current profile manager, never null.
-     */
-    public static ProfileManager getInstance(){
-        return INSTANCE;
-    }
-
-    private ProfileManager(){
-        Configuration metaConfig = MetaConfiguration.getConfiguration();
-        Configuration profileConfig = metaConfig.with(
-                ConfigurationFunctions.section("TAMAYA.PROFILES-DEF"));
-        String[] selectables = profileConfig.getOrDefault("profiles","DEFAULT,DEV,TEST,PROD").split(",");
-        for(String sel:selectables){
-            sel = sel.trim();
-            if(sel.isEmpty()){
-                continue;
-            }
-            this.profiles.add(sel);
-        }
-        String[] defaults = profileConfig.getOrDefault("defaults","DEFAULT").split(",");
-        for(String def:defaults){
-            def = def.trim();
-            if(def.isEmpty()){
-                continue;
-            }
-            if(!isProfileDefined(def)){
-                throw new ConfigException("Invalid profile encountered: " +def + ", valid are: " + profiles);
-            }
-            this.defaultProfiles.add(def);
-        }
-        String[] expressions = profileConfig.getOrDefault("evaluation","${sys:ENV}, ${env:ENV}").split(",");
-        String currentEnvironment = null;
-        for(String exp:expressions){
-            exp = exp.trim();
-            if(exp.isEmpty()){
-                continue;
-            }
-            currentEnvironment = evaluateExpression(exp);
-            if(currentEnvironment!=null){
-                currentEnvironment = currentEnvironment.trim();
-                if(!currentEnvironment.isEmpty()){
-                    break;
-                }
-            }
-        }
-        if(currentEnvironment==null|| currentEnvironment.isEmpty()){
-            currentEnvironment = profileConfig.getOrDefault("default-active", "DEV");
-        }
-        this.activeProfiles.addAll(defaultProfiles);
-        String[] profilesActive = currentEnvironment.split(",");
-        for(String prof:profilesActive){
-            prof = prof.trim();
-            if(prof.isEmpty()){
-                continue;
-            }
-            if(!isProfileDefined(prof)){
-                throw new ConfigException("Invalid profile encountered: " +prof + ", valid are: " + profiles);
-            }
-            this.activeProfiles.add(prof);
-        }
-    }
-
-    /**
-     * Evaluates the expressions to evaluate the current profile.
-     * Currently the following expressions are supported
-     * <pre>
-     * sys-property:xxx
-     * env-property:xxx
-     * </pre>
-     * {@code xxx} is the corresponding key.
-     * @param currentProfileExpression the profile expression.
-     * @return the evaluated String, or null.
-     */
-    private String evaluateExpression(String currentProfileExpression){
-        currentProfileExpression = currentProfileExpression.trim();
-        List<ExpressionResolver> resolvers = new ArrayList<>();
-        for(ExpressionResolver res: ServiceContextManager.getServiceContext().getServices(ExpressionResolver.class)){
-            resolvers.add(res);
-        }
-        for(ExpressionResolver res:resolvers){
-            if(currentProfileExpression.startsWith(res.getResolverPrefix())){
-                try{
-                    return res.evaluate(currentProfileExpression.substring(res.getResolverPrefix().length()));
-                }catch(Exception e){
-                    LOG.log(Level.FINEST, "Error evaluating resolver: " + res, e);
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Allows to check if a profile is currently active.
-     * @param profileName the profile name, not null.
-     * @return true, if the profile is active.
-     */
-    public boolean isProfileActive(String profileName){
-        return this.activeProfiles.contains(profileName);
-    }
-
-    /**
-     * Allows to check if a profile is currently defined.
-     * @param profileName the profile name, not null.
-     * @return true, if the profile is defined.
-     */
-    public boolean isProfileDefined(String profileName){
-        return this.profiles.contains(profileName);
-    }
-
-    /**
-     * Allows to check if a profile is a default profile.
-     * @param profileName the profile name, not null.
-     * @return true, if the profile is a default profile.
-     */
-    public boolean isProfileDefault(String profileName){
-        return this.defaultProfiles.contains(profileName);
-    }
-
-    /**
-     * Get the list of currently active profiles.
-     * @return the list of currently active profiles, in order of precedence, the most significant
-     * are the last ones, never null.
-     */
-    public List<String> getActiveProfiles(){
-        return Collections.unmodifiableList(activeProfiles);
-    }
-
-    /**
-     * Get the list of currently active profiles.
-     * @return the list of currently active profiles, in order of precedence, the most significant
-     * are the last ones, never null.
-     */
-    public List<String> getDefaultProfiles(){
-        return Collections.unmodifiableList(defaultProfiles);
-    }
-
-    /**
-     * Get the list of currently active profiles.
-     * @return the list of currently active profiles, in order of precedence, the most significant
-     * are the last ones, never null.
-     */
-    public Set<String> getAllProfiles(){
-        return Collections.unmodifiableSet(profiles);
-    }
-
-}
+///*
+// * 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.metamodel.dsl;
+//
+//import org.apache.tamaya.ConfigException;
+//import org.apache.tamaya.Configuration;
+//import org.apache.tamaya.functions.ConfigurationFunctions;
+//import org.apache.tamaya.resolver.Resolver;
+//import org.apache.tamaya.resolver.spi.ExpressionResolver;
+//import org.apache.tamaya.spi.ServiceContextManager;
+//
+//import java.util.*;
+//import java.util.logging.Level;
+//import java.util.logging.Logger;
+//
+///**
+// * Component that manages the current setup profiles for this environment/runtime. The profile manager
+// * reads the profile meta configuration that looks as follows:
+// * <pre>
+// * TAMAYA:
+// *   PROFILES-DEF:
+// *     - profiles:          DEFAULTS,DEV,TEST,PTA,PROD
+// *     - defaults:          DEFAULTS
+// *     - default-active:    DEV
+// *     - evaluation:        ${sys:ENV}, ${env:ENV}
+// * </pre>
+// * Hereby:
+// * <ul>
+// *     <li><b>profiles</b> defines the available profiles, including implicit default profiles.</li>
+// *     <li><b>defaults</b> defines the profiles that are loaded implicitly first as defaults.</li>
+// *     <li><b>default-active</b> defines the profile(s) activated by default, when no profile setting could be evaluated.
+// *     <li><b>evaluation</b> defines the resolution expressions to be used to evaluate the current profiles active.
+// *       By default {@code ${sys:ENV}, ${env:ENV}} is used, which tries to evaluate {@code ENV} using system and
+// *       environment properties. Refere to the {@code tamaya-resolver} module for further details on resolvers and
+// *       expressions and see {@link Resolver#evaluateExpression(String, boolean)}.
+// * </ul>
+// */
+//public final class ProfileManager {
+//
+//    private static final Logger LOG = Logger.getLogger(ProfileManager.class.getName());
+//    private static final ProfileManager INSTANCE = new ProfileManager();
+//
+//    /** The currently active profiles, in order of precedence, the most significant are the last ones. */
+//    private List<String> activeProfiles = new ArrayList<>();
+//    /** A set of all defined profiles. */
+//    private Set<String> profiles = new HashSet<>();
+//    /** The current used default profiles, loaded initially, before all other profiles are loaded. */
+//    private List<String> defaultProfiles = new ArrayList<>();
+//
+//
+//    /**
+//     * Get the current instance.
+//     * @return the current profile manager, never null.
+//     */
+//    public static ProfileManager getInstance(){
+//        return INSTANCE;
+//    }
+//
+//    private ProfileManager(){
+//        Configuration metaConfig = MetaConfiguration.getConfiguration();
+//        Configuration profileConfig = metaConfig.with(
+//                ConfigurationFunctions.section("TAMAYA.PROFILES-DEF"));
+//        String[] selectables = profileConfig.getOrDefault("profiles","DEFAULT,DEV,TEST,PROD").split(",");
+//        for(String sel:selectables){
+//            sel = sel.trim();
+//            if(sel.isEmpty()){
+//                continue;
+//            }
+//            this.profiles.add(sel);
+//        }
+//        String[] defaults = profileConfig.getOrDefault("defaults","DEFAULT").split(",");
+//        for(String def:defaults){
+//            def = def.trim();
+//            if(def.isEmpty()){
+//                continue;
+//            }
+//            if(!isProfileDefined(def)){
+//                throw new ConfigException("Invalid profile encountered: " +def + ", valid are: " + profiles);
+//            }
+//            this.defaultProfiles.add(def);
+//        }
+//        String[] expressions = profileConfig.getOrDefault("evaluation","${sys:ENV}, ${env:ENV}").split(",");
+//        String currentEnvironment = null;
+//        for(String exp:expressions){
+//            exp = exp.trim();
+//            if(exp.isEmpty()){
+//                continue;
+//            }
+//            currentEnvironment = evaluateExpression(exp);
+//            if(currentEnvironment!=null){
+//                currentEnvironment = currentEnvironment.trim();
+//                if(!currentEnvironment.isEmpty()){
+//                    break;
+//                }
+//            }
+//        }
+//        if(currentEnvironment==null|| currentEnvironment.isEmpty()){
+//            currentEnvironment = profileConfig.getOrDefault("default-active", "DEV");
+//        }
+//        this.activeProfiles.addAll(defaultProfiles);
+//        String[] profilesActive = currentEnvironment.split(",");
+//        for(String prof:profilesActive){
+//            prof = prof.trim();
+//            if(prof.isEmpty()){
+//                continue;
+//            }
+//            if(!isProfileDefined(prof)){
+//                throw new ConfigException("Invalid profile encountered: " +prof + ", valid are: " + profiles);
+//            }
+//            this.activeProfiles.add(prof);
+//        }
+//    }
+//
+//    /**
+//     * Evaluates the expressions to evaluate the current profile.
+//     * Currently the following expressions are supported
+//     * <pre>
+//     * sys-property:xxx
+//     * env-property:xxx
+//     * </pre>
+//     * {@code xxx} is the corresponding key.
+//     * @param currentProfileExpression the profile expression.
+//     * @return the evaluated String, or null.
+//     */
+//    private String evaluateExpression(String currentProfileExpression){
+//        currentProfileExpression = currentProfileExpression.trim();
+//        List<ExpressionResolver> resolvers = new ArrayList<>();
+//        for(ExpressionResolver res: ServiceContextManager.getServiceContext().getServices(ExpressionResolver.class)){
+//            resolvers.add(res);
+//        }
+//        for(ExpressionResolver res:resolvers){
+//            if(currentProfileExpression.startsWith(res.getResolverPrefix())){
+//                try{
+//                    return res.evaluate(currentProfileExpression.substring(res.getResolverPrefix().length()));
+//                }catch(Exception e){
+//                    LOG.log(Level.FINEST, "Error evaluating resolver: " + res, e);
+//                }
+//            }
+//        }
+//        return null;
+//    }
+//
+//    /**
+//     * Allows to check if a profile is currently active.
+//     * @param profileName the profile name, not null.
+//     * @return true, if the profile is active.
+//     */
+//    public boolean isProfileActive(String profileName){
+//        return this.activeProfiles.contains(profileName);
+//    }
+//
+//    /**
+//     * Allows to check if a profile is currently defined.
+//     * @param profileName the profile name, not null.
+//     * @return true, if the profile is defined.
+//     */
+//    public boolean isProfileDefined(String profileName){
+//        return this.profiles.contains(profileName);
+//    }
+//
+//    /**
+//     * Allows to check if a profile is a default profile.
+//     * @param profileName the profile name, not null.
+//     * @return true, if the profile is a default profile.
+//     */
+//    public boolean isProfileDefault(String profileName){
+//        return this.defaultProfiles.contains(profileName);
+//    }
+//
+//    /**
+//     * Get the list of currently active profiles.
+//     * @return the list of currently active profiles, in order of precedence, the most significant
+//     * are the last ones, never null.
+//     */
+//    public List<String> getActiveProfiles(){
+//        return Collections.unmodifiableList(activeProfiles);
+//    }
+//
+//    /**
+//     * Get the list of currently active profiles.
+//     * @return the list of currently active profiles, in order of precedence, the most significant
+//     * are the last ones, never null.
+//     */
+//    public List<String> getDefaultProfiles(){
+//        return Collections.unmodifiableList(defaultProfiles);
+//    }
+//
+//    /**
+//     * Get the list of currently active profiles.
+//     * @return the list of currently active profiles, in order of precedence, the most significant
+//     * are the last ones, never null.
+//     */
+//    public Set<String> getAllProfiles(){
+//        return Collections.unmodifiableSet(profiles);
+//    }
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9f71f2d8/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/TamayaConfigurator.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/TamayaConfigurator.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/TamayaConfigurator.java
index f8abf29..c4570d7 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/TamayaConfigurator.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/dsl/TamayaConfigurator.java
@@ -1,234 +1,234 @@
-/*
- * 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.metamodel.dsl;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.functions.ConfigurationFunctions;
-import org.apache.tamaya.spi.*;
-import org.apache.tamaya.metamodel.spi.DSLPropertySourceProvider;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Logger;
-
-/**
- * Configuration class setting up the Tamaya runtime model.
- */
-public final class TamayaConfigurator {
-
-    private static final Logger LOGGER = Logger.getLogger(MetaConfiguration.class.getName());
-    private static final Comparator<WrappedPropertySource> ORDINAL_COMPARATOR =
-            new Comparator<WrappedPropertySource>(){
-                @Override
-                public int compare(WrappedPropertySource o1, WrappedPropertySource o2) {
-                    return o1.getOrdinal() - o2.getOrdinal();
-                }
-            };
-
-    private static final TamayaConfigurator INSTANCE = new TamayaConfigurator();
-
-    private ConfigurationContext configurationContext;
-    private Set<String> formats = new HashSet<>();
-    private Set<String> suffixes = new HashSet<>();
-    private Map<String,DSLPropertySourceProvider> dslResolvers = new HashMap<>();
-
-
-    private TamayaConfigurator(){
-        configure(null);
-    }
-
-    /**
-     * Get the singleton instance.
-     * @return the instance, never null.
-     */
-    public static TamayaConfigurator getInstance(){
-        return INSTANCE;
-    }
-
-    /**
-     * Configures the Tamaya runtime using the metamodel configuration found at the default
-     * location.
-     * @see MetaConfiguration
-     */
-    public void configure(){
-        configure(null);
-    }
-
-    /**
-     * Configures the Tamaya runtime using the given resource location expression and (optionally)
-     * formats to be used for evaluating the metamodel configuration.
-     * @param resourceExpression resource expression for resolving the location of the
-     *                           meta configuration.
-     * @param formats the format names to be used, optional, but not null.
-     * @see MetaConfiguration
-     */
-    public void configure(String resourceExpression, String... formats){
-        loadDSLSourceResolvers();
-        Configuration metaConfig = MetaConfiguration.getConfiguration(resourceExpression, formats);
-        Configuration profilesConfig = metaConfig.with(
-                ConfigurationFunctions.section("TAMAYA.PROFILES.", true));
-        Configuration metaProfile = profilesConfig.with(
-                ConfigurationFunctions.section("<COMMON>.", true));
-        System.out.println(metaProfile.getProperties().keySet());
-        String[] values = metaProfile.getOrDefault("formats","yaml, properties, xml-properties").split(",");
-        for(String fmt:values){
-            fmt = fmt.trim();
-            if(fmt.isEmpty()){
-                continue;
-            }
-            this.formats.add(fmt);
-        }
-        values = metaProfile.getOrDefault("suffixes", "yml, yaml, properties, xml").split(",");
-        for(String sfx:values){
-            sfx = sfx.trim();
-            if(sfx.isEmpty()){
-                continue;
-            }
-            this.suffixes.add(sfx);
-        }
-        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
-        Map<String, PropertySource> loadedPropertySources = loadDefaultPropertySources();
-        int defaultOrdinal = loadSources(builder, "<COMMON>", metaProfile, loadedPropertySources, 0) + 20;
-        // Load current profiles
-        for(String profile:ProfileManager.getInstance().getActiveProfiles()){
-            metaProfile = profilesConfig.with(
-                    ConfigurationFunctions.section(profile, true));
-            defaultOrdinal = loadSources(builder, profile, metaProfile, loadedPropertySources, defaultOrdinal) + 20;
-        }
-        //         formats:  yaml, properties, xml-properties
-        //    - SUFFIX:   yaml, yml, properties, xml
-        //    - sources:
-        //      - "named:env-properties"   # provider name, or class name
-        //      - "named:main-args"
-        //      - "named:sys-properties"
-        //      - "resource:classpath:META-INF/config/**/*.SUFFIX"
-
-    }
-
-    /**
-     * Loads all default registered property sources and providers.
-     * @return the default property sources available on the system.
-     */
-    private Map<String, PropertySource> loadDefaultPropertySources() {
-        Map<String, PropertySource> loadedPropertySources = new HashMap<>();
-        for(PropertySource ps: ServiceContextManager.getServiceContext().getServices(PropertySource.class)){
-            loadedPropertySources.put(ps.getName(), ps);
-        }
-        for(PropertySourceProvider prov: ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class)){
-            for(PropertySource ps: prov.getPropertySources()){
-                loadedPropertySources.put(ps.getName(), ps);
-            }
-        }
-        return loadedPropertySources;
-    }
-
-    private int loadSources(ConfigurationContextBuilder builder, String profileId, Configuration metaProfile, Map<String,
-            PropertySource> defaultPropertySources, int nextOrdinal) {
-        String[] values;
-        List<PropertySource> propertySourcesLoaded = new ArrayList<>();
-        values = metaProfile.getOrDefault("sources","<default>").split(",");
-        if(values.length==1 && "<default>".equals(values[0])){
-            // load default property sources and providers from config as default.
-            // additional providers may be added depending on the active profile...
-            LOGGER.info("Using default configuration setup for "+profileId);
-            nextOrdinal = addAndGetNextOrdinal(builder, defaultPropertySources.values(),
-                    propertySourcesLoaded, nextOrdinal);
-        }else {
-            LOGGER.info("Loading DSL based "+profileId+" configuration context...");
-            int count = 0;
-            for (String source : values) {
-                source = source.trim();
-                if (source.isEmpty()) {
-                    continue;
-                }
-                String sourceKey = getSourceKey(source);
-                LOGGER.info("Loading "+profileId+" configuration source: " + source);
-                // evaluate DSLSourceResolver and resolve PropertySources, register thm into context
-                // apply newMaxOrdinal...
-                DSLPropertySourceProvider resolver = dslResolvers.get(sourceKey);
-                if(resolver==null){
-                    LOGGER.warning("DSL error: unresolvable source expression: "+ source);
-                    continue;
-                }
-                List<PropertySource> sources = resolver.resolve(source.substring(sourceKey.length()),
-                        defaultPropertySources);
-                nextOrdinal = addAndGetNextOrdinal(builder, sources, propertySourcesLoaded, nextOrdinal);
-            }
-            LOGGER.info("Loaded "+count+" DSL based "+profileId+" configuration contexts.");
-        }
-        return nextOrdinal;
-    }
-
-    private int addAndGetNextOrdinal(ConfigurationContextBuilder builder, Collection<PropertySource> sourcesToAdd,
-                                     List<PropertySource> allPropertySources, int nextOrdinal) {
-        allPropertySources.addAll(wrapOrdinals(nextOrdinal, sourcesToAdd));
-        nextOrdinal = Math.max(calculateHighestOrdinal(allPropertySources)+1, nextOrdinal+1);
-        builder.addPropertySources(allPropertySources);
-        return nextOrdinal;
-    }
-
-    private List<WrappedPropertySource> wrapOrdinals(int nextOrdinal, Collection<PropertySource> propertySources) {
-        List<WrappedPropertySource> result = new ArrayList<>();
-        for(PropertySource ps: propertySources){
-            result.add(WrappedPropertySource.of(ps));
-        }
-        Collections.sort(result, ORDINAL_COMPARATOR);
-        for(WrappedPropertySource ps: result){
-            ps.setOrdinal(nextOrdinal++);
-        }
-        Collections.sort(result, ORDINAL_COMPARATOR);
-        return result;
-    }
-
-    private int calculateHighestOrdinal(Collection<PropertySource> sources) {
-        int maxOrdinal = 0;
-        for (PropertySource ps : sources) {
-            if (ps.getOrdinal() > maxOrdinal) {
-                maxOrdinal = ps.getOrdinal();
-            }
-        }
-        return maxOrdinal;
-    }
-
-    private String getSourceKey(String source) {
-        int index = source.indexOf(':');
-        if(index>0){
-            return source.substring(0,index);
-        }
-        return source;
-    }
-
-    private void loadDSLSourceResolvers() {
-        // Load the ConfigurationDSLSourceResolvers on the system
-        for(DSLPropertySourceProvider res:
-                ServiceContextManager.getServiceContext().getServices(
-                        DSLPropertySourceProvider.class)){
-            this.dslResolvers.put(res.getKey(), res);
-        }
-    }
-
-}
+///*
+// * 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.metamodel.dsl;
+//
+//import org.apache.tamaya.Configuration;
+//import org.apache.tamaya.ConfigurationProvider;
+//import org.apache.tamaya.functions.ConfigurationFunctions;
+//import org.apache.tamaya.spi.*;
+//import org.apache.tamaya.metamodel.spi.DSLPropertySourceProvider;
+//
+//import java.util.ArrayList;
+//import java.util.Collection;
+//import java.util.Collections;
+//import java.util.Comparator;
+//import java.util.HashMap;
+//import java.util.HashSet;
+//import java.util.List;
+//import java.util.Map;
+//import java.util.Set;
+//import java.util.logging.Logger;
+//
+///**
+// * Configuration class setting up the Tamaya runtime model.
+// */
+//public final class TamayaConfigurator {
+//
+//    private static final Logger LOGGER = Logger.getLogger(MetaConfiguration.class.getName());
+//    private static final Comparator<WrappedPropertySource> ORDINAL_COMPARATOR =
+//            new Comparator<WrappedPropertySource>(){
+//                @Override
+//                public int compare(WrappedPropertySource o1, WrappedPropertySource o2) {
+//                    return o1.getOrdinal() - o2.getOrdinal();
+//                }
+//            };
+//
+//    private static final TamayaConfigurator INSTANCE = new TamayaConfigurator();
+//
+//    private ConfigurationContext configurationContext;
+//    private Set<String> formats = new HashSet<>();
+//    private Set<String> suffixes = new HashSet<>();
+//    private Map<String,DSLPropertySourceProvider> dslResolvers = new HashMap<>();
+//
+//
+//    private TamayaConfigurator(){
+//        configure(null);
+//    }
+//
+//    /**
+//     * Get the singleton instance.
+//     * @return the instance, never null.
+//     */
+//    public static TamayaConfigurator getInstance(){
+//        return INSTANCE;
+//    }
+//
+//    /**
+//     * Configures the Tamaya runtime using the metamodel configuration found at the default
+//     * location.
+//     * @see MetaConfiguration
+//     */
+//    public void configure(){
+//        configure(null);
+//    }
+//
+//    /**
+//     * Configures the Tamaya runtime using the given resource location expression and (optionally)
+//     * formats to be used for evaluating the metamodel configuration.
+//     * @param resourceExpression resource expression for resolving the location of the
+//     *                           meta configuration.
+//     * @param formats the format names to be used, optional, but not null.
+//     * @see MetaConfiguration
+//     */
+//    public void configure(String resourceExpression, String... formats){
+//        loadDSLSourceResolvers();
+//        Configuration metaConfig = MetaConfiguration.getConfiguration(resourceExpression, formats);
+//        Configuration profilesConfig = metaConfig.with(
+//                ConfigurationFunctions.section("TAMAYA.PROFILES.", true));
+//        Configuration metaProfile = profilesConfig.with(
+//                ConfigurationFunctions.section("<COMMON>.", true));
+//        System.out.println(metaProfile.getProperties().keySet());
+//        String[] values = metaProfile.getOrDefault("formats","yaml, properties, xml-properties").split(",");
+//        for(String fmt:values){
+//            fmt = fmt.trim();
+//            if(fmt.isEmpty()){
+//                continue;
+//            }
+//            this.formats.add(fmt);
+//        }
+//        values = metaProfile.getOrDefault("suffixes", "yml, yaml, properties, xml").split(",");
+//        for(String sfx:values){
+//            sfx = sfx.trim();
+//            if(sfx.isEmpty()){
+//                continue;
+//            }
+//            this.suffixes.add(sfx);
+//        }
+//        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
+//        Map<String, PropertySource> loadedPropertySources = loadDefaultPropertySources();
+//        int defaultOrdinal = loadSources(builder, "<COMMON>", metaProfile, loadedPropertySources, 0) + 20;
+//        // Load current profiles
+//        for(String profile:ProfileManager.getInstance().getActiveProfiles()){
+//            metaProfile = profilesConfig.with(
+//                    ConfigurationFunctions.section(profile, true));
+//            defaultOrdinal = loadSources(builder, profile, metaProfile, loadedPropertySources, defaultOrdinal) + 20;
+//        }
+//        //         formats:  yaml, properties, xml-properties
+//        //    - SUFFIX:   yaml, yml, properties, xml
+//        //    - sources:
+//        //      - "named:env-properties"   # provider name, or class name
+//        //      - "named:main-args"
+//        //      - "named:sys-properties"
+//        //      - "resource:classpath:META-INF/config/**/*.SUFFIX"
+//
+//    }
+//
+//    /**
+//     * Loads all default registered property sources and providers.
+//     * @return the default property sources available on the system.
+//     */
+//    private Map<String, PropertySource> loadDefaultPropertySources() {
+//        Map<String, PropertySource> loadedPropertySources = new HashMap<>();
+//        for(PropertySource ps: ServiceContextManager.getServiceContext().getServices(PropertySource.class)){
+//            loadedPropertySources.put(ps.getName(), ps);
+//        }
+//        for(PropertySourceProvider prov: ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class)){
+//            for(PropertySource ps: prov.getPropertySources()){
+//                loadedPropertySources.put(ps.getName(), ps);
+//            }
+//        }
+//        return loadedPropertySources;
+//    }
+//
+//    private int loadSources(ConfigurationContextBuilder builder, String profileId, Configuration metaProfile, Map<String,
+//            PropertySource> defaultPropertySources, int nextOrdinal) {
+//        String[] values;
+//        List<PropertySource> propertySourcesLoaded = new ArrayList<>();
+//        values = metaProfile.getOrDefault("sources","<default>").split(",");
+//        if(values.length==1 && "<default>".equals(values[0])){
+//            // load default property sources and providers from config as default.
+//            // additional providers may be added depending on the active profile...
+//            LOGGER.info("Using default configuration setup for "+profileId);
+//            nextOrdinal = addAndGetNextOrdinal(builder, defaultPropertySources.values(),
+//                    propertySourcesLoaded, nextOrdinal);
+//        }else {
+//            LOGGER.info("Loading DSL based "+profileId+" configuration context...");
+//            int count = 0;
+//            for (String source : values) {
+//                source = source.trim();
+//                if (source.isEmpty()) {
+//                    continue;
+//                }
+//                String sourceKey = getSourceKey(source);
+//                LOGGER.info("Loading "+profileId+" configuration source: " + source);
+//                // evaluate DSLSourceResolver and resolve PropertySources, register thm into context
+//                // apply newMaxOrdinal...
+//                DSLPropertySourceProvider resolver = dslResolvers.get(sourceKey);
+//                if(resolver==null){
+//                    LOGGER.warning("DSL error: unresolvable source expression: "+ source);
+//                    continue;
+//                }
+//                List<PropertySource> sources = resolver.resolve(source.substring(sourceKey.length()),
+//                        defaultPropertySources);
+//                nextOrdinal = addAndGetNextOrdinal(builder, sources, propertySourcesLoaded, nextOrdinal);
+//            }
+//            LOGGER.info("Loaded "+count+" DSL based "+profileId+" configuration contexts.");
+//        }
+//        return nextOrdinal;
+//    }
+//
+//    private int addAndGetNextOrdinal(ConfigurationContextBuilder builder, Collection<PropertySource> sourcesToAdd,
+//                                     List<PropertySource> allPropertySources, int nextOrdinal) {
+//        allPropertySources.addAll(wrapOrdinals(nextOrdinal, sourcesToAdd));
+//        nextOrdinal = Math.max(calculateHighestOrdinal(allPropertySources)+1, nextOrdinal+1);
+//        builder.addPropertySources(allPropertySources);
+//        return nextOrdinal;
+//    }
+//
+//    private List<WrappedPropertySource> wrapOrdinals(int nextOrdinal, Collection<PropertySource> propertySources) {
+//        List<WrappedPropertySource> result = new ArrayList<>();
+//        for(PropertySource ps: propertySources){
+//            result.add(WrappedPropertySource.of(ps));
+//        }
+//        Collections.sort(result, ORDINAL_COMPARATOR);
+//        for(WrappedPropertySource ps: result){
+//            ps.setOrdinal(nextOrdinal++);
+//        }
+//        Collections.sort(result, ORDINAL_COMPARATOR);
+//        return result;
+//    }
+//
+//    private int calculateHighestOrdinal(Collection<PropertySource> sources) {
+//        int maxOrdinal = 0;
+//        for (PropertySource ps : sources) {
+//            if (ps.getOrdinal() > maxOrdinal) {
+//                maxOrdinal = ps.getOrdinal();
+//            }
+//        }
+//        return maxOrdinal;
+//    }
+//
+//    private String getSourceKey(String source) {
+//        int index = source.indexOf(':');
+//        if(index>0){
+//            return source.substring(0,index);
+//        }
+//        return source;
+//    }
+//
+//    private void loadDSLSourceResolvers() {
+//        // Load the ConfigurationDSLSourceResolvers on the system
+//        for(DSLPropertySourceProvider res:
+//                ServiceContextManager.getServiceContext().getServices(
+//                        DSLPropertySourceProvider.class)){
+//            this.dslResolvers.put(res.getKey(), res);
+//        }
+//    }
+//
+//}