<?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>
     <author email="celkins@scardini.com">Christopher Elkins</author>
     <author email="quintonm@bellsouth.net">Quinton McCombs</author>
 </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-dev 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="http://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 user@turbine.apache.org and
            dev@turbine-apache.org 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="http://issues.apache.org/jira/browse/TRB">issue tracking system</a>
            and attach your patch(s).
        </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="http://issues.apache.org/jira/browse/TRB">issue tracking system</a> clearly
    discribing 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>
