[HUDI-3528] Fix String convert issue and overwrite putAll method in TypedProperties.java (#4920)
This commit is contained in:
@@ -25,6 +25,7 @@ import java.util.Enumeration;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -63,11 +64,22 @@ public class TypedProperties extends Properties implements Serializable {
|
|||||||
public Set<String> stringPropertyNames() {
|
public Set<String> stringPropertyNames() {
|
||||||
Set<String> set = new LinkedHashSet<>();
|
Set<String> set = new LinkedHashSet<>();
|
||||||
for (Object key : this.keys) {
|
for (Object key : this.keys) {
|
||||||
|
if (key instanceof String) {
|
||||||
set.add((String) key);
|
set.add((String) key);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void putAll(Properties t) {
|
||||||
|
for (Map.Entry<?, ?> e : t.entrySet()) {
|
||||||
|
if (!containsKey(String.valueOf(e.getKey()))) {
|
||||||
|
keys.add(e.getKey());
|
||||||
|
}
|
||||||
|
super.put(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized Object put(Object key, Object value) {
|
public synchronized Object put(Object key, Object value) {
|
||||||
keys.remove(key);
|
keys.remove(key);
|
||||||
|
|||||||
@@ -99,8 +99,37 @@ public class TestTypedProperties {
|
|||||||
properties.put("key9", "true");
|
properties.put("key9", "true");
|
||||||
|
|
||||||
TypedProperties typedProperties = new TypedProperties(properties);
|
TypedProperties typedProperties = new TypedProperties(properties);
|
||||||
|
assertTypeProperties(typedProperties, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPutAllProperties() {
|
||||||
|
Properties firstProp = new TypedProperties();
|
||||||
|
firstProp.put("key0", "true");
|
||||||
|
firstProp.put("key1", "false");
|
||||||
|
firstProp.put("key2", "true");
|
||||||
|
|
||||||
|
TypedProperties firstProperties = new TypedProperties(firstProp);
|
||||||
|
assertTypeProperties(firstProperties, 0);
|
||||||
|
|
||||||
|
TypedProperties secondProperties = new TypedProperties();
|
||||||
|
secondProperties.put("key3", "true");
|
||||||
|
secondProperties.put("key4", "false");
|
||||||
|
secondProperties.put("key5", "true");
|
||||||
|
assertTypeProperties(secondProperties, 3);
|
||||||
|
|
||||||
|
TypedProperties thirdProperties = new TypedProperties();
|
||||||
|
thirdProperties.putAll(firstProp);
|
||||||
|
thirdProperties.putAll(secondProperties);
|
||||||
|
|
||||||
|
assertEquals(3, firstProp.stringPropertyNames().size());
|
||||||
|
assertEquals(3, secondProperties.stringPropertyNames().size());
|
||||||
|
assertEquals(6, thirdProperties.stringPropertyNames().size());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertTypeProperties(TypedProperties typedProperties, int start) {
|
||||||
String[] props = typedProperties.stringPropertyNames().toArray(new String[0]);
|
String[] props = typedProperties.stringPropertyNames().toArray(new String[0]);
|
||||||
for (int i = 0; i < props.length; i++) {
|
for (int i = start; i < props.length; i++) {
|
||||||
assertEquals(String.format("key%d", i), props[i]);
|
assertEquals(String.format("key%d", i), props[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user