tamaya-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ple...@apache.org
Subject [09/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-115: Implemented multi classpath environment PropertySourceProvider, with relocation capability.
Date Tue, 06 Sep 2016 17:18:05 GMT
TAMAYA-115: Implemented multi classpath environment PropertySourceProvider, with relocation
capability.


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

Branch: refs/heads/master
Commit: 7b9d4e69a6aa4c850b5d62e38c2c38a43853d9ef
Parents: cfbc38d
Author: anatole <anatole@apache.org>
Authored: Wed Oct 7 23:00:18 2015 +0200
Committer: anatole <anatole@apache.org>
Committed: Mon Oct 12 08:01:47 2015 +0200

----------------------------------------------------------------------
 environment/pom.xml                             |  68 ---------
 .../BaseEnvironmentPropertySourceProvider.java  | 119 ----------------
 .../tamaya/environment/spi/package-info.java    |  23 ----
 ...org.apache.tamaya.spi.PropertySourceProvider |  19 ---
 .../src/test/resources/GLOBAL.properties        |  19 ---
 environment/src/test/resources/TEST.properties  |  19 ---
 metamodels/staged/pom.xml                       |  68 +++++++++
 .../spi/BaseStagedPropertySourceProvider.java   | 121 ++++++++++++++++
 .../spi/StagedConfigPropertiesProvider.java     | 137 +++++++++++++++++++
 .../apache/tamaya/staged/spi/package-info.java  |  23 ++++
 ...org.apache.tamaya.spi.PropertySourceProvider |  19 +++
 .../staged/src/test/resources/GLOBAL.properties |  19 +++
 .../staged/src/test/resources/TEST.properties   |  19 +++
 13 files changed, 406 insertions(+), 267 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/pom.xml
----------------------------------------------------------------------
diff --git a/environment/pom.xml b/environment/pom.xml
deleted file mode 100644
index c2e1745..0000000
--- a/environment/pom.xml
+++ /dev/null
@@ -1,68 +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.2-incubating-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-
-    <artifactId>tamaya-environment</artifactId>
-    <name>Apache Tamaya Modules - Environment Manager</name>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-functions</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-spisupport</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-resources</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
b/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
deleted file mode 100644
index 5924640..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
+++ /dev/null
@@ -1,119 +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.environment.spi;
-
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * Implements a base property source that defines a multilayered environment setup.
- */
-public abstract class BaseEnvironmentPropertySourceProvider implements PropertySourceProvider
{
-
-    private static final Logger LOGGER = Logger.getLogger(BaseEnvironmentPropertySourceProvider.class.getName());
-
-    private int basePriority;
-
-    private int priorityIncrease;
-
-    private List<String> environmentIds = new ArrayList<>();
-
-    private String environmentRootContext;
-
-    private List<PropertySource> propertySources = new ArrayList<>();
-
-
-    /**
-     * Creates a new Environment provider, hereby using 10 for basePriority and priorityIncrease.
-     * @param environmentRootContext the environment target root context, e.g. ENV. or null
-     *                               for not remapping the environment properties.
-     * @param environmentIds the context ids, that build up the environment.
-     */
-    public BaseEnvironmentPropertySourceProvider(String environmentRootContext,
-                                                 String... environmentIds) {
-        this(environmentRootContext, 10,10,environmentIds);
-    }
-        /**
-         * Creates a new Environment provider.
-         * @param environmentRootContext the environment target root context, e.g. ENV. or
null
-         *                               for not remapping the environment properties.
-         * @param basePriority the base priority used for the weakest environment properties
set.
-         * @param priorityIncrease the value the property source's priority should be increased
with each
-         *                         environment context level added.
-         * @param environmentIds the context ids, that build up the environment.
-         */
-    public BaseEnvironmentPropertySourceProvider(String environmentRootContext, int basePriority,
int priorityIncrease,
-                                                 String... environmentIds) {
-        this.basePriority = basePriority;
-        this.priorityIncrease = priorityIncrease;
-        if (environmentIds.length == 0) {
-            throw new ConfigException("At least one environment context id must be defined.");
-        }
-        if (environmentRootContext == null) {
-            LOGGER.finest("No environment mapping is applied.");
-        }
-        this.environmentRootContext = environmentRootContext;
-        this.environmentIds.addAll(Arrays.asList(environmentIds));
-        int priority = basePriority;
-        for (String contextId : environmentIds) {
-            propertySources.addAll(loadEnvProperties(environmentRootContext, contextId, priority));
-            priority += priorityIncrease;
-        }
-    }
-
-    /**
-     * Method that loads the environment properties for the given contextId.
-     * @param environmentRootContext the root context, where entries should be mapped to.
-     * @param contextId the contextId.
-     * @param priority  the target priority the created PropertySource should have. This
priority is important, since it reflects the
-     *                  environment context overriding rules for the environment part created.
-     * @return the corresponding PrioritySources to be added, never null.
-     */
-    protected abstract Collection<PropertySource> loadEnvProperties(
-            String environmentRootContext, String contextId, int priority);
-
-    /**
-     * Get the environment context ids that define how this environment configuration
-     * is setup, in order of priority increasing.
-     * @return the ordered list of context ids.
-     */
-    public List<String> getEnvironmentIds() {
-        return environmentIds;
-    }
-
-    @Override
-    public String toString() {
-        return "EnvironmentPropertySourceProvider{" +
-                "environmentIds=" + environmentIds +
-                ", environmentRootContext='" + environmentRootContext + '\'' +
-                '}';
-    }
-
-    @Override
-    public Collection<PropertySource> getPropertySources() {
-        return propertySources;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
b/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
deleted file mode 100644
index 9037c2b..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
+++ /dev/null
@@ -1,23 +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.
- */
-/**
- * Main API of the environment module, containing the base class for implementing adapted
- * environment parts in your configuration.
- */
-package org.apache.tamaya.environment.spi;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
b/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
deleted file mode 100644
index 233448a..0000000
--- a/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
+++ /dev/null
@@ -1,19 +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.
-#
-org.apache.tamaya.environment.internal.ClasspathPropertiesEnvironmentProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/test/resources/GLOBAL.properties
----------------------------------------------------------------------
diff --git a/environment/src/test/resources/GLOBAL.properties b/environment/src/test/resources/GLOBAL.properties
deleted file mode 100644
index 9f39f75..0000000
--- a/environment/src/test/resources/GLOBAL.properties
+++ /dev/null
@@ -1,19 +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.
-#
-aKey=aValue.GLOBAL

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/test/resources/TEST.properties
----------------------------------------------------------------------
diff --git a/environment/src/test/resources/TEST.properties b/environment/src/test/resources/TEST.properties
deleted file mode 100644
index 2b31cb3..0000000
--- a/environment/src/test/resources/TEST.properties
+++ /dev/null
@@ -1,19 +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.
-#
-aKey=aValue.TEST

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/staged/pom.xml b/metamodels/staged/pom.xml
new file mode 100644
index 0000000..325e4ec
--- /dev/null
+++ b/metamodels/staged/pom.xml
@@ -0,0 +1,68 @@
+<!-- 
+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.metamodels</groupId>
+        <artifactId>tamaya-metamodels</artifactId>
+        <version>0.2-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>tamaya-metamodel-staged</artifactId>
+    <name>Apache Tamaya Modules - Staged Configuration</name>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-functions</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-spisupport</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-resources</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
new file mode 100644
index 0000000..36fcd11
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
@@ -0,0 +1,121 @@
+/*
+ * 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.staged.spi;
+
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertySourceProvider;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Logger;
+
+/**
+ * Implements a base property source provider that defines a multilayered
+ * stage setup.
+ */
+public abstract class BaseStagedPropertySourceProvider implements PropertySourceProvider
{
+
+    /** The logger used. */
+    private static final Logger LOGGER = Logger.getLogger(BaseStagedPropertySourceProvider.class.getName());
+
+    /** the current environment stages in order of precedence (weakest first). */
+    private List<String> contextIds = new ArrayList<>();
+
+    /** Optional root context of the environment in the config tree. All entries loaded will
be mapped into
+     * this root conztext.
+     */
+    private String rootContext;
+
+    /** List of PropertySources evaluated and returned to the current ConfigurationContext
on load. */
+    private List<PropertySource> propertySources = new ArrayList<>();
+
+
+    /**
+     * Creates a new Environment provider, hereby using 10 for basePriority and priorityIncrease.
+     * @param rootContext the environment target root context, e.g. ENV. or null
+     *                               for not remapping the environment properties.
+     * @param contextIds the context ids, that build up the environment.
+     */
+    public BaseStagedPropertySourceProvider(String rootContext,
+                                            String... contextIds) {
+        this(rootContext, 10,10, contextIds);
+    }
+        /**
+         * Creates a new Environment provider.
+         * @param rootContext the environment target root context, e.g. ENV. or null
+         *                               for not remapping the environment properties.
+         * @param basePriority the base priority used for the weakest environment properties
set.
+         * @param priorityIncrease the value the property source's priority should be increased
with each
+         *                         environment context level added.
+         * @param contextIds the context ids, that build up the environment.
+         */
+    public BaseStagedPropertySourceProvider(String rootContext, int basePriority, int priorityIncrease,
+                                            String... contextIds) {
+        if (contextIds.length == 0) {
+            throw new ConfigException("At least one environment context id must be defined.");
+        }
+        if (rootContext == null) {
+            LOGGER.finest("No environment mapping is applied.");
+        }
+        this.rootContext = rootContext;
+        this.contextIds.addAll(Arrays.asList(contextIds));
+        int priority = basePriority;
+        for (String contextId : contextIds) {
+            propertySources.addAll(loadStageProperties(rootContext, contextId, priority));
+            priority += priorityIncrease;
+        }
+    }
+
+    /**
+     * Method that loads the environment properties for the given contextId.
+     * @param rootContext the root context, where entries read should be mapped to.
+     * @param contextId the contextId.
+     * @param priority  the target priority the created PropertySource should have. This
priority is
+     *                  important, since it reflects the order as defined
+     *                  when configuring this class. Therefore it should not be overridden
normally.
+     * @return the corresponding PrioritySources to be added, never null.
+     */
+    protected abstract Collection<PropertySource> loadStageProperties(
+            String rootContext, String contextId, int priority);
+
+    /**
+     * Get the environment context ids that define how this environment configuration
+     * is setup, in order of their increasing priority.
+     * @return the ordered list of context ids.
+     */
+    public List<String> getContextIds() {
+        return contextIds;
+    }
+
+    @Override
+    public String toString() {
+        return "EnvironmentPropertySourceProvider{" +
+                "contextIds=" + contextIds +
+                ", rootContext='" + rootContext + '\'' +
+                '}';
+    }
+
+    @Override
+    public Collection<PropertySource> getPropertySources() {
+        return propertySources;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
new file mode 100644
index 0000000..e224d52
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
@@ -0,0 +1,137 @@
+/*
+ * 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.staged.spi;
+
+
+import org.apache.tamaya.spisupport.MapPropertySource;
+import org.apache.tamaya.spisupport.PropertiesResourcePropertySource;
+import org.apache.tamaya.resource.ConfigResources;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Logger;
+
+/**
+ * Configuration provider that resolves to a location in the classpath.
+ * Hereby the following system properties can be set to configure the provider
+ * (all entries are optional):
+ * <pre>
+ *     env.STAGE   :   ordered list of configs to be loaded, e.g. sys-env,GLOBAL,TEST,DEV
+ * </pre>
+ * Adding {@code sys-env} as stage maps the current environment properties using
+ * the priority to be aliged with the context ordering, defined by {@code env.STAGE}.
+ * Similarly the same thing can be done by passing {@code sys-props} as context id for
+ * adding the current System properties to the configuration tree.
+ *
+ * The rootContext can be used to remap the whole property space to an alternate subtree
in
+ * the configuration tree overall. This is very handy, if multiple instances of this class
+ * are registered into the same configuration, but with different location setups. Remapping
+ * configuration allows to separate these entries clearly.<br/>
+ * Finally the resource location can be adapted by overriding {@link #getBaseResourcePath()}.
+ * Different formats and loading mechanisms can be implemented by overriding
+ * {@link #loadProperties(String, String, int, List)}.
+ */
+public class StagedConfigPropertiesProvider extends BaseStagedPropertySourceProvider {
+
+    /** The system property to define the stages used. */
+    private static final String STAGE_PROP = "env.STAGE";
+    /** The logger used. */
+
+    private static final Logger LOGGER = Logger.getLogger(StagedConfigPropertiesProvider.class.getName());
+
+    /** The context id for adding the system's environment properties. */
+    private static final String DEFAULT_ENV = "sys-env";
+
+    /** The context id for adding the system's properties. */
+    private static final String DEFAULT_SYSPROPS = "sys-props";
+
+    /**
+     * Creates a new instance.
+     * @param rootContext the (optional) root context, can be null.
+     * @param stages the comma separated list of stages.
+     */
+    public StagedConfigPropertiesProvider(String rootContext, String... stages){
+        super(rootContext, evaluateStages(stages));
+    }
+
+    /**
+     * Creates a default instance. the stages are read from the {@code env.STAGE} system¨propertx
+     * or a default is applied.
+     */
+    public StagedConfigPropertiesProvider(){
+        super(null, evaluateStages(null));
+    }
+
+    /**
+     * Evaluates the stages or returns the default STAGE entry.
+     * @return the stages to be used, never null.
+     */
+    private static String[] evaluateStages(String[] stages) {
+        if(stages!=null && stages.length>0){
+            return stages.clone();
+        }
+        String value = System.getProperty(STAGE_PROP);
+        if(value==null) {
+            value = System.getenv(STAGE_PROP);
+        }
+        if(value==null){
+            value = "sys-env,GLOBAL,DEVELOPMENT,sys-props";
+        }
+        return value.split(",");
+    }
+
+    @Override
+    protected Collection<PropertySource> loadStageProperties(
+            String rootContext, String contextId, int priority) {
+        List<PropertySource> result = new ArrayList<>();
+        if (DEFAULT_ENV.equals(contextId)){
+            result.add(new MapPropertySource(DEFAULT_ENV, System.getenv(),
+                    rootContext, priority));
+        }else if (DEFAULT_SYSPROPS.equals(contextId)){
+            result.add(new MapPropertySource(DEFAULT_SYSPROPS, System.getProperties(),
+                    rootContext, priority));
+        }
+        else{
+            loadProperties(rootContext, contextId, priority, result);
+        }
+        return result;
+    }
+
+    private void loadProperties(String rootContext, String contextId, int priority,
+                                List<PropertySource> result) {
+        String cpExp = getBaseResourcePath()+'/' +contextId+".properties";
+        if(cpExp.startsWith("/")){
+            cpExp = cpExp.substring(1);
+        }
+        for(URL url: ConfigResources.getResourceResolver().getResources(cpExp)){
+            result.add(new PropertiesResourcePropertySource(rootContext, url, priority));
+        }
+    }
+
+    /**
+     * Get the basic resource path used for lookup of properties files.
+     * @return the basic resource path, never null.
+     */
+    protected String getBaseResourcePath() {
+        return "";
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/package-info.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/package-info.java
b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/package-info.java
new file mode 100644
index 0000000..9037c2b
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/package-info.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+/**
+ * Main API of the environment module, containing the base class for implementing adapted
+ * environment parts in your configuration.
+ */
+package org.apache.tamaya.environment.spi;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
b/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
new file mode 100644
index 0000000..2bdf843
--- /dev/null
+++ b/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
@@ -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.staged.spi.StagedConfigPropertiesProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/test/resources/GLOBAL.properties
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/resources/GLOBAL.properties b/metamodels/staged/src/test/resources/GLOBAL.properties
new file mode 100644
index 0000000..9f39f75
--- /dev/null
+++ b/metamodels/staged/src/test/resources/GLOBAL.properties
@@ -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.
+#
+aKey=aValue.GLOBAL

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/test/resources/TEST.properties
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/resources/TEST.properties b/metamodels/staged/src/test/resources/TEST.properties
new file mode 100644
index 0000000..2b31cb3
--- /dev/null
+++ b/metamodels/staged/src/test/resources/TEST.properties
@@ -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.
+#
+aKey=aValue.TEST



Mime
View raw message