<?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.
-->

<!--
This file is used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the 
release process easy :-).

2.  Do a bugzilla search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
CVS commits.  Set the project.properties' maven.changelog.range 
property to the number of days since the last release.


The <action> type attribute can be add,update,fix,remove.
-->

<document>

  <properties>
    <title>Release Notes</title>
    <author email="martinc@apache.org">Martin Cooper</author>
  </properties>

  <body>
	<release version="1.2" date="2007-02-13">

      <action dev="jochen" type="fix" due-to="Aaron Freeman"
           due-to-email="aaron@sendthisfile.com">
        Made Streams.asString static.
      </action>

	  <action dev="jochen" type="update" issue="FILEUPLOAD-109">
	    Eliminated duplicate code.
	  </action>

	  <action dev="jochen" type="add" issue="FILEUPLOAD-112">
	    Added a streaming API.
	  </action>

	  <action dev="jochen" type="fix" issue="FILEUPLOAD-93">
	    Eliminated the necessity of a content-length header.
	  </action>

      <action dev="jochen" type="fix" issue="FILEUPLOAD-108"
          due-to="Amichai Rothman" due-to-email="amichai2@amichais.net">
        Eliminated the limitation of a maximum size for a single
        header line. (The total size of all headers is already
        limited, so there's no need for another limit.)      
      </action>

      <action dev="jochen" type="add" issue="FILEUPLOAD-87">
        Added the ProgressListener, which allows to implement a
        progress bar.
      </action>

      <action dev="jochen" type="add" issue="FILEUPLOAD-111"
          due-to="Amichai Rothman" due-to-email="amichai2@amichais.net">
        Added support for header continuation lines.
      </action>

      <action dev="jochen" type="add" issue="FILEUPLOAD-88"
          due-to="Andrey Aristarkhov" due-to-email="aristarkhov@bitechnology.ru">
        It is now possible to limit the actual file size and not
        the request size.
      </action>

      <action dev="jochen" type="add" issue="FILEUPLOAD-120"
          due-to="Henry Yandell" due-to-email="bayard@apache.org">
        Added the FileCleanerCleanup as an example for how to close
        down the FileCleaner's reaper thread nicely.
      </action>

      <action dev="jochen" type="fix" issue="FILEUPLOAD-123">
        A descriptive NPE is now thrown, if the FileItemFactory
        has not been set.
      </action>
	</release>

    <release version="1.1.1" date="2006-06-08" description="Bugfix release">

      <action dev="martinc" type="fix" issue="FILEUPLOAD-20">
        Cache disk file item size when it is moved to a new location.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-30">
        File names were being inadvertently converted to lower case.
      </action>

    </release>

    <release version="1.1" date="2005-12-24" description="Portlet support, substantial refactoring and numerous bug fixes">

      <action dev="martinc" type="update">
        Updates for FileUpload 1.1-RC1.
      </action>

      <action dev="martinc" type="add">
        Added release notes for FileUpload 1.1.
      </action>

      <action dev="martinc" type="update">
        Update the User Guide to document the "right" way of using FileUpload
        1.1, rather than the older, and thus deprecated, ways that are
        compatible with FileUpload 1.0.
      </action>

      <action dev="martinc" type="add">
        Add this change log, including all changes since the Commons FileUpload
        1.0 release.
      </action>

      <action dev="martinc" type="update">
        Update Commons IO dependency to version 1.1.
      </action>

      <action dev="martinc" type="add">
        Add custom PMD configuration.
      </action>

      <action dev="martinc" type="update">
        Make inner exception classes static, which they should have been all
        along.
      </action>

      <action dev="martinc" type="fix">
        Fix Checkstyle warnings.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-29" due-to="Rahul Akolkar">
        Remove Javadoc warnings.
      </action>

      <action dev="martinc" type="update">
        Build updates:
        <ul>
          <li>
            Include NOTICE.txt in the jar file and distributions.
          </li>
          <li>
            Include xdocs in source distribution.
          </li>
          <li>
            Create MD5 checksums for distributions.
          </li>
        </ul>
      </action>

      <action dev="martinc" type="add">
        Add custom Checkstyle configuration.
      </action>

      <action dev="martinc" type="update">
        Update dependencies in POM, and add comments and scope.
      </action>

      <action dev="martinc" type="update">
        Standardise on @throws instead of having a mixture of that and
        @exception.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-50" due-to="Niall Pemberton">
        Make DiskFileItem serializable. Thanks to Niall Pemberton for the
        suggestion and patch.
      </action>

      <action dev="martinc" type="update">
        Make the temporary file names unique across class loaders, not just
        within them, by including a UID in the file name.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-77">
        Include the actual and permitted sizes in both the exception message
        and the exception itself.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-13">
        If an explicit header encoding is not specified, use the one from the
        appropriate context (i.e. ServletRequest or ActionRequest).
      </action>

      <action dev="martinc" type="add">
        Add getCharacterEncoding to the request context.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-83">
        Null check and case insensitivity fixes.
      </action>

      <action dev="martinc" type="update">
        Web site updates:
        <ul>
          <li>
            Add detail pages for Source Repository and Issue Tracking, based on
            those for IO and Validator.
          </li>
          <li>
            Improvements to FileUpload home page, based on similar recent
            changes to IO and Validator home pages.
          </li>
          <li>
            The Bugzilla component name has a space in it. Fix the URLs.
          </li>
          <li>
            Add an FAQ page, using the Maven plugin to generate it.
          </li>
        </ul>
      </action>

      <action dev="dion" type="fix" issue="COMMONSSITE-2">
        Fixes to POMs
      </action>

      <action dev="mrdon" type="update">
        Setting source and target for Java 1.3
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-37">
        Fix typos in Javadoc code examples.
      </action>

      <action dev="martinc" type="fix">
        Fix typos in exception messages.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-5">
        Obtain request content type from container instead of headers.
      </action>

      <action dev="sullis" type="update">
        New mock objects from Jetspeed-2, and new FileUpload test cases.
      </action>

      <action dev="sullis" type="add">
        added toString() methods
      </action>

      <action dev="martinc" type="add">
        Fix up the existing package.html file and add new ones for the newly
        introduced packages. Fairly minimal, but with a link to the user guide.
      </action>

      <action dev="martinc" type="update">
        Substantial refactoring and additions:
        <ul>
          <li>
            The core package is now independent of servlet / portlet / other
            distinctions, as well as persistence schemes, other than deprecated
            classes and methods retained for backwards compatibility.
          </li>
          <li>
            Servlet specific functionality has been moved to a new 'servlet'
            package. Existing users should migrate to this as soon as possible,
            since the servlet specific functionality in the generic package
            will be removed in the release after FileUpload 1.1.
          </li>
          <li>
            Support for portlets (JSR 168) has been added, in a new 'portlet'
            package. This is not well tested at this point, and feedback would
            be very much appreciated. (This also resolves bug #23620.)
          </li>
          <li>
            The disk-based file item implementation has been moved into a 'disk'
            package, and renamed from Default* to Disk* to reflect what it
            really is. The Default* classes have been retained in the top level
            package for backwards compatibility, but are now deprecated, and
            will be removed in the release after FileUpload 1.1.
          </li>
          <li>
            The isMultipartRequest method is an unfortunate casualty of this
            refactoring. That method should really be moved to ServletFileUpload,
            but since the method is static, it can only exist in either
            FileUploadBase or ServletFileUpload. Backwards compatibility dictates
            the former for now, but the latter is the desired state, which
            implies some future breakage. Fair warning...
          </li>
        </ul>
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-4">
        Specify the encoding (ISO-8859-1) when converting the boundary to a
        byte array.
      </action>

      <action dev="martinc" type="update">
        Convert to Sun coding guidelines.
      </action>

      <action dev="martinc" type="update">
        DeferredFileOutputStream moved to Commons IO.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-16" due-to="Justin Sampson">
        Workaround for Mac IE5 bug. Thanks to Justin Sampson for the patch and
        tests for this vexing issue.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-104">
        Handle unquoted header parameters.
      </action>

      <action dev="martinc" type="add" issue="FILEUPLOAD-78">
        Some documentation on interaction with virus scanners.
      </action>

      <action dev="martinc" type="add" issue="FILEUPLOAD-31" due-to="Justin Sampson">
        More unit tests from Justin Sampson.
      </action>

      <action dev="martinc" type="update" issue="FILEUPLOAD-95">
        Use FileCleaner from Commons IO to clean up temp files, rather than
        File.deleteOnExit(), which can cause serious problems in long-running
        processes.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-53">
        Check that HTTP method is POST as part of multipart check.
      </action>

      <action dev="martinc" type="add">
        Switch to Commons IO version of DeferredFileOutputStream. Adding IO as
        a dependency will allow us to take advantage of other classes in that
        component to fix additional FileUpload bugs.
      </action>

      <action dev="martinc" type="add" issue="FILEUPLOAD-40">
        handle quoted boundary specification.
      </action>

      <action dev="martinc" type="add" issue="FILEUPLOAD-18">
        use case-independent comparisons for encoding types.
      </action>

      <action dev="martinc" type="fix">
        Fix comments to avoid break iterator complaints.
      </action>

      <action dev="martinc" type="fix" due-to="Yuji Yamano">
        Fix typos in comments.
      </action>

      <action dev="martinc" type="add" issue="FILEUPLOAD-101" due-to="Oleg Kalnichevski">
        Add support for character sets specified for individual parts.
      </action>

      <action dev="scolebourne" type="update">
        Change to Apache License 2.0
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-22">
        Correct the comment for the no-args constructor to reflect the fact
        that a factory needs to be set before parsing uploads.
      </action>

      <action dev="martinc" type="update">
        Collapse some all but duplicated code.
      </action>

      <action dev="jmcnally" type="fix" issue="FILEUPLOAD-72">
        Fix example showing FileItem.write to use a File object.
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-21" due-to="Peter Chase">
        Check for null before attempting to close streams in write().
      </action>

      <action dev="martinc" type="fix" issue="FILEUPLOAD-67" due-to="Paul Dalton">
        Correction to sample code in the docs.
      </action>

    </release>

    <release version="1.0" date="2003-06-26" description="Initial release">
    </release>
  
    
  </body>

</document>
