Fork me on GitHub

Overview

The RAT architecture is build around a single engine that parses input files to build an XML based report. User interfaces (UIs) create and configure a ReportConfiguration which is passed to a Reporter instance which performs all the processing.

/------\    /------\    /------\
| CLI  |    |Maven |    | Ant  |
|  UI  |    |  UI  |    |  UI  |
\--+---/    \--+---/    \--+---/
   |           |           |
   \-----------+-----------/     ReportConfiguration
               |                   input to Reporter
          /----+----\
          | Reporter| <---  Multiple files and directories
          \----+----/
               |
               V
            Report

Configuration

The ReportConfiguration contains all the options for the Reporter class. User interfaces create a ReportConfiguration and pass it to the Reporter instance for execution. The configuration specifies the configuration for:

  • License Families – An identifier for families of licenses that share the same constraints. The default list is defined in the o.a.r.default.xml file in the families section.
  • Licenses – the definition of a license that defines the matchers that comprise the test for the license. The default licenses are defined in the o.a.r.default.xml file in the licenses section.
  • Approved License Families – A list of license families that are approved. Licenses of families not in this are unapproved. The default approved license families are defined in the o.a.r.default.xml file in the approved section.

License Families

A license family comprises an ID and a name. New families may be added to the o.a.r.default.xml file or programmatically from the UI. License family IDs must be unique. Later ID definitions override earlier definitions.

License

A license definition comprises a family (identified by its ID), and a matcher. Licenses adopt the ID of their family which may be overridden with an id attribute. Licenses also adopt the name of their family unless it is overridden by a name attribute.

Approved Licenses

The approved licenses are enumerated in a list. Licenses are selected by family and the family ID is specified in the list.

Matchers

Matchers are classes that implement specific tests. They are created by builders. The default builders are specified in the o.a.r.default.xml file in the matchers section.

Matcher.Builder

New matcher builders may be defined within the o.a.r.default.xml file and then used in the license definitions within the file.

Matcher builder class names must be of the form <name>Builder where <name> becomes the name of the matcher and is used in identifying the matcher to use (e.g. as a tag in the License section of the o.a.r.default.xml file). They must also implement the o.a.r.analysis.IHeaderMatcher.Builder interface.

flags to add licenses and copyrights to files

The configuration has a set of options to add licenses and optionally copyright notices to files that do not have them. The addLicenses option adds the Apache2 license to files that do not have any license specified. If the copyright text is provided it is also added to the files. The addLicensesForced modifies the way the licenses are added, by default the licenses are added to new files with name of the old file but a .new extension added. If addLicensesForced is specified then the files are overwritten.

file name filter

The file name filter specifies a filter to be used to filter out any files that should not be evaluated.

out

The out parameter specifies an OutputStream IOSupplier that is used to create the output stream to write text to. By default, this is the System.out stream.

stylesheet

the styleSheet parameter specifies the InputStream IOSupplier that is used to read the stylesheet that styles the XML output.

IReportable

The IReportable parameter identifies the objects that the report should run against. Implementations of IReportable generally do things like walk directory trees, or archives.

Reporter

The reporter uses the ReporterConfiguration to configure the report. It then begins to read the files. Each file is a Document the reporter determines the Document type and if appropriate reads the header information (50 lines) from the document.

The header information is passed to the licenses. The processing of the file stops when a license is triggered (found) or the end of the header is reached.

The information retrieved is used to create an XML document that may be styled by the defined stylesheet.

The reporter utilizes the RatReport interface to determine what actions to take with the documents. Currently the RatReport interface is used to define license adding capabilities, report claim aggregation, and multiplexed reports. Additional capabilities can be implemented by implementing a RatReport and inserting it into the processing chain.