Author: fgiust
Date: Sat Oct 28 14:29:29 2006
New Revision: 468743

URL: http://svn.apache.org/viewvc?view=rev&rev=468743
Log:
add qualifiers to version ranges when stripQualifier is false

Modified:
    
maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java
    
maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java

Modified: 
maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java?view=diff&rev=468743&r1=468742&r2=468743
==============================================================================
--- 
maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java
 Sat Oct 28 14:29:29 2006
@@ -77,11 +77,16 @@
 {
 
     /**
-     * A pattern te <code>deployTo</code> param should match.
+     * A pattern the <code>deployTo</code> param should match.
      */
     private static final Pattern DEPLOYTO_PATTERN = Pattern.compile( 
"(.+)::(.+)::(.+)" );
 
     /**
+     * A pattern for a 3 digit osgi version number.
+     */
+    private static final Pattern VERSION_PATTERN = Pattern.compile( 
"(([0-9]+\\.)+[0-9]+)" );
+
+    /**
      * Plexus container, needed to manually lookup components for deploy of 
artifacts.
      */
     private PlexusContainer container;
@@ -313,7 +318,7 @@
         }
 
         String requireBundle = manifestEntries.getValue( "Require-Bundle" );
-        Dependency[] deps = parseDependencies( requireBundle );
+        Dependency[] deps = parseDependencies( requireBundle, 
!this.stripQualifier );
 
         String groupId = null;
         groupId = createGroupId( artifactId );
@@ -485,9 +490,11 @@
     /**
      * Parses the "Require-Bundle" and convert it to a list of dependencies.
      * @param requireBundle "Require-Bundle" entry
+     * @param addQualifier if true, a 4th version digit is added to dependency 
versions. This is required for maven to
+     * allow dependencies with a qualifier to match the version range.
      * @return an array of <code>Dependency</code>
      */
-    protected Dependency[] parseDependencies( String requireBundle )
+    protected Dependency[] parseDependencies( String requireBundle, boolean 
addQualifier )
     {
         if ( requireBundle == null )
         {
@@ -529,10 +536,15 @@
                 }
             }
 
+            if ( addQualifier )
+            {
+                version = addQualifierToVersionsInRange( version );
+            }
+
             if ( version == null )
             {
                 getLog().info( "Missing version for artifact " + artifactId + 
", assuming any version > 0" );
-                version = "[0,)";
+                version = "[0.0.0.0,)";
             }
 
             Dependency dep = new Dependency();
@@ -546,6 +558,35 @@
 
         return (Dependency[]) dependencies.toArray( new 
Dependency[dependencies.size()] );
 
+    }
+
+    /**
+     * Adds a qualifier (4th digit) to each version in a range. This is needed 
in maven poms in order to make dependency
+     * ranges work when using qualifiers while generating artifacts.
+     * In maven the range <code>[3.2.0,4.0.0)</code> doesn't match version 
<code>3.2.100.v20060905</code>, while
+     * <code>[3.2.0.0,4.0.0.0)</code> do.
+     * @param versionRange input range
+     * @return modified version range
+     */
+    protected String addQualifierToVersionsInRange( String versionRange )
+    {
+        StringBuffer newVersionRange = new StringBuffer();
+
+        Matcher matcher = VERSION_PATTERN.matcher( versionRange );
+
+        while ( matcher.find() )
+        {
+            String currentVersion = matcher.group();
+            int digitsToAdd = 3 - StringUtils.countMatches( currentVersion, 
"." );
+            if ( digitsToAdd > 0 )
+            {
+                matcher.appendReplacement( newVersionRange, matcher.group() + 
".0" );
+            }
+        }
+
+        matcher.appendTail( newVersionRange );
+
+        return newVersionRange.toString();
     }
 
     /**

Modified: 
maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java?view=diff&rev=468743&r1=468742&r2=468743
==============================================================================
--- 
maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java
 (original)
+++ 
maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java
 Sat Oct 28 14:29:29 2006
@@ -49,7 +49,7 @@
     {
         Dependency[] deps = mojo.parseDependencies( 
"org.eclipse.ui;bundle-version=\"[3.2.0,4.0.0)\","
             + 
"org.eclipse.ui.console;resolution:=\"optional\";bundle-version=\"[3.1.100,4.0.0)\",org.eclipse.help;"
-            + 
"bundle-version=\"[3.2.0,4.0.0)\",org.eclipse.core.expressions;bundle-version=\"[3.2.0,4.0.0)\""
 );
+            + 
"bundle-version=\"[3.2.0,4.0.0)\",org.eclipse.core.expressions;bundle-version=\"[3.2.0,4.0.0)\"",
 false );
 
         assertEquals( 4, deps.length );
         assertEquals( "org.eclipse.ui", deps[0].getArtifactId() );
@@ -61,7 +61,41 @@
         assertEquals( "org.eclipse.core.expressions", deps[3].getArtifactId() 
);
         assertEquals( "[3.2.0,4.0.0)", deps[3].getVersion() );
     }
-    
+
+    /**
+     * Tests the parsing of the "Require-Bundle" entry from a manifest.
+     */
+    public void testParseDependenciesWithQualifier()
+    {
+        Dependency[] deps = mojo.parseDependencies( 
"org.eclipse.ui;bundle-version=\"[3.2.0,4.0.0)\","
+            + 
"org.eclipse.ui.console;resolution:=\"optional\";bundle-version=\"[3.1.100,4.0.0)\",org.eclipse.help;"
+            + 
"bundle-version=\"[3.2.0,4.0.0)\",org.eclipse.core.expressions;bundle-version=\"[3.2.0,4.0.0)\"",
 true );
+
+        assertEquals( 4, deps.length );
+        assertEquals( "org.eclipse.ui", deps[0].getArtifactId() );
+        assertEquals( "[3.2.0.0,4.0.0.0)", deps[0].getVersion() );
+        assertEquals( "org.eclipse.ui.console", deps[1].getArtifactId() );
+        assertEquals( "[3.1.100.0,4.0.0.0)", deps[1].getVersion() );
+        assertEquals( "org.eclipse.help", deps[2].getArtifactId() );
+        assertEquals( "[3.2.0.0,4.0.0.0)", deps[2].getVersion() );
+        assertEquals( "org.eclipse.core.expressions", deps[3].getArtifactId() 
);
+        assertEquals( "[3.2.0.0,4.0.0.0)", deps[3].getVersion() );
+    }
+
+    /**
+     * Tests for addQualifierToVersionsInRange()
+     *
+     */
+    public void testAddQualifierToVersionsInRange()
+    {
+        assertEquals( "[3.2.0.0,4.0.0.0)", mojo.addQualifierToVersionsInRange( 
"[3.2.0,4.0.0)" ) );
+        assertEquals( "[,4.0.0.0)", mojo.addQualifierToVersionsInRange( 
"[,4.0.0)" ) );
+        assertEquals( "[3.2.0.0,4.0.0.0)", mojo.addQualifierToVersionsInRange( 
"[3.2.0.0,4.0.0.0)" ) );
+    }
+
+    /**
+     * Test the generation of a groupId from a bundle symbolic name.
+     */
     public void testCreateGroupId()
     {
         assertEquals( "test", mojo.createGroupId( "test" ) );


Reply via email to