diff --git a/src/main/java/org/codehaus/mojo/clirr/ClirrExecutor.java b/src/main/java/org/codehaus/mojo/clirr/AbstractClirrMojo.java
similarity index 76%
rename from src/main/java/org/codehaus/mojo/clirr/ClirrExecutor.java
rename to src/main/java/org/codehaus/mojo/clirr/AbstractClirrMojo.java
index b9dd4ea2b38bbd76ac7e3c3abcae58f01b65436b..f0aeaccaec6f41d0f8efd7b4a1b666e94a566c42 100644
--- a/src/main/java/org/codehaus/mojo/clirr/ClirrExecutor.java
+++ b/src/main/java/org/codehaus/mojo/clirr/AbstractClirrMojo.java
@@ -1,7 +1,7 @@
package org.codehaus.mojo.clirr;
/*
- * Copyright 2006 The Codehaus
+ * Copyright 2006 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -42,9 +42,9 @@ import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.DirectoryScanner;
import org.codehaus.plexus.util.IOUtil;
@@ -63,43 +63,114 @@ import java.util.List;
import java.util.Set;
/**
- * Execute Clirr.
+ * Base parameters for Clirr check and report.
*
* @author Brett Porter
- * @todo i18n exceptions
+ * @todo i18n exceptions, log messages
+ * @requiresDependencyResolution compile
+ * @execute phase="compile"
*/
-public class ClirrExecutor
+public abstract class AbstractClirrMojo
+ extends AbstractMojo
{
- private static final URL[] EMPTY_URL_ARRAY = new URL[0];
-
- private final ClirrDiffListener listener = new ClirrDiffListener();
-
- private File xmlOutputFile;
-
- private File textOutputFile;
-
- private Log log;
-
- private String[] includes;
+ /**
+ * @parameter default-value="${project}"
+ * @required
+ * @readonly
+ */
+ protected MavenProject project;
+
+ /**
+ * @component
+ */
+ protected ArtifactResolver resolver;
+
+ /**
+ * @component
+ */
+ protected ArtifactFactory factory;
+
+ /**
+ * @parameter default-value="${localRepository}"
+ * @required
+ * @readonly
+ */
+ protected ArtifactRepository localRepository;
+
+ /**
+ * @component
+ */
+ protected ArtifactMetadataSource metadataSource;
+
+ /**
+ * The classes of this project to compare the last release against.
+ *
+ * @parameter default-value="${project.build.outputDirectory}
+ */
+ protected File classesDirectory;
+
+ /**
+ * Version to compare the current code against.
+ *
+ * @parameter expression="${comparisonVersion}" default-value="(,${project.version})"
+ */
+ protected String comparisonVersion;
+
+ /**
+ * A text output file to render to. If omitted, no output is rendered to a text file.
+ *
+ * @parameter expression="${textOutputFile}"
+ */
+ protected File textOutputFile;
+
+ /**
+ * An XML file to render to. If omitted, no output is rendered to an XML file.
+ *
+ * @parameter expression="${xmlOutputFile}"
+ */
+ protected File xmlOutputFile;
+
+ /**
+ * A list of classes to include. Anything not included is excluded. If omitted, all are assumed to be included.
+ * Values are specified in path pattern notation, e.g. org/codehaus/mojo/**
.
+ *
+ * @parameter
+ */
+ protected String[] includes;
+
+ /**
+ * A list of classes to exclude. These classes are excluded from the list of classes that are included.
+ * Values are specified in path pattern notation, e.g. org/codehaus/mojo/**
.
+ *
+ * @parameter
+ */
+ protected String[] excludes;
+
+ /**
+ * Whether to log the results to the console or not.
+ *
+ * @parameter expression="${logResults}" default-value="false"
+ */
+ protected boolean logResults;
- private String[] excludes;
-
- private Severity minSeverity;
-
- private String comparisonVersion;
+ private static final URL[] EMPTY_URL_ARRAY = new URL[0];
- private File classesDirectory;
+ public ClirrDiffListener executeClirr()
+ throws MojoExecutionException, MojoFailureException
+ {
+ return executeClirr( null );
+ }
- public void execute( MavenProject project, ArtifactResolver resolver, ArtifactMetadataSource metadatasource,
- ArtifactRepository localRepository, ArtifactFactory factory, Log log )
+ protected ClirrDiffListener executeClirr( Severity minSeverity )
throws MojoExecutionException, MojoFailureException
{
+ ClirrDiffListener listener = new ClirrDiffListener();
+
ClassFilter classFilter = new ClirrClassFilter( includes, excludes );
- JavaType[] origClasses = resolvePreviousReleaseClasses( project, resolver, metadatasource, localRepository,
- factory, classFilter, log );
+ JavaType[] origClasses = resolvePreviousReleaseClasses( classFilter );
- JavaType[] currentClasses = resolveCurrentClasses( classesDirectory, project.getArtifacts(), classFilter );
+ JavaType[] currentClasses = resolveCurrentClasses( classFilter );
// Create a Clirr checker and execute
Checker checker = new Checker();
@@ -134,22 +205,24 @@ public class ClirrExecutor
}
}
- if ( this.log != null )
+ if ( logResults )
{
- listeners.add( new LogDiffListener( this.log ) );
+ listeners.add( new LogDiffListener( getLog() ) );
}
checker.addDiffListener( new DelegatingListener( listeners, minSeverity ) );
checker.reportDiffs( origClasses, currentClasses );
+
+ return listener;
}
- private JavaType[] resolveCurrentClasses( File classesDirectory, Set artifacts, ClassFilter classFilter )
+ private JavaType[] resolveCurrentClasses( ClassFilter classFilter )
throws MojoExecutionException
{
try
{
- ClassLoader currentDepCL = createClassLoader( artifacts, null );
+ ClassLoader currentDepCL = createClassLoader( project.getArtifacts(), null );
return createClassSet( classesDirectory, currentDepCL, classFilter );
}
catch ( MalformedURLException e )
@@ -158,14 +231,11 @@ public class ClirrExecutor
}
}
- private JavaType[] resolvePreviousReleaseClasses( MavenProject project, ArtifactResolver resolver,
- ArtifactMetadataSource metadataSource,
- ArtifactRepository localRepository, ArtifactFactory factory,
- ClassFilter classFilter, Log log )
+ private JavaType[] resolvePreviousReleaseClasses( ClassFilter classFilter )
throws MojoFailureException, MojoExecutionException
{
// Find the previous version JAR and resolve it, and it's dependencies
- VersionRange range = null;
+ VersionRange range;
try
{
range = VersionRange.createFromVersionSpec( comparisonVersion );
@@ -183,14 +253,14 @@ public class ClirrExecutor
{
if ( !previousArtifact.getVersionRange().isSelectedVersionKnown( previousArtifact ) )
{
- log.debug( "Searching for versions in range: " + previousArtifact.getVersionRange() );
+ getLog().debug( "Searching for versions in range: " + previousArtifact.getVersionRange() );
List availableVersions = metadataSource.retrieveAvailableVersions( previousArtifact, localRepository,
project.getRemoteArtifactRepositories() );
ArtifactVersion version = range.matchVersion( availableVersions );
previousArtifact.selectVersion( version.toString() );
}
- log.info( "Comparing to version: " + previousArtifact.getVersion() );
+ getLog().info( "Comparing to version: " + previousArtifact.getVersion() );
// TODO: better way? Can't use previousArtifact as the originatingArtifact, it culls everything out
// perhaps resolve the artifact itself (not the pom artifact), then load th epom and get dependencies
@@ -304,48 +374,4 @@ public class ClirrExecutor
return cl;
}
- public ClirrDiffListener getListener()
- {
- return listener;
- }
-
- public void setXmlOutputFile( File xmlOutputFile )
- {
- this.xmlOutputFile = xmlOutputFile;
- }
-
- public void setTextOutputFile( File textOutputFile )
- {
- this.textOutputFile = textOutputFile;
- }
-
- public void setLog( Log log )
- {
- this.log = log;
- }
-
- public void setIncludes( String[] includes )
- {
- this.includes = includes;
- }
-
- public void setExcludes( String[] excludes )
- {
- this.excludes = excludes;
- }
-
- public void setMinSeverity( Severity minSeverity )
- {
- this.minSeverity = minSeverity;
- }
-
- public void setComparisonVersion( String comparisonVersion )
- {
- this.comparisonVersion = comparisonVersion;
- }
-
- public void setClassesDirectory( File classesDirectory )
- {
- this.classesDirectory = classesDirectory;
- }
}
diff --git a/src/main/java/org/codehaus/mojo/clirr/ClirrCheckMojo.java b/src/main/java/org/codehaus/mojo/clirr/ClirrCheckMojo.java
index 6307204d587242816c5889180180fd1ff43bdd1b..7b24d29b9855c4de6960d455a92c9d1cdca21e01 100644
--- a/src/main/java/org/codehaus/mojo/clirr/ClirrCheckMojo.java
+++ b/src/main/java/org/codehaus/mojo/clirr/ClirrCheckMojo.java
@@ -18,17 +18,10 @@ package org.codehaus.mojo.clirr;
import net.sf.clirr.core.ApiDifference;
import net.sf.clirr.core.Severity;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.i18n.I18N;
-import java.io.File;
import java.util.Iterator;
import java.util.Locale;
@@ -38,92 +31,10 @@ import java.util.Locale;
* @author Brett Porter
* @goal check
* @phase verify
- * @execute phase="compile"
- * @requiresDependencyResolution compile
*/
public class ClirrCheckMojo
- extends AbstractMojo
+ extends AbstractClirrMojo
{
- /**
- * @parameter default-value="${project}"
- * @required
- * @readonly
- */
- private MavenProject project;
-
- /**
- * @component
- */
- private ArtifactResolver resolver;
-
- /**
- * @component
- */
- private ArtifactFactory factory;
-
- /**
- * @parameter default-value="${localRepository}"
- * @required
- * @readonly
- */
- private ArtifactRepository localRepository;
-
- /**
- * @component
- */
- private ArtifactMetadataSource metadataSource;
-
- /**
- * The classes of this project to compare the last release against.
- *
- * @parameter default-value="${project.build.outputDirectory}
- */
- private File classesDirectory;
-
- /**
- * Version to compare the current code against.
- *
- * @parameter expression="${comparisonVersion}" default-value="(,${project.version})"
- */
- private String comparisonVersion;
-
- /**
- * A text output file to render to. If omitted, no output is rendered to a text file.
- *
- * @parameter expression="${textOutputFile}"
- */
- private File textOutputFile;
-
- /**
- * An XML file to render to. If omitted, no output is rendered to an XML file.
- *
- * @parameter expression="${xmlOutputFile}"
- */
- private File xmlOutputFile;
-
- /**
- * A list of classes to include. Anything not included is excluded. If omitted, all are assumed to be included.
- * Values are specified in path pattern notation, e.g. org/codehaus/mojo/**
.
- *
- * @parameter
- */
- private String[] includes;
-
- /**
- * A list of classes to exclude. These classes are excluded from the list of classes that are included.
- * Values are specified in path pattern notation, e.g. org/codehaus/mojo/**
.
- *
- * @parameter
- */
- private String[] excludes;
-
- /**
- * Whether to log the results to the console or not.
- *
- * @parameter expression="${logResults}" default-value="false"
- */
- private boolean logResults;
-
/**
* Whether to fail on errors.
*
@@ -146,22 +57,10 @@ public class ClirrCheckMojo
public void execute()
throws MojoExecutionException, MojoFailureException
{
- ClirrExecutor executor = new ClirrExecutor();
- if ( logResults )
- {
- executor.setLog( getLog() );
- }
- executor.setTextOutputFile( textOutputFile );
- executor.setXmlOutputFile( xmlOutputFile );
- executor.setIncludes( includes );
- executor.setExcludes( excludes );
- executor.setComparisonVersion( comparisonVersion );
- executor.setClassesDirectory( classesDirectory );
- executor.execute( project, resolver, metadataSource, localRepository, factory, getLog() );
+ ClirrDiffListener listener = executeClirr();
Locale locale = Locale.getDefault();
- ClirrDiffListener listener = executor.getListener();
int errorCount = listener.getSeverityCount( Severity.ERROR );
if ( failOnError && errorCount > 0 )
{
diff --git a/src/main/java/org/codehaus/mojo/clirr/ClirrReport.java b/src/main/java/org/codehaus/mojo/clirr/ClirrReport.java
index cf0ed73051d030340e68afc0710103525060f277..0d79f7f9ddd49666e2cbac1f4abc6e0e0c65d57e 100644
--- a/src/main/java/org/codehaus/mojo/clirr/ClirrReport.java
+++ b/src/main/java/org/codehaus/mojo/clirr/ClirrReport.java
@@ -17,16 +17,14 @@ package org.codehaus.mojo.clirr;
*/
import net.sf.clirr.core.Severity;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.reporting.AbstractMavenReport;
+import org.apache.maven.reporting.MavenReport;
import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.doxia.module.xhtml.XhtmlSink;
+import org.codehaus.doxia.sink.Sink;
import org.codehaus.doxia.site.renderer.SiteRenderer;
+import org.codehaus.plexus.util.StringInputStream;
import java.io.File;
import java.util.Locale;
@@ -37,11 +35,10 @@ import java.util.ResourceBundle;
*
* @author Brett Porter
* @goal clirr
- * @requiresDependencyResolution compile
- * @execute phase="compile"
*/
public class ClirrReport
- extends AbstractMavenReport
+ extends AbstractClirrMojo
+ implements MavenReport
{
/**
* Specifies the directory where the report will be generated
@@ -51,54 +48,11 @@ public class ClirrReport
*/
private File outputDirectory;
- /**
- * @parameter default-value="${project}"
- * @required
- * @readonly
- */
- private MavenProject project;
-
/**
* @component
*/
private SiteRenderer siteRenderer;
- /**
- * @component
- */
- private ArtifactResolver resolver;
-
- /**
- * @component
- */
- private ArtifactFactory factory;
-
- /**
- * @parameter default-value="${localRepository}"
- * @required
- * @readonly
- */
- private ArtifactRepository localRepository;
-
- /**
- * @component
- */
- private ArtifactMetadataSource metadataSource;
-
- /**
- * The classes of this project to compare the last release against.
- *
- * @parameter default-value="${project.build.outputDirectory}
- */
- private File classesDirectory;
-
- /**
- * Version to compare the current code against.
- *
- * @parameter expression="${comparisonVersion}" default-value="(,${project.version})"
- */
- private String comparisonVersion;
-
/**
* Show only messages of this severity or higher. Valid values are info
, warning
and error
.
*
@@ -120,59 +74,54 @@ public class ClirrReport
*/
private boolean htmlReport;
- /**
- * A text output file to render to. If omitted, no output is rendered to a text file.
- *
- * @parameter expression="${textOutputFile}"
- */
- private File textOutputFile;
-
- /**
- * An XML file to render to. If omitted, no output is rendered to an XML file.
- *
- * @parameter expression="${xmlOutputFile}"
- */
- private File xmlOutputFile;
-
- /**
- * A list of classes to include. Anything not included is excluded. If omitted, all are assumed to be included.
- * Values are specified in path pattern notation, e.g. org/codehaus/mojo/**
.
- *
- * @parameter
- */
- private String[] includes;
-
- /**
- * A list of classes to exclude. These classes are excluded from the list of classes that are included.
- * Values are specified in path pattern notation, e.g. org/codehaus/mojo/**
.
- *
- * @parameter
- */
- private String[] excludes;
+ public String getCategoryName()
+ {
+ return MavenReport.CATEGORY_PROJECT_REPORTS;
+ }
- /**
- * Whether to log the results to the console or not.
- *
- * @parameter expression="${logResults}" default-value="false"
- */
- private boolean logResults;
+ public void setReportOutputDirectory( File file )
+ {
+ outputDirectory = file;
+ }
- protected SiteRenderer getSiteRenderer()
+ public File getReportOutputDirectory()
{
- return siteRenderer;
+ return outputDirectory;
}
- protected String getOutputDirectory()
+ public boolean isExternalReport()
{
- return outputDirectory.getAbsolutePath();
+ return false;
}
- protected MavenProject getProject()
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
{
- return project;
+ // TODO: push to a helper?
+ Locale locale = Locale.getDefault();
+ try
+ {
+ StringInputStream dummySiteDescriptor = new StringInputStream( "" );
+ XhtmlSink sink = siteRenderer.createSink( outputDirectory, getOutputName() + ".html",
+ outputDirectory.getAbsolutePath(), dummySiteDescriptor, "maven" );
+
+ generate( sink, locale );
+
+ siteRenderer.copyResources( outputDirectory.getAbsolutePath(), "maven" );
+ }
+ catch ( MavenReportException e )
+ {
+ throw new MojoExecutionException( "An error has occurred in " + getName( locale ) + " report generation.",
+ e );
+ }
+ catch ( Exception e )
+ {
+ throw new MojoExecutionException( "An error has occurred in " + getName( locale ) + " report generation.",
+ e );
+ }
}
- protected void executeReport( Locale locale )
+ public void generate( Sink sink, Locale locale )
throws MavenReportException
{
if ( !canGenerateReport() )
@@ -181,25 +130,13 @@ public class ClirrReport
}
else
{
- doReport( locale );
+ doReport( sink, locale );
}
}
- private void doReport( Locale locale )
+ private void doReport( Sink sink, Locale locale )
throws MavenReportException
{
- ClirrExecutor executor = new ClirrExecutor();
- if ( logResults )
- {
- executor.setLog( getLog() );
- }
- executor.setTextOutputFile( textOutputFile );
- executor.setXmlOutputFile( xmlOutputFile );
- executor.setIncludes( includes );
- executor.setExcludes( excludes );
- executor.setComparisonVersion( comparisonVersion );
- executor.setClassesDirectory( classesDirectory );
-
Severity minSeverity = convertSeverity( this.minSeverity );
ResourceBundle bundle = getBundle( locale );
if ( minSeverity == null )
@@ -207,10 +144,6 @@ public class ClirrReport
getLog().warn( bundle.getString( "report.clirr.error.invalid.minseverity" ) + ": '" + this
.minSeverity + "'." );
}
- else
- {
- executor.setMinSeverity( minSeverity );
- }
if ( !htmlReport && xmlOutputFile == null && textOutputFile == null && !logResults )
{
@@ -218,9 +151,10 @@ public class ClirrReport
}
else
{
+ ClirrDiffListener listener;
try
{
- executor.execute( project, resolver, metadataSource, localRepository, factory, getLog() );
+ listener = executeClirr( minSeverity );
}
catch ( MojoExecutionException e )
{
@@ -230,17 +164,17 @@ public class ClirrReport
{
throw new MavenReportException( e.getMessage() );
}
- }
- if ( htmlReport )
- {
- ClirrReportGenerator generator = new ClirrReportGenerator( getSink(), bundle, locale );
+ if ( htmlReport )
+ {
+ ClirrReportGenerator generator = new ClirrReportGenerator( sink, bundle, locale );
- generator.setEnableSeveritySummary( showSummary );
+ generator.setEnableSeveritySummary( showSummary );
- generator.setMinSeverity( minSeverity );
+ generator.setMinSeverity( minSeverity );
- generator.generateReport( executor.getListener() );
+ generator.generateReport( listener );
+ }
}
}