<?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 api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [
  <!ENTITY api-questions SYSTEM "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml">
]>

<api-answers
  question-version="1.28"
  module="Command Line Parsing API"
  author="jtulach@netbeans.org"
>

  &api-questions;


<!--
        <question id="arch-overall" when="init">
            Describe the overall architecture.
            <hint>
            What will be API for 
            <a href="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi">
                clients and what support API</a>? 
            What parts will be pluggable?
            How will plug-ins be registered? Please use <code>&lt;api type="export"/&gt;</code>
            to describe your general APIs.
            If possible please provide 
            simple diagrams. 
            </hint>
        </question>
-->
 <answer id="arch-overall">
  <p>
   <api name="SendOptsAPI" category="official" group="java" type="export" url="@TOP@/org/netbeans/api/sendopts/package-summary.html"/>
   allows anyone to parse an array of strings - e.g. a command line.
   The infrastracture of the module then locates all providers
   registered using the
   <api name="SendOptsSPI" category="official" group="java" type="export" url="@TOP@/org/netbeans/spi/sendopts/package-summary.html"/>
   and distributes the parts of the command line to their handlers.
   It is expected that the handlers do not know about each
   other and are in fact provided by different modules. The goal of the sendopts
   framework
   is to get the description of the handlers, apply the gained knowledge to
   the actual content of the command line and distribute the parts of the
   command line arguments to the designated handlers. Beyond this optimal 
   state the error handling and help composition is also supported by this
   infrastructure.
  </p>
  
 </answer>



<!--
        <question id="arch-quality" when="init">
            How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
            of your code be tested and 
            how are future regressions going to be prevented?
            <hint>
            What kind of testing do
            you want to use? How much functionality, in which areas,
            should be covered by the tests? 
            </hint>
        </question>
-->
 <answer id="arch-quality">
  <p>
   There will be tests to verify consistency with UNIX standard <q>getopts</q> behaviour.
   Everytime one reports an error or finds difference between functionality
   of this API and functionality of <q>getopts</q> new tests will be created.
  </p>
 </answer>



<!--
        <question id="arch-time" when="init">
            What are the time estimates of the work?
            <hint>
            Please express your estimates of how long the design, implementation,
            stabilization are likely to last. How many people will be needed to
            implement this and what is the expected milestone by which the work should be 
            ready?
            </hint>
        </question>
-->
 <answer id="arch-time">
  <p>
   Delivered for NetBeans 5.0.
  </p>
 </answer>



<!--
        <question id="arch-usecases" when="init">
            <hint>
                Content of this answer will be displayed as part of page at
                http://www.netbeans.org/download/dev/javadoc/usecases.html 
                You can use tags &lt;usecase name="name&gt; regular html description &lt;/usecase&gt;
                and if you want to use an URL you can prefix if with @TOP@ to begin
                at the root of your javadoc
            </hint>
        
            Describe the main <a href="http://openide.netbeans.org/tutorial/api-design.html#usecase">
            use cases</a> of the new API. Who will use it under
            what circumstances? What kind of code would typically need to be written
            to use the module?
        </question>
-->
 <answer id="arch-usecases">
  <p>
   <usecase id="cli-just-parse" name="Just Parse the Command Line" >
       There needs to be a simple API for someone who has an array of strings 
       and wants to parse them. One does not need to search for providers,
       just ask the infrastructure to do the parse and get the result. 
       <p></p>
       The correct way to achieve this is to call 
        <code><a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html">CommandLine</a>.getDefault().process(args)</code>.
   </usecase>
   <usecase id="cli-own-parse" name="Parse the Command Line with Own Options" >
       Since version 2.20 one can define own classes with fields and annotate
       them with <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">@Arg</a>
       annotation. Those classes can then be passed into a 
       <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#create-java.lang.Class...-">
       factory method
       </a>
       that creates new <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#create-java.lang.Class...-">command line</a>.
       One can then process the arguments as many times as needed via the
        <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#process-java.lang.String...-">process</a>
        method. Example:
        <pre>
public final class MyOption implements <a href="@JDK@/java/lang/Runnable.html">Runnable</a> {
  <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">@Arg</a>(longName="hello")
  public String name;

  public void run() {
    System.out.println("Hello " + name + "!");
  }
  
