<?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.1" date="2008-01-01">
      <action dev="jochen" type="fix">
        Upgrade to commons-io-1.4-SNAPSHOT, in order to use the new
        FileCleaningTracker and fix issues with FileCleaner.
      </action>
      <action dev="jochen" type="fix" issue="FILEUPLOAD-129">
        Made the MockHttpServletRequest comply to the servlet 2.4 specification
        by applying
        http://www.sourcelabs.com/dashboards/sash-1.2/patches/commons-fileupload-1.1-1/SUP-520.diff
      </action>
      <action dev="jochen" type="add" issue="FILEUPLOAD-130"
          due-to="Michael Macaluso" due-to-email="michael.public@wavecorp.com">
        Added support for accessing the file item headers.
      </action>
      <action dev="jochen" type="fix" issue="FILEUPLOAD-116"
          due-to="Amichai Rothman" due-to-email="amichai2@amichais.net">
        A MalformedStreamException is now thrown, if the size of an items
        headers exceeds HEADER_PART_SIZE_MAX;
      </action>
      <action dev="jochen" type="fix" issue="FILEUPLOAD-134"
          due-to="Thomas Vandahl" due-to-email="tv@apache.org">
        DiskFileItem.toString() could throw an NPE.
      </action>
      <action dev="jochen" type="fix" issue="FILEUPLOAD-135"
          due-to="Alexander Sova" due-to-email="bird@noir.crocodile.org">
        Short files could cause an unexpected end of the item stream.
      </action>
      <action dev="jochen" type="fix" issue="FILEUPLOAD-145">
        A FileSizeLimitExceededException was deferred until the complete
        file has been uploaded. Additionally, the FileSizeLimitException
        is now thrown immediately, if the attachments headers contain
        a content-length value, which exceeds the configured limit.
      </action>
    </release>

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