<?xml version="1.0" encoding="UTF-8"?>
<!--
   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.
-->
<document>

    <properties>
        <title>Generating JIRA Page</title>
        <author email="dev@commons.apache.org">Apache Commons Documentation Team</author>
    </properties>

    <body>


        <section name="commons:jira-page" href="jira-page">

            <subsection name="Overview">
                <p>
                The <code>commons:jira-page</code> goal generates a custom JIRA Issue Tracking page for a <strong>Proper</strong> component
                (for  <strong>Sandbox</strong> components use the <a href="sandbox-jira-page.html">commons:sandbox-jira-page</a> goal).
                Execute the goal using the following command: <source>mvn commons:jira-page</source>
                </p>

                <p>
                <strong>Note:</strong> The Issue tracking page should only need to be generated initially
                for a component or if the issue tracking template changes.
                </p>

                <p>
                This goal uses the following:
                <ul>
                    <li>The goal is mapped to the ant script/target using the <code>jira-page</code> mojo defintion in the 
                        <a href="http://svn.apache.org/repos/asf/commons/proper/commons-build-plugin/trunk/src/main/scripts/generate-xdocs.mojos.xml">generate-xdocs.mojos.xml</a> mapping document</li>
                    <li>Executes the <code>jira-page</code> target in
                        <a href="http://svn.apache.org/repos/asf/commons/proper/commons-build-plugin/trunk/src/main/scripts/generate-xdocs.build.xml">generate-xdocs.build.xml</a>
                        ant script</li>
                    <li>Uses the <a href="http://svn.apache.org/repos/asf/commons/proper/commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates/issue-tracking-template.xml">issue-tracking-template.xml</a>
                        template</li>
                    <li>Uses the <a href="jira-page-mojo.html">goal's (i.e. mojo's) parameters</a> to filter values in the template</li>
                </ul>
                </p>
            </subsection>

            <subsection name="Configuration">
                <p>
                To generate a JIRA page, the following <a href="jira-page-mojo.html">properties</a>  are configured in the component's <code>pom.xml</code>
                <ul>
                    <li><b>commons.jira.id</b> - JIRA's external (upper case) project id for the component</li>
                    <li><b>commons.jira.pid</b> - JIRA's internal (numeric) project id for the component</li>
                </ul>
                </p>
                <p>
                Example configuration for Commons Chain:
<source><![CDATA[
    <properties>
        <commons.jira.id>CHAIN</commons.jira.id>
        <commons.jira.pid>12310462</commons.jira.pid>
    </properties> 
]]></source>
                </p>
            </subsection>

        </section>

    </body>
</document>
