 ~~ 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.
 
 ------
 Template Files 
 ------
 
Template Files
 
    The plugin uses apache velocity to generate several types of files like
    component classes, tag classes, configuration files and others.
    
    In this way, the plugin provides flexibility, allowing users to write
    custom templates to fit their needs.
    
    Template examples can be found  inside myfaces-builder-plugin jar file
    on META-INF directory.
    
    All velocity template files by default should be on 
    src/main/resource/META-INF path of your project. The plugin tries to
    find the template first there and then on the plugin jar, so you
    can override the base template copying it from the jar to this path.
    
    You can find template examples in the following locations:
    
     * myfaces core project source code.
     
     * tomahawk 
       {{{http://svn.apache.org/repos/asf/myfaces/tomahawk/trunk/core/src/main/resources/META-INF/}core}},
       {{{http://svn.apache.org/repos/asf/myfaces/tomahawk/trunk/core12/src/main/resources/META-INF/}core12}} 
       and sandbox 
       {{{http://svn.apache.org/repos/asf/myfaces/tomahawk/trunk/sandbox/core/src/main/resources/META-INF/}core}},
       {{{http://svn.apache.org/repos/asf/myfaces/tomahawk/trunk/sandbox/core12/src/main/resources/META-INF/}core12}}
       source code.
     
     * myfaces commons source code (
       {{{http://svn.apache.org/repos/asf/myfaces/commons/trunk/myfaces-commons-converters/src/main/resources/META-INF/}converters}} and
       {{{http://svn.apache.org/repos/asf/myfaces/commons/trunk/myfaces-commons-validators/src/main/resources/META-INF/}validators}} ).  
    
    As new release of builder plugin continues, new templates will be added
    to myfaces-builder-plugin jar, but the latest ones can be found on 
    the previous locations.
