Repository: deltaspike Updated Branches: refs/heads/master f767c80c8 -> 842c84bd1
DELTASPIKE-1249 pick up configuration from usrer home folder The location which will be looked for is ~/.deltaspike/apache-deltaspike.properties A ConfigSource for it will only be added if this file exists. Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/842c84bd Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/842c84bd Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/842c84bd Branch: refs/heads/master Commit: 842c84bd1767905a19e2af01bdfe88d416d1b2da Parents: f767c80 Author: Mark Struberg <[email protected]> Authored: Tue May 16 10:55:15 2017 +0200 Committer: Mark Struberg <[email protected]> Committed: Tue May 16 10:55:15 2017 +0200 ---------------------------------------------------------------------- .../config/DefaultConfigSourceProvider.java | 42 +++++++++++++++++++- .../test/core/api/config/ConfigSourceTest.java | 38 ++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/842c84bd/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/DefaultConfigSourceProvider.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/DefaultConfigSourceProvider.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/DefaultConfigSourceProvider.java index 500839d..fa80e54 100644 --- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/DefaultConfigSourceProvider.java +++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/DefaultConfigSourceProvider.java @@ -23,8 +23,12 @@ import org.apache.deltaspike.core.spi.config.ConfigSource; import org.apache.deltaspike.core.spi.config.ConfigSourceProvider; import org.apache.deltaspike.core.util.ServiceUtils; +import java.io.File; +import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Default implementation which uses: @@ -37,7 +41,11 @@ import java.util.List; */ public class DefaultConfigSourceProvider implements ConfigSourceProvider { - private static final String PROPERTY_FILE_NAME = "META-INF/apache-deltaspike.properties"; + private static final Logger LOG = Logger.getLogger(DefaultConfigSourceProvider.class.getName()); + + private static final String PROPERTY_FILE_NAME = "apache-deltaspike.properties"; + private static final String PROPERTY_FILE_RESOURCE = "META-INF/" + PROPERTY_FILE_NAME; + private static final String PROPERTY_FILE_HOME_NAME = "/.deltaspike/" + PROPERTY_FILE_NAME; private List<ConfigSource> configSources = new ArrayList<ConfigSource>(); @@ -50,8 +58,10 @@ public class DefaultConfigSourceProvider implements ConfigSourceProvider configSources.add(new EnvironmentPropertyConfigSource()); configSources.add(new LocalJndiConfigSource()); + addUserHomeConfigSource(); + EnvironmentPropertyConfigSourceProvider epcsp = - new EnvironmentPropertyConfigSourceProvider(PROPERTY_FILE_NAME, true); + new EnvironmentPropertyConfigSourceProvider(PROPERTY_FILE_RESOURCE, true); configSources.addAll(epcsp.getConfigSources()); registerPropertyFileConfigs(); @@ -59,6 +69,34 @@ public class DefaultConfigSourceProvider implements ConfigSourceProvider /** + * Add a ConfigSource for files in the user home folder IF it exists! + * The location is ~/.deltaspike/apache-deltaspike.properties + */ + private void addUserHomeConfigSource() + { + String userHome = System.getProperty("user.home"); + if (userHome != null && !userHome.isEmpty()) + { + File dsHome = new File(userHome, PROPERTY_FILE_HOME_NAME); + if (dsHome.exists()) + { + try + { + ConfigSource dsHomeConfigSource = new PropertyFileConfigSource(dsHome.toURI().toURL()); + configSources.add(dsHomeConfigSource); + LOG.log(Level.INFO, "Reading configuration from {}", dsHome.getAbsolutePath()); + } + catch (MalformedURLException e) + { + LOG.log(Level.WARNING, "Could not read configuration from " + dsHome.getAbsolutePath(), e); + } + + } + } + } + + + /** * Load all {@link PropertyFileConfig}s which are registered via * {@code java.util.ServiceLoader}. */ http://git-wip-us.apache.org/repos/asf/deltaspike/blob/842c84bd/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigSourceTest.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigSourceTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigSourceTest.java index 89407de..ee045d2 100644 --- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigSourceTest.java +++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigSourceTest.java @@ -18,15 +18,23 @@ */ package org.apache.deltaspike.test.core.api.config; +import java.io.File; +import java.io.FileWriter; + import org.apache.deltaspike.core.api.config.ConfigResolver; import org.junit.Assert; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; /** * Unit tests for {@link org.apache.deltaspike.core.spi.config.ConfigSource} */ public class ConfigSourceTest { + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Test public void testConfigViaSystemProperty() { @@ -110,4 +118,34 @@ public class ConfigSourceTest } + @Test + public void testUserHomeConfigProperties() throws Exception { + String userHomeKey = "user.home"; + String oldUserHome = System.getProperty(userHomeKey); + try + { + File newUserHomeFolder = temporaryFolder.newFolder(); + System.setProperty(userHomeKey, newUserHomeFolder.getAbsolutePath()); + + File dsHomeConfig = new File(newUserHomeFolder, ".deltaspike/apache-deltaspike.properties"); + dsHomeConfig.getParentFile().mkdirs(); + + FileWriter fw = new FileWriter(dsHomeConfig); + fw.write("ds.test.fromHome=withLove\ndeltaspike_ordinal=123"); + + fw.close(); + + // force freshly picking up all ConfigSources for this test + ConfigResolver.freeConfigSources(); + + Assert.assertEquals("withLove", ConfigResolver.getPropertyValue("ds.test.fromHome")); + } + finally + { + System.setProperty(userHomeKey, oldUserHome); + ConfigResolver.freeConfigSources(); + } + } + + }