  public static void main(String... args) {
    <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html">CommandLine</a> line = <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#create-java.lang.Class...-">CommandLine.create</a>(MyOption.class);
    line.<a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#process-java.lang.String...-">process</a>(args);
  }
}
</pre>
   <p>
       If the above main class is called with parameters <code>--hello World</code> it
       will print out <code>Hello World!</code>.
   </p>
   </usecase>
   <usecase id="cli-types-of-options" name="Short and Long options with or without an argument" >
       The standard <code>getopts</code> supports short form of options - e.g. a dash
       followed with one letter - or long form using two dashes followed with a word. 
       Moreover the long form is optimized for abbrevations. If there are no 
       conflicts between multiple options, then one can only use double dash followed
       with a prefix of a long option.
       <p></p>
       When using the <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">declarative annotation style</a>
       one can always specify 
       <code><a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">@Arg</a>(longName="text", shortName='t')</code>.
       The <code>longName</code> attribute is required, but if there is supposed to be
       no long version of the argument, it can be set to empty string.
       <p></p>
       One can create an <a href="@TOP@org/netbeans/spi/sendopts/Option.html">Option</a>
       by calling any of its factory methods 
       (like 
        <a href="@TOP@org/netbeans/spi/sendopts/Option.html#withoutArgument-char-java.lang.String-">withoutArgument</a>)
        and provider <code>char</code> for the one letter option and/or string for
        the long getopts option.
   </usecase>
   <usecase id="cli-types-args" name="Options with or without an argument" >
       There are three types of options. Those without an argument, those with
       a required one and those with optional one. Each one can be created
       by appropriate factory method in the 
       <a href="@TOP@org/netbeans/spi/sendopts/Option.html">Option</a> class.
       <p></p>
       When using the <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">declarative annotation style</a>
       one needs to annotate a field of type <code>boolean</code> to create
       an option without an argument.
   </usecase>
   <usecase id="cli-double-dash" name="Support for --" >
       The getopts compliant command line parsers support <q>--</q>. If 
       these characters do appear on the command line, the rest of it is
       treated as extra arguments and not processed. The sendopts infrastructure
       supports this as well.
   </usecase>
   <usecase id="cli-multiple-handlers" name="Multiple Independent CLI Handlers" >
       The handlers for the options need not know about each other and still 
       have to be able to process the command line successfully. Any module
       which wishes to provide its own options can register its 
       <a href="@TOP@org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>
       with <a href="@org-openide-util-lookup@/org/openide/util/lookup/ServiceProvider.html">@ServiceProvider</a>
       annotation. Alternatively the module can use the
       <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">@Arg</a> annotation
       of its fields and it will be registered as well.
   </usecase>
   <usecase id="cli-extensible-options-set" name="Extensible Options Set" >
       <p>
        <b>Q:</b> How shall one write an 
        <a href="@TOP@org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>
        that recognizes set of basic options, however contains one open <q>slot</q>?
        The processor wants other modules to provide recognizers for that slot 
        and wants to communicate with them. For example, by default the processor
        recognizes option <code>--channel &lt;name_of_the_channel&gt;</code>
        which describes a source of data, and stores such data into a <q>sink</q>.
        There can be multiple sinks - discard the output, save it to file, show
        it on stdout, stream it to network. The processor itself can handle the
        copying of data, but does not itself know all the possible <q>sink</q>
        types.
       </p>
       
       <p>
           To implement 
           <a href="@TOP@org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>
           like this one shall define an additional interface to communicate with
           the <q>sink</q> providers:
       </p>
       
       <pre>
   package my.module;
   public interface SinkProvider {
     /** gets the option (even composite) that this sink needs on command line */
     public Option getOption();

     /** processes the options and creates a "sink" */
     public OutputStream createSink(Env env, Map&lt;Option,String[]&gt; values) throws CommandException;
   }
       </pre>
       <p>
           Other modules would then registered implementations of this 
           interface in the 
           <code>META-INF/services/my.module.SinkProvider</code> files.
           The 
           <a href="@TOP@org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>
           itself would just look all the implementations up, queried for 
           the <q>sinks</q>, and then did the copying:
       </p>
       
       <pre>
   class CopyingProvider extends OptionProvider {
     public Option getOption() {
        List&lt;Option&gt; l = ...;
        for (SinkProvider sp : Lookup.getDefault().lookupAll(SinkProvider.class)) {
          l.add(sp.getOption());
        }

        // we need only one provider to be present
        Option oneOfSinks = OptionGroups.oneOf(l.toArray(new Option[0]));

        // our channel option
        Option channel = ...;

        // the channel option needs to be present as well as a sink
        return OptionGroups.allOf(channel, oneOfSinks);
     }

     public void process(Env env, Map&lt;Option,String[]&gt; values) throws CommandException {
        OutputStream os = null;
        for (SinkProvider sp : Lookup.getDefault().lookupAll(SinkProvider.class)) {
          if (values.containsKey(sp.getOption())) {
            os = sp.createSink(env, values);
            break;
          }
        }
        if (os == null) {
          throw CommandException.exitCode(2);
        }

        // process the channel option and
        // handle the copying to the sink <code>os</code>
     }
   }
       </pre>
       <p>
           Another possible approach how to allow sharing of one option between
           multiple modules is to expose the option definition and its handling
           code as an interface to other modules, and then let the modules
           to write their own 
           <a href="@TOP@org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>s.
           Necessary condition is that each of the processor is uniquely 
           identified by some additional option, so when the shared option appears
           the infrastructure knows which processor to delegate to. 
           This is demonstrated in the 
           <a href="http://www.netbeans.org/source/browse/contrib/sendopts/test/unit/src/org/netbeans/api/sendopts/Attic/SharedOptionTest.java?rev=1.1.2">
           SharedOptionTest</a> which
           basically does the following:
       </p>       
       <pre>
   /** the shared option, part of an interface of some module */
   public static final Option SHARED = ...;
   /** finds value(s) associated with the SHARED option and 
   * creates a JPanel based on them */
   public static JPanel getSharedPanel(Map&lt;Option,String[]&gt; args) { ... }
       </pre>
       <p>
           Then each module who wishes to reuse the SHARED option and the
           factory method that knows how to process their values for their
           own processing can just:
       </p>
       <pre>
  public static final class ShowDialog extends OptionProcessor {
    private static final Option DIALOG = Option.withoutArgument('d', "dialog");

    protected Set&lt;Option&gt; getOptions() {
        // the following says that this processor should be invoked
        // everytime --dialog appears on command line, if the SHARED
        // option is there, then this processor wants to consume it 
        // as well...
        return Collections.singleton(Option.allOf(DIALOG, Option.anyOf(SHARED)));
    }

    protected void process(Env env, Map&lt;Option, String[]&gt; optionValues) throws CommandException {
        JPanel p = getSharedPanel(optionvalues);
        if (p == null) {
           // show empty dialog
        } else {
           // show some dialog containing the panel p
        }
    }
  }
       </pre>
       <p>
           The other modules are then free to write other processors refering to
           <code>SHARED</code>, for example one can write <code>ShowFrame</code>
           that does the same, just shows the panel in a frame, etc. The infrastructure
           guarantees that the exactly one provider which matches the command 
           line options is called.
       </p>
   </usecase>
   <usecase id="cli-help" name="Printing Full Help Text" >
       Althrough the handlers are provided by independent parties, it must be possible
       to generate resonable and consistent help description from all of them,
       so for the end user it appears as well formated and easily understandable.
       That is why
       every option can be associated with a short description providing info
       about what it is useful for using
       <a href="@TOP@/org/netbeans/spi/sendopts/Option.html#shortDescription-org.netbeans.spi.sendopts.Option-java.lang.String-java.lang.String-">
           Option.shortDescription
       </a> method. When using the 
       <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">@Arg</a> style, there
       is an additional <a href="@TOP@/org/netbeans/spi/sendopts/Description.html">@Description</a>
       annotation which can be used to declaratively associate a localized display name
       and short description with the option.
       To get such descriptions for all available options one 
       can use 
       <a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html#usage-java.io.PrintWriter-">
        CommandLine.getDefault().usage(java.io.PrintWriter)</a>.
   </usecase>
   <usecase id="cli-errorrecovery" name="Finding and Reporting when Options Are Not Correct" >
       In case the command line cannot be processed a clean error for programmatic
       consumation and also one that can be shown to the end user of the command
       line must be given. This is handled by throwing 
       <a href="@TOP@org/netbeans/api/sendopts/CommandException.html">CommandException</a>
       with appropriate message description and exit code.
   </usecase>
   <usecase id="cli-extraarguments" name="Processing Extra Command Line Arguments" >
       There can be non-option arguments in the command line and they can freely
       mix with the option ones. For example the getopts would treat the following
       command line arguments as the same:<pre>
       --open X.java Y.java Z.txt
       X.java Y.java --open Z.txt
       </pre> if the option <q>open</q> handles <q>extra arguments</q>.
       The sendopts infrastructure must distinquish between them
       and pass the non-option ones to the only one handler (active because it 
       processed an option) that knowns how to
       parse them. It is an error if more than one or no handler expresses 
       an interest in extra arguments and those are given. One can register
       such option by using the <code>
       <a href="@TOP@org/netbeans/spi/sendopts/Option.html#additionalArguments-char-java.lang.String-">
           Option.additionalArgument
       </a>
       </code> factory method.
       <p></p>
       When using the 
       <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">declarative annotation style</a>
       one may annotate a field of type <code>String[]</code> which then means
       this field should be filled with all additional arguments.
   </usecase>
   <usecase id="cli-io" name="Handling Input and Output" >
       Handler's shall not use the input and output streams directly for their execution, they should 
       rely on the framework provided ones. This allows NetBeans based application to
       transfer the I/O from second started instance to the master one which 
       is already running. From the client side there is the
       <code><a href="@TOP@/org/netbeans/api/sendopts/CommandLine.html">CommandLine</a>.getDefault().parse</code>
       methods taking additional arguments like input and output streams.
       This gets transfered to providers as an 
       <a href="@TOP@/org/netbeans/spi/sendopts/Env.html">Env</a>
       argument of their methods.
   </usecase>
   <usecase id="cli-exitcode" name="Returning Exit Code" >
       When Handler's get execute (in the order defined by the order of options
       on the command line), each of them can either execute successfully, or
       fail. If a handler succeeds, next one is executed, if it fails, the 
       execution is terminated and its return code is returned to the caller.
       The error can be notified by creating and throwing 
       <a href="@TOP@org/netbeans/api/sendopts/CommandException.html">CommandException.exitCode(int errorCode)</a>.
   </usecase>
   <usecase id="cli-onlyextraarguments" name="Processing Only Extra Command Line Arguments" >
       Sometimes it is desirable to process non-option arguments like file names
       without providing any option. Handlers can declare interest in such arguments.
       It is an error if such non-options are provided and no or more than one
       handler is around to handle them. One can create such option by 
       using <code>
       <a href="@TOP@org/netbeans/spi/sendopts/Option.html#defaultArguments--">Option.defaultArguments</a>
       </code> factory method. With the
       <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">declarative annotation style</a>
       one can annotate a field of type <code>String[]</code> and specify that
       it is supposed to be <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html#implicit--">implicit</a>.
   </usecase>
   <usecase id="cli-lazy-handler-initiliazation" name="Only those processor need to process the options are created" >
       For purposes of usage in NetBeans, it is needed to not-initialize those
       handlers that are not really needed to process certain command line. 
       The infrastructure decides which of them are going to be needed and 
       instantiates only those. This is supported only when using the
       <a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">declarative annotation style</a> -
       information about these options is recorded in declarative way and the
       system can decide without loading the provider classes whether they are
       present on the command line or not.
   </usecase>
   <usecase id="cli-complex-options" name="Complex Option Relations" >
       Certain CLI processors may need more than one option before they 
       can process the input. For example it is necesary to tune the radio
       and then also tell what to do with the output. It is unconvenient 
       to process that as one option with argument(s), that is why one can 
       use the 
