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 2013/05/05 22:12:05 UTC
svn commit: r1479367 - in /commons/proper/configuration/trunk/src:
main/java/org/apache/commons/configuration/
test/java/org/apache/commons/configuration/
Author: oheger
Date: Sun May 5 20:12:03 2013
New Revision: 1479367
URL: http://svn.apache.org/r1479367
Log:
Made method clear() final in AbstractConfiguration.
There is now a new protected clearDirect() method which performs the actual
work. This is done to prevent subclasses from breaking basic functionality
like event handling or synchronization.
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CombinedConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CompositeConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DatabaseConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DynamicCombinedConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/EnvironmentConfiguration.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/PatternSubtreeConfigurationWrapper.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/XMLConfiguration.java
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java Sun May 5 20:12:03 2013
@@ -74,7 +74,18 @@ import org.apache.commons.logging.impl.N
* <li>Basic event support. Whenever this configuration is modified registered
* event listeners are notified. Refer to the various {@code EVENT_XXX}
* constants to get an impression about which event types are supported.</li>
+ * <li>Support for proper synchronization based on the {@link Synchronizer}
+ * interface.</li>
* </ul></p>
+ * <p>
+ * Most methods defined by the {@code Configuration} interface are already
+ * implemented in this class. Many method implementations perform basic
+ * book-keeping tasks (e.g. firing events, handling synchronization), and then
+ * delegate to other (protected) methods executing the actual work. Subclasses
+ * override these protected methods to define or adapt behavior. The public
+ * entry point methods are final to prevent subclasses from breaking basic
+ * functionality.
+ * </p>
*
* @author <a href="mailto:ksh@scand.com">Konstantin Shaposhnikov </a>
* @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen </a>
@@ -728,55 +739,67 @@ public abstract class AbstractConfigurat
*/
protected abstract void clearPropertyDirect(String key);
- public void clear()
+ public final void clear()
{
getSynchronizer().beginWrite();
try
{
fireEvent(EVENT_CLEAR, null, null, true);
- setDetailEvents(false);
- boolean useIterator = true;
- try
+ clearInternal();
+ fireEvent(EVENT_CLEAR, null, null, false);
+ }
+ finally
+ {
+ getSynchronizer().endWrite();
+ }
+ }
+
+ /**
+ * Clears the whole configuration. This method is called by {@code clear()}
+ * after some preparations have been made. This base implementation uses
+ * the iterator provided by {@code getKeys()} to remove every single
+ * property. Subclasses should override this method if there is a more
+ * efficient way of clearing the configuration.
+ */
+ protected void clearInternal()
+ {
+ setDetailEvents(false);
+ boolean useIterator = true;
+ try
+ {
+ Iterator<String> it = getKeys();
+ while (it.hasNext())
{
- Iterator<String> it = getKeys();
- while (it.hasNext())
+ String key = it.next();
+ if (useIterator)
{
- String key = it.next();
- if (useIterator)
+ try
{
- try
- {
- it.remove();
- }
- catch (UnsupportedOperationException usoex)
- {
- useIterator = false;
- }
+ it.remove();
}
-
- if (useIterator && containsKey(key))
+ catch (UnsupportedOperationException usoex)
{
useIterator = false;
}
+ }
- if (!useIterator)
- {
- // workaround for Iterators that do not remove the
- // property
- // on calling remove() or do not support remove() at all
- clearProperty(key);
- }
+ if (useIterator && containsKey(key))
+ {
+ useIterator = false;
+ }
+
+ if (!useIterator)
+ {
+ // workaround for Iterators that do not remove the
+ // property
+ // on calling remove() or do not support remove() at all
+ clearProperty(key);
}
}
- finally
- {
- setDetailEvents(true);
- }
- fireEvent(EVENT_CLEAR, null, null, false);
}
finally
{
- getSynchronizer().endWrite();
+ setDetailEvents(true);
}
}
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseConfiguration.java Sun May 5 20:12:03 2013
@@ -138,11 +138,9 @@ public class BaseConfiguration extends A
}
@Override
- public void clear()
+ protected void clearInternal()
{
- fireEvent(EVENT_CLEAR, null, null, true);
store.clear();
- fireEvent(EVENT_CLEAR, null, null, false);
}
/**
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java Sun May 5 20:12:03 2013
@@ -806,13 +806,11 @@ public class BaseHierarchicalConfigurati
* the root node.
*/
@Override
- public void clear()
+ protected void clearInternal()
{
- fireEvent(EVENT_CLEAR, null, null, true);
getRootNode().removeAttributes();
getRootNode().removeChildren();
getRootNode().setValue(null);
- fireEvent(EVENT_CLEAR, null, null, false);
}
/**
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CombinedConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CombinedConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CombinedConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CombinedConfiguration.java Sun May 5 20:12:03 2013
@@ -631,12 +631,10 @@ public class CombinedConfiguration exten
* Clears this configuration. All contained configurations will be removed.
*/
@Override
- public void clear()
+ protected void clearInternal()
{
- fireEvent(EVENT_CLEAR, null, null, true);
configurations = new ArrayList<ConfigData>();
namedConfigurations = new HashMap<String, Configuration>();
- fireEvent(EVENT_CLEAR, null, null, false);
invalidate();
}
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CompositeConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CompositeConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CompositeConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/CompositeConfiguration.java Sun May 5 20:12:03 2013
@@ -222,7 +222,7 @@ implements Cloneable
* configuration is created; the old one is lost.
*/
@Override
- public void clear()
+ protected void clearInternal()
{
configList.clear();
// recreate the in memory configuration
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DataConfiguration.java Sun May 5 20:12:03 2013
@@ -141,12 +141,6 @@ public class DataConfiguration extends A
}
}
- @Override
- public void addProperty(String key, Object value)
- {
- getConfiguration().addProperty(key, value);
- }
-
public boolean isEmpty()
{
return configuration.isEmpty();
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DatabaseConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DatabaseConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DatabaseConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DatabaseConfiguration.java Sun May 5 20:12:03 2013
@@ -519,9 +519,8 @@ public class DatabaseConfiguration exten
* will be undefined.
*/
@Override
- public void clear()
+ protected void clearInternal()
{
- fireEvent(EVENT_CLEAR, null, null, true);
new JdbcOperation<Void>(EVENT_CLEAR, null, null)
{
@Override
@@ -532,7 +531,6 @@ public class DatabaseConfiguration exten
return null;
}
}.execute();
- fireEvent(EVENT_CLEAR, null, null, false);
}
/**
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DynamicCombinedConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DynamicCombinedConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DynamicCombinedConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DynamicCombinedConfiguration.java Sun May 5 20:12:03 2013
@@ -336,7 +336,7 @@ public class DynamicCombinedConfiguratio
}
@Override
- public void clear()
+ protected void clearInternal()
{
if (configs != null)
{
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/EnvironmentConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/EnvironmentConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/EnvironmentConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/EnvironmentConfiguration.java Sun May 5 20:12:03 2013
@@ -84,7 +84,7 @@ public class EnvironmentConfiguration ex
* an exception.
*/
@Override
- public void clear()
+ protected void clearInternal()
{
throw new UnsupportedOperationException("EnvironmentConfiguration is read-only!");
}
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/PatternSubtreeConfigurationWrapper.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/PatternSubtreeConfigurationWrapper.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/PatternSubtreeConfigurationWrapper.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/PatternSubtreeConfigurationWrapper.java Sun May 5 20:12:03 2013
@@ -89,7 +89,7 @@ public class PatternSubtreeConfiguration
}
@Override
- public void clear()
+ protected void clearInternal()
{
getConfig().clear();
}
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/XMLConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/XMLConfiguration.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/XMLConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/XMLConfiguration.java Sun May 5 20:12:03 2013
@@ -468,9 +468,9 @@ public class XMLConfiguration extends Ba
* was loaded from a file, the associated DOM document is also cleared.
*/
@Override
- public void clear()
+ protected void clearInternal()
{
- super.clear();
+ super.clearInternal();
getRootNode().setReference(null);
document = null;
}
Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java?rev=1479367&r1=1479366&r2=1479367&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationSynchronization.java Sun May 5 20:12:03 2013
@@ -101,8 +101,6 @@ public class TestAbstractConfigurationSy
* Tests the correct synchronization of clear().
*/
@Test
- @Ignore
- // TODO prevent subclasses from overriding clear()
public void testClearSynchronized()
{
config.clear();