diff --git a/trellis-app/src/main/java/org/trellisldp/app/config/TrellisConfiguration.java b/trellis-app/src/main/java/org/trellisldp/app/config/TrellisConfiguration.java index fafd7610c..f40e3ca72 100644 --- a/trellis-app/src/main/java/org/trellisldp/app/config/TrellisConfiguration.java +++ b/trellis-app/src/main/java/org/trellisldp/app/config/TrellisConfiguration.java @@ -13,10 +13,17 @@ */ package org.trellisldp.app.config; +import static java.util.Collections.synchronizedMap; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonProperty; import io.dropwizard.Configuration; +import java.util.HashMap; +import java.util.Map; + import javax.validation.constraints.NotNull; /** @@ -63,6 +70,8 @@ public class TrellisConfiguration extends Configuration { private String resourceLocation = null; + private final Map extras = synchronizedMap(new HashMap<>()); + /** * Get the base URL for the partition. * @return the partition baseURL @@ -171,6 +180,27 @@ public String getResources() { return resourceLocation; } + /** + * Set an extra configuration value. + * @param name the name of this config value + * @param value the value to set + * @return this config for chaining + */ + @JsonAnySetter + public TrellisConfiguration setAdditionalConfig(final String name, final Object value) { + extras.put(name, value); + return this; + } + + /** + * Get any extra metadata. + * @return a {@link Map} of any extra metadata + */ + @JsonAnyGetter + public Map any() { + return extras; + } + /** * Set the cache max-age value. * @param cacheMaxAge the cache max age header value diff --git a/trellis-app/src/test/java/org/trellisldp/app/config/TrellisConfigurationTest.java b/trellis-app/src/test/java/org/trellisldp/app/config/TrellisConfigurationTest.java index 562bc146b..71390d5f1 100644 --- a/trellis-app/src/test/java/org/trellisldp/app/config/TrellisConfigurationTest.java +++ b/trellis-app/src/test/java/org/trellisldp/app/config/TrellisConfigurationTest.java @@ -13,6 +13,7 @@ */ package org.trellisldp.app.config; +import static com.google.common.collect.Lists.newArrayList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; @@ -23,6 +24,8 @@ import io.dropwizard.jersey.validation.Validators; import java.io.File; +import java.util.List; +import java.util.Map; import org.junit.jupiter.api.Test; import org.junit.platform.runner.JUnitPlatform; @@ -49,6 +52,14 @@ public void testConfigurationGeneral1() throws Exception { assertNull(config.getResources()); assertEquals((Integer) 2, config.getBinaryHierarchyLevels()); assertEquals((Integer) 1, config.getBinaryHierarchyLength()); + assertEquals("my.cluster.node", config.any().get("cassandraAddress")); + assertEquals((Integer)245993, config.any().get("cassandraPort")); + @SuppressWarnings("unchecked") + final Map extraConfig = (Map) config.any().get("extraConfigValues"); + assertTrue((Boolean) extraConfig.get("one")); + @SuppressWarnings("unchecked") + final List list = (List) extraConfig.get("two"); + assertEquals(newArrayList("value1", "value2"), list); } diff --git a/trellis-app/src/test/resources/config1.yml b/trellis-app/src/test/resources/config1.yml index caa568780..ef4f2a1d9 100644 --- a/trellis-app/src/test/resources/config1.yml +++ b/trellis-app/src/test/resources/config1.yml @@ -77,3 +77,13 @@ cors: binaryHierarchyLevels: 2 binaryHierarchyLength: 1 + +cassandraAddress: my.cluster.node +cassandraPort: 245993 + +extraConfigValues: + one: true + two: + - "value1" + - "value2" +