<a href="@TOP@org/netbeans/spi/sendopts/OptionGroups.html#allOf-org.netbeans.spi.sendopts.Option...-">
OptionGroups.allOf</a>,
<a href="@TOP@org/netbeans/spi/sendopts/OptionGroups.html#someOf-org.netbeans.spi.sendopts.Option...-">
OptionGroups.someOf</a>, for example like: <pre>
class PP extends OptionProcessor {
    private static Option tune = Option.requiredArgument(Option.NO_SHORT_NAME, "tune");
    private static Option stream = Option.requiredArgument(Option.NO_SHORT_NAME, "stream");
    
    public Set&lt;Option&gt; getOptions() {
      return Collections.singleton(
        <a href="@TOP@org/netbeans/spi/sendopts/OptionGroups.html#allOf-org.netbeans.spi.sendopts.Option...-">OptionGroups.allOf</a>(tune, stream)
      );
    }
    
    public void process(Env env, Map&gt;Option,String[]&gt; values) throws CommandException {
        String freq = values.get(tune)[0];
        String output = values.get(stream)[0];

        // XXX handle what is needed here
    }
}
</pre>
When the two options are registered and command line like 
<q>--tune 91.9 --stream radio1.mp3</q> is being processed, the 
<code>PP</code>'s <code>process</code> method is going to get 
called with values <q>91.9</q> and <q>radio1.mp3</q>.
<p></p>
This kind of grouping is not currently supported with the 
<a href="@TOP@/org/netbeans/spi/sendopts/Arg.html">declarative annotation style</a>
registration.
   </usecase>
   
   
   <usecase id="cli-alternative-options" name="Alternative Options" >
       Sometimes there may different ways to specify the same option and
       just one of them or none of them can be provided at given time. 
       For example is there is a way to tune the radio with direct frequency
       or with name of the station. Just one can be provided and one is needed.
       This can be specified by using 
