<?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>Turbine Features</title>
 </properties>

<body>

<section name="Features">

<p>
This document is for bragging about all of Turbine's features and inherent
coolness. Turbine is well over 200 classes and contains a boat load of
features and API's. Many of these can also be used indepently of Turbine.
Almost all of the default implementations can be easily overridden with
your own implementations. Turbine also has extensive Javadoc documentation
for nearly all of the classes as well as in-code comments. It clearly has
been developed by the people who do web applications on a daily basis and
have to constantly solve the same problems over and over again.
</p>

<p>
<strong>All of these features have been made possible thanks to the over
30 developers (and growing all the time!) who have <a href="team-list.html">
contributed</a> to Turbine over the last 10+ years.</strong>
</p>

<ul>
    <li>
      Integration with template systems: Velocity, JSP
    </li>
    <li>
        Utility code for working with Velocity, such as a
        SelectorBox class for building <code>select</code> boxes</li>
    <li>
        Single Entry Point Servlet model for optimal security and control</li>
    <li>
        ParameterParsing for GET/POST/PATH_INFO</li>
    <li>
        Event based Action handling!</li>
    <li>
        Strict MVC guidelines implemented through many interfaces and abstract
        classes as well as through the template systems.</li>
    <li>
        GlobalCache (Singleton based system for caching data across servlets and
        requests)</li>
    <li>
        DateSelector (utility for building the HTML for popup date menus)</li>
    <li>
        Generic Services API for creating Singletons</li>
    <li>
        <a href="http://www.xml-rpc.com/">XML-RPC</a> Service Integration</li>
    <li>
        Localization Services API</li>
    <li>
        JNDI Services API</li>
    <li>
        Visitor/Member API for managing users</li>
    <li>
        Temporary and Permanent storage/management for users session data</li>
    <li>
        ACL (Access Control List) based security system that uses Roles and
        Permissions (and the database schemas)</li>
    <li>
        BrowserDetector class for determining which browser someone is using</li>
    <li>
        GenerateUniqueId class for getting a unique number (ie: for sessions)</li>
    <li>
        Logging via commons-logging, backed by Log4j.
    </li>
    <li>
        A centralized configuration using commons-configuration to make it easy
        to retrieve properties.
    </li>
    <li>
        Properties can be stored in JNDI, XML, or .properties files!  Properties can
        override each other.
    </li>
    <li>
        Integration with JavaMail to make sending email painless</li>
    <li>
        Integration with JavaMail and Velocity to allow you to send
        processed Velocity templates as email!</li>
    <li>
        Built using Maven</li>
    <li>
        Initial application development WAR archive creation tool using Ant</li>
    <li>
        Turbine Servlet works cleanly with Servlet API 2.4 and higher</li>
    <li>
        Works with JDK 1.6 and higher - 100% Pure Java</li>
</ul>

</section>

</body>
</document>
