Author: brett
Date: Fri Dec 22 19:48:53 2006
New Revision: 489849
URL: http://svn.apache.org/viewvc?view=rev&rev=489849
Log:
[MPLUGIN-22] Allow specification of mojo extractors to be used
Submitted by: Jochen Kuhnle
Merged from: r489846, 489848 trunk
Added:
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/scanner/ScannerTestExtractor.java
- copied unchanged from r489846,
maven/shared/trunk/maven-plugin-tools/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/scanner/ScannerTestExtractor.java
Modified:
maven/plugins/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScanner.java
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/MojoScanner.java
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/resources/META-INF/plexus/components.xml
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScannerTest.java
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/resources/META-INF/plexus/scannerTestComponents.xml
Modified:
maven/plugins/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java?view=diff&rev=489849&r1=489848&r2=489849
==============================================================================
---
maven/plugins/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java
(original)
+++
maven/plugins/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/AbstractGeneratorMojo.java
Fri Dec 22 19:48:53 2006
@@ -31,6 +31,7 @@
import java.io.File;
import java.io.IOException;
+import java.util.Set;
/**
* @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
@@ -62,6 +63,31 @@
*/
protected String goalPrefix;
+ /**
+ * The names of extractors to use.
+ * <p/>
+ * If not set, all extractors will be used. If set to an empty extractor
name, no extractors
+ * will be used.
+ * <p/>
+ * Example:
+ * <p/>
+ * <pre>
+ * <!-- Use all extractors -->
+ * <extractors/>
+ * <!-- Use no extractors -->
+ * <extractors>
+ * <extractor/>
+ * </extractors>
+ * <!-- Use only bsh extractor -->
+ * <extractors>
+ * <extractor>bsh</extractor>
+ * </extractors>
+ * </pre>
+ *
+ * @parameter
+ */
+ protected Set/* <String> */extractors;
+
protected abstract File getOutputDirectory();
protected abstract Generator createGenerator();
@@ -84,6 +110,8 @@
getLog().warn(
"Goal prefix is: " + goalPrefix + "; Maven currently expects
it to be " + defaultGoalPrefix );
}
+
+ mojoScanner.setActiveExtractors( extractors );
// TODO: could use this more, eg in the writing of the plugin
descriptor!
PluginDescriptor pluginDescriptor = new PluginDescriptor();
Modified:
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScanner.java
URL:
http://svn.apache.org/viewvc/maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScanner.java?view=diff&rev=489849&r1=489848&r2=489849
==============================================================================
---
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScanner.java
(original)
+++
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScanner.java
Fri Dec 22 19:48:53 2006
@@ -29,9 +29,11 @@
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* @author jdcasey
@@ -43,6 +45,11 @@
private Map mojoDescriptorExtractors;
+ /**
+ * The names of the active extractors
+ */
+ private Set/* <String> */activeExtractors;
+
public DefaultMojoScanner( Map extractors )
{
this.mojoDescriptorExtractors = extractors;
@@ -58,14 +65,19 @@
throws ExtractionException, InvalidPluginDescriptorException
{
Logger logger = getLogger();
+ Set activeExtractors = getActiveExtractors();
- logger.info( "Using " + mojoDescriptorExtractors.size() + "
extractors." );
+ logger.info( "Using " + activeExtractors.size() + " extractors." );
- for ( Iterator it = mojoDescriptorExtractors.entrySet().iterator();
it.hasNext(); )
+ for ( Iterator it = activeExtractors.iterator(); it.hasNext(); )
{
- Map.Entry entry = (Map.Entry) it.next();
- String language = (String) entry.getKey();
- MojoDescriptorExtractor extractor = (MojoDescriptorExtractor)
entry.getValue();
+ String language = (String) it.next();
+ MojoDescriptorExtractor extractor = (MojoDescriptorExtractor)
mojoDescriptorExtractors.get( language );
+
+ if ( extractor == null )
+ {
+ throw new ExtractionException( "No extractor for language: " +
language );
+ }
logger.info( "Applying extractor for language: " + language );
@@ -87,4 +99,45 @@
}
}
+ /**
+ * Gets the name of the active extractors.
+ *
+ * @return A Set containing the names of the active extractors.
+ */
+ protected Set/* <String> */getActiveExtractors()
+ {
+ Set/* <String> */result = activeExtractors;
+
+ if ( result == null )
+ {
+ result = new HashSet/* <String> */(
mojoDescriptorExtractors.keySet() );
+ }
+
+ return result;
+ }
+
+ /**
+ * @see
org.apache.maven.tools.plugin.scanner.ExtendedMojoScanner#setActiveExtractors(java.util.Set)
+ */
+ public void setActiveExtractors( Set/* <String> */extractors )
+ {
+ if ( extractors == null )
+ {
+ this.activeExtractors = null;
+ }
+ else
+ {
+ this.activeExtractors = new HashSet/* <String> */();
+
+ for ( Iterator i = extractors.iterator(); i.hasNext(); )
+ {
+ String extractor = (String) i.next();
+
+ if ( extractor != null && extractor.length() > 0 )
+ {
+ this.activeExtractors.add( extractor );
+ }
+ }
+ }
+ }
}
Modified:
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/MojoScanner.java
URL:
http://svn.apache.org/viewvc/maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/MojoScanner.java?view=diff&rev=489849&r1=489848&r2=489849
==============================================================================
---
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/MojoScanner.java
(original)
+++
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/scanner/MojoScanner.java
Fri Dec 22 19:48:53 2006
@@ -24,6 +24,8 @@
import org.apache.maven.project.MavenProject;
import org.apache.maven.tools.plugin.extractor.ExtractionException;
+import java.util.Set;
+
/**
* @author jdcasey
*/
@@ -33,5 +35,17 @@
void populatePluginDescriptor( MavenProject project, PluginDescriptor
pluginDescriptor )
throws ExtractionException, InvalidPluginDescriptorException;
+
+
+ /**
+ * Sets the active extractors.
+ * <p/>
+ * Only the specified extractors will be used, all others will be skipped.
+ *
+ * @param extractors The names of the sctive extractors. If this parameter
is <code>null</code>,
+ * all the scanner's extractors are considered active.
Set entries that are
+ * <code>null</code> or empty ("") will be ignored.
+ */
+ void setActiveExtractors( Set/* <String> */extractors );
}
Modified:
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/resources/META-INF/plexus/components.xml
URL:
http://svn.apache.org/viewvc/maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=489849&r1=489848&r2=489849
==============================================================================
---
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/resources/META-INF/plexus/components.xml
(original)
+++
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/main/resources/META-INF/plexus/components.xml
Fri Dec 22 19:48:53 2006
@@ -29,6 +29,7 @@
<component>
<role>org.apache.maven.tools.plugin.scanner.MojoScanner</role>
<implementation>org.apache.maven.tools.plugin.scanner.DefaultMojoScanner</implementation>
+ <instantiation-strategy>per-lookup</instantiation-strategy>
<requirements>
<requirement>
<role>org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor</role>
Modified:
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScannerTest.java
URL:
http://svn.apache.org/viewvc/maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScannerTest.java?view=diff&rev=489849&r1=489848&r2=489849
==============================================================================
---
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScannerTest.java
(original)
+++
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/scanner/DefaultMojoScannerTest.java
Fri Dec 22 19:48:53 2006
@@ -25,11 +25,18 @@
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.tools.plugin.extractor.ExtractionException;
import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* @author jdcasey
@@ -37,38 +44,145 @@
public class DefaultMojoScannerTest
extends TestCase
{
+ private Map extractors;
- public void testShouldFindOneDescriptorFromTestExtractor()
+ private Build build;
+
+ private Model model;
+
+ private MojoScanner scanner;
+
+ private MavenProject project;
+
+ protected void setUp()
throws Exception
{
- Map extractors = Collections.singletonMap( "test", new TestExtractor()
);
+ extractors = new HashMap();
+ extractors.put( "one", new ScannerTestExtractor( "one" ) );
+ extractors.put( "two", new ScannerTestExtractor( "two" ) );
+ extractors.put( "three", new ScannerTestExtractor( "three" ) );
- MojoScanner scanner = new DefaultMojoScanner( extractors );
+ scanner = new DefaultMojoScanner( extractors );
- Build build = new Build();
+ build = new Build();
build.setSourceDirectory( "testdir" );
- Model model = new Model();
+ model = new Model();
model.setBuild( build );
- MavenProject project = new MavenProject( model );
+ project = new MavenProject( model );
project.setFile( new File( "." ) );
+ }
+
+ public void testUnspecifiedExtractors()
+ throws Exception
+ {
+ PluginDescriptor pluginDescriptor = createPluginDescriptor();
+
+ scanner.populatePluginDescriptor( project, pluginDescriptor );
+
+ checkResult( pluginDescriptor, extractors.keySet() );
+ }
+
+ public void testSpecifiedExtractors()
+ throws Exception
+ {
+ Set activeExtractors = new HashSet();
+ activeExtractors.add( "one" );
+ activeExtractors.add( "" );
+ activeExtractors.add( null );
+ activeExtractors.add( "three" );
+
+ PluginDescriptor pluginDescriptor = createPluginDescriptor();
+
+ scanner.setActiveExtractors( activeExtractors );
+ scanner.populatePluginDescriptor( project, pluginDescriptor );
+
+ checkResult( pluginDescriptor, Arrays.asList( new String[]{"one",
"three"} ) );
+ }
+
+ public void testAllExtractorsThroughNull()
+ throws Exception
+ {
+ PluginDescriptor pluginDescriptor = createPluginDescriptor();
+ scanner.setActiveExtractors( null );
+ scanner.populatePluginDescriptor( project, pluginDescriptor );
+
+ checkResult( pluginDescriptor, extractors.keySet() );
+ }
+
+ public void testNoExtractorsThroughEmptySet()
+ throws Exception
+ {
+ PluginDescriptor pluginDescriptor = createPluginDescriptor();
+
+ scanner.setActiveExtractors( Collections.EMPTY_SET );
+ scanner.populatePluginDescriptor( project, pluginDescriptor );
+
+ checkResult( pluginDescriptor, Collections.EMPTY_SET );
+ }
+
+ public void testUnknownExtractor()
+ throws Exception
+ {
+ Set activeExtractors = new HashSet();
+ activeExtractors.add( "four" );
+
+ PluginDescriptor pluginDescriptor = createPluginDescriptor();
+
+ scanner.setActiveExtractors( activeExtractors );
+
+ try
+ {
+ scanner.populatePluginDescriptor( project, pluginDescriptor );
+ fail( "No error for unknown extractor" );
+ }
+ catch ( ExtractionException e )
+ {
+ // Ok
+ }
+
+ checkResult( pluginDescriptor, Collections.EMPTY_SET );
+ }
+
+ private PluginDescriptor createPluginDescriptor()
+ {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setGroupId( "groupId" );
pluginDescriptor.setArtifactId( "artifactId" );
pluginDescriptor.setVersion( "version" );
pluginDescriptor.setGoalPrefix( "testId" );
+ return pluginDescriptor;
+ }
- scanner.populatePluginDescriptor( project, pluginDescriptor );
-
+ /**
+ * Checks if the [EMAIL PROTECTED] PluginDescriptor} contains exactly the
[EMAIL PROTECTED] MojoDescriptor}s with the
+ * supplied goal names.
+ *
+ * @param pluginDescriptor The [EMAIL PROTECTED] PluginDescriptor} to
check.
+ * @param expectedGoals The goal names of the [EMAIL PROTECTED]
MojoDescriptor}s.
+ */
+ protected void checkResult( PluginDescriptor pluginDescriptor, Collection
expectedGoals )
+ {
+ Set remainingGoals = new HashSet( expectedGoals );
List descriptors = pluginDescriptor.getMojos();
- assertEquals( 1, descriptors.size() );
+ if ( descriptors == null )
+ {
+ // TODO Maybe getMojos should be more user frendly and not return
null
+ descriptors = Collections.EMPTY_LIST;
+ }
+
+ for ( Iterator i = descriptors.iterator(); i.hasNext(); )
+ {
+ MojoDescriptor desc = (MojoDescriptor) i.next();
+ assertEquals( pluginDescriptor, desc.getPluginDescriptor() );
+ assertTrue( "Unexpected goal in PluginDescriptor: " +
desc.getGoal(),
+ remainingGoals.remove( desc.getGoal() ) );
+ }
- MojoDescriptor desc = (MojoDescriptor) descriptors.iterator().next();
- assertEquals( pluginDescriptor, desc.getPluginDescriptor() );
- assertEquals( "testGoal", desc.getGoal() );
+ assertTrue( "Extpected goals missing from PluginDescriptor: " +
remainingGoals, remainingGoals.size() == 0 );
}
}
Modified:
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/resources/META-INF/plexus/scannerTestComponents.xml
URL:
http://svn.apache.org/viewvc/maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/resources/META-INF/plexus/scannerTestComponents.xml?view=diff&rev=489849&r1=489848&r2=489849
==============================================================================
---
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/resources/META-INF/plexus/scannerTestComponents.xml
(original)
+++
maven/shared/branches/maven-plugin-tools-2.0.x/maven-plugin-tools-api/src/test/resources/META-INF/plexus/scannerTestComponents.xml
Fri Dec 22 19:48:53 2006
@@ -23,6 +23,7 @@
<component>
<role>org.apache.maven.tools.plugin.scanner.MojoScanner</role>
<implementation>org.apache.maven.tools.plugin.scanner.DefaultMojoScanner</implementation>
+ <instantiation-strategy>per-lookup</instantiation-strategy>
<requirements>
<requirement>
<role>org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor</role>