<?xml version="1.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.
-->

<document>

 <properties>
  <title>How To Help with Turbine Development</title>
 </properties>

<body>

<section name="How to help">

<p>
  If you are a new developer to Turbine or even an existing developer, these are
  areas where you can take ownership and help complete. Please do not ask us how
  you can help, but rather specific questions about how you think that these items
  should be implemented. It is up to you to take initiative and provide solutions
  to the missing functionality described below. ;-)
</p>

<p>
  It is always possible to take ownership of any portion of the project. The way
  to do this is to post a message to the turbine-developer mailing list.  Just explain
  what you are wanting to work on or any ideas that you might have on the subject.
</p>

<p>
    Documentation is <b>*always*</b> appreciated in any form.  The documentation for
    Turbine exists in basically four forms.
    <ul>
        <li>
            XML formatted docs (xdoc) - This is used to generate the documentation
            on the jakarta site.  The source for this documentation can be found
            in the xdocs directory in the source distribution.  To submit additional
            documentation in this form or patches to existing documentation, please
            create an issue is the
            <a href="https://issues.apache.org/jira/browse/TRB">issue tracking system</a>
            and attach the patch files (or new files).
        </li>
        <li>
            Mailing list - The archives of <a href="https://lists.apache.org/list.html?user@turbine.apache.org">user@turbine.apache.org</a> and
            <a href="https://lists.apache.org/list.html?dev@turbine.apache.org">dev@turbine.apache.org</a> are an excellent source of information
            for the project. Answering questions that are asked on the mailing list
            or simply posting information that might be of use to other Turbine users
            would be very welcome contribution to the project.
        </li>
        <li>
            The <a href="http://wiki.apache.org/turbine/">Turbine
            Wiki</a> another repository of documentation for the project.  It
            contains development information, user documentation, how-to documents,
            discussion of new features, etc.  Anyone can add new pages and edit existing
            pages very easily!  This is perhaps the easiest way to contribute documentation
            (well, second only to the mailing lists).
        </li>
        <li>
            The javadocs are another very important form of documentation for the project.
            Changes to this form of documentation should be in the form of patches.  To submit
            them, create a new issue in the
            <a href="https://issues.apache.org/jira/browse/TRB">issue tracking system</a>
            and attach your patch(es).
        </li>
    </ul>
    The documentation is probably the easiest area for anyone to contribute in.  If you are
    new to Turbine and learning your way around, documenting what you learn and submitting
    it in any other the various forms would be appreciated.
</p>

<p>
    Testing is another area in which help is always needed.  This could consist of simply
    reporting problems that you run into using Turbine.  It could also consist of submitting
    code to perform unit tests.  Turbine uses JUnit and Cactus for testing.  You can find
    examples in the src/test directory of the source distribution.
</p>

<p>
    If you do discover a defect in the Turbine product, please create a defect issue in
    the <a href="https://issues.apache.org/jira/browse/TRB">issue tracking system</a> clearly
    describing the problem.  If you can take the time to track down the source of the problem,
    it would certainly help speed the process of getting it corrected.  Of course, actually
    fixing the problem and attaching a patch to the issue would be greatly appreciated.
</p>

<p>
    You can also contribute to the project by enhancing existing functionality and/or
    adding new functionality.  There is a current list of requested features on the
    <a href="http://wiki.apache.org/turbine/Turbine2/WishList">Turbine Wiki</a>.  Everyone is encouraged to take part in the discussion, design, and
    implementation.
</p>

</section>

</body>
</document>
