<?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>
        Version 5.1 requires JDK 1.8 and higher, Version 5.2 and above requires Java 11 and higher - 100% Pure Java</li>
</ul>

</section>

</body>
</document>
