You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wagon-commits@maven.apache.org by jo...@apache.org on 2007/02/14 00:05:34 UTC
svn commit: r507288 - in
/maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager:
DefaultWagonManager.java WagonManager.java
Author: joakime
Date: Tue Feb 13 15:05:33 2007
New Revision: 507288
URL: http://svn.apache.org/viewvc?view=rev&rev=507288
Log:
Adding ability to specify extension containers for wagon lookup.
Modified:
maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/DefaultWagonManager.java
maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/WagonManager.java
Modified: maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/DefaultWagonManager.java?view=diff&rev=507288&r1=507287&r2=507288
==============================================================================
--- maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/DefaultWagonManager.java (original)
+++ maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/DefaultWagonManager.java Tue Feb 13 15:05:33 2007
@@ -44,7 +44,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -85,7 +84,10 @@
private PlexusContainer container;
- private Set protocols = new HashSet();
+ /**
+ * Map of wagon hints to PlexusContainers.
+ */
+ private Map availableWagons = new HashMap();
private Map proxies = new HashMap();
@@ -210,7 +212,7 @@
public Set getProtocols()
{
- return Collections.unmodifiableSet( protocols );
+ return Collections.unmodifiableSet( availableWagons.keySet() );
}
public Map getProxies()
@@ -236,7 +238,7 @@
throw new IllegalArgumentException( Messages.getString( "wagon.manager.protocol.may.not.be.empty" ) ); //$NON-NLS-1$
}
- if ( !protocols.contains( protocol ) )
+ if ( !availableWagons.containsKey( protocol ) )
{
throw new UnsupportedProtocolException( Messages
.getString( "wagon.manager.protocol.not.supported", protocol ) ); //$NON-NLS-1$
@@ -244,7 +246,7 @@
try
{
- Wagon wagon = (Wagon) container.lookup( Wagon.ROLE, protocol );
+ Wagon wagon = (Wagon) getWagonContainer( protocol ).lookup( Wagon.ROLE, protocol );
wagon.addSessionListener( stats );
wagon.addTransferListener( stats );
wagon.setProxyInfo( getProxy( protocol ) );
@@ -371,27 +373,69 @@
this.online = online;
}
+ public PlexusContainer getWagonContainer( String protocol )
+ throws UnsupportedProtocolException
+ {
+ PlexusContainer wagonContainer = (PlexusContainer) this.availableWagons.get( protocol );
+ if ( wagonContainer == null )
+ {
+ throw new UnsupportedProtocolException( "Unable to find wagon for protocol [" + protocol + "]" );
+ }
+
+ return wagonContainer;
+ }
+
public void initialize()
throws InitializationException
{
- List availableWagonProviders;
try
{
- availableWagonProviders = container.lookupList( Wagon.ROLE );
- Iterator it = availableWagonProviders.iterator();
+ registerAvailableWagons( container );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new InitializationException( "Unable to initialize: " + e.getMessage(), e );
+ }
+ }
+
+ public void registerAvailableWagons( PlexusContainer container )
+ throws ComponentLookupException
+ {
+ Map discoveredWagonProviders;
+ try
+ {
+ discoveredWagonProviders = container.lookupMap( Wagon.ROLE );
+ Iterator it = discoveredWagonProviders.keySet().iterator();
while ( it.hasNext() )
{
- Wagon wagon = (Wagon) it.next();
- protocols.add( wagon.getProtocol() );
+ String wagonHint = (String) it.next();
+ Wagon wagon = (Wagon) container.lookup( Wagon.ROLE, wagonHint );
+ if ( !StringUtils.equals( wagon.getProtocol(), wagonHint ) )
+ {
+ throw new IllegalStateException( "Plexus Hint [" + wagonHint + "] and Wagon.getProtocol() ["
+ + wagon.getProtocol() + "] do not agree." );
+ }
+
+ // TODO: need to address what to do when an extension container becomes unavailable.
+ // TODO: need to figure out how to remove a container.
+ // TODO: need to restore parent wagons if extension container overwrites them.
+
+ this.availableWagons.put( wagonHint, container );
}
}
catch ( ComponentLookupException e )
{
- throw new InitializationException( "Unable to find list of available Wagons.", e );
+ throw new ComponentLookupException( "Unable to find list of available Wagons.", e );
}
}
+ public void registerExtensionContainer( PlexusContainer extContainer )
+ throws ComponentLookupException
+ {
+ registerAvailableWagons( extContainer );
+ }
+
public WagonStatistics getStatistics()
{
return stats;
@@ -427,11 +471,15 @@
try
{
- container.release( wagon );
+ getWagonContainer( wagon.getProtocol() ).release( wagon );
}
catch ( ComponentLifecycleException e )
{
getLogger().warn( "Unable to release wagon (" + wagon.getClass().getName() + ")", e );
+ }
+ catch ( UnsupportedProtocolException e )
+ {
+ getLogger().warn( "Unable to release wagon (" + wagon.getClass().getName() + "): " + e.getMessage(), e );
}
}
}
Modified: maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/WagonManager.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/WagonManager.java?view=diff&rev=507288&r1=507287&r2=507288
==============================================================================
--- maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/WagonManager.java (original)
+++ maven/wagon/trunk/wagon-manager/src/main/java/org/apache/maven/wagon/manager/WagonManager.java Tue Feb 13 15:05:33 2007
@@ -27,6 +27,8 @@
import org.apache.maven.wagon.proxy.ProxyInfo;
import org.apache.maven.wagon.repository.Repository;
import org.apache.maven.wagon.repository.RepositoryPermissions;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import java.util.Map;
import java.util.Set;
@@ -240,4 +242,13 @@
*/
public void removeRepository( String repoId )
throws RepositoryNotFoundException;
+
+ /**
+ * Register a Plexus Extension Container for wagon lookups.
+ *
+ * @param extContainer the extension Container to use for lookups.
+ * @throws ComponentLookupException if there was a problem looking up Wagon implementations.
+ */
+ public void registerExtensionContainer( PlexusContainer extContainer )
+ throws ComponentLookupException;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: wagon-commits-unsubscribe@maven.apache.org
For additional commands, e-mail: wagon-commits-help@maven.apache.org