You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2003/05/22 19:00:55 UTC
cvs commit: jakarta-commons/digester/src/test/org/apache/commons/digester DigesterTestCase.java
rdonkin 2003/05/22 10:00:55
Modified: digester/src/java/org/apache/commons/digester Digester.java
digester/src/test/org/apache/commons/digester
DigesterTestCase.java
Log:
Added extra method that should be called once - and only once - when digester is run. This should allow subclasses to use lazy initialization more easily. Also, changed the javadocs to make it clear that configure may be called more than once. Suggested by Neale Swinnerton.
Revision Changes Path
1.78 +37 -5 jakarta-commons/digester/src/java/org/apache/commons/digester/Digester.java
Index: Digester.java
===================================================================
RCS file: /home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/Digester.java,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -r1.77 -r1.78
--- Digester.java 7 May 2003 09:28:24 -0000 1.77
+++ Digester.java 22 May 2003 17:00:55 -0000 1.78
@@ -2386,9 +2386,18 @@
/**
+ * <p>
* Provide a hook for lazy configuration of this <code>Digester</code>
* instance. The default implementation does nothing, but subclasses
* can override as needed.
+ * </p>
+ *
+ * <p>
+ * <strong>Note</strong> This method may be called more than once.
+ * Once only initialization code should be placed in {@link #initialize}
+ * or the code should take responsibility by checking and setting the
+ * {@link #configured} flag.
+ * </p>
*/
protected void configure() {
@@ -2398,13 +2407,36 @@
}
// Perform lazy configuration as needed
- ; // Nothing required by default
+ initialize(); // call hook method for subclasses that want to be initialized once only
+ // Nothing else required by default
// Set the configuration flag to avoid repeating
configured = true;
}
+
+ /**
+ * <p>
+ * Provides a hook for lazy initialization of this <code>Digester</code>
+ * instance.
+ * The default implementation does nothing, but subclasses
+ * can override as needed.
+ * Digester (by default) only calls this method once.
+ * </p>
+ *
+ * <p>
+ * <strong>Note</strong> This method will be called by {@link #configure}
+ * only when the {@link #configured} flag is false.
+ * Subclasses that override <code>configure</code> or who set <code>configured</code>
+ * may find that this method may be called more than once.
+ * </p>
+ */
+ protected void initialize() {
+
+ // Perform lazy initialization as needed
+ ; // Nothing required by default
+ }
// -------------------------------------------------------- Package Methods
1.13 +23 -5 jakarta-commons/digester/src/test/org/apache/commons/digester/DigesterTestCase.java
Index: DigesterTestCase.java
===================================================================
RCS file: /home/cvs/jakarta-commons/digester/src/test/org/apache/commons/digester/DigesterTestCase.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- DigesterTestCase.java 16 Apr 2003 11:23:49 -0000 1.12
+++ DigesterTestCase.java 22 May 2003 17:00:55 -0000 1.13
@@ -64,6 +64,7 @@
import java.net.URL;
+import java.io.StringReader;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -351,5 +352,22 @@
}
-
+ public void testOnceAndOnceOnly() throws Exception {
+
+ class TestConfigureDigester extends Digester {
+ public int called=0;
+ public TestConfigureDigester() {}
+
+ protected void initialize() {
+ called++;
+ }
+ }
+
+ TestConfigureDigester digester = new TestConfigureDigester();
+
+ String xml = "<?xml version='1.0'?><document/>";
+ digester.parse(new StringReader(xml));
+
+ assertEquals("Initialize should be called once and only once", 1, digester.called);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org