| <!DOCTYPE html> |
| |
| |
| <!-- |
| | Generated by Apache Maven Doxia Site Renderer 2.0.0 from src/site/markdown/development/ui_implementation.md at 2025-09-23 |
| | Rendered using Apache Maven Fluido Skin 2.1.0 |
| --> |
| <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" /> |
| <title>UI Development – Apache RAT™ - A Release Audit Tool</title> |
| <link rel="stylesheet" href="../css/apache-maven-fluido-2.1.0.min.css" /> |
| <link rel="stylesheet" href="../css/site.css" /> |
| <link rel="stylesheet" href="../css/print.css" media="print" /> |
| <script src="../js/apache-maven-fluido-2.1.0.min.js"></script> |
| <link href="https://creadur.apache.org/font/matesc.css" type="text/css" rel="stylesheet" /> |
| </head> |
| <body> |
| <a class="github-fork-ribbon right-top" href="https://github.com/apache/creadur-rat" data-ribbon="Fork me on GitHub">Fork me on GitHub</a> |
| <div class="container-fluid container-fluid-top"> |
| <header> |
| <div id="banner"> |
| <div class="pull-left"><div id="bannerLeft"><h1><a href="https://www.apache.org/"><img src="https://www.apache.org/img/asf_logo.png" alt="The Apache Software Foundation" /> Apache RAT</a></h1></div></div> |
| <div class="pull-right"></div> |
| <div class="clear"><hr/></div> |
| </div> |
| |
| <div id="breadcrumbs"> |
| <ul class="breadcrumb"> |
| <li id="publishDate">Last Published: 2025-09-23<span class="divider">|</span> |
| </li> |
| <li id="projectVersion">Version: 0.17-SNAPSHOT<span class="divider">|</span></li> |
| <li><a href="https://www.apache.org/">Apache</a><span class="divider">/</span></li> |
| <li><a href="../../">Creadur</a><span class="divider">/</span></li> |
| <li><a href=".././">RAT</a><span class="divider">/</span></li> |
| <li class="active">UI Development</li> |
| </ul> |
| </div> |
| </header> |
| <div class="row-fluid"> |
| <header id="leftColumn" class="span2"> |
| <nav class="well sidebar-nav"> |
| <ul class="nav nav-list"> |
| <li class="nav-header">Apache RAT™</li> |
| <li><a href="../index.html">Introducing RAT</a></li> |
| <li><a href="../download_rat.cgi">Downloads</a></li> |
| <li><a href="../changes.html">Changes</a></li> |
| <li class="nav-header">RAT from the Command Line</li> |
| <li><a href="../apache-rat/index.html">Command Line Introduction</a></li> |
| <li><a href="../apache-rat/cli_options.html">Command Line Options</a></li> |
| <li><a href="../apache-rat/env_vars.html">Environment Variables</a></li> |
| <li><a href="../apache-rat-core/exclusion_expression.html">Exclusion Expressions</a></li> |
| <li><a href="../apache-rat/standard_collections.html">Standard Collections</a></li> |
| <li class="nav-header">RAT from Ant</li> |
| <li><a href="../apache-rat-tasks/index.html">Ant Task Introduction</a></li> |
| <li><a href="../apache-rat-tasks/ant_options.html">Ant Elements and Attributes</a></li> |
| <li class="nav-header">RAT from Maven</li> |
| <li><a href="../apache-rat-plugin/index.html">Maven Plugin Introduction</a></li> |
| <li><a href="../apache-rat-plugin/mvn_options.html">Maven Options</a></li> |
| <li><a href="../apache-rat-plugin/examples/index.html">Maven Examples</a></li> |
| <li class="nav-header">Configuring RAT</li> |
| <li><a href="../apache-rat/name_xref.html">Option Name Cross Reference</a></li> |
| <li><a href="../apache-rat/default_licenses.html">Default Licenses</a></li> |
| <li><a href="../apache-rat/default_matchers.html">Default Matchers</a></li> |
| <li><a href="../license_def.html">Defining New Licenses</a></li> |
| <li><a href="../apache-rat/xsd.html">Configuration XSD</a></li> |
| <li><a href="https://gitbox.apache.org/repos/asf/creadur-rat/blob/master/apache-rat-core/src/main/resources/org/apache/rat/default.xml">Default Configuration</a></li> |
| <li><a href="../apache-rat/detecting_generated_files.html">Detecting Generated Files</a></li> |
| <li class="nav-header">RAT Output</li> |
| <li><a href="../apache-rat/output/example.html">Standard Output Example</a></li> |
| <li><a href="https://gitbox.apache.org/repos/asf/creadur-rat/blob/master/apache-rat-core/src/main/resources/org/apache/rat/rat-report.xsd">Output XSD</a></li> |
| <li><a href="https://gitbox.apache.org/repos/asf/creadur-rat/blob/master/apache-rat-core/src/main/resources/org/apache/rat/plain-rat.xsl">XSLT - Plain text</a></li> |
| <li><a href="https://gitbox.apache.org/repos/asf/creadur-rat/blob/master/apache-rat-core/src/main/resources/org/apache/rat/missing-headers.xsl">XSLT - Missing headers list</a></li> |
| <li><a href="https://gitbox.apache.org/repos/asf/creadur-rat/blob/master/apache-rat-core/src/main/resources/org/apache/rat/unapproved-licenses.xsl">XSLT - Unapproved licenses list</a></li> |
| <li class="nav-header">Developing RAT</li> |
| <li><a href="../architecture.html">Architecture</a></li> |
| <li><a href="../apidocs/index.html">Javadocs</a></li> |
| <li><a href="../apache-rat-core/development/document_name.html">Document Name concept</a></li> |
| <li class="active"><a>UI Development</a></li> |
| <li><a href="../apache-rat-core/development/write_file_processor.html">Writing a File Processor</a></li> |
| <li class="nav-header">Apache Creadur™</li> |
| <li><a href="../..">Creadur Project Home</a></li> |
| <li><a href="../../tentacles">Apache Tentacles</a></li> |
| <li><a href="../../whisker">Apache Whisker</a></li> |
| <li><a href="https://www.apache.org/security/">Security</a></li> |
| <li><a href="https://www.apache.org/licenses/">License</a></li> |
| <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a></li> |
| <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li> |
| <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li> |
| <li class="nav-header">The Apache Software Foundation</li> |
| <li><a href="https://www.apache.org/foundation">About the Foundation</a></li> |
| <li><a href="https://projects.apache.org">The projects</a></li> |
| <li><a href="https://people.apache.org">The people</a></li> |
| <li><a href="https://www.apache.org/foundation/how-it-works.html">How we work</a></li> |
| <li><a href="https://www.apache.org/foundation/how-it-works.html#history">Our history</a></li> |
| <li><a href="https://blogs.apache.org/foundation/">News</a></li> |
| <li class="nav-header">Contribute</li> |
| <li><a href="https://www.apache.org/foundation/getinvolved.html">Get Involved</a></li> |
| <li class="nav-header">Committer Info</li> |
| <li><a href="https://www.apache.org/dev/committers.html">ASF Committers' FAQ</a></li> |
| <li><a href="https://www.apache.org/dev/new-committers-guide.html">New Committers Guide</a></li> |
| <li><a href="https://gitbox.apache.org/repos/asf/creadur-site/blob/asf-site/README.md">How to publish this site</a></li> |
| <li><a href="https://community.apache.org/">Community</a></li> |
| <li><a href="https://www.apache.org/legal/">Legal</a></li> |
| <li><a href="https://www.apache.org/foundation/marks/">Branding</a></li> |
| <li><a href="https://www.apache.org/press/">Media Relations</a></li> |
| <li class="nav-header">Modules</li> |
| <li><a href="../apache-rat-core/index.html">Apache Creadur RAT::Core</a></li> |
| <li><a href="../apache-rat-plugin/index.html">Apache Creadur RAT::Plugin4Maven</a></li> |
| <li><a href="../apache-rat-tasks/index.html">Apache Creadur RAT::Tasks4Ant</a></li> |
| <li><a href="../apache-rat/index.html">Apache Creadur RAT::Packaging</a></li> |
| <li><a href="../apache-rat-tools/index.html">Apache Creadur RAT::Tools</a></li> |
| <li><a href="../apache-rat-testdata/index.html">Apache Creadur RAT::Testdata</a></li> |
| <li class="nav-header">Project Documentation</li> |
| <li><a href="../project-info.html"><span class="icon-chevron-right"></span>Project Information</a></li> |
| <li><a href="../project-reports.html"><span class="icon-chevron-right"></span>Project Reports</a></li> |
| </ul> |
| </nav> |
| <div class="well sidebar-nav"> |
| <div id="poweredBy"> |
| <div class="clear"></div> |
| <div class="clear"></div> |
| <a href="https://maven.apache.org/" class="builtBy"><img class="builtBy" src="https://maven.apache.org/images/logos/maven-feather.png" /> Maven</a> |
| </div> |
| </div> |
| </header> |
| <main id="bodyColumn" class="span10"> |
| <!--- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <section><a id="UI_Development"></a> |
| <h1>UI Development</h1><section><a id="Overview"></a> |
| <h2>Overview</h2> |
| <p>The RAT architecture supports multiple UIs. By default, RAT provides a command line implementation (CLI) as well as implementations for the Ant and Maven build system. The source code for those implementation provide a good roadmap for implementing any new UI.</p><section><a id="CLI_first"></a> |
| <h3>CLI first</h3> |
| <p>RAT is designed as a CLI first architecture. This means that every new functionality is introduced as a CLI option first. All tests cases are built and the implementation verified before it is released. Additional native UIs are build on top of the CLI implementation.</p> |
| <p>For example the CLI uses kebab format options (e.g. –this-is-an-option) Ant and Maven use an XML format configuration utilizing camel case names. |
| For Maven all options are elements in the Maven <code>pom.xml</code> file, for Ant it is a bit more complicated because Ant allows for attributes for elements while Maven does not.</p> |
| <p>In the Maven example RAT is defined as a plugin. We expect the new <code>--this-is-an-option</code> option to be reflected in that section as <code><thisIsAnOption></code>. |
| So expect to see something like:</p> |
| |
| <pre class="prettyprint"><code class="language-xml"><plugin> |
| <groupId>org.apache.rat</groupId> |
| <artifactId>apache-rat-plugin</artifactId> |
| <configuration> |
| <thisIsAnOption>option value</thisIsAnOption> |
| <!-- more options here --> |
| </configuration> |
| </plugin> |
| </code></pre> |
| <p>For Ant the new option may be a child element of the <code><rat:report></code> element, if the option only has a single argument it may be an attribute of the <code><rat:report></code> element. |
| Therefore, we expect to see either</p> |
| |
| <pre class="prettyprint"><code class="language-xml"><rat:report thisIsAnOption='option value'> |
| <!-- more options here --> |
| </rat:report> |
| </code></pre> |
| <p>or</p> |
| |
| <pre class="prettyprint"><code class="language-xml"><rat:report> |
| <rat:thisIsAnOption>option value</rat:thisIsAnOption> |
| <!-- more options here --> |
| </rat:report> |
| </code></pre> |
| <p>Note that if <code>--this-is-an-option</code> is a flag then the elements would be closed without text and the Ant attribute would be <code>thisIsAnOption='true'</code>.</p></section><section><a id="UI_adapter_architecture"></a> |
| <h3>UI adapter architecture</h3> |
| <p>The UIs are actually implemented as adapters. They plug into an existing system and provide a mechanism to call the CLI code. They utilize classes in the <code>apache-rat-tools</code> module that map from the CLI options into the UI options.</p> |
| <p>The basic build operation for a UI adapter is:</p> |
| <ol style="list-style-type: decimal;"> |
| |
| <li>Execute a “Generator” to produce a base class for the UI based on the definitions found in the RAT core classes.</li> |
| <li>Compile the UI specific code that extends the generated base class.</li> |
| <li>Package the UI specific code in a manner expected by the UI being extended.</li> |
| </ol><section><a id="The_Options"></a> |
| <h4><a href="ui/options.html">The Options</a></h4> |
| <p>Each UI has specific requirements to display and accept input for the CLI options. |
| In most cases it makes sense to create a UI Specific Option that takes the CLI option as a constructor argument and creates an Option that is used by the Generator and other associated code.</p></section><section><a id="The_Generator"></a> |
| <h4><a href="ui/generator.html">The Generator</a></h4> |
| <p>The Generator class literally writes the source code for the base of the UI adapter. The adapter accepts input from the new UI and converts the UI option into the kebab format for the CLI and places the values associated with that option into a Map indexed by the CLI option name. In our example above both the Ant and the Maven UI would take the value for <code>thisIsAnOption</code> and place the values into the map as <code>this-is-an-option</code>.</p> |
| <p>The options in the CLI have sufficient information for the Generator to provide user documentation for the methods in a form acceptable to the new UI ecosystem.</p> |
| <p>The class created by the Generator should have methods that represent all the options in the CLI. In most cases there is a one-to-one correspondence between a method in the base class and the options in the CLI.</p></section><section><a id="UI_specific_code"></a> |
| <h4><a href="ui/ui_specific.html">UI specific code</a></h4> |
| <p>The UI specific code uses extends the class created by the Generator and adds additional UI specific options and generally performs the necessary options to hook the new UI into the system being supported. |
| Examples of this type of code can be found in the <code>apache-rat-tasks</code> (Ant) and <code>apache-rat-plugin</code> (Maven) modules.</p></section></section></section></section> </main> |
| </div> |
| </div> |
| <hr/> |
| <footer> |
| <div class="container-fluid"> |
| <div class="row-fluid"> |
| Copyright © 2016-2025 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. |
| Apache Creadur, Creadur, Apache RAT, Apache Tentacles, Apache Whisker, Apache and the ASF logo are trademarks |
| of The Apache Software Foundation. |
| Oracle and Java are registered trademarks of Oracle and/or its affiliates. |
| All other marks mentioned may be trademarks or registered trademarks of their respective owners. |
| </div> |
| </div> |
| </footer> |
| </body> |
| </html> |