Skip to content

Commit 61fd210

Browse files
GregBestlandolim7t
authored andcommitted
Add map support to DriverConfigProfile
1 parent e999158 commit 61fd210

4 files changed

Lines changed: 67 additions & 1 deletion

File tree

core/src/main/java/com/datastax/oss/driver/api/core/config/DriverConfigProfile.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.time.Duration;
1919
import java.util.List;
20+
import java.util.Map;
2021

2122
/**
2223
* A profile in the driver's configuration.
@@ -52,6 +53,10 @@ public interface DriverConfigProfile {
5253

5354
DriverConfigProfile withStringList(DriverOption option, List<String> value);
5455

56+
Map<String, String> getStringMap(DriverOption option);
57+
58+
DriverConfigProfile withStringMap(DriverOption option, Map<String, String> value);
59+
5560
/** Returns a size in bytes. */
5661
long getBytes(DriverOption option);
5762

core/src/main/java/com/datastax/oss/driver/internal/core/config/typesafe/TypesafeDriverConfigProfile.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@
1717

1818
import com.datastax.oss.driver.api.core.config.DriverConfigProfile;
1919
import com.datastax.oss.driver.api.core.config.DriverOption;
20+
import com.google.common.collect.ImmutableMap;
2021
import com.google.common.collect.MapMaker;
2122
import com.typesafe.config.Config;
2223
import com.typesafe.config.ConfigFactory;
24+
import com.typesafe.config.ConfigValue;
2325
import com.typesafe.config.ConfigValueFactory;
26+
import com.typesafe.config.ConfigValueType;
2427
import java.time.Duration;
2528
import java.util.Collections;
2629
import java.util.List;
30+
import java.util.Map;
2731
import java.util.Set;
2832
import java.util.concurrent.ConcurrentHashMap;
2933
import java.util.concurrent.ConcurrentMap;
@@ -97,6 +101,33 @@ public DriverConfigProfile withStringList(DriverOption option, List<String> valu
97101
return with(option, value);
98102
}
99103

104+
@Override
105+
public Map<String, String> getStringMap(DriverOption option) {
106+
Config subConfig = getCached(option.getPath(), getEffectiveOptions()::getConfig);
107+
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
108+
for (Map.Entry<String, ConfigValue> entry : subConfig.entrySet()) {
109+
if (entry.getValue().valueType().equals(ConfigValueType.STRING)) {
110+
builder.put(entry.getKey(), (String) entry.getValue().unwrapped());
111+
}
112+
}
113+
return builder.build();
114+
}
115+
116+
@Override
117+
public DriverConfigProfile withStringMap(DriverOption option, Map<String, String> map) {
118+
Base base = getBaseProfile();
119+
// Add the new option to any already derived options
120+
Config newAdded = getAddedOptions();
121+
for (String key : map.keySet()) {
122+
newAdded =
123+
newAdded.withValue(
124+
option.getPath() + "." + key, ConfigValueFactory.fromAnyRef(map.get(key)));
125+
}
126+
Derived derived = new Derived(base, newAdded);
127+
base.register(derived);
128+
return derived;
129+
}
130+
100131
@Override
101132
public long getBytes(DriverOption option) {
102133
return getCached(option.getPath(), getEffectiveOptions()::getBytes);

core/src/test/java/com/datastax/oss/driver/internal/core/config/typesafe/MockOptions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919

2020
enum MockOptions implements DriverOption {
2121
REQUIRED_INT("required_int", true),
22-
OPTIONAL_INT("optional_int", false);
22+
OPTIONAL_INT("optional_int", false),
23+
OPTIONAL_AUTH("auth_provider", false);
2324

2425
private final String path;
2526
private final boolean required;

core/src/test/java/com/datastax/oss/driver/internal/core/config/typesafe/TypeSafeDriverConfigTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import com.datastax.oss.driver.api.core.config.DriverConfigProfile;
2222
import com.typesafe.config.Config;
2323
import com.typesafe.config.ConfigFactory;
24+
import java.util.HashMap;
25+
import java.util.Map;
2426
import org.junit.Rule;
2527
import org.junit.Test;
2628
import org.junit.rules.ExpectedException;
@@ -94,6 +96,33 @@ public void should_create_derived_profile_overriding_option() {
9496
assertThat(derived.getInt(MockOptions.REQUIRED_INT)).isEqualTo(43);
9597
}
9698

99+
@Test
100+
public void should_fetch_string_map() {
101+
TypeSafeDriverConfig config =
102+
parse(
103+
"required_int = 42 \n auth_provider { auth_thing_one= one \n auth_thing_two = two \n auth_thing_three = three}");
104+
DriverConfigProfile base = config.getDefaultProfile();
105+
base.getStringMap(MockOptions.OPTIONAL_AUTH);
106+
Map<String, String> map = base.getStringMap(MockOptions.OPTIONAL_AUTH);
107+
assertThat(map.entrySet().size()).isEqualTo(3);
108+
assertThat(map.get("auth_thing_one")).isEqualTo("one");
109+
assertThat(map.get("auth_thing_two")).isEqualTo("two");
110+
assertThat(map.get("auth_thing_three")).isEqualTo("three");
111+
}
112+
113+
@Test
114+
public void should_create_derived_profile_with_string_map() {
115+
TypeSafeDriverConfig config = parse("required_int = 42");
116+
Map<String, String> authThingMap = new HashMap<>();
117+
authThingMap.put("auth_thing_one", "one");
118+
authThingMap.put("auth_thing_two", "two");
119+
authThingMap.put("auth_thing_three", "three");
120+
DriverConfigProfile base = config.getDefaultProfile();
121+
DriverConfigProfile mapBase = base.withStringMap(MockOptions.OPTIONAL_AUTH, authThingMap);
122+
Map<String, String> fetchedMap = mapBase.getStringMap(MockOptions.OPTIONAL_AUTH);
123+
assertThat(fetchedMap).isEqualTo(authThingMap);
124+
}
125+
97126
@Test
98127
public void should_reload() {
99128
TypeSafeDriverConfig config =

0 commit comments

Comments
 (0)