You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2009/10/25 22:18:53 UTC
svn commit: r829654 - in
/commons/proper/configuration/branches/configuration2_experimental/src:
main/java/org/apache/commons/configuration2/flat/
test/java/org/apache/commons/configuration2/flat/
Author: oheger
Date: Sun Oct 25 21:18:52 2009
New Revision: 829654
URL: http://svn.apache.org/viewvc?rev=829654&view=rev
Log:
Moved internal update flag from FlagNodeHandler to FlatRootNode.
Modified:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/AbstractFlatConfiguration.java
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatLeafNode.java
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNode.java
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNodeHandler.java
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatRootNode.java
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodeHandler.java
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodes.java
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/AbstractFlatConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/AbstractFlatConfiguration.java?rev=829654&r1=829653&r2=829654&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/AbstractFlatConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/AbstractFlatConfiguration.java Sun Oct 25 21:18:52 2009
@@ -267,6 +267,18 @@
}
/**
+ * Returns a flag whether the latest change on this configuration was caused
+ * by a manipulation of the associated flat node structure. If this is the
+ * case, the node structure need not be invalidated.
+ *
+ * @return the internal update flag
+ */
+ private boolean isInternalUpdate()
+ {
+ return rootNode != null && rootNode.isInternalUpdate();
+ }
+
+ /**
* Registers a change listener at this configuration that causes the node
* structure to be invalidated whenever the content is changed.
*/
@@ -283,7 +295,7 @@
{
if (!event.isBeforeUpdate())
{
- if (!((FlatNodeHandler) getNodeHandler()).isInternalUpdate())
+ if (!isInternalUpdate())
{
invalidateRootNode();
}
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatLeafNode.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatLeafNode.java?rev=829654&r1=829653&r2=829654&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatLeafNode.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatLeafNode.java Sun Oct 25 21:18:52 2009
@@ -261,4 +261,28 @@
{
return getParent().getConfiguration();
}
+
+ /**
+ * Returns the internal update flag. This implementation delegates to the
+ * parent node, which maintains the internal update flag.
+ *
+ * @return the internal update flag
+ */
+ @Override
+ public boolean isInternalUpdate()
+ {
+ return getParent().isInternalUpdate();
+ }
+
+ /**
+ * Sets the internal update flag. This implementation delegates to the
+ * parent node, which maintains the internal update flag.
+ *
+ * @param update the new value of the flag
+ */
+ @Override
+ public void setInternalUpdate(boolean update)
+ {
+ getParent().setInternalUpdate(update);
+ }
}
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNode.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNode.java?rev=829654&r1=829653&r2=829654&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNode.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNode.java Sun Oct 25 21:18:52 2009
@@ -163,4 +163,29 @@
* @return the owning {@code Configuration}
*/
public abstract Configuration getConfiguration();
+
+ /**
+ * Returns the internal update flag. This flag is set by the node handler
+ * whenever a change at the node structure affects the associated
+ * configuration. When the configuration receives a change event it queries
+ * this flag. The result of this method determines whether the
+ * configuration's node structure has to be invalidated: if the event was
+ * caused by the node handler, the structure has already been updated and
+ * there is no need to invalidate it. Otherwise the configuration was
+ * directly manipulated, and the node structure is now out of sync.
+ *
+ * @return a flag whether the last update was caused by a manipulation of
+ * the node structure
+ */
+ public abstract boolean isInternalUpdate();
+
+ /**
+ * Sets the internal update flag. This method is called by the node handler
+ * to indicate that a change event was caused by a change of the flat node
+ * structure.
+ *
+ * @param update the update flag
+ * @see #isInternalUpdate()
+ */
+ public abstract void setInternalUpdate(boolean update);
}
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNodeHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNodeHandler.java?rev=829654&r1=829653&r2=829654&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNodeHandler.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatNodeHandler.java Sun Oct 25 21:18:52 2009
@@ -65,29 +65,6 @@
private NodeHandlerRegistry nodeHandlerRegistry;
/**
- * A flag whether an update of the configuration was caused by an operation
- * on its node structure.
- */
- private boolean internalUpdate;
-
- /**
- * Returns a flag whether an update of the associated configuration was
- * caused by this node handler. Whenever the configuration receives a change
- * event, it asks the node hander whether it is responsible for this event.
- * The result of this method determines whether the configuration's node
- * structure has to be invalidated: if the event was caused by the node
- * handler, the structure has already been updated and there is no need to
- * invalidate it. Otherwise the configuration was directly manipulated, and
- * the node structure is now out of sync.
- *
- * @return a flag whether an internal update was caused by this node handler
- */
- public boolean isInternalUpdate()
- {
- return internalUpdate;
- }
-
- /**
* Adds an attribute to the specified node. Flat nodes do not support
* attributes, so this implementation just throws an exception.
*
@@ -241,14 +218,14 @@
*/
public void removeChild(FlatNode node, FlatNode child)
{
- internalUpdate = true;
+ setInternalUpdate(node, true);
try
{
node.removeChild(child);
}
finally
{
- internalUpdate = false;
+ setInternalUpdate(node, false);
}
}
@@ -276,14 +253,14 @@
*/
public void setValue(FlatNode node, Object value)
{
- internalUpdate = true;
+ setInternalUpdate(node, true);
try
{
node.setValue(value);
}
finally
{
- internalUpdate = false;
+ setInternalUpdate(node, false);
}
}
@@ -344,4 +321,17 @@
}
});
}
+
+ /**
+ * Sets the internal update flag of the specified node. This method is if a
+ * change on the node structure is performed that affects the associated
+ * configuration.
+ *
+ * @param node the flat node affected by the change
+ * @param f the value of the internal update flag
+ */
+ void setInternalUpdate(FlatNode node, boolean f)
+ {
+ node.setInternalUpdate(f);
+ }
}
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatRootNode.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatRootNode.java?rev=829654&r1=829653&r2=829654&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatRootNode.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/flat/FlatRootNode.java Sun Oct 25 21:18:52 2009
@@ -65,6 +65,12 @@
private final Configuration configuration;
/**
+ * A flag whether an update of the configuration was caused by an operation
+ * on its node structure.
+ */
+ private boolean internalUpdate;
+
+ /**
* Creates a new instance of {@code FlatRootNode}. The {@code Configuration}
* the node belongs to must be passed in.
*
@@ -276,6 +282,29 @@
}
/**
+ * Returns the internal update flag. The root node of the flat node
+ * structure maintains this flag as a member field.
+ *
+ * @return the internal update flag
+ */
+ @Override
+ public boolean isInternalUpdate()
+ {
+ return internalUpdate;
+ }
+
+ /**
+ * Sets the internal update flag.
+ *
+ * @param update the value of the update flag
+ */
+ @Override
+ public void setInternalUpdate(boolean update)
+ {
+ internalUpdate = update;
+ }
+
+ /**
* Returns the value index for the specified child node. This method is used
* to determine the index of the value of a property with multiple values
* that corresponds to the given child node. It counts the occurrences of
Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodeHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodeHandler.java?rev=829654&r1=829653&r2=829654&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodeHandler.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodeHandler.java Sun Oct 25 21:18:52 2009
@@ -43,7 +43,7 @@
private static final String NAME = "testProperty";
/** The node handler to be tested. */
- private FlatNodeHandler handler;
+ private FlatNodeHandlerTestImpl handler;
/** The mock configuration associated with the node handler. */
private AbstractConfiguration config;
@@ -67,7 +67,7 @@
internalUpdate = handler.isInternalUpdate();
}
});
- handler = new FlatNodeHandler();
+ handler = new FlatNodeHandlerTestImpl();
}
/**
@@ -323,4 +323,29 @@
// ok
}
}
+
+ /**
+ * A test flat node handler implementation. It is used mainly for checking
+ * the internal update flag.
+ */
+ private static class FlatNodeHandlerTestImpl extends FlatNodeHandler
+ {
+ /** Stores the internal update flag. */
+ private boolean internalUpdate;
+
+ public boolean isInternalUpdate()
+ {
+ return internalUpdate;
+ }
+
+ /**
+ * Records this invocation and stores the value of the flag.
+ */
+ @Override
+ void setInternalUpdate(FlatNode node, boolean f)
+ {
+ internalUpdate = f;
+ super.setInternalUpdate(node, f);
+ }
+ }
}
Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodes.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodes.java?rev=829654&r1=829653&r2=829654&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodes.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/flat/TestFlatNodes.java Sun Oct 25 21:18:52 2009
@@ -640,4 +640,31 @@
{
parent.setValue(VALUE);
}
+
+ /**
+ * Tests the implementation of isInternalUpdate() in the root node.
+ */
+ @Test
+ public void testIsInternalUpdateRoot()
+ {
+ assertFalse("Already an internal update", parent.isInternalUpdate());
+ parent.setInternalUpdate(true);
+ assertTrue("No internal update", parent.isInternalUpdate());
+ parent.setInternalUpdate(false);
+ assertFalse("Still internal update", parent.isInternalUpdate());
+ }
+
+ /**
+ * Tests the implementation of isInternalUpdate() in the leaf node.
+ */
+ @Test
+ public void testIsInternalUpdateLeaf()
+ {
+ assertFalse("Already an internal update", node.isInternalUpdate());
+ node.setInternalUpdate(true);
+ assertTrue("No internal update", node.isInternalUpdate());
+ assertTrue("No internal update in root", parent.isInternalUpdate());
+ parent.setInternalUpdate(false);
+ assertFalse("Still internal update", node.isInternalUpdate());
+ }
}