You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/12/17 07:44:51 UTC

svn commit: r727300 - in /maven/mercury/trunk: mercury-ant/mercury-ant-tasks/ mercury-ant/mercury-ant-tasks/src/test/java/org/apache/maven/mercury/ant/tasks/ mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/ mercury-ant/mercury-ant-tasks/s...

Author: ogusakov
Date: Tue Dec 16 22:44:50 2008
New Revision: 727300

URL: http://svn.apache.org/viewvc?rev=727300&view=rev
Log:
[MERCURY-56] intermediate commit, authentication finally works, working on pgp reading tests

Added:
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar   (with props)
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar.asc
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom   (with props)
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom.asc
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml   (with props)
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml.asc
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml   (with props)
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml.asc
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml   (with props)
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml.asc
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar   (with props)
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar.asc
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom   (with props)
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom.asc
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml   (with props)
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml.asc
Modified:
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/build.xml
    maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/java/org/apache/maven/mercury/ant/tasks/MecuryAntTest.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
    maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
    maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/AuthenticatingTestServer.java

Modified: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/build.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/build.xml?rev=727300&r1=727299&r2=727300&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/build.xml (original)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/build.xml Tue Dec 16 22:44:50 2008
@@ -60,7 +60,6 @@
 
     </merc:config>
 
-
     <merc:dep id="my-libs">
       <merc:dependency name="asm:asm:3.0"/>
     </merc:dep>
@@ -98,7 +97,7 @@
                  />
   </target>
 
-	
+  
   <target name="compile-auth" depends="init">
 
     <merc:resolve pathid="compile-path-auth"
@@ -123,6 +122,49 @@
 
   </target>
 
+  <target name="bad-pgp" depends="init">
+
+    <merc:config id="pgp-conf">
+      <merc:repo id="localPgpRepo"  dir="${local.verify.dir}"/>
+      <merc:repo id="remotePgpRepo" url="http://localhost:50000/maven2">
+        <merc:verifyread type="pgp">
+          <property name="keyring" value="${basedir}/target/test-classes/pgp/pubring.gpg"/>
+        </merc:verifyread>
+      </merc:repo>
+    </merc:config>
+
+  	<merc:dep id="t-bad">
+      <merc:dependency name="t:bad:1.0"/>
+    </merc:dep>
+  	
+    <merc:resolve pathid="path-pgp-good"
+                 depid="t-bad"
+                 configid="pgp-conf"
+                 />
+  </target>
+  
+
+  <target name="good-pgp" depends="init">
+  
+    <merc:config id="pgp-conf">
+      <merc:repo id="localPgpRepo"  dir="${local.verify.dir}"/>
+      <merc:repo id="remotePgpRepo" url="http://localhost:50000/maven2">
+        <merc:verifyread type="pgp">
+          <property name="keyring" value="${basedir}/target/test-classes/pgp/pubring.gpg"/>
+        </merc:verifyread>
+      </merc:repo>
+    </merc:config>
+
+    <merc:dep id="t-good">
+      <merc:dependency name="t:t:1.0"/>
+    </merc:dep>
+    
+    <merc:resolve pathid="path-pgp-good"
+                  configid="pgp-conf"
+                  depid="t-good"
+                 />
+  </target>
+
   <target name="deploy" depends="compile">
     <merc:write repoid="localRepo"
                 name="t:t:1.0"

Modified: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/java/org/apache/maven/mercury/ant/tasks/MecuryAntTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/java/org/apache/maven/mercury/ant/tasks/MecuryAntTest.java?rev=727300&r1=727299&r2=727300&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/java/org/apache/maven/mercury/ant/tasks/MecuryAntTest.java (original)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/java/org/apache/maven/mercury/ant/tasks/MecuryAntTest.java Tue Dec 16 22:44:50 2008
@@ -11,322 +11,364 @@
 import org.apache.tools.ant.types.Path;
 
 /**
- *
- *
  * @author Oleg Gusakov
  * @version $Id$
- *
  */
 public class MecuryAntTest