<a href="@TOP@org/netbeans/spi/sendopts/OptionGroups.html#oneOf-org.netbeans.spi.sendopts.Option...-">
OptionGroups.oneOf</a> factory methods:
<pre>
Option freq = Option.requiredArgument(Option.NO_SHORT_NAME, "tune");
Option station = Option.requiredArgument(Option.NO_SHORT_NAME, "station");
Option tune = OptionGroups.oneOf(freq, station);    
</pre>
The option <code>tune</code> then signals that just one of the station or
freq options can appear and that they both are replaceable.
   </usecase>
  </p>
 </answer>



<!--
        <question id="arch-what" when="init">
            What is this project good for?
            <hint>
            Please provide here a few lines describing the project, 
            what problem it should solve, provide links to documentation, 
            specifications, etc.
            </hint>
        </question>
-->
 <answer id="arch-what">
  <p>
   GetOpts like infrastructure to parse command line arguments with the cooperative
   participation of various modules.
  </p>
 </answer>



<!--
        <question id="arch-where" when="init">
            Where one can find sources for your module?
            <hint>
                Please provide link to the CVS web client at
                http://www.netbeans.org/download/source_browse.html
                or just use tag defaultanswer generate='here'
            </hint>
        </question>
-->
 <answer id="arch-where">
  <defaultanswer generate='here' />
 </answer>



<!--
        <question id="compat-i18n" when="impl">
            Is your module correctly internationalized?
            <hint>
            Correct internationalization means that it obeys instructions 
            at <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/i18n-branding.html">
            NetBeans I18N pages</a>.
            </hint>
        </question>
-->
 <answer id="compat-i18n">
  <p>
   XXX no answer for compat-i18n
  </p>
 </answer>

<answer id="compat-deprecation">
  <p>
   This module replaces and stabilizes the previous <code>CLIHandler</code>
   offered by <code>core/bootstrap</code> module. Modules are now adviced
   to depend just on the API exported by this module. 
  </p>
 </answer>


<!--
        <question id="compat-standards" when="init">
            Does the module implement or define any standards? Is the 
            implementation exact or does it deviate somehow?
        </question>
-->
 <answer id="compat-standards">
  <p>
   XXX no answer for compat-standards
  </p>
 </answer>



