<?xml version="1.0" encoding="UTF-8"?>
<!--

    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.

-->

<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<apichanges>
<apidefs>
    <apidef name="sendoptsapi">SendOpts API</apidef>
    <apidef name="sendoptsspi">SendOpts SPI</apidef>
</apidefs>
<changes>
    <change id="instances">
      <api name="sendoptsapi"/>
      <summary>Command line with instances</summary>
      <version major="2" minor="37"/>
      <date day="23" month="3" year="2017"/>
      <author login="jtulach"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
          <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#create-java.lang.Object...-">Create</a>
          command line with instances of
          <a href="@TOP@/org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>
          and
          <a href="@TOP@/org/netbeans/spi/sendopts/ArgsProcessor.html">ArgsProcessor</a>.
     </description>
     <class package="org.netbeans.api.sendopts" name="CommandLine"/>
    </change>
    <change id="usage-into">
      <api name="sendoptsspi"/>
      <summary>Print Usage into Caller's Stream</summary>
      <version major="2" minor="37"/>
      <date day="21" month="3" year="2017"/>
      <author login="jtulach"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
          <a href="@TOP@/org/netbeans/spi/sendopts/Env.html#usage-java.io.OutputStream-">Env.usage</a>
          method now takes an optional <code>OutputStream</code> parameter.
     </description>
     <class package="org.netbeans.spi.sendopts" name="Env"/>
    </change>
    <change id="explicit-options-processor">
      <api name="sendoptsspi"/>
      <summary>Explictly specify option processors</summary>
      <version major="2" minor="37"/>
      <date day="21" month="3" year="2017"/>
      <author login="jtulach"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
          <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#create-java.lang.Class...-">CommandLine.html.create(Class...)</a>
          can now be called with classes that extend
          <a href="@TOP@/org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>.
     </description>
     <class package="org.netbeans.api.sendopts" name="CommandLine"/>
    </change>
    <change id="own-hep">
      <api name="sendoptsspi"/>
      <summary>Easier way to process own <code>--help</code> request</summary>
      <version major="2" minor="21"/>
      <date day="18" month="3" year="2012"/>
      <author login="jtulach"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
          <a href="@TOP@/org/netbeans/spi/sendopts/Env.html#usage--">Env.usage</a> 
          can be called when one wants to process own <code>--help</code> option.
     </description>
     <class package="org.netbeans.spi.sendopts" name="Env"/>
    </change>
    <change id="declarative-options">
      <api name="sendoptsspi"/>
      <summary>@Arg annotation</summary>
      <version major="2" minor="20"/>
      <date day="31" month="12" year="2011"/>
      <author login="jtulach"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
          <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">@Arg</a> annotation
          and associated classes allow to register options declaratively. There
          is a new  <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#create-java.lang.Class...-">
            factory method
          </a> to create multiple instances of differently configured
          <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html">command lines</a>.
     </description>
     <class package="org.netbeans.spi.sendopts" name="Arg"/>
     <class package="org.netbeans.spi.sendopts" name="ArgsProcessor"/>
     <class package="org.netbeans.api.sendopts" name="CommandLine"/>
    </change>
    <change id="always">
      <api name="sendoptsspi"/>
      <summary>An option that is always on</summary>
      <version major="2" minor="1"/>
      <date day="30" month="7" year="2007"/>
      <author login="jtulach"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
          Those processors that wish to be informed about every command line
          processing, can register themselves as providers of 
          <a href="@TOP@/org/netbeans/spi/sendopts/Option.html#always--">always</a>
          option. This one is automatically present in each successfully parsed
          command line.
     </description>
    </change>
    <change id="completerewrite">
      <api name="sendoptsspi"/>
      <summary>Completelly rewritten</summary>
      <version major="2" minor="0"/>
      <date day="20" month="8" year="2006"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="yes" binary="incompatible" source="incompatible" semantic="incompatible" deprecation="no" deletion="yes"/>
      <description>
          After the <a href="http://www.netbeans.org/issues/show_bug.cgi?id=57611">review from others</a>
          it has been decided to de-generify the interfaces. As a result
          of this complete rewrite, the API clients need to be fully 
          rewritten as most of the method signatures changed.
      </description>
    </change>
    <change id="shortdescription" >
      <api name="sendoptsspi"/>
      <summary>Use short description for each Option</summary>
      <version major="1" minor="8"/>
      <date day="18" month="3" year="2006"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="no" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no"/>
      <description>
          Use <code>Option.shortDescription</code> to associate a one-liner
          text with an option. This description will be printed when showing
          usage for the command line.
      </description>
      <class package="org.netbeans.spi.sendopts" name="Option"/>
    </change>
    <change id="localizederrors" >
      <api name="sendoptsapi"/>
      <summary>Command exceptions can have localized messages</summary>
      <version major="1" minor="8"/>
      <date day="18" month="3" year="2006"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="no" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no"/>
      <description>
          There is a new factory method in <code>CommandException</code>
          that can influence the localized message which is then printed
          to the user as a description of the error.
      </description>
      <class package="org.netbeans.api.sendopts" name="CommandException"/>
    </change>
    <change id="printusage" >
      <api name="sendoptsapi"/>
      <summary>Using PrintStream</summary>
      <version major="1" minor="7"/>
      <date day="15" month="3" year="2006"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="no" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no"/>
      <description>
          There is new method <a href="@TOP@org/netbeans/api/sendopts/CommandLine.html#usage-java.io.PrintWriter-">usage</a>
          that
          allows to print description of all available options in the command
          line.
      </description>
      <class package="org.netbeans.api.sendopts" name="CommandLine"/>
    </change>
    <change id="printstream" >
      <api name="sendoptsspi"/>
      <summary>Using PrintStream</summary>
      <version major="1" minor="4"/>
      <date day="26" month="2" year="2006"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="no" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no"/>
      <description>
        <code>Env.getErrorStream()</code> and <code>Env.getOutputStream()</code>
        return <code>PrintStream</code>.
      </description>
      <class package="org.netbeans.spi.sendopts" name="Env"/>
    </change>
</changes>
<htmlcontents>
<head>
<title>Change History for the SendOpts API and SPI</title>
<link rel="stylesheet" href="prose.css" type="text/css"/>
</head>
<body>
<p class="overviewlink">
<a href="overview-summary.html">Overview</a>
</p>
<h1>Introduction</h1>
<h2>What do the Dates Mean?</h2>
<p>The supplied dates indicate when the API change was made, on the CVS
trunk. From this you can generally tell whether the change should be
present in a given build or not; for trunk builds, simply whether it
was made before or after the change; for builds on a stabilization
branch, whether the branch was made before or after the given date. In
some cases corresponding API changes have been made both in the trunk
and in an in-progress stabilization branch, if they were needed for a
bug fix; this ought to be marked in this list.</p>
<hr/>
<standard-changelists module-code-name="$codebase"/>
<hr/>
<p>@FOOTER@</p>
</body>
</htmlcontents>
</apichanges>
