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