<?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.
-->
<document>
 <properties>
  <title>Upgrading from 1.0 to 1.1</title>
  <author email="dev@commons.apache.org">Commons Documentation Team</author>
 </properties>
<body>
<!-- ================================================== -->
<section name="Upgrading from 1.0 to 1.1">
  <p>CLI 1.1 is a bugfix release of CLI. The following changes notable API changes were made: </p>

  <ul>
    <li>The Parser abstract class has two additional parse methods that take a Properties parameter. </li>
    <li>The HelpFormatter class had publicly accessible fields. These should now be accessed via
        get/set methods and the public fields are deprecated. </li>
    <li>The Option class addValue(String) method now throws UnsupportedOperationException. </li>
    <li>OptionValidator is a newly added class. </li>
    <li>Option's now have equals(Object) and hashCode() methods. </li>
    <li>The Option class also received two new methods, setDescription(String) and hasValueSeparator();boolean. </li>
  </ul>

  <p>The jar should be API backwards compatible, though if you were calling addValue(String) then you won't be happy. Please 
     let us know your use case if that is so. </p>

</section>
<section name="Bugs fixed in 1.1">
  <p>The list of bugs fixed in 1.1 may be seen via the 
    <a href="changes-report.html#1_1">changes report</a>. </p>
</section>
<!-- ================================================== -->
</body>
</document>
