diff --git a/Plan/common/build.gradle b/Plan/common/build.gradle index bf431e10c..aba4e02e1 100644 --- a/Plan/common/build.gradle +++ b/Plan/common/build.gradle @@ -101,6 +101,15 @@ dependencies { testImplementation "org.testcontainers:nginx:$testContainersVersion" } +test { + environment "PLAN_TEST_NODE_STRING", "String" + environment "PLAN_TEST_NODE_BOOLEAN", "true" + environment "PLAN_TEST_NODE_INTEGER", "5" + environment "PLAN_TEST_NODE_DOUBLE", "0.5" + environment "PLAN_TEST_NODE_LONG", "9223372036854775807" + environment "PLAN_TEST_NODE_STRINGLIST", "- Test\n- Another" +} + task updateVersion(type: Copy) { from('src/main/resources') { include 'plugin.yml' diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/ConfigNode.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/ConfigNode.java index fbce7f56e..ad0636031 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/ConfigNode.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/ConfigNode.java @@ -200,6 +200,14 @@ public class ConfigNode { return key; } + private String getEnvironmentVariableKey() { + String deepKey = parent != null ? parent.getKey(true) + "." + key : ""; + if (deepKey.startsWith(".")) { + deepKey = deepKey.substring(1); + } + return "PLAN_" + StringUtils.replaceChars(StringUtils.upperCase(deepKey), '.', '_'); + } + public void sort() { Collections.sort(nodeOrder); } @@ -255,32 +263,51 @@ public class ConfigNode { this.comment = comment; } + private String getEnvironmentVariable() { + String key = getEnvironmentVariableKey(); + String variable = System.getenv(key); + Map env = System.getenv(); + return variable; + } + public List getStringList() { + String environmentVariable = getEnvironmentVariable(); + if (environmentVariable != null) return new ConfigValueParser.StringListParser().compose(environmentVariable); return value == null ? Collections.emptyList() : new ConfigValueParser.StringListParser().compose(value); } public Integer getInteger() { + String environmentVariable = getEnvironmentVariable(); + if (environmentVariable != null) return new ConfigValueParser.IntegerParser().compose(environmentVariable); return value == null ? null : new ConfigValueParser.IntegerParser().compose(value); } public Long getLong() { + String environmentVariable = getEnvironmentVariable(); + if (environmentVariable != null) return new ConfigValueParser.LongParser().compose(environmentVariable); return value == null ? null : new ConfigValueParser.LongParser().compose(value); } public String getString() { + String environmentVariable = getEnvironmentVariable(); + if (environmentVariable != null) return new ConfigValueParser.StringParser().compose(environmentVariable); return value == null ? null : new ConfigValueParser.StringParser().compose(value); } public Double getDouble() { + String environmentVariable = getEnvironmentVariable(); + if (environmentVariable != null) return new ConfigValueParser.DoubleParser().compose(environmentVariable); return value == null ? null : new ConfigValueParser.DoubleParser().compose(value); } public boolean getBoolean() { + String environmentVariable = getEnvironmentVariable(); + if (environmentVariable != null) return new ConfigValueParser.BooleanParser().compose(environmentVariable); return new ConfigValueParser.BooleanParser().compose(value); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/ConfigValueParser.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/ConfigValueParser.java index 36d86d1a6..388c3cf82 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/ConfigValueParser.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/ConfigValueParser.java @@ -39,6 +39,8 @@ public interface ConfigValueParser { return new BooleanParser(); } else if (Long.class.isAssignableFrom(type)) { return new LongParser(); + } else if (Double.class.isAssignableFrom(type)) { + return new DoubleParser(); } else if (Integer.class.isAssignableFrom(type)) { return new IntegerParser(); } diff --git a/Plan/common/src/test/java/com/djrapitops/plan/settings/config/ConfigNodeTest.java b/Plan/common/src/test/java/com/djrapitops/plan/settings/config/ConfigNodeTest.java index ac56058ee..fe67e6dc4 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/settings/config/ConfigNodeTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/settings/config/ConfigNodeTest.java @@ -393,4 +393,52 @@ class ConfigNodeTest { }); }).collect(Collectors.toList()); } + + @Test + void environmentVariableString() { + ConfigNode node = new ConfigNode("Test.Node.String", new ConfigNode("", null, null), null); + String expected = "String"; + String result = node.getString(); + assertEquals(expected, result); + } + + @Test + void environmentVariableBoolean() { + ConfigNode node = new ConfigNode("Test.Node.Boolean", new ConfigNode("", null, null), null); + Boolean expected = true; + Boolean result = node.getBoolean(); + assertEquals(expected, result); + } + + @Test + void environmentVariableInteger() { + ConfigNode node = new ConfigNode("Test.Node.Integer", new ConfigNode("", null, null), null); + Integer expected = 5; + Integer result = node.getInteger(); + assertEquals(expected, result); + } + + @Test + void environmentVariableDouble() { + ConfigNode node = new ConfigNode("Test.Node.Double", new ConfigNode("", null, null), null); + Double expected = 0.5; + Double result = node.getDouble(); + assertEquals(expected, result); + } + + @Test + void environmentVariableLong() { + ConfigNode node = new ConfigNode("Test.Node.Long", new ConfigNode("", null, null), null); + Long expected = Long.MAX_VALUE; + Long result = node.getLong(); + assertEquals(expected, result); + } + + @Test + void environmentVariableStringList() { + ConfigNode node = new ConfigNode("Test.Node.StringList", new ConfigNode("", null, null), null); + List expected = List.of("Test", "Another"); + List result = node.getStringList(); + assertEquals(expected, result); + } } \ No newline at end of file