<!--
        <question id="compat-version" when="impl">
            Can your module coexist with earlier and future
            versions of itself? Can you correctly read all old settings? Will future
            versions be able to read your current settings? Can you read
            or politely ignore settings stored by a future version?
            
            <hint>
            Very helpful for reading settings is to store version number
            there, so future versions can decide whether how to read/convert
            the settings and older versions can ignore the new ones.
            </hint>
        </question>
-->
 <answer id="compat-version">
  <p>
   XXX no answer for compat-version
  </p>
 </answer>



<!--
        <question id="dep-jre" when="final">
            Which version of JRE do you need (1.2, 1.3, 1.4, etc.)?
            <hint>
            It is expected that if your module runs on 1.x that it will run 
            on 1.x+1 if no, state that please. Also describe here cases where
            you run different code on different versions of JRE and why.
            </hint>
        </question>
-->
 <answer id="dep-jre">
  <p>
   XXX no answer for dep-jre
  </p>
 </answer>



<!--
        <question id="dep-jrejdk" when="final">
            Do you require the JDK or is the JRE enough?
        </question>
-->
 <answer id="dep-jrejdk">
  <p>
   XXX no answer for dep-jrejdk
  </p>
 </answer>



<!--
        <question id="dep-nb" when="init">
            What other NetBeans projects and modules does this one depend on?
            <hint>
            If you want, describe such projects as imported APIs using
            the <code>&lt;api name="identification" type="import or export" category="stable" url="where is the description" /&gt;</code>
            </hint>
        </question>
-->
 <answer id="dep-nb">
  <defaultanswer generate='none' />
<ul>
<li><api type='import' group='java' category='private' name='org.openide.util' url='../org-openide-util/overview-summary.html' >
    The sendopts module uses <a href="@org-openide-util-lookup@/org/openide/util/Lookup.html">Lookup</a>
    to get list of all registered <a href="@TOP@org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>s.
    This dependency is critical. If you want to use this API outside of NetBeans, 
    also include the <code>org-openide-util.jar</code> module.
</api>
</li>            
<li><api type='import' group='java' category='private' name='org.netbeans.bootstrap' >
    The sendopts module implements and registers the <code>CLIHandler</code> so it can
    be called back by the <code>core/bootstrap</code> whenever some one needs
    to parse the command line. This dependency is conditional, if the 
    <code>core/bootstrap</code> module is not present, the whole library
    can still be used.
</api>
</li>            
  </ul>  
 </answer>



<!--
        <question id="dep-non-nb" when="init">
            What other projects outside NetBeans does this one depend on?
            
            <hint>
            Some non-NetBeans projects are packaged as NetBeans modules
            (see <a href="http://libs.netbeans.org/">libraries</a>) and
            it is preferred to use this approach when more modules may
            depend on such third-party library.
            </hint>
        </question>
-->
 <answer id="dep-non-nb">
  <p>
   XXX no answer for dep-non-nb
  </p>
 </answer>



<!--
        <question id="dep-platform" when="init">
            On which platforms does your module run? Does it run in the same
            way on each?
            <hint>
            If your module is using JNI or deals with special differences of
            OSes like filesystems, etc. please describe here what they are.
            </hint>
        </question>
-->
 <answer id="dep-platform">
  <p>
   XXX no answer for dep-platform
  </p>
 </answer>



 <answer id="deploy-dependencies">
  <p>
   Nothing.
  </p>
 </answer>



<!--
        <question id="deploy-jar" when="impl">
            Do you deploy just module JAR file(s) or other files as well?
            <hint>
            Usually a module consist of one JAR file (perhaps with Class-Path
            extensions) and also a configuration file that enables it. If you
            have any other files, use
            &lt;api group="java.io.File" name="yourname" type="export" category="friend"&gt;...&lt;/api&gt;
            to define the location, name and stability of your files (of course
            changing "yourname" and "friend" to suit your needs).
            
            If it uses more than one JAR, describe where they are located, how
            they refer to each other. 
            If it consist of module JAR(s) and other files, please describe
            what is their purpose, why other files are necessary. Please 
            make sure that installation/uninstallation leaves the system 
            in state as it was before installation.
            </hint>
        </question>
-->
 <answer id="deploy-jar">
  <p>
   XXX no answer for deploy-jar
  </p>
 </answer>



<!--
        <question id="deploy-nbm" when="impl">
            Can you deploy an NBM via the Update Center?
            <hint>
            If not why?
            </hint>
        </question>
-->
 <answer id="deploy-nbm">
  <p>
   XXX no answer for deploy-nbm
  </p>
 </answer>



<!--
        <question id="deploy-packages" when="init">
            Are packages of your module made inaccessible by not declaring them
            public?
            
            <hint>
            NetBeans module system allows restriction of access rights to
            public classes of your module from other modules. This prevents
            unwanted dependencies of others on your code and should be used
            whenever possible (<a href="http://www.netbeans.org/download/javadoc/OpenAPIs/org/openide/doc-files/upgrade.html#3.4-public-packages">
            public packages
            </a>). If you do not restrict access to your classes you are
            making it too easy for other people to misuse your implementation
            details, that is why you should have good reason for not 
            restricting package access.
            </hint>
        </question>
