You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@creadur.apache.org by jo...@apache.org on 2010/07/13 18:10:24 UTC
svn commit: r963778 - in /incubator/rat/main/trunk:
apache-rat-core/src/main/java/org/apache/rat/
apache-rat-core/src/main/java/org/apache/rat/analysis/generation/
apache-rat-core/src/main/java/org/apache/rat/api/
apache-rat-core/src/main/java/org/apac...
Author: jochen
Date: Tue Jul 13 16:10:23 2010
New Revision: 963778
URL: http://svn.apache.org/viewvc?rev=963778&view=rev
Log:
PR: RAT-76
- Added support for adding license headers to the Maven plugin and the Ant tasks.
- Refactoring and code simplification.
Added:
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java (with props)
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java (with props)
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java (with props)
incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/src.apt
incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/index.apt
Removed:
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/Reporter.java
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReport.java
Modified:
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java
incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java
incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java
incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java
incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java
incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java
incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/pom.xml
incubator/rat/main/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
incubator/rat/main/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
incubator/rat/main/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/report-junit.xml
Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java Tue Jul 13 16:10:23 2010
@@ -18,24 +18,18 @@
*/
package org.apache.rat;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PipedReader;
import java.io.PipedWriter;
import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
import java.io.Writer;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerConfigurationException;
import org.apache.commons.cli.CommandLine;
@@ -48,32 +42,24 @@ import org.apache.commons.cli.ParseExcep
import org.apache.commons.cli.PosixParser;
import org.apache.commons.io.filefilter.NotFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.annotation.AbstractLicenceAppender;
-import org.apache.rat.annotation.ApacheV2LicenceAppender;
import org.apache.rat.api.RatException;
-import org.apache.rat.license.ILicenseFamily;
import org.apache.rat.report.IReportable;
import org.apache.rat.report.RatReport;
import org.apache.rat.report.claim.ClaimStatistic;
import org.apache.rat.report.xml.XmlReportFactory;
import org.apache.rat.report.xml.writer.IXmlWriter;
import org.apache.rat.report.xml.writer.impl.base.XmlWriter;
-import org.apache.rat.walker.DirectoryWalker;
import org.apache.rat.walker.ArchiveWalker;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
+import org.apache.rat.walker.DirectoryWalker;
public class Report {
-
private static final char EXCLUDE_CLI = 'e';
private static final char STYLESHEET_CLI = 's';
//@SuppressWarnings("unchecked")
public static final void main(String args[]) throws Exception {
+ final ReportConfiguration configuration = new ReportConfiguration();
Options opts = buildOptions();
PosixParser parser = new PosixParser();
@@ -96,7 +82,9 @@ public class Report {
Report report = new Report(args[0]);
if (cl.hasOption('a')) {
- configureForAddLicense(cl, report);
+ configuration.setAddingLicenses(true);
+ configuration.setAddingLicensesForced(cl.hasOption('f'));
+ configuration.setCopyrightMessage(cl.getOptionValue("c"));
}
if (cl.hasOption(EXCLUDE_CLI)) {
@@ -119,10 +107,11 @@ public class Report {
System.exit(1);
}
try {
- report.report(System.out,
- report.getDirectory(System.out),
- new FileInputStream(style[0]),
- Defaults.createDefaultMatcher(), null);
+ configuration.setHeaderMatcher(Defaults.createDefaultMatcher());
+ report(System.out,
+ report.getDirectory(System.out),
+ new FileInputStream(style[0]),
+ configuration);
} catch (FileNotFoundException fnfe) {
System.err.println("stylesheet " + style[0]
+ " doesn't exist");
@@ -198,45 +187,6 @@ public class Report {
return opts;
}
- private static void configureForAddLicense(CommandLine cl, Report report) throws Exception, UnsupportedEncodingException, SAXException, IOException, ParserConfigurationException {
- OutputStream reportOutput = new ByteArrayOutputStream();
- PrintStream stream = new PrintStream(reportOutput, true);
- report.report(stream);
-
- AbstractLicenceAppender appender;
- String copyrightMsg = cl.getOptionValue("c");
- if ( copyrightMsg != null) {
- appender = new ApacheV2LicenceAppender(copyrightMsg);
- } else {
- appender = new ApacheV2LicenceAppender();
- }
- if (cl.hasOption("f")) {
- appender.setForce(true);
- }
-
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- factory.setValidating(false);
- ByteArrayInputStream xmlStream = new ByteArrayInputStream(reportOutput.toString().getBytes("UTF-8"));
- Document doc = factory.newDocumentBuilder().parse(xmlStream);
-
- NodeList resourceHeaders = doc.getElementsByTagName("header-type");
- String value = null;
- for (int i = 0; i < resourceHeaders.getLength(); i++) {
- Node headerType = resourceHeaders.item(i).getAttributes().getNamedItem("name");
- if(headerType != null) {
- value = headerType.getNodeValue();
- } else {
- value = null;
- }
- if (value != null &&value.equals("?????")) {
- Node resource = resourceHeaders.item(i).getParentNode();
- String filename = resource.getAttributes().getNamedItem("name").getNodeValue();
- File document = new File(filename);
- appender.append(document);
- }
- }
- }
-
private static final void printUsage(Options opts) {
HelpFormatter f = new HelpFormatter();
String header = "Options";
@@ -283,7 +233,9 @@ public class Report {
public ClaimStatistic report(PrintStream out) throws Exception {
final IReportable base = getDirectory(out);
if (base != null) {
- return report(base, new OutputStreamWriter(out), Defaults.createDefaultMatcher(), null);
+ final ReportConfiguration configuration = new ReportConfiguration();
+ configuration.setHeaderMatcher(Defaults.createDefaultMatcher());
+ return report(base, new OutputStreamWriter(out), configuration);
}
return null;
}
@@ -322,7 +274,9 @@ public class Report {
final IReportable base = getDirectory(out);
if (base != null) {
InputStream style = Defaults.getDefaultStyleSheet();
- report(out, base, style, Defaults.createDefaultMatcher(), null);
+ final ReportConfiguration configuration = new ReportConfiguration();
+ configuration.setHeaderMatcher(Defaults.createDefaultMatcher());
+ report(out, base, style, configuration);
}
}
@@ -339,11 +293,10 @@ public class Report {
* @throws InterruptedException
* @throws RatException
*/
- public static void report(PrintStream out, IReportable base, final InputStream style, final IHeaderMatcher matcher,
- final ILicenseFamily[] approvedLicenseNames)
- throws IOException, TransformerConfigurationException,
- InterruptedException, RatException {
- report(new OutputStreamWriter(out), base, style, matcher, approvedLicenseNames);
+ public static void report(PrintStream out, IReportable base, final InputStream style,
+ ReportConfiguration pConfiguration)
+ throws IOException, TransformerConfigurationException, InterruptedException, RatException {
+ report(new OutputStreamWriter(out), base, style, pConfiguration);
}
/**
@@ -362,14 +315,14 @@ public class Report {
* @throws RatException
*/
public static ClaimStatistic report(Writer out, IReportable base, final InputStream style,
- final IHeaderMatcher matcher, final ILicenseFamily[] approvedLicenseNames)
+ ReportConfiguration pConfiguration)
throws IOException, TransformerConfigurationException, FileNotFoundException, InterruptedException, RatException {
PipedReader reader = new PipedReader();
PipedWriter writer = new PipedWriter(reader);
ReportTransformer transformer = new ReportTransformer(out, style, reader);
Thread transformerThread = new Thread(transformer);
transformerThread.start();
- final ClaimStatistic statistic = report(base, writer, matcher, approvedLicenseNames);
+ final ClaimStatistic statistic = report(base, writer, pConfiguration);
writer.flush();
writer.close();
transformerThread.join();
@@ -385,11 +338,11 @@ public class Report {
* @throws IOException
* @throws RatException
*/
- public static ClaimStatistic report(final IReportable container, final Writer out, final IHeaderMatcher matcher,
- final ILicenseFamily[] approvedLicenseNames) throws IOException, RatException {
+ public static ClaimStatistic report(final IReportable container, final Writer out,
+ ReportConfiguration pConfiguration) throws IOException, RatException {
IXmlWriter writer = new XmlWriter(out);
final ClaimStatistic statistic = new ClaimStatistic();
- RatReport report = XmlReportFactory.createStandardReport(writer, matcher, approvedLicenseNames, statistic);
+ RatReport report = XmlReportFactory.createStandardReport(writer, statistic, pConfiguration);
report.startReport();
container.run(report);
report.endReport();
Added: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java?rev=963778&view=auto
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java (added)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java Tue Jul 13 16:10:23 2010
@@ -0,0 +1,106 @@
+package org.apache.rat;
+
+import org.apache.rat.analysis.IHeaderMatcher;
+import org.apache.rat.license.ILicenseFamily;
+
+
+/**
+ * A configuration object is used by the frontend to invoke the
+ * {@link Report}. Basically, the sole purpose of the frontends is
+ * to create the configuration and invoke the {@link Report}.
+ */
+public class ReportConfiguration {
+ private IHeaderMatcher headerMatcher;
+ private ILicenseFamily[] approvedLicenseNames;
+ private boolean addingLicenses;
+ private boolean addingLicensesForced;
+ private String copyrightMessage;
+
+ /**
+ * Returns the header matcher.
+ */
+ public IHeaderMatcher getHeaderMatcher() {
+ return headerMatcher;
+ }
+
+ /**
+ * Sets the header matcher.
+ */
+ public void setHeaderMatcher(IHeaderMatcher headerMatcher) {
+ this.headerMatcher = headerMatcher;
+ }
+
+ /**
+ * Returns the set of approved license names.
+ */
+ public ILicenseFamily[] getApprovedLicenseNames() {
+ return approvedLicenseNames;
+ }
+
+ /**
+ * Sets the set of approved license names.
+ */
+ public void setApprovedLicenseNames(ILicenseFamily[] approvedLicenseNames) {
+ this.approvedLicenseNames = approvedLicenseNames;
+ }
+
+ /**
+ * If RAT is adding license headers: Returns the optional
+ * copyright message. This value is ignored, if no
+ * license headers are added.
+ * @see #isAddingLicenses()
+ */
+ public String getCopyrightMessage() {
+ return copyrightMessage;
+ }
+
+ /**
+ * If RAT is adding license headers: Sets the optional
+ * copyright message. This value is ignored, if no
+ * license headers are added.
+ * @see #setAddingLicenses(boolean)
+ */
+ public void setCopyrightMessage(String copyrightMessage) {
+ this.copyrightMessage = copyrightMessage;
+ }
+
+ /**
+ * If RAT is adding license headers: Returns, whether adding
+ * license headers is enforced. This value is ignored, if no
+ * license headers are added.
+ * @see #isAddingLicenses()
+ */
+ public boolean isAddingLicensesForced() {
+ return addingLicensesForced;
+ }
+
+ /**
+ * If RAT is adding license headers: Sets, whether adding
+ * license headers is enforced. This value is ignored, if no
+ * license headers are added.
+ * @see #isAddingLicenses()
+ */
+ public void setAddingLicensesForced(boolean addingLicensesForced) {
+ this.addingLicensesForced = addingLicensesForced;
+ }
+
+ /**
+ * Returns, whether RAT should add missing license headers.
+ * @see #isAddingLicensesForced()
+ * @see #getCopyrightMessage()
+ */
+ public boolean isAddingLicenses() {
+ return addingLicenses;
+ }
+
+ /**
+ * Returns, whether RAT should add missing license headers.
+ * @see #setAddingLicensesForced(boolean)
+ * @see #setCopyrightMessage(String)
+ */
+ public void setAddingLicenses(boolean addingLicenses) {
+ this.addingLicenses = addingLicenses;
+ }
+
+
+}
Propchange: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java Tue Jul 13 16:10:23 2010
@@ -23,7 +23,6 @@ import java.util.regex.Pattern;
import org.apache.rat.analysis.IHeaderMatcher;
import org.apache.rat.analysis.RatHeaderAnalysisException;
import org.apache.rat.api.Document;
-import org.apache.rat.api.Reporter;
import org.apache.rat.api.MetaData;
public class GeneratedLicenseNotRequired implements IHeaderMatcher {
Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java Tue Jul 13 16:10:23 2010
@@ -277,3 +277,4 @@ public class MetaData {
}
}
}
+
\ No newline at end of file
Added: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java?rev=963778&view=auto
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java (added)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java Tue Jul 13 16:10:23 2010
@@ -0,0 +1,22 @@
+package org.apache.rat.report;
+
+import org.apache.rat.api.Document;
+import org.apache.rat.api.RatException;
+
+
+/**
+ * Abstract base class for deriving implementations of {@link RatReport}.
+ */
+public abstract class AbstractReport implements RatReport {
+ public void startReport() throws RatException {
+ // Does nothing
+ }
+
+ public void report(Document document) throws RatException {
+ // Does nothing
+ }
+
+ public void endReport() throws RatException {
+ // Does nothing
+ }
+}
Propchange: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java Tue Jul 13 16:10:23 2010
@@ -20,9 +20,9 @@
package org.apache.rat.report.claim.impl;
import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-import org.apache.rat.api.Reporter;
import org.apache.rat.api.MetaData;
+import org.apache.rat.api.RatException;
+import org.apache.rat.report.AbstractReport;
/**
@@ -30,8 +30,7 @@ import org.apache.rat.api.MetaData;
* It is strongly suggested, that implementations derive from
* this class.
*/
-public abstract class AbstractClaimReporter implements Reporter {
-
+public abstract class AbstractClaimReporter extends AbstractReport {
protected void handleDocumentCategoryClaim(String documentCategoryName) {
// Does nothing
}
Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java Tue Jul 13 16:10:23 2010
@@ -24,7 +24,6 @@ import java.util.Map;
import org.apache.rat.api.Document;
import org.apache.rat.api.RatException;
-import org.apache.rat.api.Reporter;
import org.apache.rat.api.MetaData;
import org.apache.rat.report.claim.ClaimStatistic;
@@ -34,16 +33,16 @@ import org.apache.rat.report.claim.Claim
* of claims.
*/
public class ClaimAggregator extends AbstractClaimReporter {
- private final Reporter reporter;
+ private final ClaimStatistic statistic;
private final Map numsByLicenseFamilyName = new HashMap();
private final Map numsByLicenseFamilyCode = new HashMap();
private final Map numsByFileType = new HashMap();
private int numApproved, numUnApproved, numGenerated, numUnknown;
- public ClaimAggregator(Reporter pReporter) {
- reporter = pReporter;
+ public ClaimAggregator(ClaimStatistic pStatistic) {
+ statistic = pStatistic;
}
-
+
private void incMapValue(Map pMap, Object pKey) {
final Integer num = (Integer) pMap.get(pKey);
final int newNum;
@@ -92,11 +91,8 @@ public class ClaimAggregator extends Abs
pStatistic.setNumUnknown(numUnknown);
}
-
- public void report(Document document) throws RatException {
- super.report(document);
- if (reporter != null) {
- reporter.report(document);
- }
+ public void endReport() throws RatException {
+ super.endReport();
+ fillClaimStatistic(statistic);
}
}
Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java Tue Jul 13 16:10:23 2010
@@ -21,12 +21,12 @@ package org.apache.rat.report.claim.impl
import java.io.IOException;
import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-import org.apache.rat.api.Reporter;
import org.apache.rat.api.MetaData;
+import org.apache.rat.api.RatException;
+import org.apache.rat.report.AbstractReport;
import org.apache.rat.report.xml.writer.IXmlWriter;
-public class SimpleXmlClaimReporter implements Reporter {
+public class SimpleXmlClaimReporter extends AbstractReport {
public static final String LICENSE_APPROVAL_PREDICATE = "license-approval";
public static final String LICENSE_FAMILY_PREDICATE = "license-family";
public static final String HEADER_SAMPLE_PREDICATE = "header-sample";
@@ -129,4 +129,20 @@ public class SimpleXmlClaimReporter impl
writeClaim(FILE_TYPE_PREDICATE, documentCategory, false);
}
}
+
+ public void startReport() throws RatException {
+ try {
+ writer.openElement("rat-report");
+ } catch (IOException e) {
+ throw new RatException("Cannot open start element", e);
+ }
+ }
+
+ public void endReport() throws RatException {
+ try {
+ writer.closeDocument();
+ } catch (IOException e) {
+ throw new RatException("Cannot close last element", e);
+ }
+ }
}
Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java Tue Jul 13 16:10:23 2010
@@ -18,23 +18,52 @@
*/
package org.apache.rat.report.claim.util;
+import java.util.List;
+
import org.apache.rat.api.Document;
import org.apache.rat.api.RatException;
-import org.apache.rat.api.Reporter;
+import org.apache.rat.document.IDocumentAnalyser;
+import org.apache.rat.document.RatDocumentAnalysisException;
+import org.apache.rat.report.RatReport;
+
-public class ClaimReporterMultiplexer implements Reporter {
+public class ClaimReporterMultiplexer implements RatReport {
+ private final IDocumentAnalyser analyser;
+ private final List reporters;
- private final Reporter[] reporters;
-
- public ClaimReporterMultiplexer(final Reporter[] reporters) {
- super();
+ public ClaimReporterMultiplexer(final IDocumentAnalyser pAnalyser, final List reporters) {
+ analyser = pAnalyser;
this.reporters = reporters;
}
public void report(Document document) throws RatException {
- final int length = reporters.length;
- for (int i=0;i<length;i++) {
- reporters[i].report(document);
+ if (analyser != null) {
+ try {
+ analyser.analyse(document);
+ } catch (RatDocumentAnalysisException e) {
+ throw new RatException(e.getMessage(), e);
+ }
+ }
+ final int length = reporters.size();
+ for (int i=0; i<length; i++) {
+ final RatReport report = (RatReport) reporters.get(i);
+ report.report(document);
+ }
+ }
+
+ public void startReport() throws RatException {
+ final int length = reporters.size();
+ for (int i=0; i<length; i++) {
+ final RatReport report = (RatReport) reporters.get(i);
+ report.startReport();
+ }
+ }
+
+ public void endReport() throws RatException {
+ final int length = reporters.size();
+ for (int i=0; i<length; i++) {
+ final RatReport report = (RatReport) reporters.get(i);
+ report.endReport();
}
}
}
Added: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java?rev=963778&view=auto
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java (added)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java Tue Jul 13 16:10:23 2010
@@ -0,0 +1,38 @@
+package org.apache.rat.report.claim.util;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.rat.annotation.AbstractLicenceAppender;
+import org.apache.rat.annotation.ApacheV2LicenceAppender;
+import org.apache.rat.api.MetaData;
+import org.apache.rat.api.MetaData.Datum;
+import org.apache.rat.api.RatException;
+import org.apache.rat.report.AbstractReport;
+
+
+public class LicenseAddingReport extends AbstractReport {
+ private final AbstractLicenceAppender appender;
+
+ public LicenseAddingReport(String pCopyrightMsg, boolean pForced) {
+ appender = pCopyrightMsg == null ? new ApacheV2LicenceAppender() : new ApacheV2LicenceAppender(pCopyrightMsg);
+ appender.setForce(pForced);
+ }
+
+ public void report(org.apache.rat.api.Document document) throws RatException {
+ final MetaData metaData = document.getMetaData();
+ final Datum licenseHeader = metaData.get(MetaData.RAT_URL_HEADER_CATEGORY);
+ if (licenseHeader == null
+ || MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_UNKNOWN.getValue().equals(licenseHeader.getValue())) {
+ final File file = new File(document.getName());
+ if (file.isFile()) {
+ try {
+ appender.append(file);
+ } catch (IOException e) {
+ throw new RatException(e.getMessage(), e);
+ }
+ }
+ }
+ metaData.getData();
+ }
+}
Propchange: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java Tue Jul 13 16:10:23 2010
@@ -18,19 +18,20 @@
*/
package org.apache.rat.report.xml;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.rat.ReportConfiguration;
import org.apache.rat.analysis.DefaultAnalyserFactory;
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-import org.apache.rat.api.Reporter;
import org.apache.rat.document.IDocumentAnalyser;
import org.apache.rat.document.impl.util.DocumentAnalyserMultiplexer;
-import org.apache.rat.license.ILicenseFamily;
import org.apache.rat.policy.DefaultPolicy;
import org.apache.rat.report.RatReport;
import org.apache.rat.report.claim.ClaimStatistic;
import org.apache.rat.report.claim.impl.ClaimAggregator;
import org.apache.rat.report.claim.impl.xml.SimpleXmlClaimReporter;
+import org.apache.rat.report.claim.util.ClaimReporterMultiplexer;
+import org.apache.rat.report.claim.util.LicenseAddingReport;
import org.apache.rat.report.xml.writer.IXmlWriter;
/**
@@ -38,45 +39,21 @@ import org.apache.rat.report.xml.writer.
*
*/
public class XmlReportFactory {
- public static final RatReport createStandardReport(final IXmlWriter writer,
- final IHeaderMatcher matcher, ClaimStatistic pStatistic) {
- return createStandardReport(writer, matcher, null, pStatistic);
- }
-
- public static final RatReport createStandardReport(final IXmlWriter writer,
- final IHeaderMatcher matcher, final ILicenseFamily[] approvedLicenses,
- final ClaimStatistic pStatistic) {
- // TODO: this isn't very elegant :-/
- // TODO: should really pass in analysers but this means injecting reporter
- final Reporter reporter;
- if (pStatistic == null) {
- reporter = new SimpleXmlClaimReporter(writer);
- } else {
- reporter = new ClaimAggregator(new SimpleXmlClaimReporter(writer));
+ public static final RatReport createStandardReport(IXmlWriter writer,
+ final ClaimStatistic pStatistic, ReportConfiguration pConfiguration) {
+ final List reporters = new ArrayList();
+ if (pStatistic != null) {
+ reporters.add(new ClaimAggregator(pStatistic));
}
- final DefaultPolicy policy = new DefaultPolicy(approvedLicenses);
-
+ if (pConfiguration.isAddingLicenses()) {
+ reporters.add(new LicenseAddingReport(pConfiguration.getCopyrightMessage(), pConfiguration.isAddingLicensesForced()));
+ }
+ reporters.add(new SimpleXmlClaimReporter(writer));
final IDocumentAnalyser analyser =
- DefaultAnalyserFactory.createDefaultAnalyser(matcher);
+ DefaultAnalyserFactory.createDefaultAnalyser(pConfiguration.getHeaderMatcher());
+ final DefaultPolicy policy = new DefaultPolicy(pConfiguration.getApprovedLicenseNames());
final IDocumentAnalyser[] analysers = {analyser, policy};
DocumentAnalyserMultiplexer analysisMultiplexer = new DocumentAnalyserMultiplexer(analysers);
-
- final RatReport result = new XmlReport(writer, analysisMultiplexer, reporter);
- if (pStatistic == null) {
- return result;
- }
- return new RatReport(){
- public void endReport() throws RatException {
- result.endReport();
- ((ClaimAggregator) reporter).fillClaimStatistic(pStatistic);
- }
- public void report(Document pDocument)
- throws RatException {
- result.report(pDocument);
- }
- public void startReport() throws RatException {
- result.startReport();
- }
- };
+ return new ClaimReporterMultiplexer(analysisMultiplexer, reporters);
}
}
Modified: incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java Tue Jul 13 16:10:23 2010
@@ -109,8 +109,10 @@ public class ReportTest extends TestCase
StringWriter out = new StringWriter();
HeaderMatcherMultiplexer matcherMultiplexer = new HeaderMatcherMultiplexer(Defaults.DEFAULT_MATCHERS);
final String elementsPath = Resources.getResourceDirectory("elements/Source.java");
+ final ReportConfiguration configuration = new ReportConfiguration();
+ configuration.setHeaderMatcher(matcherMultiplexer);
Report.report(out, new DirectoryWalker(new File(elementsPath)),
- Defaults.getPlainStyleSheet(), matcherMultiplexer, null);
+ Defaults.getPlainStyleSheet(), configuration);
String result = out.getBuffer().toString();
final String elementsReports = getElementsReports(elementsPath);
assertEquals("Report created",
Modified: incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java Tue Jul 13 16:10:23 2010
@@ -18,12 +18,7 @@
*/
package org.apache.rat.report.claim.impl.xml;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-import org.apache.rat.api.Reporter;
+import org.apache.rat.report.AbstractReport;
-public class MockClaimReporter implements Reporter {
-
- public void report(Document document) throws RatException {
- }
+public class MockClaimReporter extends AbstractReport {
}
Modified: incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java Tue Jul 13 16:10:23 2010
@@ -24,7 +24,7 @@ import java.util.regex.Pattern;
import junit.framework.TestCase;
-import org.apache.rat.walker.DirectoryWalker;
+import org.apache.rat.ReportConfiguration;
import org.apache.rat.analysis.MockLicenseMatcher;
import org.apache.rat.api.MetaData;
import org.apache.rat.report.RatReport;
@@ -32,6 +32,7 @@ import org.apache.rat.report.claim.Claim
import org.apache.rat.report.xml.writer.IXmlWriter;
import org.apache.rat.report.xml.writer.impl.base.XmlWriter;
import org.apache.rat.test.utils.Resources;
+import org.apache.rat.walker.DirectoryWalker;
public class XmlReportFactoryTest extends TestCase {
@@ -61,7 +62,9 @@ public class XmlReportFactoryTest extend
final MockLicenseMatcher mockLicenseMatcher = new MockLicenseMatcher();
DirectoryWalker directory = new DirectoryWalker(new File(elementsPath), IGNORE_EMPTY);
final ClaimStatistic statistic = new ClaimStatistic();
- RatReport report = XmlReportFactory.createStandardReport(writer, mockLicenseMatcher, statistic);
+ final ReportConfiguration configuration = new ReportConfiguration();
+ configuration.setHeaderMatcher(mockLicenseMatcher);
+ RatReport report = XmlReportFactory.createStandardReport(writer, statistic, configuration);
report.startReport();
report(directory, report);
report.endReport();
Modified: incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java Tue Jul 13 16:10:23 2010
@@ -20,6 +20,8 @@ package org.apache.rat.report.xml;
import java.io.File;
import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
import java.util.regex.Pattern;
import junit.framework.TestCase;
@@ -30,7 +32,9 @@ import org.apache.rat.analysis.IHeaderMa
import org.apache.rat.analysis.RatHeaderAnalysisException;
import org.apache.rat.api.Document;
import org.apache.rat.document.IDocumentAnalyser;
+import org.apache.rat.report.RatReport;
import org.apache.rat.report.claim.impl.xml.SimpleXmlClaimReporter;
+import org.apache.rat.report.claim.util.ClaimReporterMultiplexer;
import org.apache.rat.report.xml.writer.IXmlWriter;
import org.apache.rat.report.xml.writer.impl.base.XmlWriter;
import org.apache.rat.test.utils.Resources;
@@ -40,7 +44,7 @@ public class XmlReportTest extends TestC
private static final Pattern IGNORE = Pattern.compile(".svn");
StringWriter out;
IXmlWriter writer;
- XmlReport report;
+ RatReport report;
protected void setUp() throws Exception {
super.setUp();
@@ -58,7 +62,9 @@ public class XmlReportTest extends TestC
}
};
IDocumentAnalyser analyser = DefaultAnalyserFactory.createDefaultAnalyser(matcher);
- report = new XmlReport(writer, analyser, reporter);
+ final List reporters = new ArrayList();
+ reporters.add(reporter);
+ report = new ClaimReporterMultiplexer(analyser, reporters);
}
protected void tearDown() throws Exception {
Modified: incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java (original)
+++ incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java Tue Jul 13 16:10:23 2010
@@ -37,6 +37,7 @@ import org.apache.maven.plugin.MojoFailu
import org.apache.maven.project.MavenProject;
import org.apache.rat.Defaults;
import org.apache.rat.Report;
+import org.apache.rat.ReportConfiguration;
import org.apache.rat.analysis.IHeaderMatcher;
import org.apache.rat.analysis.util.HeaderMatcherMultiplexer;
import org.apache.rat.api.RatException;
@@ -146,7 +147,7 @@ public abstract class AbstractRatMojo ex
* @parameter expression="${rat.excludeSubprojects}" default-value="true"
*/
private boolean excludeSubProjects;
-
+
/**
* @parameter default-value="${project}"
* @required
@@ -336,13 +337,13 @@ public abstract class AbstractRatMojo ex
*/
protected ClaimStatistic createReport( Writer out, InputStream style ) throws MojoExecutionException, MojoFailureException
{
- HeaderMatcherMultiplexer m = new HeaderMatcherMultiplexer( getLicenseMatchers() );
+ final ReportConfiguration configuration = getConfiguration();
try
{
if (style != null) {
- return Report.report( out, getResources(), style, m, getApprovedLicenseNames() );
+ return Report.report( out, getResources(), style, configuration );
} else {
- return Report.report( getResources(), out, m, getApprovedLicenseNames() );
+ return Report.report( getResources(), out, configuration );
}
}
catch ( TransformerConfigurationException e )
@@ -363,6 +364,14 @@ public abstract class AbstractRatMojo ex
}
}
+ protected ReportConfiguration getConfiguration() throws MojoFailureException,
+ MojoExecutionException {
+ final ReportConfiguration configuration = new ReportConfiguration();
+ configuration.setHeaderMatcher( new HeaderMatcherMultiplexer( getLicenseMatchers() ) );
+ configuration.setApprovedLicenseNames(getApprovedLicenseNames());
+ return configuration;
+ }
+
private ILicenseFamily[] getApprovedLicenseNames() throws MojoExecutionException, MojoFailureException
{
if ( licenseFamilyNames == null || licenseFamilyNames.length == 0 )
Modified: incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java (original)
+++ incubator/rat/main/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java Tue Jul 13 16:10:23 2010
@@ -29,6 +29,7 @@ import java.io.InputStream;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.rat.Defaults;
+import org.apache.rat.ReportConfiguration;
import org.apache.rat.report.claim.ClaimStatistic;
/**
@@ -62,6 +63,23 @@ public class RatCheckMojo extends Abstra
*/
private int numUnapprovedLicenses;
+ /**
+ * Whether to add license headers; possible values are
+ * {@code forced}, {@code true}, and {@code false} (default).
+ *
+ * @parameter expression="${rat.addLicenseHeaders}" default-value="false"
+ */
+ private String addLicenseHeaders;
+
+ /**
+ * Copyright message to add to license headers. This option is
+ * ignored, unless {@code addLicenseHeaders} is set to {@code true},
+ * or {@code forced}.
+ *
+ * @parameter expression="${rat.copyrightMessage}"
+ */
+ private String copyrightMessage;
+
private ClaimStatistic getRawReport()
throws MojoExecutionException, MojoFailureException
{
@@ -149,4 +167,23 @@ public class RatCheckMojo extends Abstra
throw new RatCheckException( "Too many unapproved licenses: " + statistics.getNumUnApproved() );
}
}
+
+ protected ReportConfiguration getConfiguration()
+ throws MojoFailureException, MojoExecutionException {
+ final ReportConfiguration configuration = super.getConfiguration();
+ if ("forced".equals(addLicenseHeaders)) {
+ configuration.setAddingLicenses(true);
+ configuration.setAddingLicensesForced(true);
+ configuration.setCopyrightMessage(copyrightMessage);
+ } else if ("true".equals(addLicenseHeaders)) {
+ configuration.setAddingLicenses(true);
+ configuration.setCopyrightMessage(copyrightMessage);
+ } else if ("false".equals(addLicenseHeaders)) {
+ // Nothing to do
+ } else {
+ throw new MojoFailureException("Invalid value for addLicenseHeaders: Expected forced|true|false, got "
+ + addLicenseHeaders);
+ }
+ return configuration;
+ }
}
Modified: incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/pom.xml
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/pom.xml?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/pom.xml (original)
+++ incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/pom.xml Tue Jul 13 16:10:23 2010
@@ -20,7 +20,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<groupId>org.apache.rat.test</groupId>
- <artifactId>it1</artifactId>
+ <artifactId>it3</artifactId>
<version>1.0</version>
<build>
<plugins>
@@ -33,15 +33,4 @@
</plugin>
</plugins>
</build>
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apche-rat-plugin</artifactId>
- <version>0.7-SNAPSHOT</version>
- <configuration>
- </configuration>
- </plugin>
- </plugins>
- </reporting>
</project>
Added: incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/src.apt
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/src.apt?rev=963778&view=auto
==============================================================================
--- incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/src.apt (added)
+++ incubator/rat/main/trunk/apache-rat-plugin/src/test/it3/src.apt Tue Jul 13 16:10:23 2010
@@ -0,0 +1,8 @@
+ --------------
+ Some text file
+ --------------
+
+Some text file
+
+ This is a text file, which intentionally has no Apache License Header.
+ The RAT plugin should detect it.
Modified: incubator/rat/main/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java (original)
+++ incubator/rat/main/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java Tue Jul 13 16:10:23 2010
@@ -19,8 +19,11 @@ package org.apache.rat.mp;
import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@@ -42,6 +45,7 @@ import org.apache.rat.mp.AbstractRatMojo
import org.apache.rat.mp.RatCheckException;
import org.apache.rat.mp.RatCheckMojo;
import org.apache.rat.mp.RatReportMojo;
+import org.codehaus.plexus.util.DirectoryScanner;
/**
@@ -138,7 +142,7 @@ public class RatCheckMojoTest extends Ab
private RatCheckMojo newRatCheckMojo( String pDir )
throws Exception
{
- return (RatCheckMojo) newRatMojo( pDir, "check" );
+ return (RatCheckMojo) newRatMojo( pDir, "check", false );
}
/**
@@ -148,11 +152,11 @@ public class RatCheckMojoTest extends Ab
* @return The configured Mojo.
* @throws Exception An error occurred while creating the Mojo.
*/
- private AbstractRatMojo newRatMojo( String pDir, String pGoal )
+ private AbstractRatMojo newRatMojo( String pDir, String pGoal, boolean pCreateCopy )
throws Exception
{
final File baseDir = new File( getBasedir() );
- final File testBaseDir = new File( new File( baseDir, "src/test" ), pDir );
+ final File testBaseDir = getSourceDirectory(pDir, pCreateCopy, baseDir);
File testPom = new File( testBaseDir, "pom.xml" );
AbstractRatMojo mojo = (AbstractRatMojo) lookupMojo( pGoal, testPom );
assertNotNull( mojo );
@@ -162,6 +166,7 @@ public class RatCheckMojoTest extends Ab
setVariableValueToObject( mojo, "useDefaultExcludes", Boolean.TRUE );
setVariableValueToObject( mojo, "useMavenDefaultExcludes", Boolean.TRUE );
setVariableValueToObject( mojo, "useEclipseDefaultExcludes", Boolean.TRUE );
+ setVariableValueToObject( mojo, "addLicenseHeaders", "false" );
final Build build = new Build();
build.setDirectory( buildDirectory.getPath() );
final MavenProjectStub project = new MavenProjectStub(){
@@ -186,6 +191,99 @@ public class RatCheckMojoTest extends Ab
return mojo;
}
+ private File getSourceDirectory(String pDir, boolean pCreateCopy,
+ final File baseDir) throws IOException {
+ return makeSourceDirectory( new File( new File( baseDir, "src/test" ), pDir ), pDir, pCreateCopy );
+ }
+
+ private void remove( File pDir ) throws IOException {
+ if ( pDir.isFile() )
+ {
+ if ( ! pDir.delete() )
+ {
+ throw new IOException( "Unable to delete file: " + pDir );
+ }
+ }
+ else if ( pDir.isDirectory() )
+ {
+ final File[] files = pDir.listFiles();
+ for ( int i = 0; i < files.length; i++ )
+ {
+ remove( files[i] );
+ }
+ if ( ! pDir.delete() )
+ {
+ throw new IOException( "Unable to delete directory: " + pDir );
+ }
+ }
+ else if ( pDir.exists() )
+ {
+ throw new IOException( "Unable to delete unknown object " + pDir );
+ }
+ }
+
+ private void copy( File pSource, File pTarget ) throws IOException
+ {
+ if ( pSource.isDirectory() )
+ {
+ if ( !pTarget.isDirectory() && !pTarget.mkdirs() ) {
+ throw new IOException("Unable to create directory: " + pTarget);
+ }
+ final DirectoryScanner scanner = new DirectoryScanner();
+ scanner.setBasedir(pSource);
+ scanner.addDefaultExcludes();
+ scanner.setIncludes(new String[]{"*"});
+ scanner.scan();
+ final String[] dirs = scanner.getIncludedDirectories();
+
+ for (int i = 0; i < dirs.length; i++) {
+ final String dir = dirs[i];
+ if (!"".equals(dir)) {
+ copy( new File(pSource, dir), new File(pTarget, dir));
+ }
+ }
+ final String[] files = scanner.getIncludedFiles();
+ for (int i = 0; i < files.length; i++) {
+ copy( new File(pSource, files[i]), new File(pTarget, files[i]));
+ }
+ }
+ else if ( pSource.isFile() )
+ {
+ final FileInputStream fis = new FileInputStream( pSource );
+ final FileOutputStream fos = new FileOutputStream( pTarget );
+ final byte[] buffer = new byte[8192];
+ for ( ;; )
+ {
+ int res = fis.read(buffer);
+ if (res == -1) {
+ break;
+ }
+ if (res > 0) {
+ fos.write(buffer, 0, res);
+ }
+ }
+ fos.close();
+ fis.close();
+ }
+ else
+ {
+ throw new IOException( "Unable to copy unknown object " + pSource );
+ }
+ }
+
+ private File makeSourceDirectory(File pFile, String pDir, boolean pCreateCopy) throws IOException {
+ if ( ! pCreateCopy )
+ {
+ return pFile;
+ }
+
+ final File baseDir = new File( getBasedir() );
+ final File targetDir = new File( new File( baseDir, "target/it-source" ), pDir );
+ remove( targetDir );
+ copy( pFile, targetDir );
+ return targetDir;
+ }
+
/**
* Reads the location of the rat text file from the Mojo.
* @param pMojo The configured Mojo.
@@ -266,12 +364,33 @@ public class RatCheckMojoTest extends Ab
checkResult( ratTxtFile, 1, 1 );
}
-// /**
-// * Runs a report, which should detect no problems.
-// * @throws Exception The test failed.
-// */
-// public void testIt3() throws Exception {
-// final RatReportMojo mojo = newRatReportMojo( "it3" );
-// mojo.execute();
-// }
+ private String getFirstLine(File pFile) throws IOException {
+ final FileInputStream fis = new FileInputStream(pFile);
+ final InputStreamReader reader = new InputStreamReader(fis, "UTF8");
+ final BufferedReader breader = new BufferedReader(reader);
+ final String result = breader.readLine();
+ breader.close();
+ return result;
+ }
+
+ /**
+ * Tests adding license headers.
+ */
+ public void testIt3() throws Exception {
+ final RatCheckMojo mojo = (RatCheckMojo) newRatMojo( "it3", "check", true );
+ setVariableValueToObject( mojo, "addLicenseHeaders", "true" );
+ setVariableValueToObject( mojo, "numUnapprovedLicenses", new Integer(1));
+ mojo.execute();
+ final File ratTxtFile = getRatTxtFile( mojo );
+ checkResult( ratTxtFile, 1, 1 );
+
+ final File baseDir = new File( getBasedir() );
+ final File sourcesDir = new File( new File( baseDir, "target/it-source" ), "it3" );
+ final String firstLineOrig = getFirstLine(new File(sourcesDir, "src.apt"));
+ assertTrue(firstLineOrig.indexOf("--") != -1);
+ assertTrue(firstLineOrig.indexOf("~~") == -1);
+ final String firstLineModified = getFirstLine(new File(sourcesDir, "src.apt.new"));
+ assertTrue(firstLineModified.indexOf("--") == -1);
+ assertTrue(firstLineModified.indexOf("~~") != -1);
+ }
}
Modified: incubator/rat/main/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java (original)
+++ incubator/rat/main/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java Tue Jul 13 16:10:23 2010
@@ -39,6 +39,7 @@ import org.apache.tools.ant.types.resour
import org.apache.tools.ant.util.FileUtils;
import org.apache.rat.Defaults;
+import org.apache.rat.ReportConfiguration;
import org.apache.rat.analysis.IHeaderMatcher;
import org.apache.rat.analysis.util.HeaderMatcherMultiplexer;
import org.apache.rat.api.RatException;
@@ -90,6 +91,14 @@ public class Report extends Task {
* Which stylesheet to use.
*/
private Resource stylesheet;
+ /**
+ * Whether to add license headers.
+ */
+ private AddLicenseHeaders addLicenseHeaders = new AddLicenseHeaders(AddLicenseHeaders.FALSE);
+ /**
+ * The copyright message.
+ */
+ private String copyrightMessage;
/**
* Adds resources that will be checked.
@@ -137,6 +146,23 @@ public class Report extends Task {
}
/**
+ * Wether to add license headers.
+ */
+ public void setAddLicenseHeaders(AddLicenseHeaders pAdd) {
+ if (pAdd == null) {
+ throw new IllegalArgumentException("addLicenseHeaders must not be null");
+ }
+ addLicenseHeaders = pAdd;
+ }
+
+ /**
+ * Sets the copyright message.
+ */
+ public void setCopyrightMessage(String pMessage) {
+ copyrightMessage = pMessage;
+ }
+
+ /**
* Which stylesheet to use (only meaningful with format='styled').
*/
public void addConfiguredStylesheet(Union u) {
@@ -215,12 +241,24 @@ public class Report extends Task {
* @throws RatException
*/
private void createReport(PrintWriter out) throws IOException, TransformerException, InterruptedException, RatException {
- HeaderMatcherMultiplexer m = new HeaderMatcherMultiplexer(getLicenseMatchers());
- ResourceCollectionContainer rcElement =
- new ResourceCollectionContainer(nestedResources);
+ final ReportConfiguration configuration = new ReportConfiguration();
+ configuration.setHeaderMatcher(new HeaderMatcherMultiplexer(getLicenseMatchers()));
+ configuration.setApprovedLicenseNames(getApprovedLicenseNames());
+ if (AddLicenseHeaders.FALSE.equalsIgnoreCase(addLicenseHeaders.getValue())) {
+ // Nothing to do
+ } else if (AddLicenseHeaders.FORCED.equalsIgnoreCase(addLicenseHeaders.getValue())) {
+ configuration.setAddingLicenses(true);
+ configuration.setAddingLicensesForced(true);
+ configuration.setCopyrightMessage(copyrightMessage);
+ } else if (AddLicenseHeaders.TRUE.equalsIgnoreCase(addLicenseHeaders.getValue())) {
+ configuration.setAddingLicenses(true);
+ configuration.setCopyrightMessage(copyrightMessage);
+ } else {
+ throw new BuildException("Invalid value for addLicenseHeaders: " + addLicenseHeaders.getValue());
+ }
+ ResourceCollectionContainer rcElement = new ResourceCollectionContainer(nestedResources);
if (format.getValue().equals(Format.XML_KEY)) {
- org.apache.rat.Report.report(rcElement, out, m,
- getApprovedLicenseNames());
+ org.apache.rat.Report.report(rcElement, out, configuration);
} else {
InputStream style = null;
try {
@@ -233,7 +271,7 @@ public class Report extends Task {
+ format.getValue() + "'");
}
org.apache.rat.Report.report(out, rcElement, style,
- m, getApprovedLicenseNames());
+ configuration);
} finally {
FileUtils.close(style);
}
@@ -296,4 +334,25 @@ public class Report extends Task {
};
}
}
+
+ /**
+ * Type for the addLicenseHeaders attribute.
+ */
+ public static class AddLicenseHeaders extends EnumeratedAttribute {
+ static final String TRUE = "true";
+ static final String FALSE = "false";
+ static final String FORCED = "forced";
+
+ public AddLicenseHeaders() {}
+ public AddLicenseHeaders(String s) {
+ setValue(s);
+ }
+
+
+ public String[] getValues() {
+ return new String[] {
+ TRUE, FALSE, FORCED
+ };
+ }
+ }
}
Modified: incubator/rat/main/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java (original)
+++ incubator/rat/main/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java Tue Jul 13 16:10:23 2010
@@ -16,8 +16,11 @@
*/
package org.apache.rat.anttasks;
+import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStreamReader;
import org.apache.tools.ant.BuildException;
@@ -85,4 +88,26 @@ public class ReportTest extends Abstract
private String getAntFileName() {
return getAntFile().getPath().replace('\\', '/');
}
+
+ private String getFirstLine(File pFile) throws IOException {
+ final FileInputStream fis = new FileInputStream(pFile);
+ final InputStreamReader reader = new InputStreamReader(fis, "UTF8");
+ final BufferedReader breader = new BufferedReader(reader);
+ final String result = breader.readLine();
+ breader.close();
+ return result;
+ }
+
+ public void testAddLicenseHeaders() throws Exception {
+ executeTarget("testAddLicenseHeaders");
+
+ final File origFile = new File("target/anttasks/it-sources/index.apt");
+ final String origFirstLine = getFirstLine(origFile);
+ assertTrue(origFirstLine.indexOf("--") != -1);
+ assertTrue(origFirstLine.indexOf("~~") == -1);
+ final File modifiedFile = new File("target/anttasks/it-sources/index.apt.new");
+ final String modifiedFirstLine = getFirstLine(modifiedFile);
+ assertTrue(modifiedFirstLine.indexOf("--") == -1);
+ assertTrue(modifiedFirstLine.indexOf("~~") != -1);
+ }
}
Added: incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/index.apt
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/index.apt?rev=963778&view=auto
==============================================================================
--- incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/index.apt (added)
+++ incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/index.apt Tue Jul 13 16:10:23 2010
@@ -0,0 +1,8 @@
+ --------------
+ Some text file
+ --------------
+
+Some text file
+
+ This is a text file, which intentionally has no Apache License Header.
+ The RAT plugin should detect it.
Modified: incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/report-junit.xml
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/report-junit.xml?rev=963778&r1=963777&r2=963778&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/report-junit.xml (original)
+++ incubator/rat/main/trunk/apache-rat-tasks/src/test/resources/antunit/report-junit.xml Tue Jul 13 16:10:23 2010
@@ -84,4 +84,13 @@
<file file="${ant.file}"/>
</rat:report>
</target>
+
+ <target name="testAddLicenseHeaders">
+ <delete dir="${output.dir}/it-sources"/>
+ <mkdir dir="${output.dir}/it-sources"/>
+ <copy file="src/test/resources/antunit/index.apt" tofile="${output.dir}/it-sources/index.apt"/>
+ <rat:report addLicenseHeaders="true">
+ <file file="${output.dir}/it-sources/index.apt"/>
+ </rat:report>
+ </target>
</project>