diff --git a/README.md b/README.md index a1cc5d5..fc78650 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,14 @@ remote-configuration { table = "" table = ${?REMOTECONF_DYNAMODB_TABLE} + # Name of the field containing the key + field-key = "key" + field-key = ${?REMOTECONF_DYNAMODB_FIELDKEY} + + # Name of the field containing the value + field-value = "value" + field-value = ${?REMOTECONF_DYNAMODB_FIELDVALUE} + # Prefix. Get only values with key beginning # with the configured prefix prefix = "" diff --git a/src/main/java/io/playrconf/provider/DynamoDbProvider.java b/src/main/java/io/playrconf/provider/DynamoDbProvider.java index 98e397a..4c7990e 100644 --- a/src/main/java/io/playrconf/provider/DynamoDbProvider.java +++ b/src/main/java/io/playrconf/provider/DynamoDbProvider.java @@ -93,6 +93,8 @@ public void loadData(final Config config, final String accessSecret = config.getString("access-secret"); final String region = config.getString("region"); final String tableName = config.getString("table"); + final String fieldKey = config.getString("field-key"); + final String fieldValue = config.getString("field-value"); final String prefix = config.hasPath("prefix") ? config.getString("prefix") : ""; final String separator = config.hasPath("separator") ? config.getString("separator") : "."; @@ -103,6 +105,10 @@ public void loadData(final Config config, throw new ConfigException.BadValue(config.origin(), "access-secret", "Required"); } else if (region == null || region.isEmpty()) { throw new ConfigException.BadValue(config.origin(), "region", "Required"); + } else if (fieldKey == null || fieldKey.isEmpty()) { + throw new ConfigException.BadValue(config.origin(), "field-key", "Required"); + } else if (fieldValue == null || fieldValue.isEmpty()) { + throw new ConfigException.BadValue(config.origin(), "field-value", "Required"); } else if (separator == null || separator.isEmpty()) { throw new ConfigException.BadValue(config.origin(), "separator", "Required"); } @@ -120,14 +126,14 @@ public void loadData(final Config config, try { // Retrieve items from DynamoDB final List> items = amazonDynamoDBClient - .scan(tableName, Arrays.asList("key", "value")) + .scan(tableName, Arrays.asList(fieldKey, fieldValue)) .getItems(); // Retrieve all available objects as "Key -> Value" Tuple2 currentTuple = new Tuple2<>(); for (final Map item : items) { for (final Map.Entry data : item.entrySet()) { - if (data.getKey().compareTo("key") == 0) { + if (data.getKey().compareTo(fieldKey) == 0) { String cfgKey = data .getValue() .getS() @@ -137,7 +143,7 @@ public void loadData(final Config config, cfgKey = cfgKey.substring(1); } currentTuple.setLeft(cfgKey); - } else if (data.getKey().compareTo("value") == 0) { + } else if (data.getKey().compareTo(fieldValue) == 0) { switch (data.getValue().toString().substring(1, 2)) { case "B": { currentTuple.setRight(data.getValue().getBOOL()); diff --git a/src/main/resources/reference.conf b/src/main/resources/reference.conf index 18e1b08..2b4bbca 100644 --- a/src/main/resources/reference.conf +++ b/src/main/resources/reference.conf @@ -17,6 +17,14 @@ remote-configuration { table = "" table = ${?REMOTECONF_DYNAMODB_TABLE} + # Name of the field containing the key + field-key = "key" + field-key = ${?REMOTECONF_DYNAMODB_FIELDKEY} + + # Name of the field containing the value + field-value = "value" + field-value = ${?REMOTECONF_DYNAMODB_FIELDVALUE} + # Prefix. Get only values with key beginning # with the configured prefix prefix = "" diff --git a/src/test/java/io/playrconf/provider/DynamoDbProviderTest.java b/src/test/java/io/playrconf/provider/DynamoDbProviderTest.java index 2fcabe9..dafe160 100644 --- a/src/test/java/io/playrconf/provider/DynamoDbProviderTest.java +++ b/src/test/java/io/playrconf/provider/DynamoDbProviderTest.java @@ -60,6 +60,8 @@ private Config getInitialConfiguration(final String prefix) { + "dynamodb.access-secret = \"" + System.getenv("REMOTECONF_DYNAMODB_SECRET") + "\"\n" + "dynamodb.region = \"" + System.getenv("REMOTECONF_DYNAMODB_REGION") + "\"\n" + "dynamodb.table = \"play-rconf-continuous-integration\"\n" + + "dynamodb.field-key = \"key\"\n" + + "dynamodb.field-value = \"value\"\n" + "dynamodb.prefix = \"" + prefix + "\"\n" + "dynamodb.separator = \".\"\n" );