diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/ExtendedProperties.java b/common/source/java/ch/systemsx/cisd/common/utilities/ExtendedProperties.java index 03a756fe107620ba4cbd22811d4c8ab5f0dd2564..f9001e363e866280b3f2005dbecdc5f5272646fd 100644 --- a/common/source/java/ch/systemsx/cisd/common/utilities/ExtendedProperties.java +++ b/common/source/java/ch/systemsx/cisd/common/utilities/ExtendedProperties.java @@ -55,22 +55,19 @@ public final class ExtendedProperties extends Properties /** The minimum length a string should have to be considered. */ private static final int MIN_LENGTH = PREFIX.length() + SUFFIX.length() + 1; - /** - * @see Properties#Properties() - */ - public ExtendedProperties() + public static ExtendedProperties createWith(Properties properties) { - super(); + ExtendedProperties result = new ExtendedProperties(); + result.putAll(properties); + return result; } /** - * Creates an empty property list with the specified defaults. - * - * @see Properties#Properties(Properties) + * @see Properties#Properties() */ - public ExtendedProperties(Properties defaults) + public ExtendedProperties() { - super(defaults); + super(); } /** @@ -79,10 +76,15 @@ public final class ExtendedProperties extends Properties * @param prefix string, each property key should start with. * @param dropPrefix If <code>true</code> the prefix will be removed from the key. */ + public static ExtendedProperties getSubset(Properties properties, String prefix, boolean dropPrefix) + { + return ExtendedProperties.createWith(properties).getSubset(prefix, dropPrefix); + } + public final ExtendedProperties getSubset(final String prefix, boolean dropPrefix) { assert prefix != null : "Missing prefix"; - + ExtendedProperties result = new ExtendedProperties(); int prefixLength = prefix.length(); for (Enumeration<?> enumeration = propertyNames(); enumeration.hasMoreElements();) @@ -96,6 +98,21 @@ public final class ExtendedProperties extends Properties return result; } + /** + * Removes all properies with names starting with given prefix + */ + public void removeSubset(final String prefix) + { + for (Enumeration<?> enumeration = propertyNames(); enumeration.hasMoreElements();) + { + String key = enumeration.nextElement().toString(); + if (key.startsWith(prefix)) + { + remove(key); + } + } + } + private final String expandValue(final String key, final String value) { if (value == null || value.length() < MIN_LENGTH) diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ExtendedPropertiesTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ExtendedPropertiesTest.java index d347531d710fe55996c5d04f6921a73e7ca5d602..117fb2865ca56ab97d0a9373a0ec383f706bbc21 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ExtendedPropertiesTest.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ExtendedPropertiesTest.java @@ -17,7 +17,6 @@ package ch.systemsx.cisd.common.utilities; import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertNull; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -46,15 +45,13 @@ public final class ExtendedPropertiesTest @Test public final void testConstructor() { - ExtendedProperties newProps = new ExtendedProperties(extendedProperties); + ExtendedProperties newProps = ExtendedProperties.createWith(extendedProperties); assertEquals(5, extendedProperties.size()); - // We created an EMPTY list with defaults. - assertEquals(0, newProps.size()); - assertEquals("{}", newProps.toString()); - // Returns the default value... - assertEquals("eins", extendedProperties.getProperty("one")); - // ...but the property itself is unknown. - assertNull(newProps.get("one")); + assertEquals(extendedProperties.size(), newProps.size()); + String key = "one"; + String expectedValue = "eins"; + assertEquals(expectedValue, extendedProperties.getProperty(key)); + assertEquals(extendedProperties.getProperty(key), newProps.getProperty(key)); } @Test @@ -67,21 +64,33 @@ public final class ExtendedPropertiesTest @Test public final void testGetSubsetString() + { + int size = extendedProperties.size(); + extendedProperties.removeSubset("t"); + assert extendedProperties.size() == size - 2; + + size = extendedProperties.size(); + extendedProperties.removeSubset("t"); + assert extendedProperties.size() == size; // nothing removed + } + + @Test + public final void testRemoveSubsetString() { ExtendedProperties props = extendedProperties.getSubset("t", false); assert props.size() == 2; assert props.getProperty("two").equals("zwei"); assert props.getProperty("three").equals("drei"); - + props = extendedProperties.getSubset("un", false); assert props.size() == 1; assert props.getProperty("un").equals("eins"); - + props = extendedProperties.getSubset("t", true); assert props.size() == 2; assert props.getProperty("wo").equals("zwei"); assert props.getProperty("hree").equals("drei"); - + props = extendedProperties.getSubset("un", true); assert props.size() == 1; assert props.getProperty("").equals("eins"); @@ -94,7 +103,7 @@ public final class ExtendedPropertiesTest ExtendedProperties props = new ExtendedProperties(); props.setProperty("a", "${b}"); props.setProperty("b", "${a}"); - assertEquals("${b}", props.getProperty("b")); + assertEquals("${b}", props.getProperty("b")); // Three nodes cyclic dependencies props = new ExtendedProperties(); props.setProperty("a", "A${b}");