-->
 <answer id="deploy-packages">
  <p>
   XXX no answer for deploy-packages
  </p>
 </answer>



<!--
        <question id="deploy-shared" when="final">
            Do you need to be installed in the shared location only, or in the user directory only,
            or can your module be installed anywhere?
            <hint>
            Installation location shall not matter, if it does explain why.
            Consider also whether <code>InstalledFileLocator</code> can help.
            </hint>
        </question>
-->
 <answer id="deploy-shared">
  <p>
   XXX no answer for deploy-shared
  </p>
 </answer>



<!--
        <question id="exec-ant-tasks" when="impl">
            Do you define or register any ant tasks that other can use?
            
            <hint>
            If you provide an ant task that users can use, you need to be very
            careful about its syntax and behaviour, as it most likely forms an
	          API for end users and as there is a lot of end users, their reaction
            when such API gets broken can be pretty strong.
            </hint>
        </question>
-->
 <answer id="exec-ant-tasks">
  <p>
   XXX no answer for exec-ant-tasks
  </p>
 </answer>



<!--
        <question id="exec-classloader" when="impl">
            Does your code create its own class loader(s)?
            <hint>
            A bit unusual. Please explain why and what for.
            </hint>
        </question>
-->
 <answer id="exec-classloader">
  <p>
   XXX no answer for exec-classloader
  </p>
 </answer>



<!--
        <question id="exec-component" when="impl">
            Is execution of your code influenced by any (string) property
            of any of your components?
            
            <hint>
            Often <code>JComponent.getClientProperty</code>, <code>Action.getValue</code>
            or <code>PropertyDescriptor.getValue</code>, etc. are used to influence
            a behavior of some code. This of course forms an interface that should
            be documented. Also if one depends on some interface that an object
            implements (<code>component instanceof Runnable</code>) that forms an
            API as well.
            </hint>
        </question>
-->
 <answer id="exec-component">
  <p>
   XXX no answer for exec-component
  </p>
 </answer>



<!--
        <question id="exec-introspection" when="impl">
            Does your module use any kind of runtime type information (<code>instanceof</code>,
            work with <code>java.lang.Class</code>, etc.)?
            <hint>
            Check for cases when you have an object of type A and you also
            expect it to (possibly) be of type B and do some special action. That
            should be documented. The same applies on operations in meta-level
            (Class.isInstance(...), Class.isAssignableFrom(...), etc.).
            </hint>
        </question>
-->
 <answer id="exec-introspection">
  <p>
   XXX no answer for exec-introspection
  </p>
 </answer>



<!--
        <question id="exec-privateaccess" when="final">
            Are you aware of any other parts of the system calling some of 
            your methods by reflection?
            <hint>
            If so, describe the "contract" as an API. Likely private or friend one, but
            still API and consider rewrite of it.
            </hint>
        </question>
-->
 <answer id="exec-privateaccess">
  <p>
   XXX no answer for exec-privateaccess
  </p>
 </answer>



<!--
        <question id="exec-process" when="impl">
            Do you execute an external process from your module? How do you ensure
            that the result is the same on different platforms? Do you parse output?
            Do you depend on result code?
            <hint>
            If you feed an input, parse the output please declare that as an API.
            </hint>
        </question>
-->
 <answer id="exec-process">
  <p>
   XXX no answer for exec-process
  </p>
 </answer>



<!--
        <question id="exec-property" when="impl">
            Is execution of your code influenced by any environment or
            Java system (<code>System.getProperty</code>) property?
            
            <hint>
            If there is a property that can change the behavior of your 
            code, somebody will likely use it. You should describe what it does 
            and the <a href="http://openide.netbeans.org/tutorial/api-design.html#life">stability category</a>
            of this API. You may use
            <pre>
                &lt;api type="export" group="property" name="id" category="private" url="http://..."&gt;
                    description of the property, where it is used, what it influence, etc.
                &lt;/api&gt;            
            </pre>
            </hint>
        </question>
-->
 <answer id="exec-property">
  <p>
   XXX no answer for exec-property
  </p>
 </answer>



<!--
        <question id="exec-reflection" when="impl">
            Does your code use Java Reflection to execute other code?
            <hint>
            This usually indicates a missing or insufficient API in the other
            part of the system. If the other side is not aware of your dependency
            this contract can be easily broken.
            </hint>
        </question>
-->
 <answer id="exec-reflection">
  <p>
   XXX no answer for exec-reflection
  </p>
 </answer>



<!--
        <question id="exec-threading" when="impl">
            What threading models, if any, does your module adhere to?
            <hint>
                If your module calls foreign APIs which have a specific threading model,
                indicate how you comply with the requirements for multithreaded access
                (synchronization, mutexes, etc.) applicable to those APIs.
                If your module defines any APIs, or has complex internal structures
                that might be used from multiple threads, declare how you protect
                data against concurrent access, race conditions, deadlocks, etc.,
                and whether such rules are enforced by runtime warnings, errors, assertions, etc.
                Examples: a class might be non-thread-safe (like Java Collections); might
                be fully thread-safe (internal locking); might require access through a mutex
                (and may or may not automatically acquire that mutex on behalf of a client method);
                might be able to run only in the event queue; etc.
                Also describe when any events are fired: synchronously, asynchronously, etc.
                Ideas: <a href="http://core.netbeans.org/proposals/threading/index.html#recommendations">Threading Recommendations</a> (in progress)
            </hint>
        </question>
