You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/10/09 01:08:34 UTC
svn commit: r582993 - in /maven/archiva/trunk/archiva-base:
archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/
archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/
archiva-indexer/src/test/java/org/apache...
Author: joakime
Date: Mon Oct 8 16:08:32 2007
New Revision: 582993
URL: http://svn.apache.org/viewvc?rev=582993&view=rev
Log:
Reducing chattiness by adding ConfigurationListener to give option of event on configuration save as a whole, not each field.
Added:
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationEvent.java (with props)
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationListener.java (with props)
Modified:
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ArchivaConfiguration.java
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
maven/archiva/trunk/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java
maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/MockConfiguration.java
Modified: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ArchivaConfiguration.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ArchivaConfiguration.java?rev=582993&r1=582992&r2=582993&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ArchivaConfiguration.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ArchivaConfiguration.java Mon Oct 8 16:08:32 2007
@@ -49,9 +49,24 @@
throws RegistryException, IndeterminateConfigurationException;
/**
- * Add a change listener so that registry changes are propogated.
+ * Add a configuration listener to notify of changes to the configuration.
*
* @param listener the listener
+ */
+ void addListener( ConfigurationListener listener );
+
+ /**
+ * Remove a configuration listener to stop notifications of changes to the configuration.
+ *
+ * @param listener the listener
+ */
+ void removeListener( ConfigurationListener listener );
+
+ /**
+ * Add a registry listener to notify of events in plexus-registry.
+ *
+ * @param listener the listener
+ * TODO: Remove in future.
*/
void addChangeListener( RegistryListener listener );
}
Added: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationEvent.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationEvent.java?rev=582993&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationEvent.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationEvent.java Mon Oct 8 16:08:32 2007
@@ -0,0 +1,77 @@
+package org.apache.maven.archiva.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * ConfigurationEvent
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ConfigurationEvent
+{
+ public static final int SAVED = 1;
+
+ public static final int CHANGED = 2;
+
+ private int type;
+
+ public ConfigurationEvent( int type )
+ {
+ this.type = type;
+ }
+
+ public int getType()
+ {
+ return type;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + type;
+ return result;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+ if ( obj == null )
+ {
+ return false;
+ }
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+ final ConfigurationEvent other = (ConfigurationEvent) obj;
+ if ( type != other.type )
+ {
+ return false;
+ }
+ return true;
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationEvent.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationEvent.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationEvent.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationListener.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationListener.java?rev=582993&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationListener.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationListener.java Mon Oct 8 16:08:32 2007
@@ -0,0 +1,34 @@
+package org.apache.maven.archiva.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * ConfigurationListener
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface ConfigurationListener
+{
+ /**
+ * Generic event point to notify components that something has happend in the configuration.
+ */
+ public void configurationEvent(ConfigurationEvent event);
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationListener.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
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?rev=582993&r1=582992&r2=582993&view=diff
==============================================================================
--- 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 Mon Oct 8 16:08:32 2007
@@ -35,10 +35,11 @@
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* Implementation of configuration holder that retrieves it from the registry.
@@ -84,9 +85,14 @@
private String userConfigFilename;
/**
- * Listeners we've registered.
+ * Configuration Listeners we've registered.
*/
- private List<RegistryListener> listeners = new LinkedList<RegistryListener>();
+ private Set<ConfigurationListener> listeners = new HashSet<ConfigurationListener>();
+
+ /**
+ * Registry Listeners we've registered.
+ */
+ private Set<RegistryListener> registryListeners = new HashSet<RegistryListener>();
public String getFilteredUserConfigFilename()
{
@@ -249,6 +255,8 @@
new ConfigurationRegistryWriter().write( configuration, section );
section.save();
+
+ triggerEvent( ConfigurationEvent.SAVED );
this.configuration = processExpressions( configuration );
}
@@ -270,28 +278,64 @@
try
{
( (Initializable) registry ).initialize();
-
- for ( Iterator<RegistryListener> i = listeners.iterator(); i.hasNext(); )
+
+ for ( RegistryListener regListener: registryListeners )
{
- RegistryListener l = i.next();
-
- addRegistryChangeListener( l );
+ addRegistryChangeListener( regListener );
}
}
catch ( InitializationException e )
{
throw new RegistryException( "Unable to reinitialize configuration: " + e.getMessage(), e );
}
+
+ triggerEvent( ConfigurationEvent.SAVED );
return registry.getSection( KEY + ".user" );
}
+ private void triggerEvent( int type )
+ {
+ ConfigurationEvent evt = new ConfigurationEvent( type );
+ for ( ConfigurationListener listener : listeners )
+ {
+ try
+ {
+ listener.configurationEvent( evt );
+ }
+ catch ( Throwable t )
+ {
+ getLogger().warn( "Unable to notify of saved configuration event.", t );
+ }
+ }
+ }
+
+ public void addListener( ConfigurationListener listener )
+ {
+ if ( listener == null )
+ {
+ return;
+ }
+
+ listeners.add( listener );
+ }
+
+ public void removeListener( ConfigurationListener listener )
+ {
+ if ( listener == null )
+ {
+ return;
+ }
+
+ listeners.remove( listener );
+ }
+
public void addChangeListener( RegistryListener listener )
{
addRegistryChangeListener( listener );
// keep track for later
- listeners.add( listener );
+ registryListeners.add( listener );
}
private void addRegistryChangeListener( RegistryListener listener )
@@ -307,6 +351,7 @@
section.addChangeListener( listener );
}
}
+
public void initialize()
throws InitializationException
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?rev=582993&r1=582992&r2=582993&view=diff
==============================================================================
--- 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 Mon Oct 8 16:08:32 2007
@@ -21,9 +21,7 @@
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;
@@ -38,6 +36,7 @@
public class ArchivaConfigurationTest
extends PlexusTestCase
{
+ @SuppressWarnings("unused")
private Registry registry;
protected void setUp()
@@ -108,7 +107,7 @@
assertEquals( "check known consumers", 9, repoScanning.getKnownContentConsumers().size() );
assertEquals( "check invalid consumers", 1, repoScanning.getInvalidContentConsumers().size() );
- List patterns = filetypes.getFileTypePatterns( "artifacts" );
+ List<String> patterns = filetypes.getFileTypePatterns( "artifacts" );
assertNotNull( "check 'artifacts' file type", patterns );
assertEquals( "check 'artifacts' patterns", 13, patterns.size() );
@@ -192,15 +191,12 @@
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 );
+ MockControl control = createConfigurationListenerMockControl();
+ ConfigurationListener listener = (ConfigurationListener) control.getMock();
+ archivaConfiguration.addListener( listener );
+
+ listener.configurationEvent( new ConfigurationEvent( ConfigurationEvent.SAVED ) );
+ control.setVoidCallable();
control.replay();
@@ -221,21 +217,9 @@
assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
- private static MockControl createRegistryListenerMockControl()
+ private static MockControl createConfigurationListenerMockControl()
{
- 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 );
- }
- } );
+ MockControl control = MockControl.createControl( ConfigurationListener.class );
return control;
}
@@ -291,12 +275,13 @@
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 );
+ MockControl control = createConfigurationListenerMockControl();
+ ConfigurationListener listener = (ConfigurationListener) control.getMock();
+ archivaConfiguration.addListener( listener );
+
+ listener.configurationEvent( new ConfigurationEvent( ConfigurationEvent.SAVED ) );
+ // once from default creation, and again from manual call to save
+ control.setVoidCallable( 2 );
control.replay();
Modified: maven/archiva/trunk/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java?rev=582993&r1=582992&r2=582993&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java Mon Oct 8 16:08:32 2007
@@ -21,14 +21,14 @@
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.ConfigurationListener;
import org.codehaus.plexus.registry.Registry;
import org.codehaus.plexus.registry.RegistryException;
import org.codehaus.plexus.registry.RegistryListener;
import org.easymock.MockControl;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
/**
* MockConfiguration
@@ -43,7 +43,8 @@
{
private Configuration configuration = new Configuration();
- private List listeners = new ArrayList();
+ private Set<RegistryListener> registryListeners = new HashSet<RegistryListener>();
+ private Set<ConfigurationListener> configListeners = new HashSet<ConfigurationListener>();
private MockControl registryControl;
@@ -57,7 +58,7 @@
public void addChangeListener( RegistryListener listener )
{
- listeners.add( listener );
+ registryListeners.add( listener );
}
public Configuration getConfiguration()
@@ -73,10 +74,8 @@
public void triggerChange( String name, String value )
{
- Iterator it = listeners.iterator();
- while ( it.hasNext() )
+ for(RegistryListener listener: registryListeners)
{
- RegistryListener listener = (RegistryListener) it.next();
try
{
listener.afterConfigurationChange( registryMock, name, value );
@@ -86,5 +85,15 @@
e.printStackTrace();
}
}
+ }
+
+ public void addListener( ConfigurationListener listener )
+ {
+ configListeners.add(listener);
+ }
+
+ public void removeListener( ConfigurationListener listener )
+ {
+ configListeners.remove( listener );
}
}
Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java?rev=582993&r1=582992&r2=582993&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java Mon Oct 8 16:08:32 2007
@@ -21,13 +21,14 @@
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.ConfigurationListener;
import org.codehaus.plexus.registry.Registry;
import org.codehaus.plexus.registry.RegistryException;
import org.codehaus.plexus.registry.RegistryListener;
import org.easymock.MockControl;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
/**
* MockConfiguration
@@ -43,7 +44,8 @@
{
private Configuration configuration = new Configuration();
- private List<RegistryListener> listeners = new ArrayList<RegistryListener>();
+ private Set<RegistryListener> registryListeners = new HashSet<RegistryListener>();
+ private Set<ConfigurationListener> configListeners = new HashSet<ConfigurationListener>();
private MockControl registryControl;
@@ -57,7 +59,7 @@
public void addChangeListener( RegistryListener listener )
{
- listeners.add( listener );
+ registryListeners.add( listener );
}
public Configuration getConfiguration()
@@ -73,7 +75,7 @@
public void triggerChange( String name, String value )
{
- for( RegistryListener listener: listeners )
+ for(RegistryListener listener: registryListeners)
{
try
{
@@ -84,5 +86,15 @@
e.printStackTrace();
}
}
+ }
+
+ public void addListener( ConfigurationListener listener )
+ {
+ configListeners.add(listener);
+ }
+
+ public void removeListener( ConfigurationListener listener )
+ {
+ configListeners.remove( listener );
}
}
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/MockConfiguration.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/MockConfiguration.java?rev=582993&r1=582992&r2=582993&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/MockConfiguration.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/MockConfiguration.java Mon Oct 8 16:08:32 2007
@@ -21,14 +21,17 @@
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.ConfigurationListener;
import org.codehaus.plexus.registry.Registry;
import org.codehaus.plexus.registry.RegistryException;
import org.codehaus.plexus.registry.RegistryListener;
import org.easymock.MockControl;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
/**
* MockConfiguration
@@ -44,7 +47,8 @@
{
private Configuration configuration = new Configuration();
- private List<RegistryListener> listeners = new ArrayList<RegistryListener>();
+ private Set<RegistryListener> registryListeners = new HashSet<RegistryListener>();
+ private Set<ConfigurationListener> configListeners = new HashSet<ConfigurationListener>();
private MockControl registryControl;
@@ -58,7 +62,7 @@
public void addChangeListener( RegistryListener listener )
{
- listeners.add( listener );
+ registryListeners.add( listener );
}
public Configuration getConfiguration()
@@ -74,10 +78,8 @@
public void triggerChange( String name, String value )
{
- Iterator<RegistryListener> it = listeners.iterator();
- while ( it.hasNext() )
+ for(RegistryListener listener: registryListeners)
{
- RegistryListener listener = (RegistryListener) it.next();
try
{
listener.afterConfigurationChange( registryMock, name, value );
@@ -87,5 +89,15 @@
e.printStackTrace();
}
}
+ }
+
+ public void addListener( ConfigurationListener listener )
+ {
+ configListeners.add(listener);
+ }
+
+ public void removeListener( ConfigurationListener listener )
+ {
+ configListeners.remove( listener );
}
}