<?xml version="1.0"?>
<!--
/*
 * Copyright 2001-2006 The Apache Software Foundation.
 *
 * Licensed 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>Changes</title>
    <author email="epugh@opensourceconnections.com.com">Eric Pugh</author>
  </properties>

  <body>
    <release version="2.4-M2" date="in Subversion">
    <action type="fix" dev="seade" issue="TRB-8" due-to="Gunther Olesch">
        A FileItem in a ParameterParser added to TurbineURI or TemplateURI was
        resulting in a NPE.
      </action>
      <action type="fix" dev="seade" issue="TRB-16" due-to="J&uuml;rgen Hoffmann">
        TurbineURI was mishandling the empty String.
      </action>
      <action dev="seade" type="update">
        Updated jar dependency: javamail to 1.3.3
      </action>
      <action dev="sgoeschl" type="update">
        The avalon-framework-4.3 allows to create an Avalon logger based on a commons logger.
      </action>
      <action dev="seade" type="fix">
        BrowserDetector was throwing a NPE for recent versions of Opera - this
        has been fixed.
      </action>
      <action dev="sgoeschl" type="update">
        Setting all members of BaseServiceBroker to private as it should be.
      </action>
      <action dev="sgoeschl" type="update">
        Removed hack in Turbine.java forcing an early init of the AvalonComponentService. The
        removal could potentially break existing code if the AvalonComponentService is not
        configured to be early initialized since the requested service wouldn't be found.
      </action>
      <action dev="sgoeschl" type="update">
        Implementing transparent service lookup using TurbineServiceProviders
      </action>
      <action dev="sgoeschl" type="update">
        The AvalonComponentService does not use the deprecated Component interface and ComponentException.
      </action>
      <action dev="sgoeschl" type="update">
        Restructured the dependency section to distinguish between ECM and YAAFI dependencies.
      </action>
      <action dev="sgoeschl" type="update">
        Use the Fulcrum components from Fulcrum 3.0.0
      </action>
      <action dev="sgoeschl" type="add">
        Added YAAFI Avalon service container and the corresponding TurbineYaafiComponentService.
      </action>
      <action dev="sgoeschl" type="fix">
        Removed remaining Merlin artifacts
      </action>
      <action dev="epugh" type="fix" due-to="Leandro Rodrigo Saad Cruz">
        Handle non US-ASCII encoding with multipart/form-data mimetype better.
      </action>
      <action dev="epugh" type="remove">
        Remove Merlin service.  When the replacement for Merlin (Metro) is released, then
        add back in support.
      </action>
      <action dev="epugh" type="update">
        Use RELEASED versions of Fulcrum components!
      </action>
      <action dev="epugh" type="remove">
        Remove old security services based on couple Torque.
      </action>
      <action dev="epugh" type="remove">
        Remove dependencies on Stratum and Torque.  Torque is now completely optional for Turbine.
        Stratum has been replaced by the AvalonComponentService.
      </action>
      <action dev="seade" type="update">
        The velocity page formatting macros have been updated to generate xhtml
        compatible html.
      </action>
    </release>
    <release version="2.4-M1" date="2004-08-14" description="Milestone release including Pipeline and PipelineData objects">
      <action dev="epugh" type="update">
     Update to Commons Configuration 1.0-RC1.  TurbineConfiguration.xml files should switch
     from &lt;dom4j className="org.apache.commons.configuration.DOM4JConfiguration" fileName="conf/test/TurbineResources.xml"/&gt;
     to &lt;xml fileName="conf/test/TurbineResources.xml"/&gt; syntax.
      </action>
    <action dev="epugh" type="update">
        Refactored how Turbine sets up it's ServerData object.  Removed the use
     of RunData from the process.
     </action>
<action dev="" type="update">Removed dependency on deprecated Log4jFactory in favor of Log4jLogger.</action>
<action dev="" type="add">Replaced existing Maven plugin with Hennings' META: Maven Environment for
  	  Turbine Applications plugin.</action>
<action dev="epugh" type="update">Updated to use Stratum b5 which properly supports the upcoming 1.0 release of
  	  Commons Configuration.  Also removed uses of getVector which has been removed
  	  from the Configuration API.</action>
<action dev="epugh" type="add"> Backported the Pipeline from Turbine 3 to Turbine 2.4.  The pipeline allows
  	  you to define via an XML file all the stages for processing a request.  This
  	  makes it simple to add your own custom steps to be applied to each HTTP
  	  request coming into Turbine.  You will need to add the pipeline.xml file.
  	  Added methods to many classes to allow the use of PipelineData as an
  	  alternative to RunData. Added new PipelineDataApplicationTool interface for
  	  tools which use PipelineData instead of RunData.</action>
<action dev="epugh" type="update">Maven Plugin for Turbine moved to /extensions directory.  The torque
  	  codegeneration of objects for the Schedule and Security services was
  	  moved to a new project /extensions/torque.  This removes all the nasty
  	  logic required to code generate the torque objects before hand.  Should
  	  help new users work with Turbine as well as allow other backend providers
  	  for the Schedule and LDAP security services.  The multiproject plugin is
  	  now used to build Turbine.</action>
<action dev="" type="remove">Removed deprecated Turbine Security methods.</action>
<action dev="" type="add">Added to website documentation the Maven Plugin for Turbine.  Now has goals to
	 help with inplace development of Turbine apps.</action>
<action dev="" type="update">Upgraded to commons-pool-1.1</action>
<action dev="" type="add">A means of initializing Velocity action modules has been added.</action>
<action dev="epugh" type="add" due-to="Peter Courcoux">Added first cut of the MerlinComponentService which uses the Avalon Merlin
  	   container.  Merlin has many many features to help with dealing with components.</action>
<action dev="epugh" type="update">The cache, crypto, localization, intake, factory, and mimetype services have now been deprecated in favor
  	   of the Fulcrum versions as well.  </action>
<action dev="epugh" type="update">Turbine security now uses the Fulcrum crypto component.</action>
<action dev="epugh" type="update">The intake service within Turbine has been deprecated in favor
	   of the Fulcrum Intake service.  The intake pull tool has
	   been updated to reflect this.</action>
<action dev="epugh" type="update">The localization service within Turbine has been deprecated in favor
	   of the Fulcrum Localization service.  The localization pull tool has
	   been updated to reflect this.</action>
<action dev="" type="fix">Fixed problem in Intake with the "remove" method in IntakeTool that is
       triggered by a "removeAll".</action>
<action dev="" type="fix">When there is more than one instance of a group and a "removeAll" is
       done the "remove" method is called for each of the instances of the
       group. If a mutiply instantiated group is the last one to be removed,
       it's parameter entries will already have been removed and "getStrings"
       returns null, which is not being handled in the code.</action>
<action dev="" type="fix"> Intake now handles multiValued="true" on type="int" fields correctly.
       The get/set methods of the underlying object need to deal with an array
       of ints.  The intake processing for other primitive types has also been
       updated, though not tested to the same extent as int.</action>
<action dev="" type="fix">HttpUtils.httpDateFormat had the year set as 'yyyyy', should be 'yyyy' therefore
  		setting expiry dates failed.</action>
<action dev="epugh" type="fix"> doXXX events would eat exceptions while doPerform would bubble them up.
       Added property action.event.bubbleexception which is true by default that
       applies to both types and either bubbles them up, or logs and sinks them.</action>
<action dev="" type="fix">The intake validators were fixed so that fields with required=false
       rules no longer attempt to execute the remaining rules when no
       input is provided.  A minLength > 0 rule is no longer synonymous
       with required=true.</action>
<action dev="" type="fix">Actions triggered from html input elements with type="button" are
       now processed correctly (the trailing ".x" and ".y" are removed from
       the event names).</action>
<action dev="" type="fix"> Intake was fixed so that fields with required elements with value=false
       can later be enabled with field.setRequired(true) (i.e. you should
       do this rather than using the deprecated required-message element).</action>
<action dev="" type="fix">Intake was fixed so that DateString will use the "formatn" (where n
       &gt;= 1) rules to parse the input and then the "format" rule to format
       it (the "format" rule is also used to parse the date if there are no
       "formatn" rules or they are not able to parse it).  In order to
       retrieve the correctly formatted DateString value you need to use
       <em>$group.foo.StringValue</em> rather than <em>$group.foo.Value</em>
       (you can do this for all values, not just DateString).</action>
<action dev="" type="fix">Intake now makes use of the the emptyValue attribute from the field
       elements when mapping from the group to the object when no value has
       been set.  This makes it possible to clear values in an existing object
       that is being overwritten with Intake data using
       <em>group.setProperties(obj)</em> (or you can provide non-null values
       in your intake.xml file).  Make sure you do not inadvertently include
       the primary key for the object in the intake group without actually
       setting it to the appropriate value (it shouldn't be in the group
       anyway).</action>
<action dev="" type="fix">Fixed the intake DateString flexible rule so that it applies to the
       format rules and not just to the default locale format.</action>
<action dev="" type="fix"> DateFormatter now allows for a differnet date format to be provided
       via <em>tool.dateTool.format</em> in TurbineResources.properties.</action>
<action dev="" type="fix">DirectResponseLayout is provided to allow direct writing to
       ServletOutputStream when VelocityOnlyLayout is the default.  To use it
       you need to add <em>data.declareDirectResponse();</em> and then
       <em>data.setLayout("DirectResponseLayout");</em> to your action class.
       Thanks to Peter Courcoux for the code.</action>
</release>
<release version="PRE 2.4" description="Older Changes Logs">
    <action>Please see <a href="changes-pre24.html">Pre 2.4 Changelog</a></action>
    </release>

  </body>
</document>
