diff --git a/README.md b/README.md
index e8b50c7c..2b494445 100644
--- a/README.md
+++ b/README.md
@@ -29,6 +29,7 @@ Requirements
* Fixed Issue #24 - ExecutionResultsCollector didn't work with forked mode
* Added 3rd colour to usage report pie charts to show not run state
* Corrected the path to the screenshots in the report data and the final report
+* Replaced Apache config with [Typesafe Config](https://github.com/typesafehub/config) - similar functionality but provides better nesting of properties, variable substitution
1.0.3
-----
diff --git a/api/pom.xml b/api/pom.xml
index 3a26cf01..ab107b3f 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -13,10 +13,12 @@
SubSteps API
+
- commons-configuration
- commons-configuration
+ com.typesafe
+ config
+
org.slf4j
slf4j-api
diff --git a/api/src/main/java/com/technophobia/substeps/model/Configuration.java b/api/src/main/java/com/technophobia/substeps/model/Configuration.java
index 23d61c6a..7e5901d1 100644
--- a/api/src/main/java/com/technophobia/substeps/model/Configuration.java
+++ b/api/src/main/java/com/technophobia/substeps/model/Configuration.java
@@ -19,18 +19,12 @@
package com.technophobia.substeps.model;
-import com.technophobia.substeps.model.exception.SubstepsConfigurationException;
-import org.apache.commons.configuration.CombinedConfiguration;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.commons.configuration.tree.OverrideCombiner;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
/**
* @author ian
@@ -41,31 +35,12 @@ public enum Configuration {
private static final Logger logger = LoggerFactory.getLogger(Configuration.class);
- private final CombinedConfiguration combinedConfig = new CombinedConfiguration(
- new OverrideCombiner());
+ private final Config config;
private Configuration() {
- initialise();
- }
-
- private void initialise() {
-
final String resourceBundleName = resourceBundleName();
+ config = ConfigFactory.load(resourceBundleName);
- final URL customPropsUrl = Configuration.class.getResource(resourceBundleName);
-
- if (customPropsUrl != null) {
-
- try {
- final PropertiesConfiguration customProps = new PropertiesConfiguration(
- customPropsUrl);
- combinedConfig.addConfiguration(customProps, "customProps");
-
- } catch (final ConfigurationException e) {
- logger.error("error loading custom properties", e);
-
- }
- }
}
@@ -76,77 +51,39 @@ private void initialise() {
* @param url to a properties file containing default values
* @param name to name of the properties file that is being added
*/
+ @Deprecated
public void addDefaultProperties(final URL url, final String name) {
-
- if (url != null) {
- try {
-
- final PropertiesConfiguration defaultProps = new PropertiesConfiguration(url);
-
- combinedConfig.addConfiguration(defaultProps, name);
- } catch (final ConfigurationException e) {
- logger.error("error loading default properties", e);
- throw new SubstepsConfigurationException(e);
- }
- }
+ throw new IllegalArgumentException("method no longer supported, rename default substep library properties to reference.conf and they will be loaded by Typesafe config");
}
- public void addDefaultProperty(final String key, final Object value) {
- combinedConfig.addProperty(key, value);
- }
-
public String getConfigurationInfo() {
-
- final List configurationNameList = combinedConfig.getConfigurationNameList();
-
- final StringBuilder buf = new StringBuilder();
-
- for (final String configurationName : configurationNameList) {
-
- buf.append("In config: ").append(configurationName).append("\n");
-
- final org.apache.commons.configuration.Configuration cfg = combinedConfig
- .getConfiguration(configurationName);
-
- final Iterator keys = cfg.getKeys();
-
- while (keys.hasNext()) {
- final String key = keys.next();
-
- final String val = cfg.getString(key);
-
- buf.append("key: ").append(key).append("\tval: [").append(val).append("]\n");
- }
-
- buf.append("\n");
- }
- return buf.toString();
+ return config.root().render();
}
private static String resourceBundleName() {
- return "/" + System.getProperty("environment", "localhost") + ".properties";
+ return System.getProperty("environment", "localhost") + ".properties";
}
public String getString(final String key) {
- return combinedConfig.getString(key);
+ return config.getString(key);
}
public int getInt(final String key) {
- return combinedConfig.getInt(key);
+ return config.getInt(key);
}
public long getLong(final String key) {
- return combinedConfig.getLong(key);
+ return config.getLong(key);
}
public boolean getBoolean(final String key) {
- return combinedConfig.getBoolean(key);
+ return config.getBoolean(key);
}
}
diff --git a/api/src/main/java/org/substeps/runner/CoreSubstepsPropertiesConfiguration.java b/api/src/main/java/org/substeps/runner/CoreSubstepsPropertiesConfiguration.java
index 84bac3eb..11beec82 100644
--- a/api/src/main/java/org/substeps/runner/CoreSubstepsPropertiesConfiguration.java
+++ b/api/src/main/java/org/substeps/runner/CoreSubstepsPropertiesConfiguration.java
@@ -41,14 +41,6 @@ public enum CoreSubstepsPropertiesConfiguration implements CoreSubstepsConfigura
private CoreSubstepsPropertiesConfiguration() {
- final URL defaultURL = getClass().getResource("/default-core-substeps.properties");
-
- if (defaultURL == null){
- throw new IllegalStateException("Unable to find default core properties");
- }
-
- Configuration.INSTANCE.addDefaultProperties(defaultURL, "default-core-substeps");
-
stepDepthForDescription = Configuration.INSTANCE.getInt("step.depth.description");
logUncalledAndUnusedStepImpls = Configuration.INSTANCE.getBoolean("log.unused.uncalled");
@@ -57,7 +49,6 @@ private CoreSubstepsPropertiesConfiguration() {
reportDataBaseDir = Configuration.INSTANCE.getString("report.data.base.dir");
-
LOG.info("Using core properties:\n" + Configuration.INSTANCE.getConfigurationInfo());
}
diff --git a/api/src/main/resources/reference.conf b/api/src/main/resources/reference.conf
new file mode 100644
index 00000000..54e7a1e5
--- /dev/null
+++ b/api/src/main/resources/reference.conf
@@ -0,0 +1,12 @@
+
+# depth limiter for the creation of step description, beyond 6 deep no descriptions
+step.depth.description=6
+
+# flag tp control whether unused calls are logged out, generally true for CI, complete executions, false for Intellij, junit tests etc
+log.unused.uncalled=false
+
+# flag to enable pretty printing of the json report data
+report.data.pretty.print=false
+
+# the base directory under which report data will be written
+report.data.base.dir=target
\ No newline at end of file
diff --git a/api/src/test/java/com/technophobia/substeps/model/ConfigurationTest.java b/api/src/test/java/com/technophobia/substeps/model/ConfigurationTest.java
index 9d42f67e..3dc4576e 100644
--- a/api/src/test/java/com/technophobia/substeps/model/ConfigurationTest.java
+++ b/api/src/test/java/com/technophobia/substeps/model/ConfigurationTest.java
@@ -19,6 +19,7 @@
package com.technophobia.substeps.model;
+import com.typesafe.config.ConfigException;
import org.junit.Assert;
import org.junit.Test;
@@ -38,8 +39,8 @@ public void testConfig() {
// set the custom props, then override with defaults
System.setProperty("environment", "custom");
- final URL defaultPropsUrl = ConfigurationTest.class.getResource("/default.properties");
- Configuration.INSTANCE.addDefaultProperties(defaultPropsUrl, "default");
+// final URL defaultPropsUrl = ConfigurationTest.class.getResource("/default.properties");
+// Configuration.INSTANCE.addDefaultProperties(defaultPropsUrl, "default");
// overridden
Assert.assertThat(Configuration.INSTANCE.getString("overridden.key"), is("overridden"));
@@ -50,7 +51,15 @@ public void testConfig() {
// custom
Assert.assertThat(Configuration.INSTANCE.getString("custom.key"), is("custom-key"));
+
+
+ }
+
+ @Test(expected = ConfigException.Missing.class)
+ public void negativeTest(){
+ System.setProperty("environment", "custom");
Assert.assertNull(Configuration.INSTANCE.getString("non-existant"));
+
}
}
diff --git a/api/src/test/resources/reference.conf b/api/src/test/resources/reference.conf
new file mode 100644
index 00000000..4a720ccc
--- /dev/null
+++ b/api/src/test/resources/reference.conf
@@ -0,0 +1,2 @@
+overridden.key=default-overridden
+default.key=default-key
\ No newline at end of file
diff --git a/core/pom.xml b/core/pom.xml
index 00be73bc..fffb451c 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -67,12 +67,12 @@
velocity
velocity
1.5
-
-
- commons-lang
- commons-lang
-
-
+
+
+
+
+
+
org.apache.commons
diff --git a/core/src/main/java/com/technophobia/substeps/model/PatternMap.java b/core/src/main/java/com/technophobia/substeps/model/PatternMap.java
index 3d689d2a..d931237f 100755
--- a/core/src/main/java/com/technophobia/substeps/model/PatternMap.java
+++ b/core/src/main/java/com/technophobia/substeps/model/PatternMap.java
@@ -19,7 +19,7 @@
package com.technophobia.substeps.model;
import com.google.common.base.Strings;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.Map.Entry;
diff --git a/glossary/src/main/java/com/technophobia/substeps/glossary/HTMLSubstepsPublisher.java b/glossary/src/main/java/com/technophobia/substeps/glossary/HTMLSubstepsPublisher.java
index 3768a28e..da82613d 100644
--- a/glossary/src/main/java/com/technophobia/substeps/glossary/HTMLSubstepsPublisher.java
+++ b/glossary/src/main/java/com/technophobia/substeps/glossary/HTMLSubstepsPublisher.java
@@ -18,7 +18,7 @@
*/
package com.technophobia.substeps.glossary;
-import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,12 +67,12 @@ private void buildStepTagRows(final StringBuilder buf, final Collection");
for (final Step step : scenario.getSteps()) {
- buf.append(StringEscapeUtils.escapeHtml(step.getLine())).append("
").append("\n");
+ buf.append(StringEscapeUtils.escapeHtml4(step.getLine())).append("
").append("\n");
}
buf.append("");
buf.append("
\n");
diff --git a/pom.xml b/pom.xml
index be4f66f0..a23761a6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -201,19 +201,9 @@
- commons-configuration
- commons-configuration
- 1.10
-
-
-
+ com.typesafe
+ config
+ 1.3.1