<!--
  ~  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.
  ~
  ~
  -->

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

<!--***********************************************************
 *
 * 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.
 *
 ***********************************************************-->

<!-- This style sheet converts any rat-report.xml file.  -->

<xsl:template match="/">

  <html>
    <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
     <style type="text/css">
    &lt;!--
body {margin-top: 0px;font-size: 0.8em;background-color: #F9F7ED;}

h1 {color:red;}
h2 {color:blue;}
h3 {color:green;}
h4 {color:orange;}

/* Table Design */

table,tr,td {text-align:center;font-weight:bold;border:1px solid #000;}
caption {color:blue;text-align:left;}
.notes, .binaries, .archives, .standards {width:25%;}
.notes {background:#D7EDEE;}
.binaries {background:#D0F2F4;}
.archives {background:#ABE7E9;}
.standards {background:#A0F0F4;}
.licenced, .generated {width:50%;}
.licenced {background:#C6EBDD;}
.generated {background:#ABE9D2;}
.java_note {background:#D6EBC6;}
.generated_note {background:#C9E7A9;}
.unknown {width:100%;background:#E92020;}
.unknown-zero {color:#00CC00;}
.center{text-align:center;margin:0 auto;}
--&gt;
     </style>
    </head>
    <body>
      <xsl:apply-templates/>
      <xsl:call-template name="generated"/>
    </body>
  </html>
</xsl:template>

<xsl:template match="rat-report">

  <h1>Rat Report</h1>
<div class="center">
<table id="rat-reports summary" cellspacing="0" summary="A snapshot summary of this rat report">
<caption>
Table 1: A snapshot summary of this rat report.
</caption>
  <tr>
    <td colspan="1" class="notes">Notes: <xsl:value-of select="count(descendant::type[attribute::name=&quot;notice&quot;])"/></td>
    <td colspan="1" class="binaries">Binaries: <xsl:value-of select="count(descendant::type[attribute::name=&quot;binary&quot;])"/></td>
    <td colspan="1" class="archives">Archives: <xsl:value-of select="count(descendant::type[attribute::name=&quot;archive&quot;])"/></td>
    <td colspan="1" class="standards">Standards: <xsl:value-of select="count(descendant::type[attribute::name=&quot;standard&quot;])"/></td>
  </tr>
  <tr>
    <td colspan="2" class="licenced">Apache Licensed: <xsl:value-of select="count(descendant::header-type[attribute::name=&quot;AL   &quot;])"/></td>
    <td colspan="2" class="generated">Generated Documents: <xsl:value-of select="count(descendant::header-type[attribute::name=&quot;GEN  &quot;])"/></td>
  </tr>
  <tr>
    <td colspan="2" class="java_note">Note: JavaDocs are generated and so license header is optional</td>
    <td colspan="2" class="generated_note">Note: Generated files do not require license headers</td>
  </tr>
  <tr>
<xsl:choose>
  <xsl:when test="count(descendant::header-type[attribute::name=&quot;?????&quot;]) &gt; 0">
    <td colspan="4" class="unknown"><xsl:value-of select="count(descendant::header-type[attribute::name=&quot;?????&quot;])"/> Unknown Licenses - or files without a license.</td>
  </xsl:when>
  <xsl:otherwise>
    <td colspan="4" class="unknown-zero"><xsl:value-of select="count(descendant::header-type[attribute::name=&quot;?????&quot;])"/> Unknown Licenses - or files without a license.</td>
  </xsl:otherwise>
</xsl:choose>
  </tr>
</table>
</div>
<hr/>
  <h3>Unapproved Licenses:</h3>

  <xsl:for-each select="descendant::resource[license-approval/@name=&quot;false&quot;]">
  <xsl:text>  </xsl:text>
  <xsl:value-of select="@name"/><br/>
  <xsl:text>
</xsl:text>
</xsl:for-each>
<hr/>

<h3>Archives:</h3>

<xsl:for-each select="descendant::resource[type/@name=&quot;archive&quot;]">
 + <xsl:value-of select="@name"/>
 <br/>
 </xsl:for-each>
 <hr/>

 <p>
   Files with Apache License headers will be marked AL<br/>
   Binary files (which do not require AL headers) will be marked B<br/>
  Compressed archives will be marked A<br/>
  Notices, licenses etc will be marked N<br/>
  </p>

 <xsl:for-each select="descendant::resource">
  <xsl:choose>
   <xsl:when test="license-approval/@name=&quot;false&quot;">!</xsl:when>
   <xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
 </xsl:choose>
 <xsl:choose>
   <xsl:when test="type/@name=&quot;notice&quot;">N   </xsl:when>
   <xsl:when test="type/@name=&quot;archive&quot;">A   </xsl:when>
   <xsl:when test="type/@name=&quot;binary&quot;">B   </xsl:when>
   <xsl:when test="type/@name=&quot;standard&quot;"><xsl:value-of select="header-type/@name"/></xsl:when>
   <xsl:otherwise>!!!!!</xsl:otherwise>
 </xsl:choose>
 <xsl:text>      </xsl:text>
 <xsl:value-of select="@name"/><br/>
 <xsl:text>
 </xsl:text>
 </xsl:for-each>
 <hr/>

 <h3>Printing headers for files without AL header...</h3>

 <xsl:for-each select="descendant::resource[header-type/@name=&quot;?????&quot;]">

   <h4><xsl:value-of select="@name"/></h4>
  <xsl:value-of select="header-sample"/>
  <hr/>
</xsl:for-each>
<br/>

 <!-- <xsl:apply-templates select="resource"/>
    <xsl:apply-templates select="header-sample"/>
    <xsl:apply-templates select="header-type"/>
    <xsl:apply-templates select="license-family"/>
    <xsl:apply-templates select="license-approval"/>
    <xsl:apply-templates select="type"/> -->

</xsl:template>

<xsl:template match="resource">
  <div>
    <h3>Resource: <xsl:value-of select="@name"/></h3>
      <xsl:apply-templates/>
    </div>
</xsl:template>

<xsl:template match="header-sample">
  <xsl:if test="normalize-space(.) != ''">
  <h4>First few lines of non-compliant file</h4>
    <p>
      <xsl:value-of select="."/>
    </p>
    </xsl:if>
    <h4>Other Info:</h4>
</xsl:template>

<xsl:template match="header-type">
  Header Type: <xsl:value-of select="@name"/>
  <br/>
</xsl:template>

<xsl:template match="license-family">
  License Family: <xsl:value-of select="@name"/>
  <br/>
</xsl:template>

<xsl:template match="license-approval">
  License Approval: <xsl:value-of select="@name"/>
  <br/>
</xsl:template>

<xsl:template match="type">
  Type: <xsl:value-of select="@name"/>
  <br/>
</xsl:template>

<xsl:template name="generated">
</xsl:template>
</xsl:transform>