-extends BuildFileTest 
+    extends BuildFileTest
 {
-  static final String _localRepoDir = "./target/repo";
-  static       File   _localRepoDirFile;
-  
-  static final String _writeRepoDir = "./target/test-repo";
-  static       File   _writeRepoDirFile;
-  
-  static final String _verifyRepoDir = "./target/test-verify-repo";
-  static       File   _verifyRepoDirFile;
-  
-  static final String _compileDir = "./target/compile-classes";
-  static       File   _compileDirFile;
-  
-  static final String _jarDir = "./target/compile-target";
-  static       File   _jarDirFile;
-
-  static final String _remoteRepoDir = "./target/test-classes/remoteRepo";
-  static       File   _remoteRepoDirFile;
-  static final String _remoteRepoUrlPrefix = "http://localhost:";
-  static final String _remoteRepoUrlSufix = "/repo";
-
-  static final String _pathId = "class-path";
-  
-  SimpleTestServer _jetty;
-  String _port;
-  
-  AuthenticatingTestServer _secureJetty;
-  String _securedPort;
-    
-  Resolver _resolver;
-  Config   _config;
-  Dep      _dep;
-  
-  Dep.Dependency _asm;
-  Dep.Dependency _ant;
-    
-  //-----------------------------------
-  final class Resolver
-  extends ResolveTask
-  {
-    @SuppressWarnings("deprecation")
-    public Resolver()
-    {
-      project = new Project();
-      project.init();
-      target = new Target();
-    }
-  }
-  //-----------------------------------
-  final class Writer
-  extends WriteTask
-  {
-    @SuppressWarnings("deprecation")
-    public Writer()
-    {
-      project = new Project();
-      project.init();
-      target = new Target();
-    }
-  }
-  //-----------------------------------
-  public MecuryAntTest( String name )
-  {
-    super( name );
-  }
-  //-----------------------------------
-  @Override
-  protected void setUp()
-  throws Exception
-  {
-    _dep = new Dep();
-    _dep.setId( "my-lib" );
-    
-    _asm = _dep.createDependency();
-    _asm.setName( "asm:asm-xml:3.0" );
-    
-    _ant = _dep.createDependency();
-    _ant.setName( "ant:ant:1.6.5" );
-    
-    _config = new Config();
-    _config.setId( "conf" );
-    
-    _localRepoDirFile = new File( _localRepoDir );
-    FileUtil.delete( _localRepoDirFile );
-    _localRepoDirFile.mkdirs();
-    
-    Config.Repo localRepo = _config.createRepo();
-    localRepo.setId( "localRepo" );
-    localRepo.setDir( _localRepoDir );
-    
-    _remoteRepoDirFile = new File( _remoteRepoDir );
-    _jetty = new SimpleTestServer( _remoteRepoDirFile, _remoteRepoUrlSufix );
-    _jetty.start();
-    _port = ""+_jetty.getPort();
-    
-    Config.Repo remoteRepo = _config.createRepo();
-    remoteRepo.setId( "remoteRepo" );
-    remoteRepo.setUrl( _remoteRepoUrlPrefix + _port + _remoteRepoUrlSufix );
+    static final String _localRepoDir = "./target/repo";
+
+    static File _localRepoDirFile;
+
+    static final String _writeRepoDir = "./target/test-repo";
+
+    static File _writeRepoDirFile;
+
+    static final String _verifyRepoDir = "./target/test-verify-repo";
+
+    static File _verifyRepoDirFile;
+
+    static final String _compileDir = "./target/compile-classes";
+
+    static File _compileDirFile;
+
+    static final String _jarDir = "./target/compile-target";
+
+    static File _jarDirFile;
+
+    static final String _remoteRepoDir = "./target/test-classes/remoteRepo";
+
+    static File _remoteRepoDirFile;
+
+    static final String _remoteRepoUrlPrefix = "http://localhost:";
+
+    static final String _remoteRepoUrlSufix = "/repo";
+
+    static final String _pathId = "class-path";
+
+    AuthenticatingTestServer _jetty;
+
+    String _port;
+
+    Resolver _resolver;
+
+    Config _config;
+
+    Dep _dep;
+
+    Dep.Dependency _asm;
+
+    Dep.Dependency _ant;
+
+    // -----------------------------------
+    final class Resolver
+        extends ResolveTask
+    {
+        @SuppressWarnings( "deprecation" )
+        public Resolver()
+        {
+            project = new Project();
+            project.init();
+            target = new Target();
+        }
+    }
+
+    // -----------------------------------
+    final class Writer
+        extends WriteTask
+    {
+        @SuppressWarnings( "deprecation" )
+        public Writer()
+        {
+            project = new Project();
+            project.init();
+            target = new Target();
+        }
+    }
+
+    // -----------------------------------
+    public MecuryAntTest( String name )
+    {
+        super( name );
+    }
+
+    // -----------------------------------
+    @Override
+    protected void setUp()
+        throws Exception
+    {
+        _dep = new Dep();
+        _dep.setId( "my-lib" );
+
+        _asm = _dep.createDependency();
+        _asm.setName( "asm:asm-xml:3.0" );
+
+        _ant = _dep.createDependency();
+        _ant.setName( "ant:ant:1.6.5" );
+
+        _config = new Config();
+        _config.setId( "conf" );
+
+        _localRepoDirFile = new File( _localRepoDir );
+        FileUtil.delete( _localRepoDirFile );
+        _localRepoDirFile.mkdirs();
+
+        Config.Repo localRepo = _config.createRepo();
+        localRepo.setId( "localRepo" );
+        localRepo.setDir( _localRepoDir );
+
+        _remoteRepoDirFile = new File( _remoteRepoDir );
+        _jetty = new AuthenticatingTestServer( 0, _remoteRepoDirFile, _remoteRepoUrlSufix, false );
+        _jetty.start();
+        _port = "" + _jetty.getPort();
+
+        Config.Repo remoteRepo = _config.createRepo();
+        remoteRepo.setId( "remoteRepo" );
+        remoteRepo.setUrl( _remoteRepoUrlPrefix + _port + _remoteRepoUrlSufix );
+
+        _resolver = new Resolver();
+        _resolver.setDepid( _dep.getId() );
+        _resolver.setConfigid( _config.getId() );
+
+        _resolver.setPathid( _pathId );
+
+        Project project = _resolver.getProject();
+
+        project.addReference( _config.getId(), _config );
+        project.addReference( _dep.getId(), _dep );
+
+        System.setProperty( "ant.home", ".src/test/apache-ant-1.6.5" );
+
+        configureProject( "build.xml" );
+
+        _writeRepoDirFile = new File( _writeRepoDir );
+        FileUtil.delete( _writeRepoDirFile );
+        _writeRepoDirFile.mkdirs();
+
+        _verifyRepoDirFile = new File( _verifyRepoDir );
+        FileUtil.delete( _verifyRepoDirFile );
+        _verifyRepoDirFile.mkdirs();
+
+        _compileDirFile = new File( _compileDir );
+        FileUtil.delete( _compileDirFile );
+        _compileDirFile.mkdirs();
+
+        _jarDirFile = new File( _jarDir );
+        FileUtil.delete( _jarDirFile );
+        _jarDirFile.mkdirs();
+    }
+
+    // -----------------------------------
+    private void restart( int port, File localBase, String remotePathFragment, boolean secured )
+        throws Exception
+    {
+        tearDown();
+        
+        _jetty = new AuthenticatingTestServer( port, localBase, remotePathFragment, secured );
+        _jetty.start();
         
-    _resolver = new Resolver();
-    _resolver.setDepid( _dep.getId() );
-    _resolver.setConfigid( _config.getId() );
-    
-    _resolver.setPathid( _pathId );
-    
-    Project project = _resolver.getProject();
-    
-    project.addReference( _config.getId(), _config );
-    project.addReference( _dep.getId(), _dep );
-
-    System.setProperty( "ant.home", ".src/test/apache-ant-1.6.5" );
-    
-    configureProject( "build.xml" );
-
-    _writeRepoDirFile = new File( _writeRepoDir );
-    FileUtil.delete( _writeRepoDirFile );
-    _writeRepoDirFile.mkdirs();
-
-    _verifyRepoDirFile = new File( _verifyRepoDir );
-    FileUtil.delete( _verifyRepoDirFile );
-    _verifyRepoDirFile.mkdirs();
-    
-    _compileDirFile   = new File( _compileDir );
-    FileUtil.delete( _compileDirFile );
-    _compileDirFile.mkdirs();
-    
-    _jarDirFile       = new File( _jarDir );
-    FileUtil.delete( _jarDirFile );
-    _jarDirFile.mkdirs();
-  }
-  //-----------------------------------
-  @Override
-  protected void tearDown()
-  throws Exception
-  {
-    _jetty.stop();
-    _jetty.destroy();
-    
-    System.out.println("Jetty on :"+_port+" destroyed\n<========\n\n");
-  }
-  //-----------------------------------
-  public void testReadDependencies()
-  {
-    String title = "resolver";
-    System.out.println("========> start "+title);
-    System.out.flush();
-    
-    _resolver.execute();
-    
-    Project pr = _resolver.getProject();
-    
-    Path path = (Path)pr.getReference( _pathId );
-    
-    assertNotNull( path );
-    
-    String [] list = path.list();
-    
-    assertNotNull( list );
-
-    assertEquals( 6, list.length );
-    
-//    System.out.println("\n==== Files found ====");
-//    for( String s : list )
-//      System.out.println(s);
-    
-    File af = new File( _localRepoDir, "/ant/ant/1.6.5/ant-1.6.5.jar" );
-    assertTrue( af.exists() );
-    
-    af = new File( _localRepoDir, "/asm/asm-util/3.0/asm-util-3.0.jar" );
-    assertTrue( af.exists() );
-    
-    af = new File( _localRepoDir, "/asm/asm-xml/3.0/asm-xml-3.0.jar" );
-    assertTrue( af.exists() );
-    
-    af = new File( _localRepoDir, "/asm/asm-tree/3.0/asm-tree-3.0.jar" );
-    assertTrue( af.exists() );
-    
-    af = new File( _localRepoDir, "/asm/asm/3.0/asm-3.0.jar" );
-    assertTrue( af.exists() );
-    
-  }
-  //-----------------------------------
-  public void testCompile()
-  {
-    String title = "compile";
-    System.out.println("========> start "+title);
-    System.out.flush();
-    
-    File af = new File( _compileDirFile, "T.class" );
- 
-    assertFalse( af.exists() );
-
-    File jar = new File( _jarDirFile, "t.jar" );
-    
-    assertFalse( jar.exists() );
-    
-    executeTarget("compile");
-    
-    assertTrue( af.exists() );
-
-    assertTrue( jar.exists() );
-  }
-  //-----------------------------------
-  public void testBadAuthRepo()
-  throws Exception
-  {
-    try
-    {
-      String title = "compile-auth";
-      System.out.println("========> start "+title);
-      System.out.flush();
-      
-      _secureJetty = new AuthenticatingTestServer( 50000, _remoteRepoDirFile, "/maven2" );
-      _secureJetty.start();
-      
-      try
-      {
-        executeTarget("compile-bad-auth");
-        fail( "accessing authenticated repo without password succeded - failing test" );
-      }
-      catch( Exception e )
-      {
-        System.out.println("Expected exception: "+e.getMessage() );
-      }
+        this._port = ""+port;
     }
-    finally
+
+    // -----------------------------------
+    @Override
+    protected void tearDown()
+        throws Exception
+    {
+        if( _jetty != null )
+        {
+            _jetty.stop();
+            _jetty.destroy();
+
+            System.out.println( "Jetty on :" + _port + " destroyed\n<========\n\n" );
+        }
+    }
+
+    // -----------------------------------
+    public void testReadDependencies()
     {
-      if( _secureJetty != null )
+        String title = "resolver";
+        System.out.println( "========> start " + title );
+        System.out.flush();
+
+        _resolver.execute();
+
+        Project pr = _resolver.getProject();
+
+        Path path = (Path) pr.getReference( _pathId );
+
+        assertNotNull( path );
+
+        String[] list = path.list();
+
+        assertNotNull( list );
+
+        assertEquals( 6, list.length );
+
+        File af = new File( _localRepoDir, "/ant/ant/1.6.5/ant-1.6.5.jar" );
+        assertTrue( af.exists() );
+
+        af = new File( _localRepoDir, "/asm/asm-util/3.0/asm-util-3.0.jar" );
+        assertTrue( af.exists() );
+
+        af = new File( _localRepoDir, "/asm/asm-xml/3.0/asm-xml-3.0.jar" );
+        assertTrue( af.exists() );
+
+        af = new File( _localRepoDir, "/asm/asm-tree/3.0/asm-tree-3.0.jar" );
+        assertTrue( af.exists() );
+
+        af = new File( _localRepoDir, "/asm/asm/3.0/asm-3.0.jar" );
+        assertTrue( af.exists() );
+
+    }
+
+    // -----------------------------------
+    public void testCompile()
+    {
+        String title = "compile";
+        System.out.println( "========> start " + title );
+        System.out.flush();
+
+        File af = new File( _compileDirFile, "T.class" );
+
+        assertFalse( af.exists() );
+
+        File jar = new File( _jarDirFile, "t.jar" );
+
+        assertFalse( jar.exists() );
+
+        executeTarget( "compile" );
+
+        assertTrue( af.exists() );
+
+        assertTrue( jar.exists() );
+    }
+
+    // -----------------------------------
+    public void testBadAuthRepo()
+        throws Exception
+    {
+        String title = "compile-auth";
+        System.out.println( "========> start " + title );
+        System.out.flush();
+        
+        restart( 50000, _remoteRepoDirFile, "/maven2", true );
+
         try
         {
-          _secureJetty.stop();
-          _secureJetty.destroy();
+            executeTarget( "compile-bad-auth" );
+            fail( "accessing authenticated repo without password succeded - failing test" );
+        }
+        catch ( Exception e )
+        {
+            System.out.println( "Expected exception: " + e.getMessage() );
         }
-        catch( Exception e ){}
     }
-  }
-  //-----------------------------------
-  public void testAuthRepo()
-  throws Exception
-  {
-    try
-    {
-      String title = "compile-auth";
-      System.out.println("========> start "+title);
-      System.out.flush();
-      
-      File af = new File( _compileDirFile, "T.class" );
-   
-      assertFalse( af.exists() );
-  
-      File jar = new File( _jarDirFile, "t-auth.jar" );
-      
-      assertFalse( jar.exists() );
-      
-      _secureJetty = new AuthenticatingTestServer( 50000, _remoteRepoDirFile, "/maven2" );
-      _secureJetty.start();
-      
-      executeTarget("compile-auth");
-      
-      assertTrue( af.exists() );
-      assertTrue( jar.exists() );
+
+    // -----------------------------------
+    public void testAuthRepo()
+        throws Exception
+    {
+        String title = "compile-auth";
+        System.out.println( "========> start " + title );
+        System.out.flush();
+
+        File af = new File( _compileDirFile, "T.class" );
+
+        assertFalse( af.exists() );
+
+        File jar = new File( _jarDirFile, "t-auth.jar" );
+
+        assertFalse( jar.exists() );
+
+        restart( 50000, _remoteRepoDirFile, "/maven2", true );
+
+        executeTarget( "compile-auth" );
+
+        assertTrue( af.exists() );
+        assertTrue( jar.exists() );
+    }
+
+    // -----------------------------------
+    public void testWriteToRepository()
+    {
+        String title = "write";
+        System.out.println( "========> start " + title );
+        System.out.flush();
+
+        File af = new File( _writeRepoDirFile, "/t/t/1.0/t-1.0.jar" );
+        assertFalse( af.exists() );
+
+        File ap = new File( _writeRepoDirFile, "/t/t/1.0/t-1.0.pom" );
+        assertFalse( ap.exists() );
+
+        executeTarget( "deploy" );
+
+        assertTrue( af.exists() );
+        assertTrue( ap.exists() );
+    }
+
+    // -----------------------------------
+    public void testVerifyWritePgp()
+    {
+        String title = "write-verify-pgp";
+        System.out.println( "========> start " + title );
+        System.out.flush();
+
+        File af = new File( _verifyRepoDirFile, "/t/t/1.0/t-1.0.jar" );
+        assertFalse( af.exists() );
+
+        File sig = new File( _verifyRepoDirFile, "/t/t/1.0/t-1.0.jar.asc" );
+        assertFalse( sig.exists() );
+
+        executeTarget( "deploy-verify" );
+
+        assertTrue( af.exists() );
+        assertTrue( sig.exists() );
     }
-    finally
+    //-----------------------------------
+    public void testVerifyReadBadPgp()
+    throws Exception
     {
-      if( _secureJetty != null )
+        String title = "verify-read-bad-pgp";
+        System.out.println( "========> start " + title );
+        System.out.flush();
+
+        File af = new File( _verifyRepoDirFile, "t/bad/1.0/bad-1.0.jar" );
+        assertFalse( af.exists() );
+
+        restart( 50000, _remoteRepoDirFile, "/maven2", true );
+
         try
         {
-          _secureJetty.stop();
-          _secureJetty.destroy();
+            executeTarget( "bad-pgp" );
+            
+            fail( "reading bad pgp signature did not trigger an exception. Failing the test" );
+        }
+        catch ( Exception e )
+        {
+            System.out.println("Expected exception: "+ e.getMessage() );
         }
-        catch( Exception e ){}
+
+        assertFalse( af.exists() );
+    }
+    //-----------------------------------
+    public void testVerifyReadGoodPgp()
+    throws Exception
+    {
+        String title = "verify-read-good-pgp";
+        System.out.println( "========> start " + title );
+        System.out.flush();
+
+        File af = new File( _verifyRepoDirFile, "t/t/1.0/t-1.0.jar" );
+        assertFalse( af.exists() );
+
+        restart( 50000, _remoteRepoDirFile, "/maven2", true );
+
+        executeTarget( "good-pgp" );
+
+        assertTrue( af.exists() );
     }
-  }
-  //-----------------------------------
-  public void testWriteToRepository()
-  {
-    String title = "write";
-    System.out.println("========> start "+title);
-    System.out.flush();
-    
-    File af = new File( _writeRepoDirFile, "/t/t/1.0/t-1.0.jar" );
-    assertFalse( af.exists() );
-
-    File ap = new File( _writeRepoDirFile, "/t/t/1.0/t-1.0.pom" );
-    assertFalse( ap.exists() );
-    
-    executeTarget("deploy");
-    
-    assertTrue( af.exists() );
-    assertTrue( ap.exists() );
-  }
-  //-----------------------------------
-  public void testVerifyPgp()
-  {
-    String title = "write-verify-pgp";
-    System.out.println("========> start "+title);
-    System.out.flush();
-    
-    File af = new File( _verifyRepoDirFile, "/t/t/1.0/t-1.0.jar" );
-    assertFalse( af.exists() );
-    
-    File sig = new File( _verifyRepoDirFile, "/t/t/1.0/t-1.0.jar.asc" );
-    assertFalse( sig.exists() );
-    
-    executeTarget("deploy-verify");
-    
-    assertTrue( af.exists() );
-    assertTrue( sig.exists() );
-  }
-  //-----------------------------------
+    // -----------------------------------
 }

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar?rev=727300&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar.asc
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar.asc?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar.asc (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.jar.asc Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAklIRFwACgkQDttdkRQbxPKvewCfd3Zq87KWm5ugjzPbDCGOP3QS
+fM4An0+2w1qJuABAJbQMzAnqbXnyLXA/
+=wn4X
+-----END PGP SIGNATURE-----

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+?xml version='1.0' encoding='UTF-8'?>
+<project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'>
+<modelVersion>4.0.0</modelVersion>
+<groupId>t</groupId>
+<artifactId>bad</artifactId>
+<version>1.0</version>
+</project>

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom.asc
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom.asc?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom.asc (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/bad-1.0.pom.asc Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAklIRFwACgkQDttdkRQbxPI1SQCfS2eL605fF4QDjdwOotZdQPGQ
+MWIAoIFG4Fwid4cf+UwbeHZ0FXhZpSVy
+=C6l+
+-----END PGP SIGNATURE-----

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml Tue Dec 16 22:44:50 2008
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>t</groupId>
+  <artifactId>bad</artifactId>
+  <version>1.0</version>
+  <versioning>
+    <versions>
+      <version>1.0</version>
+    </versions>
+    <lastUpdated>20081217001420</lastUpdated>
+  </versioning>
+</metadata>

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml.asc
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml.asc?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml.asc (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/1.0/maven-metadata-local.xml.asc Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAklIRFwACgkQDttdkRQbxPI0KQCfS9ln3qYN8ADPG+28P7HKMf6t
+83oAn3AqhhKGboN2VSDA/6ITc1aTnf7N
+=gPVV
+-----END PGP SIGNATURE-----

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml Tue Dec 16 22:44:50 2008
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>t</groupId>
+  <artifactId>bad</artifactId>
+  <versioning>
+    <versions>
+      <version>1.0</version>
+    </versions>
+    <lastUpdated>20081217001420</lastUpdated>
+  </versioning>
+</metadata>

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml.asc
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml.asc?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml.asc (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/bad/maven-metadata-local.xml.asc Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAklIRFwACgkQDttdkRQbxPIR9gCeNWOfZNr+zSUyh3wOHc/waGlv
+v5sAmgJfv6k+I+PJSFmstK8PnVHh9S3C
+=VaV/
+-----END PGP SIGNATURE-----

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml Tue Dec 16 22:44:50 2008
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>t</groupId>
+  <artifactId>t</artifactId>
+  <version>1.0</version>
+  <versioning>
+    <versions>
+      <version>1.0</version>
+    </versions>
+    <lastUpdated>20081217001420</lastUpdated>
+  </versioning>
+</metadata>

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml.asc
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml.asc?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml.asc (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/maven-metadata-local.xml.asc Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAklIRFwACgkQDttdkRQbxPI0KQCfS9ln3qYN8ADPG+28P7HKMf6t
+83oAn3AqhhKGboN2VSDA/6ITc1aTnf7N
+=gPVV
+-----END PGP SIGNATURE-----

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar?rev=727300&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar.asc
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar.asc?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar.asc (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.jar.asc Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAklIRFwACgkQDttdkRQbxPKvewCfd3Zq87KWm5ugjzPbDCGOP3QS
+fM4An0+2w1qJuABAJbQMzAnqbXnyLXA/
+=wn4X
+-----END PGP SIGNATURE-----

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom Tue Dec 16 22:44:50 2008
@@ -0,0 +1,8 @@
+?xml version='1.0' encoding='UTF-8'?>
+<project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'>
+<modelVersion>4.0.0</modelVersion>
+<groupId>t</groupId>
+<artifactId>t</artifactId>
+<version>1.0</version>
+<packaging>jar</packaging>
+</project>

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom.asc
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom.asc?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom.asc (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/1.0/t-1.0.pom.asc Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAklIRFwACgkQDttdkRQbxPI1SQCfS2eL605fF4QDjdwOotZdQPGQ
+MWIAoIFG4Fwid4cf+UwbeHZ0FXhZpSVy
+=C6l+
+-----END PGP SIGNATURE-----

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml Tue Dec 16 22:44:50 2008
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>t</groupId>
+  <artifactId>t</artifactId>
+  <versioning>
+    <versions>
+      <version>1.0</version>
+    </versions>
+    <lastUpdated>20081217001420</lastUpdated>
+  </versioning>
+</metadata>

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml.asc
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml.asc?rev=727300&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml.asc (added)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/src/test/resources/remoteRepo/t/t/maven-metadata-local.xml.asc Tue Dec 16 22:44:50 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAklIRFwACgkQDttdkRQbxPIR9gCeNWOfZNr+zSUyh3wOHc/waGlv
+v5sAmgJfv6k+I+PJSFmstK8PnVHh9S3C
+=VaV/
+-----END PGP SIGNATURE-----

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java?rev=727300&r1=727299&r2=727300&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java Tue Dec 16 22:44:50 2008
@@ -55,422 +55,445 @@
  * @version $Id$
  */
 class DependencyTreeBuilder
-implements DependencyBuilder, EventGenerator
+    implements DependencyBuilder, EventGenerator
 {
-  public static final ArtifactMetadata DUMMY_ROOT = new ArtifactMetadata("__fake:__fake:1.0");
-  
-  private static final Language _lang = new DefaultLanguage(DependencyTreeBuilder.class);
-  private static final IMercuryLogger _log = MercuryLoggerManager.getLogger( DependencyTreeBuilder.class ); 
-  
-  private Collection<MetadataTreeArtifactFilter> _filters;
-  private List<Comparator<MetadataTreeNode>> _comparators;
-  private Map<String,ArtifactListProcessor> _processors;
-  
-  private VirtualRepositoryReader _reader;
-  
-  private Map< String, MetadataTreeNode > _existingNodes;
-  
-  private EventManager _eventManager;
-  
-  /**
-   * creates an instance of MetadataTree. Use this instance to 
-   * <ul>
-   *    <li>buildTree - process all the dependencies</li>
-   *    <li>resolveConflicts</li>
-   * <ul>
-   * 
-   * @param filters - can veto any artifact before it's added to the tree
-   * @param comparators - used to define selection policies. If null is passed, 
-   * classic comparators - nearest/newest first - will be used. 
-   * @param repositories - order is <b>very</b> important. Ordering allows 
-   * m2eclipse, for instance, insert a workspace repository
-   * @throws RepositoryException
-   */
-  protected DependencyTreeBuilder(
-        Collection<Repository> repositories
-      , Collection<MetadataTreeArtifactFilter> filters
-      , List<Comparator<MetadataTreeNode>> comparators
-      , Map<String,ArtifactListProcessor> processors
-                     )
-  throws RepositoryException
-  {
-    this._filters = filters;
-    this._comparators = comparators;
-    
-    // if used does not want to bother.
-    // if it's an empty list - user does not want any comparators - so be it
-    if( _comparators == null )
-    {
-      _comparators = new ArrayList<Comparator<MetadataTreeNode>>(2);
-      _comparators.add( new ClassicDepthComparator() );
-      _comparators.add( new ClassicVersionComparator() );
-    }
-    
-    if( processors != null )
-      _processors = processors;
-    
-    this._reader = new VirtualRepositoryReader( repositories );
-  }
-  //------------------------------------------------------------------------
-  public MetadataTreeNode buildTree( ArtifactBasicMetadata startMD, ArtifactScopeEnum treeScope )
-  throws MetadataTreeException
-  {
-    if( startMD == null )
-      throw new MetadataTreeException( "null start point" );
-    
-    try
-    {
-      _reader.setEventManager( _eventManager );
-      _reader.setProcessors( _processors );
-      _reader.init();
-    }
-    catch( RepositoryException e )
-    {
-      throw new MetadataTreeException(e);
-    }
-    
-    _existingNodes = new HashMap<String, MetadataTreeNode>(256);
-    
-    GenericEvent treeBuildEvent = null;
-    if( _eventManager != null )
-      treeBuildEvent = new GenericEvent( EventTypeEnum.dependencyBuilder, TREE_BUILD_EVENT, startMD.getGAV() );
-    
-    MetadataTreeNode root = createNode( startMD, null, startMD, treeScope );
-    
-    if( _eventManager != null )
-      treeBuildEvent.stop();
-    
-    if( _eventManager != null )
-      _eventManager.fireEvent( treeBuildEvent );
-    
-    MetadataTreeNode.reNumber( root, 1 );
-    
-    return root;
-  }
-  //------------------------------------------------------------------------
-  public List<ArtifactMetadata> resolveConflicts( ArtifactScopeEnum scope, ArtifactBasicMetadata... startMDs )
-  throws MetadataTreeException
-  {
-    return resolveConflicts( scope, Arrays.asList( startMDs ) );
-  }
-  //------------------------------------------------------------------------
-  public List<ArtifactMetadata> resolveConflicts( ArtifactScopeEnum scope, List<ArtifactBasicMetadata> startMDs )
-  throws MetadataTreeException
-  {
-    if( Util.isEmpty( startMDs ) )
-      throw new MetadataTreeException( _lang.getMessage( "empty.md.collection") );
-
-    List<MetadataTreeNode> deps = new ArrayList<MetadataTreeNode>( startMDs.size() );
-
-    // build all trees
-    for( ArtifactBasicMetadata bmd : startMDs )
-    {
-      MetadataTreeNode rooty = buildTree( bmd, scope ); 
-      
-      deps.add( rooty );
-    }
-    
-    DUMMY_ROOT.setDependencies( startMDs );
-    
-    // combine into one tree
-    MetadataTreeNode root = new MetadataTreeNode( DUMMY_ROOT, null, null );
-    
-    for( MetadataTreeNode kid : deps )
-      root.addChild( kid );
-    
-    List<ArtifactMetadata>  res = resolveConflicts( root );
-    
-    res.remove( DUMMY_ROOT );
-    
-    return res;
-  }
-  //-----------------------------------------------------
-  private MetadataTreeNode createNode( ArtifactBasicMetadata nodeMD, MetadataTreeNode parent, ArtifactBasicMetadata nodeQuery, ArtifactScopeEnum globalScope )
-  throws MetadataTreeException
-  {
-    GenericEvent nodeBuildEvent = null;
-    
-    if( _eventManager != null )
-      nodeBuildEvent = new GenericEvent( EventTypeEnum.dependencyBuilder, TREE_NODE_BUILD_EVENT, nodeMD.getGAV() );
-    
-    try
-    {
-      checkForCircularDependency( nodeMD, parent );
-  
-      ArtifactMetadata mr;
-      
-      MetadataTreeNode existingNode = _existingNodes.get( nodeQuery.toString() );
-      
-      if( existingNode != null )
-        return MetadataTreeNode.deepCopy( existingNode );
-    
-        mr = _reader.readDependencies( nodeMD );
-  
-        if( mr == null )
-          throw new MetadataTreeException( _lang.getMessage( "artifact.md.not.found", nodeMD.toString() ) );
-        
-        MetadataTreeNode node = new MetadataTreeNode( mr, parent, nodeQuery );
-    
-        List<ArtifactBasicMetadata> allDependencies = mr.getDependencies();
-        
-        if( allDependencies == null || allDependencies.size() < 1 )
-          return node;
-        
-        List<ArtifactBasicMetadata> dependencies = new ArrayList<ArtifactBasicMetadata>( allDependencies.size() );
-        if( globalScope != null )
-          for( ArtifactBasicMetadata md : allDependencies )
-          {
-            ArtifactScopeEnum mdScope = md.getArtifactScope(); 
-            if( globalScope.encloses( mdScope ) )
-              dependencies.add( md );
-          }
-        else
-          dependencies.addAll( allDependencies );
-        
-        if( Util.isEmpty( dependencies ) )
-          return node;
-
-        ArtifactBasicResults res = _reader.readVersions( dependencies );
-
-        Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>> expandedDeps = res.getResults();
-        
-        for( ArtifactBasicMetadata md : dependencies )
-        {
-
-if( _log.isDebugEnabled() )
-  _log.debug("node "+nodeQuery+", dep "+md );
-
-          List<ArtifactBasicMetadata> versions = expandedDeps.get( md );
-          if( versions == null || versions.size() < 1 )
-          {
-            if( md.isOptional() )
-              continue;
-            
-            throw new MetadataTreeException( "did not find non-optional artifact for " + md + " <== " + showPath( node ) );
-          }
-          
-          boolean noGoodVersions = true;
-          boolean noVersions = true;
-          for( ArtifactBasicMetadata ver : versions )
-          {
-            if( veto( ver, _filters) || vetoInclusionsExclusions(node, ver) )
+    public static final ArtifactMetadata DUMMY_ROOT = new ArtifactMetadata( "__fake:__fake:1.0" );
+
+    private static final Language _lang = new DefaultLanguage( DependencyTreeBuilder.class );
+
+    private static final IMercuryLogger _log = MercuryLoggerManager.getLogger( DependencyTreeBuilder.class );
+
+    private Collection<MetadataTreeArtifactFilter> _filters;
+
+    private List<Comparator<MetadataTreeNode>> _comparators;
+
+    private Map<String, ArtifactListProcessor> _processors;
+
+    private VirtualRepositoryReader _reader;
+
+    private Map<String, MetadataTreeNode> _existingNodes;
+
+    private EventManager _eventManager;
+
+    /**
+     * creates an instance of MetadataTree. Use this instance to
+     * <ul>
+     * <li>buildTree - process all the dependencies</li>
+     * <li>resolveConflicts</li>
+     * <ul>
+     * 
+     * @param filters - can veto any artifact before it's added to the tree
+     * @param comparators - used to define selection policies. If null is passed, classic comparators - nearest/newest
+     *            first - will be used.
+     * @param repositories - order is <b>very</b> important. Ordering allows m2eclipse, for instance, insert a workspace
+     *            repository
+     * @throws RepositoryException
+     */
+    protected DependencyTreeBuilder( Collection<Repository> repositories,
+                                     Collection<MetadataTreeArtifactFilter> filters,
+                                     List<Comparator<MetadataTreeNode>> comparators,
+                                     Map<String, ArtifactListProcessor> processors )
+        throws RepositoryException
+    {
+        this._filters = filters;
+        this._comparators = comparators;
+
+        // if used does not want to bother.
+        // if it's an empty list - user does not want any comparators - so be it
+        if ( _comparators == null )
+        {
+            _comparators = new ArrayList<Comparator<MetadataTreeNode>>( 2 );
+            _comparators.add( new ClassicDepthComparator() );
+            _comparators.add( new ClassicVersionComparator() );
+        }
+
+        if ( processors != null )
+            _processors = processors;
+
+        this._reader = new VirtualRepositoryReader( repositories );
+    }
+
+    // ------------------------------------------------------------------------
+    public MetadataTreeNode buildTree( ArtifactBasicMetadata startMD, ArtifactScopeEnum treeScope )
+        throws MetadataTreeException
+    {
+        if ( startMD == null )
+            throw new MetadataTreeException( "null start point" );
+
+        try
+        {
+            _reader.setEventManager( _eventManager );
+            _reader.setProcessors( _processors );
+            _reader.init();
+        }
+        catch ( RepositoryException e )
+        {
+            throw new MetadataTreeException( e );
+        }
+
+        _existingNodes = new HashMap<String, MetadataTreeNode>( 256 );
+
+        GenericEvent treeBuildEvent = null;
+        if ( _eventManager != null )
+            treeBuildEvent = new GenericEvent( EventTypeEnum.dependencyBuilder, TREE_BUILD_EVENT, startMD.getGAV() );
+
+        MetadataTreeNode root = createNode( startMD, null, startMD, treeScope );
+
+        if ( _eventManager != null )
+            treeBuildEvent.stop();
+
+        if ( _eventManager != null )
+            _eventManager.fireEvent( treeBuildEvent );
+
+        MetadataTreeNode.reNumber( root, 1 );
+
+        return root;
+    }
+
+    // ------------------------------------------------------------------------
+    public List<ArtifactMetadata> resolveConflicts( ArtifactScopeEnum scope, ArtifactBasicMetadata... startMDs )
+        throws MetadataTreeException
+    {
+        return resolveConflicts( scope, Arrays.asList( startMDs ) );
+    }
+
+    // ------------------------------------------------------------------------
+    public List<ArtifactMetadata> resolveConflicts( ArtifactScopeEnum scope, List<ArtifactBasicMetadata> startMDs )
+        throws MetadataTreeException
+    {
+        if ( Util.isEmpty( startMDs ) )
+            throw new MetadataTreeException( _lang.getMessage( "empty.md.collection" ) );
+
+        int nodeCount = startMDs.size();
+
+        if ( nodeCount == 1 )
+        {
+            ArtifactBasicMetadata bmd = startMDs.get( 0 );
+            MetadataTreeNode rooty = buildTree( bmd, scope );
+            List<ArtifactMetadata> res = resolveConflicts( rooty );
+            return res;
+        }
+
+        List<MetadataTreeNode> deps = new ArrayList<MetadataTreeNode>( nodeCount );
+
+        // build all trees
+        for ( ArtifactBasicMetadata bmd : startMDs )
+        {
+            MetadataTreeNode rooty = buildTree( bmd, scope );
+
+            deps.add( rooty );
+        }
+
+        DUMMY_ROOT.setDependencies( startMDs );
+
+        // combine into one tree
+        MetadataTreeNode root = new MetadataTreeNode( DUMMY_ROOT, null, null );
+
+        for ( MetadataTreeNode kid : deps )
+            root.addChild( kid );
+
+        List<ArtifactMetadata> res = resolveConflicts( root );
+
+        res.remove( DUMMY_ROOT );
+
+        return res;
+    }
+
+    // -----------------------------------------------------
+    private MetadataTreeNode createNode( ArtifactBasicMetadata nodeMD, MetadataTreeNode parent,
+                                         ArtifactBasicMetadata nodeQuery, ArtifactScopeEnum globalScope )
+        throws MetadataTreeException
+    {
+        GenericEvent nodeBuildEvent = null;
+
+        if ( _eventManager != null )
+            nodeBuildEvent = new GenericEvent( EventTypeEnum.dependencyBuilder, TREE_NODE_BUILD_EVENT, nodeMD.getGAV() );
+
+        try
+        {
+            checkForCircularDependency( nodeMD, parent );
+
+            ArtifactMetadata mr;
+
+            MetadataTreeNode existingNode = _existingNodes.get( nodeQuery.toString() );
+
+            if ( existingNode != null )
+                return MetadataTreeNode.deepCopy( existingNode );
+
+            mr = _reader.readDependencies( nodeMD );
+
+            if ( mr == null )
+                throw new MetadataTreeException( _lang.getMessage( "artifact.md.not.found", nodeMD.toString() ) );
+
+            MetadataTreeNode node = new MetadataTreeNode( mr, parent, nodeQuery );
+
+            List<ArtifactBasicMetadata> allDependencies = mr.getDependencies();
+
+            if ( allDependencies == null || allDependencies.size() < 1 )
+                return node;
+
+            List<ArtifactBasicMetadata> dependencies = new ArrayList<ArtifactBasicMetadata>( allDependencies.size() );
+            if ( globalScope != null )
+                for ( ArtifactBasicMetadata md : allDependencies )
+                {
+                    ArtifactScopeEnum mdScope = md.getArtifactScope();
+                    if ( globalScope.encloses( mdScope ) )
+                        dependencies.add( md );
+                }
+            else
+                dependencies.addAll( allDependencies );
+
+            if ( Util.isEmpty( dependencies ) )
+                return node;
+
+            ArtifactBasicResults res = _reader.readVersions( dependencies );
+
+            Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>> expandedDeps = res.getResults();
+
+            for ( ArtifactBasicMetadata md : dependencies )
             {
-              // there were good versions, but this one is filtered out
-              noGoodVersions = false;
-              continue;
+
+                if ( _log.isDebugEnabled() )
+                    _log.debug( "node " + nodeQuery + ", dep " + md );
+
+                List<ArtifactBasicMetadata> versions = expandedDeps.get( md );
+                if ( versions == null || versions.size() < 1 )
+                {
+                    if ( md.isOptional() )
+                        continue;
+
+                    throw new MetadataTreeException( "did not find non-optional artifact for " + md + " <== "
+                        + showPath( node ) );
+                }
+
+                boolean noGoodVersions = true;
+                boolean noVersions = true;
+                for ( ArtifactBasicMetadata ver : versions )
+                {
+                    if ( veto( ver, _filters ) || vetoInclusionsExclusions( node, ver ) )
+                    {
+                        // there were good versions, but this one is filtered out
+                        noGoodVersions = false;
+                        continue;
+                    }
+
+                    MetadataTreeNode kid = createNode( ver, node, md, globalScope );
+                    node.addChild( kid );
+
+                    noVersions = false;
+
+                    noGoodVersions = false;
+                }
+
+                if ( noVersions && !noGoodVersions )
+                {
+                    // there were good versions, but they were all filtered out
+                    continue;
+                }
+                else if ( noGoodVersions )
+                {
+                    if ( md.isOptional() )
+                        continue;
+                    throw new MetadataTreeException( "did not find non-optional artifact for " + md );
+                }
+                else
+                    node.addQuery( md );
             }
-            
-            MetadataTreeNode kid = createNode( ver, node, md, globalScope );
-            node.addChild( kid );
-            
-            noVersions = false;
-            
-            noGoodVersions = false;
-          }
-          
-          
-          if( noVersions && !noGoodVersions )
-          {
-            // there were good versions, but they were all filtered out
-            continue;
-          }
-          else if( noGoodVersions )
-          {
-            if( md.isOptional() )
-              continue;
-            throw new MetadataTreeException( "did not find non-optional artifact for " + md );
-          }
-          else
-            node.addQuery(md);
-      }
-        
-      _existingNodes.put( nodeQuery.toString(), node );
-    
-      return node;
-    }
-    catch (RepositoryException e)
-    {
-      if( _eventManager != null )
-        nodeBuildEvent.setResult( e.getMessage() );
-
-      throw new MetadataTreeException( e );
-    }
-    catch( VersionException e )
-    {
-      if( _eventManager != null )
-        nodeBuildEvent.setResult( e.getMessage() );
-
-      throw new MetadataTreeException( e );
-    }
-    catch( MetadataTreeException e )
-    {
-      if( _eventManager != null )
-        nodeBuildEvent.setResult( e.getMessage() );
-      throw e;
-    }
-    finally
-    {
-      if( _eventManager != null )
-      {
-        nodeBuildEvent.stop();
-        _eventManager.fireEvent( nodeBuildEvent );
-      }
-    }
-  }
-  //-----------------------------------------------------
-  private void checkForCircularDependency( ArtifactBasicMetadata md, MetadataTreeNode parent )
-  throws MetadataTreeCircularDependencyException
-  {
-    MetadataTreeNode p = parent;
-    int count = 0;
-    while( p != null )
-    {
-      count++;
-//System.out.println("circ "+md+" vs "+p.md);
-      if( md.sameGA(p.md) )
-      {
-        p = parent;
-        StringBuilder sb = new StringBuilder( 128 );
-        sb.append( md.toString() );
-        while( p!= null )
-        {
-          sb.append(" <- "+p.md.toString() );
-
-          if( md.sameGA(p.md) )
-          {
-            throw new MetadataTreeCircularDependencyException("circular dependency "+count + " levels up. "
-                + sb.toString() + " <= "+(p.parent == null ? "no parent" : p.parent.md) );
-          }
-          p = p.parent;
-        }
-      }
-      p = p.parent;
-    }
-  }
-  //-----------------------------------------------------
-  private boolean veto(ArtifactBasicMetadata md, Collection<MetadataTreeArtifactFilter> filters )
-  {
-    if( filters != null && filters.size() > 1)
-      for( MetadataTreeArtifactFilter filter : filters )
-        if( filter.veto(md) )
-          return true;
-    return false;
-  }
-  //-----------------------------------------------------
-  private boolean vetoInclusionsExclusions( MetadataTreeNode node, ArtifactBasicMetadata ver )
-  throws VersionException
-  {
-    for( MetadataTreeNode n = node; n != null; n = n.getParent() )
-    {
-      ArtifactBasicMetadata md = n.getQuery();
-      
-      if( !md.allowDependency( ver ) ) // veto it
-        return true;
-    }
-    return false; // allow because all parents are OK with it
-  }
-  //-----------------------------------------------------
-  public List<ArtifactMetadata> resolveConflicts( MetadataTreeNode root )
-  throws MetadataTreeException
-  {
-    if( root == null )
-      throw new MetadataTreeException(_lang.getMessage( "empty.tree" ));
-    
-    try
-    {
-      DefaultSatSolver solver = new DefaultSatSolver( root, _eventManager );
-      
-      solver.applyPolicies( getComparators() );
-
-      List<ArtifactMetadata> res = solver.solve();
-      
-      return res;
-    }
-    catch (SatException e)
-    {
-      throw new MetadataTreeException(e);
-    }
-    
-  }
-  //-----------------------------------------------------
-  public MetadataTreeNode resolveConflictsAsTree( MetadataTreeNode root )
-  throws MetadataTreeException
-  {
-    if( root == null )
-      throw new MetadataTreeException(_lang.getMessage( "empty.tree" ));
-    
-    try
-    {
-      DefaultSatSolver solver = new DefaultSatSolver( root, _eventManager );
-      
-      solver.applyPolicies( getComparators() );
-
-      MetadataTreeNode res = solver.solveAsTree();
-      
-      return res;
-    }
-    catch (SatException e)
-    {
-      throw new MetadataTreeException(e);
-    }
-    
-  }
-  //-----------------------------------------------------
-  private List<Comparator<MetadataTreeNode>> getComparators()
-  {
-    if( Util.isEmpty( _comparators ) )
-      _comparators = new ArrayList<Comparator<MetadataTreeNode>>(2);
-    
-    if( _comparators.size() < 1 )
-    {
-      _comparators.add( new ClassicDepthComparator() );
-      _comparators.add( new ClassicVersionComparator() );
-    }
-    
-    return _comparators;
-  }
-  //-----------------------------------------------------
-  private String showPath( MetadataTreeNode node )
-  throws MetadataTreeCircularDependencyException
-  {
-    StringBuilder sb = new StringBuilder( 256 );
-    
-    String comma = "";
-    
-    MetadataTreeNode p = node;
-
-    while( p != null )
-    {
-      sb.append( comma + p.getMd().toString() );
-      
-      comma = " <== ";
-      
-      p = p.parent;
-    }
-    
-    return sb.toString();
-  }
-
-  public void register( MercuryEventListener listener )
-  {
-    if( _eventManager == null )
-      _eventManager = new EventManager();
-      
-    _eventManager.register( listener );
-  }
-
-  public void unRegister( MercuryEventListener listener )
-  {
-    if( _eventManager != null )
-      _eventManager.unRegister( listener );
-  }
-  
-  public void setEventManager( EventManager eventManager )
-  {
-    if( _eventManager == null )
-      _eventManager = eventManager;
-    else
-      _eventManager.getListeners().addAll( eventManager.getListeners() );
-      
-  }
+
+            _existingNodes.put( nodeQuery.toString(), node );
+
+            return node;
+        }
+        catch ( RepositoryException e )
+        {
+            if ( _eventManager != null )
+                nodeBuildEvent.setResult( e.getMessage() );
+
+            throw new MetadataTreeException( e );
+        }
+        catch ( VersionException e )
+        {
+            if ( _eventManager != null )
+                nodeBuildEvent.setResult( e.getMessage() );
+
+            throw new MetadataTreeException( e );
+        }
+        catch ( MetadataTreeException e )
+        {
+            if ( _eventManager != null )
+                nodeBuildEvent.setResult( e.getMessage() );
+            throw e;
+        }
+        finally
+        {
+            if ( _eventManager != null )
+            {
+                nodeBuildEvent.stop();
+                _eventManager.fireEvent( nodeBuildEvent );
+            }
+        }
+    }
+
+    // -----------------------------------------------------
+    private void checkForCircularDependency( ArtifactBasicMetadata md, MetadataTreeNode parent )
+        throws MetadataTreeCircularDependencyException
+    {
+        MetadataTreeNode p = parent;
+        int count = 0;
+        while ( p != null )
+        {
+            count++;
+            // System.out.println("circ "+md+" vs "+p.md);
+            if ( md.sameGA( p.md ) )
+            {
+                p = parent;
+                StringBuilder sb = new StringBuilder( 128 );
+                sb.append( md.toString() );
+                while ( p != null )
+                {
+                    sb.append( " <- " + p.md.toString() );
+
+                    if ( md.sameGA( p.md ) )
+                    {
+                        throw new MetadataTreeCircularDependencyException( "circular dependency " + count
+                            + " levels up. " + sb.toString() + " <= " + ( p.parent == null ? "no parent" : p.parent.md ) );
+                    }
+                    p = p.parent;
+                }
+            }
+            p = p.parent;
+        }
+    }
+
+    // -----------------------------------------------------
+    private boolean veto( ArtifactBasicMetadata md, Collection<MetadataTreeArtifactFilter> filters )
+    {
+        if ( filters != null && filters.size() > 1 )
+            for ( MetadataTreeArtifactFilter filter : filters )
+                if ( filter.veto( md ) )
+                    return true;
+        return false;
+    }
+
+    // -----------------------------------------------------
+    private boolean vetoInclusionsExclusions( MetadataTreeNode node, ArtifactBasicMetadata ver )
+        throws VersionException
+    {
+        for ( MetadataTreeNode n = node; n != null; n = n.getParent() )
+        {
+            ArtifactBasicMetadata md = n.getQuery();
+
+            if ( !md.allowDependency( ver ) ) // veto it
+                return true;
+        }
+        return false; // allow because all parents are OK with it
+    }
+
+    // -----------------------------------------------------
+    public List<ArtifactMetadata> resolveConflicts( MetadataTreeNode root )
+        throws MetadataTreeException
+    {
+        if ( root == null )
+            throw new MetadataTreeException( _lang.getMessage( "empty.tree" ) );
+
+        try
+        {
+            DefaultSatSolver solver = new DefaultSatSolver( root, _eventManager );
+
+            solver.applyPolicies( getComparators() );
+
+            List<ArtifactMetadata> res = solver.solve();
+
+            return res;
+        }
+        catch ( SatException e )
+        {
+            throw new MetadataTreeException( e );
+        }
+
+    }
+
+    // -----------------------------------------------------
+    public MetadataTreeNode resolveConflictsAsTree( MetadataTreeNode root )
+        throws MetadataTreeException
+    {
+        if ( root == null )
+            throw new MetadataTreeException( _lang.getMessage( "empty.tree" ) );
+
+        try
+        {
+            DefaultSatSolver solver = new DefaultSatSolver( root, _eventManager );
+
+            solver.applyPolicies( getComparators() );
+
+            MetadataTreeNode res = solver.solveAsTree();
+
+            return res;
+        }
+        catch ( SatException e )
+        {
+            throw new MetadataTreeException( e );
+        }
+
+    }
+
+    // -----------------------------------------------------
+    private List<Comparator<MetadataTreeNode>> getComparators()
+    {
+        if ( Util.isEmpty( _comparators ) )
+            _comparators = new ArrayList<Comparator<MetadataTreeNode>>( 2 );
+
+        if ( _comparators.size() < 1 )
+        {
+            _comparators.add( new ClassicDepthComparator() );
+            _comparators.add( new ClassicVersionComparator() );
+        }
+
+        return _comparators;
+    }
+
+    // -----------------------------------------------------
+    private String showPath( MetadataTreeNode node )
+        throws MetadataTreeCircularDependencyException
+    {
+        StringBuilder sb = new StringBuilder( 256 );
+
+        String comma = "";
+
+        MetadataTreeNode p = node;
+
+        while ( p != null )
+        {
+            sb.append( comma + p.getMd().toString() );
+
+            comma = " <== ";
+
+            p = p.parent;
+        }
+
+        return sb.toString();
+    }
+
+    public void register( MercuryEventListener listener )
+    {
+        if ( _eventManager == null )
+            _eventManager = new EventManager();
+
+        _eventManager.register( listener );
+    }
+
+    public void unRegister( MercuryEventListener listener )
+    {
+        if ( _eventManager != null )
+            _eventManager.unRegister( listener );
+    }
+
+    public void setEventManager( EventManager eventManager )
+    {
+        if ( _eventManager == null )
+            _eventManager = eventManager;
+        else
+            _eventManager.getListeners().addAll( eventManager.getListeners() );
+
+    }
 }

Modified: maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java?rev=727300&r1=727299&r2=727300&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java Tue Dec 16 22:44:50 2008
@@ -91,8 +91,8 @@
   /** minimum # of queue elements to consider parallelization */
   private static int MIN_PARALLEL = 5;
   
-  private static final Language LANG = new DefaultLanguage( VirtualRepositoryReader.class );
-  private static final IMercuryLogger LOG = MercuryLoggerManager.getLogger( VirtualRepositoryReader.class ); 
+  private static final Language _lang = new DefaultLanguage( VirtualRepositoryReader.class );
+  private static final IMercuryLogger _log = MercuryLoggerManager.getLogger( VirtualRepositoryReader.class ); 
 
   //----------------------------------------------------------------------------------------------------------------------------
   private List<Repository>       _repositories = new ArrayList<Repository>(8);
@@ -310,7 +310,7 @@
             }
             catch( VersionException e )
             {
-              throw new RepositoryException( LANG.getMessage( "query.element.bad.version", key.toString(), e.getMessage() ) );
+              throw new RepositoryException( _lang.getMessage( "query.element.bad.version", key.toString(), e.getMessage() ) );
             }
             
             if( keyVersionRange.isSingleton() )
@@ -498,7 +498,7 @@
       List<ArtifactBasicMetadata> rejects = buckets == null ? null : buckets.get( RepositoryReader.NULL_READER );
   
       if( buckets == null )
-        throw new RepositoryException( LANG.getMessage( "internal.error.sorting.query", query.toString() ) ); 
+        throw new RepositoryException( _lang.getMessage( "internal.error.sorting.query", query.toString() ) ); 
         
       init();
       
@@ -522,7 +522,7 @@
           ArtifactResults rrRes = rr.readArtifacts( rrQuery );
           
           if( rrRes.hasExceptions() )
-            throw new RepositoryException( LANG.getMessage( "error.reading.existing.artifact", rrRes.getExceptions().toString(), rr.getRepository().getId() ) );
+            throw new RepositoryException( _lang.getMessage( "error.reading.existing.artifact", rrRes.getExceptions().toString(), rr.getRepository().getId() ) );
           
           if( rrRes.hasResults() )
             for( ArtifactBasicMetadata bm : rrRes.getResults().keySet() )
@@ -620,8 +620,8 @@
   public byte[] readMetadata( ArtifactBasicMetadata bmd )
   throws MetadataReaderException
   {
-    if( LOG.isDebugEnabled() )
-      LOG.debug( "Asking for pom: "+bmd);
+    if( _log.isDebugEnabled() )
+      _log.debug( "Asking for pom: "+bmd);
 
     return readRawData( bmd, "", "pom" );
   }
@@ -635,8 +635,8 @@
     GenericEvent event = null;
     String eventTag = null; 
     
-    if( LOG.isDebugEnabled() )
-      LOG.debug( "request for "+bmd+", classifier="+classifier+", type="+type );
+    if( _log.isDebugEnabled() )
+      _log.debug( "request for "+bmd+", classifier="+classifier+", type="+type );
     
     if( bmd == null )
       throw new IllegalArgumentException("null bmd supplied");
@@ -666,8 +666,8 @@
       byte [] res = null;
       Quality vq = new Quality( bmd.getVersion() );
       
-      if( LOG.isDebugEnabled() )
-        LOG.debug( "quality calculated as "+vq.getQuality() == null ? "null" :vq.getQuality().name() );
+      if( _log.isDebugEnabled() )
+        _log.debug( "quality calculated as "+vq.getQuality() == null ? "null" :vq.getQuality().name() );
       
       if( Quality.SNAPSHOT_QUALITY.equals( vq ) )
       {
@@ -679,10 +679,10 @@
           ArtifactBasicResults vRes = readVersions( query );
           if( Util.isEmpty( vRes ) )
           {
-            if( LOG.isDebugEnabled() )
-              LOG.debug( "no snapshots found - throw exception" );
+            if( _log.isDebugEnabled() )
+              _log.debug( "no snapshots found - throw exception" );
             
-            throw new MetadataReaderException( LANG.getMessage( "no.snapshots", bmd.toString(), classifier, type ) );
+            throw new MetadataReaderException( _lang.getMessage( "no.snapshots", bmd.toString(), classifier, type ) );
           }
             
             
@@ -697,10 +697,10 @@
           }
           else
           {
-            if( LOG.isDebugEnabled() )
-              LOG.debug( "no snapshots found - throw exception" );
+            if( _log.isDebugEnabled() )
+              _log.debug( "no snapshots found - throw exception" );
             
-            throw new MetadataReaderException( LANG.getMessage( "no.snapshots", bmd.toString(), classifier, type ) );
+            throw new MetadataReaderException( _lang.getMessage( "no.snapshots", bmd.toString(), classifier, type ) );
           }
         }
         catch( Exception e )
@@ -721,8 +721,8 @@
           res = rr.readRawData( bmdQuery, classifier, type );
           if( res != null )
           {
-            if( LOG.isDebugEnabled() )
-              LOG.debug( bmdQuery+" found in "+rr.getRepository().getServer() );
+            if( _log.isDebugEnabled() )
+              _log.debug( bmdQuery+" found in "+rr.getRepository().getServer() );
 
             if( _eventManager != null )
               eventRead.setInfo( eventRead.getInfo() );
@@ -743,8 +743,8 @@
         }
       }
       
-      if( LOG.isDebugEnabled() )
-        LOG.debug( "no data found, returning null" );
+      if( _log.isDebugEnabled() )
+        _log.debug( "no data found, returning null" );
       
       return null;
     }

Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/AuthenticatingTestServer.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/AuthenticatingTestServer.java?rev=727300&r1=727299&r2=727300&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/AuthenticatingTestServer.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/AuthenticatingTestServer.java Tue Dec 16 22:44:50 2008
@@ -33,7 +33,7 @@
     private static final String __password = "bar";
     private static final String __role = "foomeister";
     
-    private void init()
+    public void secure()
     {
       HashUserRealm realm = new HashUserRealm();
       realm.put (__username, __password);
@@ -53,18 +53,25 @@
       context.addHandler(securityHandler);
     }
     
-    public AuthenticatingTestServer( int port, File localBase, String remotePathFragment )
+    public AuthenticatingTestServer( int port, File localBase, String remotePathFragment, boolean secured )
     throws Exception
     {
       super( port, localBase, remotePathFragment );
-      init();
+      if( secured )
+          secure();
+    }
+    
+    public AuthenticatingTestServer( int port, File localBase, String remotePathFragment )
+    throws Exception
+    {
+      this( port, localBase, remotePathFragment, true );
     }
 
     public AuthenticatingTestServer()
     throws Exception
     {
       super();
-      init();
+      secure();
     }
 
     public String getUsername()