mirror of
https://github.com/lightbend/config.git
synced 2025-01-15 14:50:23 +08:00
Merge pull request #496 from karthicks/issue-495
#495 Add Support For Set Types In Config Beans
This commit is contained in:
commit
76bb82cf58
@ -11,9 +11,11 @@ import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.time.Duration;
|
||||
import java.util.Set;
|
||||
|
||||
import com.typesafe.config.Config;
|
||||
import com.typesafe.config.ConfigObject;
|
||||
@ -160,6 +162,8 @@ public class ConfigBeanImpl {
|
||||
return config.getAnyRef(configPropName);
|
||||
} else if (parameterClass == List.class) {
|
||||
return getListValue(beanClass, parameterType, parameterClass, config, configPropName);
|
||||
} else if (parameterClass == Set.class) {
|
||||
return getSetValue(beanClass, parameterType, parameterClass, config, configPropName);
|
||||
} else if (parameterClass == Map.class) {
|
||||
// we could do better here, but right now we don't.
|
||||
Type[] typeArgs = ((ParameterizedType)parameterType).getActualTypeArguments();
|
||||
@ -186,6 +190,10 @@ public class ConfigBeanImpl {
|
||||
}
|
||||
}
|
||||
|
||||
private static Object getSetValue(Class<?> beanClass, Type parameterType, Class<?> parameterClass, Config config, String configPropName) {
|
||||
return new HashSet((List) getListValue(beanClass, parameterType, parameterClass, config, configPropName));
|
||||
}
|
||||
|
||||
private static Object getListValue(Class<?> beanClass, Type parameterType, Class<?> parameterClass, Config config, String configPropName) {
|
||||
Type elementType = ((ParameterizedType)parameterType).getActualTypeArguments()[0];
|
||||
|
||||
|
139
config/src/test/java/beanconfig/SetsConfig.java
Normal file
139
config/src/test/java/beanconfig/SetsConfig.java
Normal file
@ -0,0 +1,139 @@
|
||||
package beanconfig;
|
||||
|
||||
import com.typesafe.config.Config;
|
||||
import com.typesafe.config.ConfigMemorySize;
|
||||
import com.typesafe.config.ConfigObject;
|
||||
import com.typesafe.config.ConfigValue;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Set;
|
||||
|
||||
public class SetsConfig {
|
||||
|
||||
Set<Integer> empty;
|
||||
Set<Integer> ofInt;
|
||||
Set<String> ofString;
|
||||
Set<Double> ofDouble;
|
||||
Set<Long> ofLong;
|
||||
Set<Object> ofNull;
|
||||
Set<Boolean> ofBoolean;
|
||||
Set<Object> ofObject;
|
||||
Set<Config> ofConfig;
|
||||
Set<ConfigObject> ofConfigObject;
|
||||
Set<ConfigValue> ofConfigValue;
|
||||
Set<Duration> ofDuration;
|
||||
Set<ConfigMemorySize> ofMemorySize;
|
||||
Set<StringsConfig> ofStringBean;
|
||||
|
||||
public Set<Integer> getEmpty() {
|
||||
return empty;
|
||||
}
|
||||
|
||||
public void setEmpty(Set<Integer> empty) {
|
||||
this.empty = empty;
|
||||
}
|
||||
|
||||
public Set<Integer> getOfInt() {
|
||||
return ofInt;
|
||||
}
|
||||
|
||||
public void setOfInt(Set<Integer> ofInt) {
|
||||
this.ofInt = ofInt;
|
||||
}
|
||||
|
||||
public Set<String> getOfString() {
|
||||
return ofString;
|
||||
}
|
||||
|
||||
public void setOfString(Set<String> ofString) {
|
||||
this.ofString = ofString;
|
||||
}
|
||||
|
||||
public Set<Double> getOfDouble() {
|
||||
return ofDouble;
|
||||
}
|
||||
|
||||
public void setOfDouble(Set<Double> ofDouble) {
|
||||
this.ofDouble = ofDouble;
|
||||
}
|
||||
|
||||
public Set<Object> getOfNull() {
|
||||
return ofNull;
|
||||
}
|
||||
|
||||
public void setOfNull(Set<Object> ofNull) {
|
||||
this.ofNull = ofNull;
|
||||
}
|
||||
|
||||
public Set<Boolean> getOfBoolean() {
|
||||
return ofBoolean;
|
||||
}
|
||||
|
||||
public void setOfBoolean(Set<Boolean> ofBoolean) {
|
||||
this.ofBoolean = ofBoolean;
|
||||
}
|
||||
|
||||
public Set<Object> getOfObject() {
|
||||
return ofObject;
|
||||
}
|
||||
|
||||
public void setOfObject(Set<Object> ofObject) {
|
||||
this.ofObject = ofObject;
|
||||
}
|
||||
|
||||
public Set<Long> getOfLong() {
|
||||
return ofLong;
|
||||
}
|
||||
|
||||
public void setOfLong(Set<Long> ofLong) {
|
||||
this.ofLong = ofLong;
|
||||
}
|
||||
|
||||
public Set<Config> getOfConfig() {
|
||||
return ofConfig;
|
||||
}
|
||||
|
||||
public void setOfConfig(Set<Config> ofConfig) {
|
||||
this.ofConfig = ofConfig;
|
||||
}
|
||||
|
||||
public Set<ConfigObject> getOfConfigObject() {
|
||||
return ofConfigObject;
|
||||
}
|
||||
|
||||
public void setOfConfigObject(Set<ConfigObject> ofConfigObject) {
|
||||
this.ofConfigObject = ofConfigObject;
|
||||
}
|
||||
|
||||
public Set<ConfigValue> getOfConfigValue() {
|
||||
return ofConfigValue;
|
||||
}
|
||||
|
||||
public void setOfConfigValue(Set<ConfigValue> ofConfigValue) {
|
||||
this.ofConfigValue = ofConfigValue;
|
||||
}
|
||||
|
||||
public Set<Duration> getOfDuration() {
|
||||
return ofDuration;
|
||||
}
|
||||
|
||||
public void setOfDuration(Set<Duration> ofDuration) {
|
||||
this.ofDuration = ofDuration;
|
||||
}
|
||||
|
||||
public Set<ConfigMemorySize> getOfMemorySize() {
|
||||
return ofMemorySize;
|
||||
}
|
||||
|
||||
public void setOfMemorySize(Set<ConfigMemorySize> ofMemorySize) {
|
||||
this.ofMemorySize = ofMemorySize;
|
||||
}
|
||||
|
||||
public Set<StringsConfig> getOfStringBean() {
|
||||
return ofStringBean;
|
||||
}
|
||||
|
||||
public void setOfStringBean(Set<StringsConfig> ofStringBean) {
|
||||
this.ofStringBean = ofStringBean;
|
||||
}
|
||||
}
|
@ -101,5 +101,31 @@
|
||||
"valueObject": {
|
||||
"mandatoryValue": "notNull"
|
||||
}
|
||||
},
|
||||
"sets" : {
|
||||
"empty" : [],
|
||||
"ofInt" : [1, 2, 3, 2, 3],
|
||||
"ofString" : [ ${strings.a}, ${strings.b}, ${strings.c} ],
|
||||
"of-double" : [3.14, 4.14, 4.14, 5.14],
|
||||
"of-long" : { "1" : 32, "2" : 42, "3" : 52 }, // object-to-list conversion
|
||||
"ofNull" : [null, null, null],
|
||||
"ofBoolean" : [true, false, false],
|
||||
"ofArray" : [${arrays.ofString}, ${arrays.ofString}, ${arrays.ofString}],
|
||||
"ofObject" : [${numbers}, ${booleans}, ${strings}],
|
||||
"ofConfig" : [${numbers}, ${booleans}, ${strings}],
|
||||
"ofConfigObject" : [${numbers}, ${booleans}, ${strings}],
|
||||
"ofConfigValue" : [1, 2, "a"],
|
||||
"ofDuration" : [1, 2h, 3 days],
|
||||
"ofMemorySize" : [1024, 1M, 1G],
|
||||
"ofStringBean" : [
|
||||
{
|
||||
abcd : "testAbcdOne"
|
||||
yes : "testYesOne"
|
||||
},
|
||||
{
|
||||
abcd : "testAbcdTwo"
|
||||
yes : "testYesTwo"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -132,6 +132,39 @@ class ConfigBeanFactoryTest extends TestUtils {
|
||||
assertEquals(List(stringsConfigOne, stringsConfigTwo).asJava, beanConfig.getOfStringBean)
|
||||
}
|
||||
|
||||
@Test
|
||||
def testCreateSet() {
|
||||
val beanConfig: SetsConfig = ConfigBeanFactory.create(loadConfig().getConfig("sets"), classOf[SetsConfig])
|
||||
assertNotNull(beanConfig)
|
||||
assertEquals(Set().asJava, beanConfig.getEmpty)
|
||||
assertEquals(Set(1, 2, 3).asJava, beanConfig.getOfInt)
|
||||
assertEquals(Set(32L, 42L, 52L).asJava, beanConfig.getOfLong)
|
||||
assertEquals(Set("a", "b", "c").asJava, beanConfig.getOfString)
|
||||
assertEquals(3, beanConfig.getOfObject.size)
|
||||
assertEquals(3, beanConfig.getOfDouble.size)
|
||||
assertEquals(3, beanConfig.getOfConfig.size)
|
||||
assertTrue(beanConfig.getOfConfig.iterator().next().isInstanceOf[Config])
|
||||
assertEquals(3, beanConfig.getOfConfigObject.size)
|
||||
assertTrue(beanConfig.getOfConfigObject.iterator().next().isInstanceOf[ConfigObject])
|
||||
assertEquals(Set(intValue(1), intValue(2), stringValue("a")),
|
||||
beanConfig.getOfConfigValue.asScala)
|
||||
assertEquals(Set(Duration.ofMillis(1), Duration.ofHours(2), Duration.ofDays(3)),
|
||||
beanConfig.getOfDuration.asScala)
|
||||
assertEquals(Set(ConfigMemorySize.ofBytes(1024),
|
||||
ConfigMemorySize.ofBytes(1048576),
|
||||
ConfigMemorySize.ofBytes(1073741824)),
|
||||
beanConfig.getOfMemorySize.asScala)
|
||||
|
||||
val stringsConfigOne = new StringsConfig();
|
||||
stringsConfigOne.setAbcd("testAbcdOne")
|
||||
stringsConfigOne.setYes("testYesOne")
|
||||
val stringsConfigTwo = new StringsConfig();
|
||||
stringsConfigTwo.setAbcd("testAbcdTwo")
|
||||
stringsConfigTwo.setYes("testYesTwo")
|
||||
|
||||
assertEquals(Set(stringsConfigOne, stringsConfigTwo).asJava, beanConfig.getOfStringBean)
|
||||
}
|
||||
|
||||
@Test
|
||||
def testCreateDuration() {
|
||||
val beanConfig: DurationsConfig = ConfigBeanFactory.create(loadConfig().getConfig("durations"), classOf[DurationsConfig])
|
||||
|
Loading…
Reference in New Issue
Block a user