Author: xavier
Date: Mon Nov 26 12:10:49 2007
New Revision: 598408

URL: http://svn.apache.org/viewvc?rev=598408&view=rev
Log:
IMPROVEMENT: New text representation for main module metadata concepts (IVY-649)

Modified:
    incubator/ivy/core/trunk/CHANGES.txt
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactId.java
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleId.java
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java
    
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/module/id/ModuleRevisionIdTest.java
    
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java
    
incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/RegexpConflictManagerTest.java

Modified: incubator/ivy/core/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/CHANGES.txt?rev=598408&r1=598407&r2=598408&view=diff
==============================================================================
--- incubator/ivy/core/trunk/CHANGES.txt (original)
+++ incubator/ivy/core/trunk/CHANGES.txt Mon Nov 26 12:10:49 2007
@@ -80,6 +80,7 @@
 - IMPROVEMENT: ivy html reports now refers http://ant.apache.org (partial 
IVY-414)
 - IMPROVEMENT: Improvements on hello ivy example (IVY-626) (with contribution 
from Jacob Grydholt Jensen)
 - IMPROVEMENT: Make the root attribute in the ivyrep resolver mandatory 
(IVY-625)
+- IMPROVEMENT: New text representation for main module metadata concepts 
(IVY-649)
 
 - NEW: Add a task/code to create M2 POM files from Ivy configurations (IVY-416)
 - NEW: [Build] Publish the ivy sources (IVY-646) (thanks to Nicolas Lalevée)

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactId.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactId.java?rev=598408&r1=598407&r2=598408&view=diff
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactId.java 
(original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactId.java 
Mon Nov 26 12:10:49 2007
@@ -64,8 +64,10 @@
 
     /** [EMAIL PROTECTED] */
     public String toString() {
-        return getModuleId() + " " + getName() + "." + getType();
-    }
+        return getModuleId()
+            + "!" + getName() + "." + getExt() 
+            + (getType().equals(getExt()) ? "" : "(" + getType() + ")");
+}
 
     /**
      * @return Returns the module id.

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java?rev=598408&r1=598407&r2=598408&view=diff
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java
 (original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java
 Mon Nov 26 12:10:49 2007
@@ -90,9 +90,9 @@
     }
 
     public String toString() {
-        return "[ " + getModuleRevisionId().getOrganisation() + " | "
-                + getModuleRevisionId().getName() + " | " + 
getModuleRevisionId().getRevision()
-                + " :: " + getName() + " . " + getExt() + " ( " + getType() + 
" ) ]";
+        return getModuleRevisionId()
+                + "!" + getName() + "." + getExt() 
+                + (getType().equals(getExt()) ? "" : "(" + getType() + ")");
     }
 
     /**

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleId.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleId.java?rev=598408&r1=598407&r2=598408&view=diff
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleId.java 
(original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleId.java 
Mon Nov 26 12:10:49 2007
@@ -85,7 +85,7 @@
 
     /** [EMAIL PROTECTED] */    
     public String toString() {
-        return "[ " + organisation + " | " + name + " ]";
+        return organisation + "#" + name;
     }
 
     /** [EMAIL PROTECTED] */    

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java?rev=598408&r1=598407&r2=598408&view=diff
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java
 (original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java
 Mon Nov 26 12:10:49 2007
@@ -20,6 +20,8 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.ivy.Ivy;
 import org.apache.ivy.core.IvyContext;
@@ -35,6 +37,43 @@
     private static final String ENCODE_PREFIX = "+";
 
     private static final String NULL_ENCODE = "@#:NULL:#@";
+    
+    private static final String STRICT_CHARS_PATTERN = "[a-zA-Z0-9\\-/\\._+=]";
+    private static final String REV_STRICT_CHARS_PATTERN = 
"[a-zA-Z0-9\\-/\\._+=,\\[\\]\\{\\}:]";
+    private static final Pattern MRID_PATTERN = 
+        Pattern.compile(
+            "(" + STRICT_CHARS_PATTERN + "*)" 
+            + "#(" + STRICT_CHARS_PATTERN + "+)" 
+            + "(?:#(" + STRICT_CHARS_PATTERN + "+))?" 
+            + ";(" + REV_STRICT_CHARS_PATTERN + "+)");
+
+    /**
+     * Parses a module revision id text representation and returns a new 
[EMAIL PROTECTED] ModuleRevisionId}
+     * instance corresponding to the parsed String.
+     * <p>
+     * The result is unspecified if the module doesn't respect strict name 
conventions.
+     * </p>
+     * 
+     * @param mrid
+     *            the text representation of the module (as returned by [EMAIL 
PROTECTED] #toString()}). Must
+     *            not be <code>null</code>.
+     * @return a [EMAIL PROTECTED] ModuleRevisionId} corresponding to the 
given text representation
+     * @throws IllegalArgumentException
+     *             if the given text representation does not match the [EMAIL 
PROTECTED] ModuleRevisionId} text
+     *             representation rules.
+     */
+    public static ModuleRevisionId parse(String mrid) {
+        Matcher m = MRID_PATTERN.matcher(mrid.trim());
+        if (!m.matches()) {
+            throw new IllegalArgumentException(
+                    "module revision text representation do not match expected 
pattern."
+                            + " given mrid='" + mrid + "' expected form=" + 
MRID_PATTERN);
+        }
+
+        //CheckStyle:MagicNumber| OFF
+        return newInstance(m.group(1), m.group(2), m.group(3), m.group(4));
+        //CheckStyle:MagicNumber| ON
+    }
 
     public static ModuleRevisionId newInstance(String organisation, String 
name, String revision) {
         return new ModuleRevisionId(new ModuleId(organisation, name), 
revision);
@@ -144,9 +183,9 @@
 
 
     public String toString() {
-        return "[ " + moduleId.getOrganisation() + " | " + moduleId.getName()
-                + (branch == null || branch.length() == 0 ? "" : " | " + 
branch) + " | "
-                + (revision == null ? "NONE" : revision) + " ]";
+        return moduleId
+                + (branch == null || branch.length() == 0 ? "" : "#" + branch) 
+ ";"
+                + (revision == null ? "NONE" : revision);
     }
 
     public String encodeToString() {

Modified: 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/module/id/ModuleRevisionIdTest.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/core/module/id/ModuleRevisionIdTest.java?rev=598408&r1=598407&r2=598408&view=diff
==============================================================================
--- 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/module/id/ModuleRevisionIdTest.java
 (original)
+++ 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/module/id/ModuleRevisionIdTest.java
 Mon Nov 26 12:10:49 2007
@@ -23,6 +23,28 @@
 import junit.framework.TestCase;
 
 public class ModuleRevisionIdTest extends TestCase {
+    
+    public void testParse() throws Exception {
+        testParse("#A;1.0");
+        testParse("org#module;2.0");
+        testParse("org#module#branch;myversion");
+        testParse("org#module#branch;[1.2,1.3]");
+        testParse(" org#module#branch;[1.2,1.3] ");
+        
+        testParseFailure("bad");
+        testParseFailure("org#mod");
+        testParseFailure("#;1");
+        testParseFailure("#A%;1.0");
+    }
+
+    private void testParseFailure(String mrid) {
+        try {
+            ModuleRevisionId.parse(mrid);
+            fail("ModuleRevisionId.parse is supposed to raise an exception 
with "+mrid);
+        } catch (IllegalArgumentException ex) {
+            assertTrue(ex.getMessage().indexOf(mrid) != - 1);
+        }
+    }
 
     public void testEncodeDecodeToString() {
         testEncodeDecodeToString(ModuleRevisionId.newInstance("org", "name", 
"revision"));
@@ -45,5 +67,9 @@
 
     private void testEncodeDecodeToString(ModuleRevisionId mrid) {
         assertEquals(mrid, ModuleRevisionId.decode(mrid.encodeToString()));
+    }
+    
+    private void testParse(String mrid) {
+        assertEquals(mrid.trim(), ModuleRevisionId.parse(mrid).toString());
     }
 }

Modified: 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java?rev=598408&r1=598407&r2=598408&view=diff
==============================================================================
--- 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java 
(original)
+++ 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java 
Mon Nov 26 12:10:49 2007
@@ -2364,7 +2364,7 @@
             fail("no exception with circular dependency strategy set to 
error");
         } catch (CircularDependencyException ex) {
             assertEquals(
-                "[ org6 | mod6.3 | 1.0 ]->[ org6 | mod6.2 | 1.0 ]->[ org6 | 
mod6.3 | latest.integration ]",
+                
"org6#mod6.3;1.0->org6#mod6.2;1.0->org6#mod6.3;latest.integration",
                 ex.getMessage());
         }
     }
@@ -2384,7 +2384,7 @@
         } catch (CircularDependencyException ex) {
             // ok
             assertEquals(
-                "[ org8 | mod8.5 | NONE ]->[ org8 | mod8.6 | 2.+ ]->[ org8 | 
mod8.5 | 2.+ ]", ex
+                "org8#mod8.5;NONE->org8#mod8.6;2.+->org8#mod8.5;2.+", ex
                         .getMessage());
         }
     }
