<?xml version="1.0"?>
<!-- 
/*
 * Copyright 2001-2004 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 cvs">
    </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>
