geirm 01/05/09 17:40:10
Modified: collections/src/java/org/apache/commons/collections
ExtendedProperties.java
collections/src/test/org/apache/commons/collections
TestExtendedProperties.java
Log:
Fixed the problem reported by Thomas Fahrmeyer <[EMAIL PROTECTED]>
where ExtendedProperties would re-process data when making a subset. Hope no one
was depending on that :)
Also adjusted the testcase to test this.
Revision Changes Path
1.3 +31 -30
jakarta-commons/collections/src/java/org/apache/commons/collections/ExtendedProperties.java
Index: ExtendedProperties.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/ExtendedProperties.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ExtendedProperties.java 2001/05/04 02:22:48 1.2
+++ ExtendedProperties.java 2001/05/10 00:40:08 1.3
@@ -168,7 +168,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]>Kent Johnson</a>
* @author <a href="mailto:[EMAIL PROTECTED]>Daniel Rall</a>
* @author <a href="mailto:[EMAIL PROTECTED]>Ilkka Priha</a>
- * @version $Id: ExtendedProperties.java,v 1.2 2001/05/04 02:22:48 geirm Exp $
+ * @version $Id: ExtendedProperties.java,v 1.3 2001/05/10 00:40:08 geirm Exp $
*/
public class ExtendedProperties extends Hashtable
{
@@ -519,7 +519,6 @@
else
{
addProperty(key,value);
- //setProperty(key,value);
}
}
}
@@ -581,7 +580,6 @@
* @param String key
* @param String value
*/
- //public void setProperty(String key, Object token)
public void addProperty(String key, Object token)
{
Object o = this.get(key);
@@ -635,7 +633,7 @@
while (tokenizer.hasMoreTokens())
{
String value = tokenizer.nextToken();
-
+
/*
* we know this is a string, so make sure it
* just goes in rather than risking vectorization
@@ -655,24 +653,35 @@
* to perform operations with configuration
* in a definite order it will be possible.
*/
-
- /*
- * safety check
- */
-
- if( !containsKey( key ) )
- {
- keysAsListed.add(key);
- }
- /*
- * and the value
- */
- put(key, token);
+ addPropertyDirect( key, token );
}
}
}
+ /**
+ * Adds a key/value pair to the map. This routine does
+ * no magic morphing. It ensures the keylist is maintained
+ *
+ * @param key key to use for mapping
+ * @param obj object to store
+ */
+ private void addPropertyDirect( String key, Object obj )
+ {
+ /*
+ * safety check
+ */
+
+ if( !containsKey( key ) )
+ {
+ keysAsListed.add(key);
+ }
+
+ /*
+ * and the value
+ */
+ put(key, obj);
+ }
/**
* Sets a string property w/o checking for commas - used
@@ -719,12 +728,7 @@
}
else
{
- if( !containsKey( key ) )
- {
- keysAsListed.add(key);
- }
-
- put( key, token);
+ addPropertyDirect( key, token );
}
}
@@ -809,7 +813,6 @@
for (Iterator i = c.getKeys() ; i.hasNext() ;)
{
String key = (String) i.next();
- //clearProperty(key);
setProperty( key, c.get(key) );
}
}
@@ -918,14 +921,12 @@
}
/*
- * Make sure to use the setProperty() method and not
- * just put(). setProperty() takes care of catching
- * all the keys in the order they appear in a
- * properties files or the order they are set
- * dynamically.
+ * use addPropertyDirect() - this will plug the data as
+ * is into the Map, but will also do the right thing
+ * re key accounting
*/
- c.setProperty(newKey, get(key));
+ c.addPropertyDirect( newKey, get(key) );
}
}
1.2 +27 -3
jakarta-commons/collections/src/test/org/apache/commons/collections/TestExtendedProperties.java
Index: TestExtendedProperties.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestExtendedProperties.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestExtendedProperties.java 2001/05/04 02:23:44 1.1
+++ TestExtendedProperties.java 2001/05/10 00:40:09 1.2
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestExtendedProperties.java,v
1.1 2001/05/04 02:23:44 geirm Exp $
- * $Revision: 1.1 $
- * $Date: 2001/05/04 02:23:44 $
+ * $Header:
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestExtendedProperties.java,v
1.2 2001/05/10 00:40:09 geirm Exp $
+ * $Revision: 1.2 $
+ * $Date: 2001/05/10 00:40:09 $
*
* ====================================================================
*
@@ -70,7 +70,7 @@
* class
*
* @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
- * @version $Id: TestExtendedProperties.java,v 1.1 2001/05/04 02:23:44 geirm Exp $
+ * @version $Id: TestExtendedProperties.java,v 1.2 2001/05/10 00:40:09 geirm Exp $
*/
public class TestExtendedProperties extends TestCase
{
@@ -119,5 +119,29 @@
* property
*/
assert("This returns scalar", ( eprop.getString("number") instanceof String
) );
+
+ /*
+ * test comma separated string properties
+ */
+ String prop = "hey, that's a test";
+ eprop.setProperty("prop.string", prop);
+ assert("This returns vector", ( eprop.getVector("prop.string") instanceof
java.util.Vector ) );
+
+ String prop2 = "hey\\, that's a test";
+ eprop.remove("prop.string");
+ eprop.setProperty("prop.string", prop2);
+ assert("This returns array", ( eprop.getString("prop.string") instanceof
java.lang.String) );
+
+ /*
+ * test subset : we want to make sure that the EP doesn't reprocess the
data
+ * elements when generating the subset
+ */
+
+ ExtendedProperties subEprop = eprop.subset("prop");
+
+ assert("Returns the full string", subEprop.getString("string").equals(
prop ) );
+ assert("This returns string for subset", ( subEprop.getString("string")
instanceof java.lang.String) );
+ assert("This returns array for subset", ( subEprop.getVector("string")
instanceof java.util.Vector) );
+
}
}