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 2009/04/09 00:18:52 UTC

svn commit: r763431 - in /maven/mercury/trunk: mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ mercury-it/ mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/ mercury-md/mercury-md-sat/src/main/java/org/apache/m...

Author: ogusakov
Date: Wed Apr  8 22:18:51 2009
New Revision: 763431

URL: http://svn.apache.org/viewvc?rev=763431&view=rev
Log:
[MERCURY-114] - added support for managed versions

Added:
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DependencyConflictException.java   (with props)
Modified:
    maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Artifact.java
    maven/mercury/trunk/mercury-it/pom.xml
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/Messages.properties
    maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
    maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java

Modified: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Artifact.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Artifact.java?rev=763431&r1=763430&r2=763431&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Artifact.java (original)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Artifact.java Wed Apr  8 22:18:51 2009
@@ -19,7 +19,15 @@
 import java.io.InputStream;
 import java.util.regex.Pattern;
 
-
+/**
+ * TODO: Oleg: don't know if this should be interface or class, so there is a little disparate:
+ *  ArtifactMetadata is a class, Artifact is an interface. Will clear out  
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
 public interface Artifact
 extends Comparable<Artifact>
 {

Modified: maven/mercury/trunk/mercury-it/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/pom.xml?rev=763431&r1=763430&r2=763431&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/pom.xml (original)
+++ maven/mercury/trunk/mercury-it/pom.xml Wed Apr  8 22:18:51 2009
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-6-SNAPSHOT</version>
+    <version>1.0-alpha-7-SNAPSHOT</version>
   </parent>
 
   <artifactId>mercury-it</artifactId>

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java?rev=763431&r1=763430&r2=763431&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java Wed Apr  8 22:18:51 2009
@@ -41,6 +41,7 @@
 {
   public static final String TREE_BUILD_EVENT = "tree.build";
   public static final String TREE_NODE_BUILD_EVENT = "tree.node.build";
+  public static final String TREE_NODE_VERSION_REPLACE_EVENT = "tree.node.build.version.replace";
 
   public static final String SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES = "mercury.circular.allow";
 

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=763431&r1=763430&r2=763431&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 Wed Apr  8 22:18:51 2009
@@ -91,7 +91,7 @@
     private boolean _allowCircularDependencies = Boolean.parseBoolean( System.getProperty( SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, "false" ) );
     
     /** mandated versions in the format G:A -> V */
-    private Map<String, String> _versionMap;
+    private Map<String, ArtifactMetadata> _versionMap;
     
     class TruckLoad
     {
@@ -401,6 +401,29 @@
 
             if ( allDependencies == null || allDependencies.size() < 1 )
                 return node;
+            
+            if( !Util.isEmpty( _versionMap ) )
+                for( ArtifactMetadata am :  allDependencies )
+                {
+                    String key = am.toManagementString();
+                    ArtifactMetadata ver = _versionMap.get( key );
+                    if( ver != null )
+                    {
+                        if( LOG.isDebugEnabled() )
+                            LOG.debug( "managed replacement: "+am+" -> "+ver );
+                        
+                        if ( _eventManager != null )
+                        {
+                            GenericEvent replaceEvent = new GenericEvent( EventTypeEnum.dependencyBuilder, TREE_NODE_VERSION_REPLACE_EVENT, "managed replacement: "+am+" -> "+ver );
+                            replaceEvent.stop();
+                            _eventManager.fireEvent( replaceEvent );
+                        }
+ 
+                        am.setVersion( ver.getVersion() );
+                        am.setInclusions( ver.getInclusions() );
+                        am.setExclusions( ver.getExclusions() );
+                    }
+                }
 
             List<ArtifactMetadata> dependencies = new ArrayList<ArtifactMetadata>( allDependencies.size() );
             if ( globalScope != null )
@@ -687,6 +710,6 @@
         if( SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES.equals( name ) )
             _allowCircularDependencies = Boolean.parseBoolean( (String)val );
         else if( CONFIGURATION_PROPERTY_VERSION_MAP.equals( name ) )
-            _versionMap = (Map<String, String>) val;
+            _versionMap = (Map<String, ArtifactMetadata>) val;
     }
 }

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java?rev=763431&r1=763430&r2=763431&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java Wed Apr  8 22:18:51 2009
@@ -587,6 +587,10 @@
           if( i > 0 )
             res.add( _context.getMd( i ) );
       }