@@ -2422,7 +2422,7 @@
             fail("no exception with circular dependency strategy set to 
error");
         } catch (CircularDependencyException ex) {
             assertEquals(
-                "[ org6 | mod6.3 | 1.2 ]->[ org6 | mod6.2 | 1.1 ]->[ org6 | 
mod6.3 | 1.2 ]", ex
+                "org6#mod6.3;1.2->org6#mod6.2;1.1->org6#mod6.3;1.2", ex
                         .getMessage());
         }
     }

Modified: 
incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/RegexpConflictManagerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/RegexpConflictManagerTest.java?rev=598408&r1=598407&r2=598408&view=diff
==============================================================================
--- 
incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/RegexpConflictManagerTest.java
 (original)
+++ 
incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/RegexpConflictManagerTest.java
 Mon Nov 26 12:10:49 2007
@@ -64,7 +64,7 @@
                 e
                         .getMessage()
                         .indexOf(
-                            "[ org1 | mod1.2 | 2.0.0 ]:2.0 (needed by [[ 
apache | resolve-noconflict | 1.0 ]])") != -1);
+                            "org1#mod1.2;2.0.0:2.0 (needed by 
[apache#resolve-noconflict;1.0])") != -1);
             assertTrue("bad exception message: " + e.getMessage(), 
e.getMessage().indexOf(
                 "conflicts with") != -1);
             assertTrue(
@@ -72,7 +72,7 @@
                 e
                         .getMessage()
                         .indexOf(
-                            "[ org1 | mod1.2 | 2.1.0 ]:2.1 (needed by [[ 
apache | resolve-noconflict | 1.0 ]])") != -1);
+                            "org1#mod1.2;2.1.0:2.1 (needed by 
[apache#resolve-noconflict;1.0])") != -1);
         }
     }
 


Reply via email to