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;