-->
 <answer id="exec-threading">
  <p>
   XXX no answer for exec-threading
  </p>
 </answer>



<!--
        <question id="format-clipboard" when="impl">
            Which data flavors (if any) does your code read from or insert to
            the clipboard (by access to clipboard on means calling methods on <code>java.awt.datatransfer.Transferable</code>?
            
            <hint>
            Often Node's deal with clipboard by usage of <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
            Check your code for overriding these methods.
            </hint>
        </question>
-->
 <answer id="format-clipboard">
  <p>
   XXX no answer for format-clipboard
  </p>
 </answer>



<!--
        <question id="format-dnd" when="impl">
            Which protocols (if any) does your code understand during Drag &amp; Drop?
            <hint>
            Often Node's deal with clipboard by usage of <code>Node.drag, Node.getDropType</code>. 
            Check your code for overriding these methods. Btw. if they are not overridden, they
            by default delegate to <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
            </hint>
        </question>
-->
 <answer id="format-dnd">
  <p>
   XXX no answer for format-dnd
  </p>
 </answer>



<!--
        <question id="format-types" when="impl">
            Which protocols and file formats (if any) does your module read or write on disk,
            or transmit or receive over the network? Do you generate an ant build script?
            Can it be edited and modified? 
            
            <hint>
            <p>
            Files can be read and written by other programs, modules and users. If they influence
            your behaviour, make sure you either document the format or claim that it is a private
            api (using the &lt;api&gt; tag). 
            </p>
            
            <p>
            If you generate an ant build file, this is very likely going to be seen by end users and
            they will be attempted to edit it. You should be ready for that and provide here a link
            to documentation that you have for such purposes and also describe how you are going to
            understand such files during next release, when you (very likely) slightly change the 
            format.
            </p>
            </hint>
        </question>
-->
 <answer id="format-types">
  <p>
   XXX no answer for format-types
  </p>
 </answer>



<!--
        <question id="lookup-lookup" when="init">
            Does your module use <code>org.openide.util.Lookup</code>
            or any similar technology to find any components to communicate with? Which ones?
            
            <hint>
            Please describe the interfaces you are searching for, where 
            are defined, whether you are searching for just one or more of them,
            if the order is important, etc. Also classify the stability of such
            API contract. For that use &lt;api group=&amp;lookup&amp; /&gt; tag.
            </hint>
        </question>
-->
 <answer id="lookup-lookup">
  <p>
<api type='export' group='lookup' category='stable' name='OptionProcessor' url='@TOP@org/netbeans/spi/sendopts/OptionProcessor.html' >
    The sendopts module uses <a href="@org-openide-util-lookup@/org/openide/util/Lookup.html">Lookup</a>
    to get list of all registered <a href="@TOP@org/netbeans/spi/sendopts/OptionProcessor.html">OptionProcessor</a>s.
</api>
  </p>
 </answer>



<!--
        <question id="lookup-register" when="final">
            Do you register anything into lookup for other code to find?
            <hint>
            Do you register using layer file or using <code>META-INF/services</code>?
            Who is supposed to find your component?
            </hint>
        </question>
-->
 <answer id="lookup-register">
  <p>
   XXX no answer for lookup-register
  </p>
 </answer>



<!--
        <question id="lookup-remove" when="final">
            Do you remove entries of other modules from lookup?
            <hint>
            Why? Of course, that is possible, but it can be dangerous. Is the module
            your are masking resource from aware of what you are doing?
            </hint>
        </question>
-->
 <answer id="lookup-remove">
  <p>
   XXX no answer for lookup-remove
  </p>
 </answer>



<!--
        <question id="perf-exit" when="final">
            Does your module run any code on exit?
        </question>
-->
 <answer id="perf-exit">
  <p>
   XXX no answer for perf-exit
  </p>
 </answer>



<!--
        <question id="perf-huge_dialogs" when="final">
            Does your module contain any dialogs or wizards with a large number of
            GUI controls such as combo boxes, lists, trees, or text areas?
        </question>
-->
 <answer id="perf-huge_dialogs">
  <p>
   XXX no answer for perf-huge_dialogs
  </p>
 </answer>



<!--
        <question id="perf-limit" when="init">
            Are there any hard-coded or practical limits in the number or size of
            elements your code can handle?
        </question>
-->
 <answer id="perf-limit">
  <p>
   XXX no answer for perf-limit
  </p>
 </answer>



<!--
        <question id="perf-mem" when="final">
            How much memory does your component consume? Estimate
            with a relation to the number of windows, etc.
        </question>
-->
 <answer id="perf-mem">
  <p>
   XXX no answer for perf-mem
  </p>
 </answer>



<!--
        <question id="perf-menus" when="final">
            Does your module use dynamically updated context menus, or
            context-sensitive actions with complicated and slow enablement logic?
            <hint>
                If you do a lot of tricks when adding actions to regular or context menus, you can significantly
                slow down display of the menu, even when the user is not using your action. Pay attention to
                actions you add to the main menu bar, and to context menus of foreign nodes or components. If
                the action is conditionally enabled, or changes its display dynamically, you need to check the
                impact on performance. In some cases it may be more appropriate to make a simple action that is
                always enabled but does more detailed checks in a dialog if it is actually run.
            </hint>
        </question>
-->
 <answer id="perf-menus">
  <p>
   XXX no answer for perf-menus
  </p>
 </answer>



<!--
        <question id="perf-progress" when="final">
            Does your module execute any long-running tasks?
            
            <hint>Long running tasks should never block 
            AWT thread as it badly hurts the UI
            <a href="http://performance.netbeans.org/responsiveness/issues.html">
            responsiveness</a>.
            Tasks like connecting over
            network, computing huge amount of data, compilation
            be done asynchronously (for example
            using <code>RequestProcessor</code>), definitively it should 
            not block AWT thread.
            </hint>
        </question>
-->
 <answer id="perf-progress">
  <p>
   XXX no answer for perf-progress
  </p>
 </answer>



<!--
        <question id="perf-scale" when="init">
            Which external criteria influence the performance of your
            program (size of file in editor, number of files in menu, 
            in source directory, etc.) and how well your code scales?
            <hint>
            Please include some estimates, there are other more detailed 
            questions to answer in later phases of implementation. 
            </hint>
        </question>
-->
 <answer id="perf-scale">
  <p>
   XXX no answer for perf-scale
  </p>
 </answer>



<!--
        <question id="perf-spi" when="init">
            How the performance of the plugged in code will be enforced?
            <hint>
            If you allow foreign code to be plugged into your own module, how
            do you enforce that it will behave correctly and quickly and will not
            negatively influence the performance of your own module?
            </hint>
        </question>
-->
 <answer id="perf-spi">
  <p>
   XXX no answer for perf-spi
  </p>
 </answer>



<!--
        <question id="perf-startup" when="final">
            Does your module run any code on startup?
        </question>
-->
 <answer id="perf-startup">
  <p>
   XXX no answer for perf-startup
  </p>
 </answer>



<!--
        <question id="perf-wakeup" when="final">
            Does any piece of your code wake up periodically and do something
            even when the system is otherwise idle (no user interaction)?
        </question>
-->
 <answer id="perf-wakeup">
  <p>
   XXX no answer for perf-wakeup
  </p>
 </answer>



<!--
        <question id="resources-file" when="final">
            Does your module use <code>java.io.File</code> directly?
            
            <hint>
            NetBeans provide a logical wrapper over plain files called 
            <code>org.openide.filesystems.FileObject</code> that
            provides uniform access to such resources and is the preferred
            way that should be used. But of course there can be situations when
            this is not suitable.
            </hint>
        </question>
-->
 <answer id="resources-file">
  <p>
   XXX no answer for resources-file
  </p>
 </answer>



<!--
        <question id="resources-layer" when="final">
            Does your module provide own layer? Does it create any files or
            folders in it? What it is trying to communicate by that and with which 
            components?
            
            <hint>
            NetBeans allows automatic and declarative installation of resources 
            by module layers. Module register files into appropriate places
            and other components use that information to perform their task
            (build menu, toolbar, window layout, list of templates, set of
            options, etc.). 
            </hint>
        </question>
-->
 <answer id="resources-layer">
  <p>
   XXX no answer for resources-layer
  </p>
 </answer>



<!--
        <question id="resources-mask" when="final">
            Does your module mask/hide/override any resources provided by other modules in
            their layers?
            
            <hint>
            If you mask a file provided by another module, you probably depend
            on that and do not want the other module to (for example) change
            the file's name. That module shall thus make that file available as an API
            of some stability category.
            </hint>
        </question>
-->
 <answer id="resources-mask">
  <p>
   XXX no answer for resources-mask
  </p>
 </answer>



<!--
        <question id="resources-read" when="final">
            Does your module read any resources from layers? For what purpose?
            
            <hint>
            As this is some kind of intermodule dependency, it is a kind of API.
            Please describe it and classify according to 
            <a href="http://openide.netbeans.org/tutorial/api-design.html#categories">
            common stability categories</a>.
            </hint>
        </question>
-->
 <answer id="resources-read">
  <p>
   XXX no answer for resources-read
  </p>
 </answer>



<!--
        <question id="security-grant" when="final">
            Does your code grant additional rights to some other code?
            <hint>Avoid using a class loader that adds extra
            permissions to loaded code unless really necessary.
            Also note that your API implementation
            can also expose unneeded permissions to enemy code by
            calling AccessController.doPrivileged().</hint>
        </question>
-->
 <answer id="security-grant">
  <p>
   XXX no answer for security-grant
  </p>
 </answer>



<!--
        <question id="security-policy" when="final">
            Does your functionality require modifications to the standard policy file?
            <hint>Your code might pass control to third-party code not
            coming from trusted domains. This could be code downloaded over the
            network or code coming from libraries that are not bundled
            with NetBeans. Which permissions need to be granted to which domains?</hint>
        </question>
-->
 <answer id="security-policy">
  <p>
   XXX no answer for security-policy
  </p>
 </answer>

</api-answers>