+      else // not satisfied
+      {
+          throw new SatException( LANG.getMessage( "no.solution", _root.toString() ));
+      }
     }
     catch (TimeoutException e)
     {

Added: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DependencyConflictException.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DependencyConflictException.java?rev=763431&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DependencyConflictException.java (added)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DependencyConflictException.java Wed Apr  8 22:18:51 2009
@@ -0,0 +1,69 @@
+/*
+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.
+*/
+
+package org.apache.maven.mercury.metadata.sat;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class DependencyConflictException
+    extends SatException
+{
+
+    /**
+     * 
+     */
+    public DependencyConflictException()
+    {
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * @param message
+     */
+    public DependencyConflictException( String message )
+    {
+        super( message );
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * @param cause
+     */
+    public DependencyConflictException( Throwable cause )
+    {
+        super( cause );
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * @param message
+     * @param cause
+     */
+    public DependencyConflictException( String message, Throwable cause )
+    {
+        super( message, cause );
+        // TODO Auto-generated constructor stub
+    }
+
+}

Propchange: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DependencyConflictException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DependencyConflictException.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/Messages.properties
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/Messages.properties?rev=763431&r1=763430&r2=763431&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/Messages.properties (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/Messages.properties Wed Apr  8 22:18:51 2009
@@ -21,4 +21,6 @@
 null.model=model is null
 empty.model=model is null
 
-null.tree.arg=cannot create a solver for an empty [null] tree
\ No newline at end of file
+null.tree.arg=cannot create a solver for an empty [null] tree
+
+no.solution=no solution for the supplied tree, starting at {0}
\ No newline at end of file

Modified: maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java?rev=763431&r1=763430&r2=763431&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java (original)
+++ maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java Wed Apr  8 22:18:51 2009
@@ -276,6 +276,14 @@
                                            )
         throws RepositoryException
     {
+        return resolve( repos, scope, artifacts, inclusions, exclusions, null );
+    }
+
+    public List<ArtifactMetadata> resolve( List<Repository> repos, ArtifactScopeEnum scope,
+                                           ArtifactQueryList artifacts, ArtifactInclusionList inclusions,
+                                           ArtifactExclusionList exclusions, Map<String, ?> config )
+        throws RepositoryException
+    {
         if ( Util.isEmpty( artifacts ) || artifacts.isEmpty() )
             throw new IllegalArgumentException( LANG.getMessage( "no.artifacts" ) );
 
@@ -283,7 +291,11 @@
         {
             DependencyBuilder depBuilder =
                 DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null
-                    , Util.mapOf( new Object [][] { {DependencyBuilder.SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, ""+_allowCircularDependencies} } ) 
+                             , Util.mapOf( new Object [][] { 
+                                 {DependencyBuilder.SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, ""+_allowCircularDependencies}
+                               , {DependencyBuilder.CONFIGURATION_PROPERTY_VERSION_MAP, config}
+                                                          } 
+                                       ) 
                                                 );
 
             List<ArtifactMetadata> res = depBuilder.resolveConflicts( scope, artifacts, inclusions, exclusions );
@@ -298,13 +310,9 @@
         }
     }
 
-    // ---------------------------------------------------------------
-    public MetadataTreeNode resolveAsTree( List<Repository> repos
-                                           , ArtifactScopeEnum scope
-                                           , ArtifactQueryList artifacts
-                                           , ArtifactInclusionList inclusions
-                                           , ArtifactExclusionList exclusions
-                                           )
+    public MetadataTreeNode resolveAsTree( List<Repository> repos, ArtifactScopeEnum scope,
+                                           ArtifactQueryList artifacts, ArtifactInclusionList inclusions,
+                                           ArtifactExclusionList exclusions, Map<String, ?> config )
         throws RepositoryException
     {
         if ( Util.isEmpty( artifacts ) || artifacts.isEmpty() )
@@ -314,7 +322,11 @@
         {
             DependencyBuilder depBuilder =
                 DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null
-                       , Util.mapOf( new String [][] { {DependencyBuilder.SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, ""+_allowCircularDependencies} } ) 
+                       , Util.mapOf( new Object [][] { 
+                             {DependencyBuilder.SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, ""+_allowCircularDependencies}
+                           , {DependencyBuilder.CONFIGURATION_PROPERTY_VERSION_MAP, config}
+                                                      } 
+                                   ) 
                 );
 
             MetadataTreeNode res = depBuilder.resolveConflictsAsTree( scope, artifacts, inclusions, exclusions );
@@ -330,6 +342,18 @@
     }
 
     // ---------------------------------------------------------------
+    public MetadataTreeNode resolveAsTree( List<Repository> repos
+                                           , ArtifactScopeEnum scope
+                                           , ArtifactQueryList artifacts
+                                           , ArtifactInclusionList inclusions
+                                           , ArtifactExclusionList exclusions
+                                           )
+        throws RepositoryException
+    {
+            return resolveAsTree( repos, scope, artifacts, inclusions, exclusions, null );
+    }
+
+    // ---------------------------------------------------------------
     /**
      * get all available versions of for the artifact query.
      * 

Modified: maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java?rev=763431&r1=763430&r2=763431&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java (original)
+++ maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java Wed Apr  8 22:18:51 2009
@@ -23,6 +23,7 @@
 import java.net.URL;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.maven.mercury.artifact.Artifact;
@@ -194,11 +195,25 @@
                                            ArtifactExclusionList exclusions )
         throws RepositoryException;
 
+    public List<ArtifactMetadata> resolve( List<Repository> repos, ArtifactScopeEnum scope,
+                                           ArtifactQueryList artifacts, ArtifactInclusionList inclusions,
+                                           ArtifactExclusionList exclusions
+                                           , Map<String, ?> config
+                                           )
+        throws RepositoryException;
+
     public MetadataTreeNode resolveAsTree( List<Repository> repos, ArtifactScopeEnum scope,
                                            ArtifactQueryList artifacts, ArtifactInclusionList inclusions,
                                            ArtifactExclusionList exclusions )
         throws RepositoryException;
 
+    public MetadataTreeNode resolveAsTree( List<Repository> repos, ArtifactScopeEnum scope,
+                                           ArtifactQueryList artifacts, ArtifactInclusionList inclusions,
+                                           ArtifactExclusionList exclusions
+                                           , Map<String, ?> config
+                                           )
+        throws RepositoryException;
+
     public List<ArtifactMetadata> resolve( List<Repository> repos, ArtifactScopeEnum scope, ArtifactMetadata metadata )
         throws RepositoryException;