<?xml version="1.0" encoding="UTF-8"?>

<!--
 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>Changelog</title>
  </properties>

  <body>

    <release version="1.6.1" date="2008-12-15">

      <action type="fix" dev="nbubna" issue="VELOCITY-615" due-to="Steve O'Hara">
          Fix limitation in new macro implementation that resisted #set calls
          to change references defined as arguments for the macro.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-651" due-to="Stephan Schmid">
          Fix vararg bugs when calling overloaded methods like get(String,String,Object[])
          and get(String,List). (e.g. in VelocityStruts' MessageTool)
      </action>

    </release>

    <release version="1.6" date="2008-12-01">

      <action type="fix" dev="nbubna" issue="VELOCITY-649" due-to="Byron Foster">
          Fix NPE when null value is passed to array/vararg method.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-644" due-to="Byron Foster">
          Track template name in Node, to get proper template name in the exception
          message when a reference in a macro causes that exception.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-352" due-to="Gonzalo Diethelm, Joni Salonen">
          Update Finnish and Spanish User Guide sections on division operation.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-641" due-to="Will Glass-Husain">
          Fix classpath for XMLApp example.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-617" due-to="Adrian Tarau">
          Fix references to Oro dependency to make it clear that it is
          only necessary for certain reference event handlers.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-640" due-to="Will Glass-Husain">
          Remove old Anakia/Texen docs and examples.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-642" due-to="Ilkka Priha">
          Fix bug in vararg support where an array passed to a vararg method
          was being wrapped in another array.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-638" due-to="Benjamin Bentmann">
          Locked down versions for reporting plugins in Maven POM.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-466" due-to="Adrian Tarau">
          Add Maven-Ant tasks for installing and deploying Maven artifacts, including
          previously missing source and javadoc jars (VELOCITY-554).
      </action>

    </release>

    <release version="1.6-beta2" date="2008-10-26">

      <action type="fix" dev="nbubna" issue="VELOCITY-632" due-to="Sebb">
          Fix User Guide's Table of Contents anchor links.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-631" due-to="Byron Foster">
          Fix parser bug that prevented references from immediately preceding #set directives.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-630" due-to="Byron Foster">
          Revert change made for VELOCITY-285, as it broke pass-by-name nature
          of macro arguments.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-629" due-to="Byron Foster">
          Fix line numbers in string literals.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-627" due-to="Byron Foster">
          Fix line number for exceptions with body of #foreach directive.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-626" due-to="Byron Foster">
          Log full macro stack when a RuntimeException occurs in a template.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-622" due-to="Byron Foster">
          Format template and line/column numbers consistently in error and log messages.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-624" due-to="Byron Foster">
          Don't override pre-configured log levels for JdkLogChute or Log4JLogChute.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-618" due-to="Byron Foster">
          Add optional 'runtime.references.strict' property that has Velocity throw
          exceptions when it encounters undefined references or velocimacros in a template.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-554" due-to="Adrian Tarau">
          Inlude Maven Ant tasks jar in downloads and add support for downloading from Maven2 repos.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-585" due-to="Jon Seymour">
          Fix problem with single backslash in interpolated (double-quoted) strings.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-616" due-to="Alik">
          Fix escaping of bracketed directives (e.g. \#{if}($foo)$bar\#{end}).
      </action>

    </release>

    <release version="1.6-beta1" date="2008-09-22">

      <action type="add" dev="cbrisson" issue="VELOCITY-588" due-to="Vincent Massol, Sergiu Dumitriu">
          Uberspectors chaining
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-585" due-to="Tim White">
          Add ability to set a connection timeout for URLResourceLoader.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-227" due-to="Charles Morehead">
          Make it easier to override ResourceFactory.getResource(...) in ResourceManagerImpl.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-544" due-to="Adam Bishop, Jarkko Viinamaki">
          Fix BooleanPropertyExecutor to recognize "public Boolean isFoo" properties.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-439" due-to="Tassos Bassoukos, Henning Schmiedehausen">
          Add a separate resourceExists(String name) method to ResourceLoader(s) to improve performance.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-355" due-to="Geoffrey Lowney, Dan Ertman">
          Fix missing # and $ characters within #literal() directive output.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-102" due-to="Juozas Baliuka, Adrian Tarau, Jim Seach">
          Add support for static utility classes: context.put("math", Math.class) -> $math.sin(0)
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-174" due-to="Andrew Tetlaw">
          Add #define directive set an unrendered block of VTL as a reference.
          (e.g. #define( $foo )Hello, $bar!#end #set( $bar = 'world') $foo -> Hello, world!)
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-612" due-to="Jarkko Viinamaki">
          Add #break directive to exit #foreach loops early.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-607" due-to="Jarkko Viinamaki">
          Fixed major performance issues with Velocimacros.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-606" due-to="Jarkko Viinamaki">
          Removed many, various performance bottlenecks and concurrency issues. (Also see VELOCITY-595)
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-600" due-to="Adrian Tarau">
          New VTL syntax $velocityHasNext within #foreach loops
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-580" due-to="Marnix van Bochove">
          Multi-line comments in macros were rendering extra *# when evaluated.
      </action>

      <action type="fix" dev="cbrisson" issue="VELOCITY-570" due-to="Ronald Klop">
          Have VelocityCharStream use an exponential buffer expansion rate.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-566" due-to="Etienne Massip">
          Prevent exception due to simultaneous rendering of macros.  
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-533" due-to="Christopher Schultz">
          New VTL syntax allows arrays to be treated like fixed length lists.
      </action>

      <action type="add" dev="nbubna" issue="VELOCITY-534">
          Added support for varargs in method calls.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-536" due-to="Lei Gu, Dima Tkach">
          Prevent NPE when template is parsed simultaneously by multiple users.  (may apply only to macros).  
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-362" due-to="Supun Kamburugamuva">
          Users can now include libraries of macros with #parse in a template.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-529" due-to="Supun Kamburugamuva">
          Macro libraries can now be selected programatically when merging templates.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-452" due-to="Alexey Panchenko">
          Catch IllegalArgumentException when invoking method.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-538">
          Fixed parse error for map definitions ending with a reference.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-297" due-to="Supun Kamburugamuva">
          Add new property velocimacro.max.depth which limits max macro calling depth.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-547" due-to="Adam Heath">
          Add ability to add directives programmatically
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-548" due-to="Adam Heath">
          Allow user directives to have no content.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-551" due-to="Michiel Toneman">
          IncludeNotFound event handler was displaying "not found" template.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-541">
        Fix StringResourceLoader to make it possible to use more than one loader per VM.
      </action>

      <action type="fix" dev="nbubna" issue="VELOCITY-520" due-to="Stepan Koltsov">
        Make unicode encoding work in velocity templates.
      </action>

      <action type="add" dev="nbubna">
        Add a ServletLogChute that allows logging through the servlet API. Ported from the
        Velocity Tools project.
      </action>

      <action type="add" dev="nbubna">
        Add a CommonsLogLogChute that allows logging through commons-logging.
      </action>

      <action type="update" dev="wglass">
        Deprecate integrated texen and anakia, factor it out into separate jars.
      </action>
 
      <action type="add" dev="wglass" issue="VELOCITY-509">
        Added new directive #evaluate() to dynamically evaluate VTL.
      </action>
    </release>

    <release version="1.5" date="2007-01-28">
      <action type="fix" dev="wglass" issue="VELOCITY-516" due-to="Vincent Massol">
        Fix to SecureUberspector to work properly with #foreach and iterators.
      </action>

      <action type="add" dev="henning" issue="VELOCITY-191" due-to="Aki Nieminen">
        Make FileResourceLoader unicode aware to allow skipping over BOM markers
        like those created by Windows Notepad. This is a workaround for a Java
        bug, where Java itself does not recognize the UTF-8 BOM as defined by
        the unicode standard.
      </action>

    </release>
    
    <release version="1.5-beta2" date="2006-11-24">

      <action type="add" dev="henning" issue="VELOCITY-183" due-to="Eelco Hillenius">
        New StringResourceLoader can retrieve templates from repository of in-memory Strings.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-493" due-to="Claude Brisson">
    RuntimeInstance.getProperty now returns value set with RuntimeInstance.setProperty,
    even before initialization.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-435">
    When macros have incorrect number of arguments, if property
    "velocimacro.arguments.strict" is set to true a ParseErrorException
    will be thrown.
      </action>

      <action type="add" dev="henning" issue="VELOCITY-414" due-to="Matthijs Lambooy">
    MethodInvocationException now contains line, column, template name
    allowing application to produce more useful error messages.
      </action>

      <action type="fix" dev="henning" issue="VELOCITY-24">
    Fixed race condition in template retrieval that caused macros to
    fail under simultaneous load.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-423">
    New event handler InvalidReferenceHandler allows application
    to catch invalid references.  Sample implementation collects
    them in list and optionally throws exception.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-179">
          New, optional SecureIntrospector prohibits methods that involve manipulation of classes, classloaders
      or reflection objects.  Use this introspector to secure Velocity against a risk of
      template writers using reflection to perform malicious acts.
      </action>

      <action type="fix" dev="henning" issue="VELOCITY-458">
    Removed Serializable from InternalContextBase, because one of the members is not serializable anyway so this never worked (Found by Findbugs).
      </action>

      <action type="fix" dev="henning" issue="VELOCITY-449" due-to="Alexey Panchenko">
    Add an additional pair of Executors that are smart about Map. 
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-453" due-to="Alexey Panchenko">
      Method caching now uses consistent keys.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-459" due-to="Stephen Haberman">
    Change the meaning of localscope for macros to allow access to references from 
    calling context.
      </action>

      <action type="add" dev="henning">
               Add a test for the DataSourceResource Loader.
      </action>

      <action type="add" dev="henning">
               Fix a problem in the DataSourceResource Loader, removing a potential security issue with SQL injection.
      </action>

      <action type="add" dev="henning">
               Build now creates the MD5 and SHA1 checksums for archives and jars.
      </action>

      <action type="fix" dev="henning">
    Fix a number of issues reported by running FindBugs on the Velocity source.
      </action>
    </release>

    <release version="1.5-beta1" date="2006-09-13">
      <action type="fix" dev="wglass" issue="VELOCITY-438" due-to="Stephen Haberman">
    Stop references from calling object.toString() twice.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-429" due-to="">
    Pass through all runtime exceptions.  Among other benefits, this
    allows plugins to throw a runtime exception to signify an application
    level problem in the calling application.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-98" due-to="Michal Chmielewski">
    When #include was followed by #parse with the same file name, a ClassCastException was thrown.
    </action>

      <action type="add" dev="wglass" issue="VELOCITY-425" due-to="Llewellyn Falco">
        Wrapped exceptions now have Cause property set on JDK 1.4.  (note that Velocity
        continues to run under JDK 1.3).
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-418" due-to="Jason Weinstein">
        When Velocity is initialized, default.properties stream was not being closed.  This
    made it difficult to undeploy webapps on Windows with Velocity unpacked.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-151" due-to="Kirk Wolf">
        Upgraded to latest commons collection, fixing problem with non-recognition
        of configuration file encoding in rare circumstances.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-370" due-to="Reggie Riser">
        The Introspector could throw a NPE when a parameter to an overloaded method was null.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-381" due-to="Llwellyn Falco and Dan Powell">
        If toString() returned null in a silent reference then "null" was displayed.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-359" due-to="">
        Fixed bug in which empty body for #if (e.g. <code>#if(some expression)#end</code>
        caused ParseException.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-222" due-to="">
        Added javacc task to build.xml simplifying modification process
        for editing syntax files.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-374" due-to="">
        Velocity Engine was throwing NPE when used without a call to
        init().  Now gives a more meaningful exception message.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-404" due-to="Llewellyn Falco">
        Fixed problem with Uberspect Info class being created incorrectly.
        Added template name to Info allowing better error reporting.
      </action>

      <action type="update" dev="wglass" issue="" due-to="">
        Numerous improvements to the documentation.  Reorganized table of
        contents, moved community content to the Wiki, added article on using
        Velocity in web applications.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-350" due-to="">
        When testing objects in VTL for equality, if both objects are a number, use
        number equality.  If both objects are the same class, use the equals method.
        New behavior: If objects are different classes, compare the String
        representation of both objects rather than logging an error.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-272" due-to="">
        Velocity would give error when last line of file was a ## comment.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-412" due-to="Malcolm Edgar">
        Added method to retrieve application attributes.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-196" due-to="">
        Velocity now searches in the current thread's context classloader
        before the system classloader for all templates loaded with the
        ClasspathResourceLoader and for all user-defined ResourceLoaders,
        introspectors, event handlers, etc.
        A typical use for this is to have Velocity in the application
        container classpath while keeping templates and plugins in the
        webapp classpath.
      </action>

      <action type="update" dev="wglass" issue="" due-to="Thomas Veith">
        #set now sets references to null when required.  For backwards
        compatibility this must be enabled by setting the configuration key
        <code>directive.set.null.allowed</code> to true.
      </action>

      <action type="add" dev="wglass" issue="" due-to="">
        New optional event handler that escapes all references.
        Regular expressions can be used to configure which references
        have HTML, JavaScript, SQL, or XML escaping.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-154" due-to="">
        New optional event handler implementation that forces #parse / #include to stay
        in same directory as parent template.
      </action>

      <action type="add" dev="wglass" issue="VELOCITY-260" due-to="">
        New event handler to modify behavior of #parse / #include.
      </action>

      <action type="update" dev="wglass" issue="VELOCITY-144" due-to="">
        FileResourceLoader now accepts absolute path when configured to accept it.
      </action>

      <action type="fix" dev="wglass" issue="VELOCITY-126" due-to="">
        String containing "##" was treated as unterminated String.
      </action>

      <action type="add" dev="nbubna" issue="VELTOOLS-55" due-to="Charles Harvey">
        Spruced up Geir's old URLResourceLoader and promoted it from the whiteboard to
        the main distribution.
      </action>

      <action type="update" dev="henning" issue="VELOCITY-424" due-to="Malcom Edgar">
        Throw Runtime exceptions from nodes up the chain.
      </action>
      <action type="update" dev="henning" issue="VELOCITY-426" due-to="Malcom Edgar">
        Revert the split between org.apache.velocity.runtime.parser.node.Node and
        org.apache.velocity.runtime.parser.Node. The parser now only uses ...parser.node.Node
        because this change broke custom directives.
      </action>

      <action type="update" dev="nbubna" issue="VELOCITY-403" due-to="">
            Made a lot of internal logging upgrades including: Deprecated LogSystem interface
            and replaced it (and all its implementations) with a new LogChute interface and implementations,
            added getLog() to RuntimeServices (and all its friends) to improve on and replace its now deprecated
            logging methods, added a JdkLogChute as a 3rd default option for those using JDK 1.4+, and added a
            StandardOutLogChute as final resort if other LogChute inits fail. See JIRA issues VELOCITY-403, VELOCITY-166,
            VELOCITY-403,VELOCITY-166,VELOCITY-78, VELOCITY-157, VELOCITY-159, VELOCITY-193.
        </action>

        <action type="remove" dev="henning" issue="VELOCITY-401" due-to="">
            Removed all J2EE build tasks.  Now automatically detects availability
            of javax.sql.Datasource (in JDK 1.4+) and builds DatasourceResourceLoader
            when allowed.
        </action>

        <action type="add" dev="henning" issue="" due-to="">
            ant build now downloads the required dependency jars from ibiblio.org
        </action>

        <action type="update" dev="henning" issue="VELOCITY-373" due-to="Malcolm Edgar">
            Unified template name, line and column number reporting for ParserErrorException
        </action>

        <action type="remove" dev="henning" issue="" due-to="">
            Dropped the non-functional Velocity compiler.
        </action>

        <action type="update" dev="henning" issue="" due-to="">
            Started separating out the JavaCC generated parts of the Velocity Parser. Not yet complete to avoid user visible changes. Scheduled to be completed for 2.0
        </action>

        <action type="add" dev="henning" issue="" due-to="">
            Contributed a maven build for Velocity
        </action>

        <action type="fix" dev="henning" issue="" due-to="">
            Reworked the ant build to product only two jars: velocity.jar and velocity-dep.jar.
        </action>

        <action type="remove" dev="henning" issue="" due-to="">
            Removed the Configuration class and all methods that references it. This class was deprecated since Velocity 1.1 and was scheduled to be gone for Velocity 1.3 or 1.4. Now
        it was finally removed in 1.5.
        </action>

        <action type="add" dev="wglass" issue="VELOCITY-242" due-to="Peter Romianowski">
            Added support for decimal numbers.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-284" due-to="Mike Rettig">
            MethodInvocationException now consistently thrown
        (previously was hidden when in parameter to Velocimacro).
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-109" due-to="">
            Fixed problem in which foreach loop would fail to call overloaded method.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-86" due-to="">
            Removed ERROR level log message "Can't find 'VM_global_library.vm'".
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-348" due-to="">
            Anakia now generates consistent line endings based on platform.  Requires upgrade to JDom 1.0.
        </action>

        <action type="add" dev="wglass" issue="VELOCITY-190" due-to="Peter Ryan">
            Anakia can now be pre-loaded with custom context values from an optional XML file.
        </action>

        <action type="add" dev="wglass" issue="VELOCITY-43" due-to="">
            Directives can now be delimited with curly braces, for example #if($condition)something#{else}otherthing#{end}.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-254" due-to="Christopher Reck">
            Nulls now handled appropriate within #foreach.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-324" due-to="Shinobu Kuwai">
            Upgraded JavaCC to version 3.2, providing JDK 1.5 compatibility.
        (Older version used keyword 'enum' which is reserved in JDK 1.5).
        </action>

        <action type="update" dev="wglass" issue="VELOCITY-267" due-to="Matt Raible ">
            DatasourceResourceLoader now allows injection of Datasource, allowing it to be used in Inversion of Control (IOC) frameworks.
        </action>

        <action type="fix" dev="wglass" issue="VELOCITY-218" due-to="">
            #stop now works properly.
        </action>

        <action type="update" dev="wglass" issue="VELOCITY-196" due-to="Charles Oliver Nutter">
            ClasspathResourceLoader now searches ContextClassLoader for template.
        </action>

        <action type="remove" dev="dlr" issue="VELOCITY-164" due-to="">
            Removed use of <a href="http://jakarta.apache.org/log4j/">Log4J's</a>
            deprecated Category and Priority classes in favor of the corresponding
            and supported Logger and Level.  To update, replace necessary
            references, and Category.getInstance() with Logger.getLogger().
        </action>

        <action type="add" dev="wglass" issue="VELOCITY-152" due-to="James Taylor">
            New Map literal syntax.
        </action>

        <action type="remove" dev="dlr" issue="" due-to="">
            Removed the long-deprecated Log4JLogSystem.  Never fear,
            SimpleLog4JLogSystem remains.
        </action>

        <action type="update" dev="dlr" issue="" due-to="">
            Enhanced the implementation of ResourceCacheImpl using Jakarta Commons
            Collections LRUMap class.  The previous greedy implementation did not
            set an upper bound for the cache size, meaning that cached resources
            were never relinquished (a possible memory leak).  You can continue to
            use that behavior by setting the
            <code>resource.manager.cache.size</code> for your cache to less than
            1.
        </action>

        <action type="update" dev="geirm" issue="" due-to="Daniel Rall">
            Took dan's modified SimpleLog4jLogSystem, and renamed Log4JLogSystem, and
            put back old version of SimpleLog4JLogSystem, as deprecated.  That way
            we can move forward with an up-to-date version that uses Logger, and
            for one release, be backwards compatile for the Category-using log4j
            crowd.
        </action>

        <action type="remove" dev="wglass" issue="" due-to="">
            Deprecated org.apache.velocity.tools.VelocityFormatter class in favor
            of the various format classes in the Velocity Tools library.
        </action>

        <action type="remove" dev="dlr" issue="" due-to="">
            Deprecated the org.apache.velocity.servlet.VelocityServlet class in
            favor of org.apache.velocity.tools.view.servlet.VelocityViewServlet
            from the Velocity Tools library.  Servlet interaction is more a core
            competency of the Velocity Tools package than of Velocity's
            core.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-185" due-to="wglass">
            Fix to BaseTestCase as suggested by Will Glass-Husain to handle line endings
        </action>

        <action type="update" dev="" issue="" due-to="henning">
         Parameterized cache and mod time control in TexenTask based on patch from
         Henning.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-150" due-to="wglass">
            Fix to DatasourceResourceLoader - stop using the old Runtime singleton as
            would leak a little memory for each instance of VelocityEngine created.
            Hunted down by Will Glass-Husain.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-161" due-to="wglass">
            SimplePool now removes elements from pool on a get(). NOTE : Previously, it left the
            reference to the object in the pool.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-61" due-to="wglass">
            Fixes problem with single line comment
            embedded in a multi-line comment.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-221" due-to="">
            Change for VELOCITY-221 and partial for VELOCITY-148, allowing newlines in
            directives.
        </action>

        <action type="update" dev="geirm" issue="VELOCITY-148" due-to="">
            Change to finish request VELOCITY-148, allowing '+' as a string concat. We'll have
            to see how the community likes it.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-239" due-to="">
            Didn't allow formal reference notation as first arg
            to foreach.
        </action>

        <action type="update" dev="geirm" issue="" due-to="">
            To make using w/ XML easier allow alternative logical operators 'and', 'or',
            'lt', 'gt', 'le', 'ge', 'eq', 'ne', 'not'.
        </action>

        <action type="update" dev="geirm" issue="" due-to="">
            Allow newlines in strings.
        </action>

        <action type="fix" dev="geirm" issue="VELOCITY-148" due-to="">
            Tiny fix to VelocityWriter to prevent a NPE if someone passes it a null
        </action>

        <action type="fix" dev="geirm" issue="" due-to="">
            Anakia changes to accomodate finalization of JDOM API.  In AnakiaJDOMFactory,
            AnakiaTask, and OutputWrapper
        </action>

        <action type="update" dev="geirm" issue="" due-to="">
            Added template, line and column info to MIEs thrown by ASTMethod
        </action>

    </release>
  </body>
</document>
