Author: ogusakov
Date: Tue Mar 31 15:56:58 2009
New Revision: 760498

URL: http://svn.apache.org/viewvc?rev=760498&view=rev
Log:
[MERCURY-107] - patch to sort pluginIds in the metadata applied

Modified:
    
maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddPluginOperation.java
    
maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java

Modified: 
maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddPluginOperation.java
URL: 
http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddPluginOperation.java?rev=760498&r1=760497&r2=760498&view=diff
==============================================================================
--- 
maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddPluginOperation.java
 (original)
+++ 
maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddPluginOperation.java
 Tue Mar 31 15:56:58 2009
@@ -18,6 +18,8 @@
  */
 package org.apache.maven.mercury.repository.metadata;
 
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import org.codehaus.plexus.lang.DefaultLanguage;
@@ -35,6 +37,12 @@
     private static final Language LANG = new DefaultLanguage( 
AddPluginOperation.class );
 
     private Plugin plugin;
+    
+    private static PluginComparator pluginComparator;
+    
+    {
+        pluginComparator = new PluginComparator();
+    }
 
     /**
      * @throws MetadataException
@@ -87,7 +95,29 @@
         // not found, add it
         plugins.add( plugin );
 
+        Collections.sort( plugins, pluginComparator );
+        
         return true;
     }
+    
+    class PluginComparator
+        implements Comparator<Plugin>
+    {
+        public int compare( Plugin p1, Plugin p2 )
+        {
+            if ( p1 == null || p2 == null )
+            {
+                throw new IllegalArgumentException( LANG.getMessage( 
"null.plugin.to.compare" ) );
+            }
+
+            if ( p1.getArtifactId() == null || p2.getArtifactId() == null )
+            {
+                throw new IllegalArgumentException( LANG.getMessage( 
"null.plugin.artifactId.to.compare", p1
+                    .getArtifactId(), p2.getArtifactId() ) );
+            }
+
+            return p1.getArtifactId().compareTo( p2.getArtifactId() );
+        }
+    }
 
 }

Modified: 
maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
URL: 
http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java?rev=760498&r1=760497&r2=760498&view=diff
==============================================================================
--- 
maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
 (original)
+++ 
maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
 Tue Mar 31 15:56:58 2009
@@ -129,40 +129,52 @@
      assertEquals( 2, versions.size() );
   }
   //-------------------------------------------------------------------------
-  public void testAddPluginOperation()
-  throws FileNotFoundException, IOException, XmlPullParserException, 
MetadataException
-  {
-    File groupMd = new File( testBase, "group-maven-metadata.xml");
-    byte [] targetBytes = FileUtil.readRawData( groupMd );
-
-    Plugin plugin = new Plugin();
-    plugin.setArtifactId( "some-artifact-id" );
-    plugin.setName( "Some Plugin" );
-    plugin.setPrefix( "some" );
-
-    byte [] resBytes = MetadataBuilder.changeMetadata( targetBytes, new 
AddPluginOperation( new PluginOperand(plugin) ) );
-
-    File resFile = new File( testBase, "group-maven-metadata-write.xml");
-
-    FileUtil.writeRawData( resFile, resBytes );
+    public void testAddPluginOperation()
+        throws Exception
+    {
+        File mdFileBefore = new File( testBase, "group-maven-metadata.xml" );
+        Metadata mdBefore = getMetadata( mdFileBefore );
+
+        Plugin pluginA = new Plugin();
+        pluginA.setArtifactId( "maven-testa-plugin" );
+        pluginA.setName( "Some Plugin A" );
+        pluginA.setPrefix( "testa" );
+        Plugin pluginB = new Plugin();
+        pluginB.setArtifactId( "maven-testb-plugin" );
+        pluginB.setName( "Some Plugin B" );
+        pluginB.setPrefix( "testb" );
+        Plugin pluginC = new Plugin();
+        pluginC.setArtifactId( "maven-testc-plugin" );
+        pluginC.setName( "Some Plugin C" );
+        pluginC.setPrefix( "testc" );
+
+        List<MetadataOperation> opsAdd = new ArrayList<MetadataOperation>();
+
+        opsAdd.add( new AddPluginOperation( new PluginOperand( pluginC ) ) );
+        opsAdd.add( new AddPluginOperation( new PluginOperand( pluginB ) ) );
+        opsAdd.add( new AddPluginOperation( new PluginOperand( pluginA ) ) );
+
+        File mdFileAfter = new File( testBase, 
"group-maven-metadata-write.xml" );
+        Metadata mdAfterAdd = applyOpsAndGetMetadata( mdBefore, opsAdd, 
mdFileAfter );
+
+        assertEquals( 3, mdAfterAdd.getPlugins().size() );
+        assertEquals( "maven-testa-plugin", ( (Plugin) 
mdAfterAdd.getPlugins().get( 0 ) ).getArtifactId() );
+        assertEquals( "testa", ( (Plugin) mdAfterAdd.getPlugins().get( 0 ) 
).getPrefix() );
+        assertEquals( "Some Plugin A", ( (Plugin) mdAfterAdd.getPlugins().get( 
0 ) ).getName() );
+        assertEquals( "maven-testb-plugin", ( (Plugin) 
mdAfterAdd.getPlugins().get( 1 ) ).getArtifactId() );
+        assertEquals( "maven-testc-plugin", ( (Plugin) 
mdAfterAdd.getPlugins().get( 2 ) ).getArtifactId() );
+
+        List<MetadataOperation> opsRemove = new ArrayList<MetadataOperation>();
+
+        opsRemove.add( new RemovePluginOperation( new PluginOperand( pluginA ) 
) );
+        opsRemove.add( new RemovePluginOperation( new PluginOperand( pluginB ) 
) );
+        opsRemove.add( new RemovePluginOperation( new PluginOperand( pluginC ) 
) );
 
-     Metadata mmd = MetadataBuilder.read( new FileInputStream(resFile) );
-
-     assertNotNull( mmd );
-     assertEquals(1, mmd.getPlugins().size() );
-     assertEquals("some-artifact-id", ((Plugin)mmd.getPlugins().get( 0 
)).getArtifactId() );
-     assertEquals("Some Plugin", ((Plugin)mmd.getPlugins().get( 0 )).getName() 
);
-     assertEquals("some", ((Plugin)mmd.getPlugins().get( 0 )).getPrefix() );
-
-     // now let's drop plugin
-     targetBytes = FileUtil.readRawData( resFile );
-     resBytes = MetadataBuilder.changeMetadata( targetBytes, new 
RemovePluginOperation( new PluginOperand(plugin) ) );
+        Metadata mdAfterRemove = applyOpsAndGetMetadata( mdAfterAdd, 
opsRemove, mdFileAfter );
 
-     Metadata mmd2 = MetadataBuilder.read( new ByteArrayInputStream(resBytes) 
);
-
-     assertNotNull( mmd2 );
-     assertEquals(0, mmd2.getPlugins().size() );
-  }
+        assertEquals( 0, mdAfterRemove.getPlugins().size() );
+    }
+    
   //-------------------------------------------------------------------------
   public void testMergeOperation()
   throws FileNotFoundException, IOException, XmlPullParserException, 
MetadataException


Reply via email to