Author: brett
Date: Sat Aug 4 03:11:33 2007
New Revision: 562681
URL: http://svn.apache.org/viewvc?view=rev&rev=562681
Log:
[MRM-451] correct regression in the change listener handling of the default
configuration
Modified:
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java
Modified:
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java?view=diff&rev=562681&r1=562680&r2=562681
==============================================================================
---
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
(original)
+++
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
Sat Aug 4 03:11:33 2007
@@ -33,6 +33,8 @@
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
/**
* Implementation of configuration holder that retrieves it from the registry.
@@ -77,9 +79,14 @@
*/
private String userConfigFilename;
+ /**
+ * Listeners we've registered.
+ */
+ private List listeners = new LinkedList();
+
public String getFilteredUserConfigFilename()
{
- return StringUtils.replace( userConfigFilename, "${user.home}",
System.getProperty( "user.home" + "" ) );
+ return StringUtils.replace( userConfigFilename, "${user.home}",
System.getProperty( "user.home" ) );
}
public synchronized Configuration getConfiguration()
@@ -176,6 +183,13 @@
try
{
( (Initializable) registry ).initialize();
+
+ for ( Iterator i = listeners.iterator(); i.hasNext(); )
+ {
+ RegistryListener l = (RegistryListener) i.next();
+
+ addRegistryChangeListener( l );
+ }
}
catch ( InitializationException e )
{
@@ -186,6 +200,14 @@
}
public void addChangeListener( RegistryListener listener )
+ {
+ addRegistryChangeListener( listener );
+
+ // keep track for later
+ listeners.add( listener );
+ }
+
+ private void addRegistryChangeListener( RegistryListener listener )
{
Registry section = registry.getSection( KEY + ".user" );
if ( section != null )
Modified:
maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java?view=diff&rev=562681&r1=562680&r2=562681
==============================================================================
---
maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java
(original)
+++
maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java
Sat Aug 4 03:11:33 2007
@@ -20,7 +20,11 @@
*/
import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.registry.Registry;
+import org.codehaus.plexus.registry.RegistryListener;
import org.codehaus.plexus.util.FileUtils;
+import org.easymock.AbstractMatcher;
+import org.easymock.MockControl;
import java.io.File;
import java.util.List;
@@ -33,6 +37,16 @@
public class ArchivaConfigurationTest
extends PlexusTestCase
{
+ private Registry registry;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ registry = (Registry) lookup( Registry.ROLE, "commons-configuration" );
+ }
+
public void
testGetConfigurationFromRegistryWithASingleNamedConfigurationResource()
throws Exception
{
@@ -162,8 +176,8 @@
file.getParentFile().mkdirs();
FileUtils.fileWrite( file.getAbsolutePath(), "<configuration/>" );
- ArchivaConfiguration archivaConfiguration =
- (ArchivaConfiguration) lookup(
ArchivaConfiguration.class.getName(), "test-save" );
+ DefaultArchivaConfiguration archivaConfiguration =
+ (DefaultArchivaConfiguration) lookup(
ArchivaConfiguration.class.getName(), "test-save" );
Configuration configuration = new Configuration();
configuration.setVersion( "1" );
@@ -171,8 +185,23 @@
configuration.getWebapp().setUi( new UserInterfaceOptions() );
configuration.getWebapp().getUi().setAppletFindEnabled( false );
+ // add a change listener
+ MockControl control = createRegistryListenerMockControl();
+ RegistryListener listener = (RegistryListener) control.getMock();
+ archivaConfiguration.addChangeListener( listener );
+
+ listener.beforeConfigurationChange( registry, "version", "1" );
+ listener.beforeConfigurationChange( registry,
"webapp.ui.appletFindEnabled", Boolean.FALSE );
+
+ listener.afterConfigurationChange( registry, "version", "1" );
+ listener.afterConfigurationChange( registry,
"webapp.ui.appletFindEnabled", Boolean.FALSE );
+
+ control.replay();
+
archivaConfiguration.save( configuration );
+ control.verify();
+
assertTrue( "Check file exists", file.exists() );
// check it
@@ -180,11 +209,30 @@
assertFalse( "check value",
configuration.getWebapp().getUi().isAppletFindEnabled() );
// read it back
- archivaConfiguration = (ArchivaConfiguration) lookup(
ArchivaConfiguration.class.getName(), "test-read-saved" );
+ archivaConfiguration =
+ (DefaultArchivaConfiguration) lookup(
ArchivaConfiguration.class.getName(), "test-read-saved" );
configuration = archivaConfiguration.getConfiguration();
assertFalse( "check value",
configuration.getWebapp().getUi().isAppletFindEnabled() );
}
+ private static MockControl createRegistryListenerMockControl()
+ {
+ MockControl control = MockControl.createControl(
RegistryListener.class );
+ control.setDefaultMatcher( new AbstractMatcher()
+ {
+ protected boolean argumentMatches( Object object, Object object1 )
+ {
+ return object instanceof Registry || super.argumentMatches(
object, object1 );
+ }
+
+ protected String argumentToString( Object object )
+ {
+ return object instanceof Registry ? "<any>" :
super.argumentToString( object );
+ }
+ } );
+ return control;
+ }
+
public void testStoreConfigurationUser()
throws Exception
{
@@ -236,7 +284,19 @@
configuration.getWebapp().setUi( new UserInterfaceOptions() );
configuration.getWebapp().getUi().setAppletFindEnabled( false );
+ // add a change listener
+ MockControl control = createRegistryListenerMockControl();
+ RegistryListener listener = (RegistryListener) control.getMock();
+ archivaConfiguration.addChangeListener( listener );
+
+ listener.beforeConfigurationChange( registry,
"webapp.ui.appletFindEnabled", Boolean.FALSE );
+ listener.afterConfigurationChange( registry,
"webapp.ui.appletFindEnabled", Boolean.FALSE );
+
+ control.replay();
+
archivaConfiguration.save( configuration );
+
+ control.verify();
assertTrue( "Check file exists", userFile.exists() );
assertFalse( "Check file not created", baseFile.exists() );