<?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.24"
  author="tboudreau@netbeans.org"
>

  &api-questions;


<!--
        <question id="arch-what">
            What is this project good for?
            <hint>
            Please provide here few lines describing the the project,
            what problem it should solve, provide links to documentation, 
            specifications, etc.
            </hint>
        </question>
-->
    <answer id="arch-what">
	The tab control is a swing control used by NetBeans window system, similar in function to a JTabbedPane, which
        allows the user to see and select tabs that contain different components.  It defines two GUI components:
        TabbedContainer (similar to JTabbedPane) and TabDisplayer, a generic component for displaying tabs which 
        is not associated with any particular container.  Several different types of UIs (view, editor, sliding)
        are provided, each of which is handled by a different UI delegate class; UI delegate subclasses designed
        to fit with Windows, Metal, Aqua and GTK look and feels are provided.

        <api name="TabbedContainerAPI" type="export" category="friend" url="@TOP@/org/netbeans/swing/tabcontrol/TabbedContainer.html" group="java"/><br/>
        <api name="PopupSwitcherAPI" type="export" category="friend" url="@TOP@/org/netbeans/swing/popupswitcher/package-summary.html" group="java">
          API contains classes used only by <em>switchers</em> accessible through main menu in "Window/Documents..."
          and "Go To/Recent Document". Besides this module the package is used from core/windows too.
          Classes contained in the package are rather
          general and therefore this package could be moved in the future. It is placed here only due to current
          modules dependencies. Consequently the package is not intended for external use.<br/> For more
          information on <code>SwitcherTable</code> and <code>SwitcherTableItem</code> see a javadoc.
        </api>
    </answer>



<!--
        <question id="compat-i18n">
            Is your module correctly internationalized?
            <hint>
            Correct internationalization means that it obeys instuctions 
            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">
         Non-applicable - code that uses the tabbed container may provide localized strings for it to display.  It has none of its own.
    </answer>



<!--
        <question id="compat-standards">
            Does the module implement or define any standards? Is the 
            implementation exact or does it deviate somehow?
        </question>
-->
    <answer id="compat-standards">
	No.
    </answer>



<!--
        <question id="compat-version">
            Can your module coexist with earlier and future
            versions? 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">
        N/A; no persisted settings.
    </answer>



<!--
        <question id="dep-jre">
            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">
        1.4.
    </answer>



<!--
        <question id="dep-jrejdk">
            Do you require the JDK or is the JRE enough?
        </question>
-->
    <answer id="dep-jrejdk">
        JRE.
    </answer>



<!--
        <question id="dep-nb">
            What other NetBeans projects does this one depend on?
            <hint>
            If you want, describe such projects as imported API using
            the <code>&lt;api name=&quot;identification&quot; type=&quot;import or export&quot; category=&quot;stable&quot; url=&quot;where is the description&quot; /></code>
            </hint>
        </question>
-->
    <answer id="dep-nb">
        None, it is a standalone library that could be used in other
        applications.
    </answer>



<!--
        <question id="dep-non-nb">
            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 prefered to use this approach when more modules may
            depend on such third-party library.
            </hint>
        </question>
-->
    <answer id="dep-non-nb">
        None.
    </answer>



<!--
        <question id="dep-platform">
            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">
        Should be platform-independent, as it is just a Swing component. 
    </answer>



<!--
        <question id="deploy-jar">
            Do you deploy just module JAR file(s) or other files as well?
            <hint>
            If your module consist just from one module JAR file, just confirm that.
            If it uses more than one JAR, describe where there 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/deinstallation leaves the system 
            in state as it was before installation.
            </hint>
        </question>
-->
    <answer id="deploy-jar">
        Just a JAR.
    </answer>



<!--
        <question id="deploy-nbm">
            Can you deploy an NBM via the Update Center?
            <hint>
            If not why?
            </hint>
        </question>
-->
    <answer id="deploy-nbm">
        Yes.
    </answer>



<!--
        <question id="deploy-packages">
            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/apis/org/openide/doc-files/upgrade.html#3.4-public-packages">
            public packages
            </a>). 
            </hint>
        </question>
-->
    <answer id="deploy-packages">
        No.  There are three relevant packages - API for the tab control and tab displayer control,
        an &quot;event&quot; package for logical separation, and a third package which provides an SPI
        for alternate UI delegate implementation (however unlikely it is that a look and feel author
        will take the time to write a custom UI delegate for NetBeans windowing system).
    </answer>



<!--
        <question id="deploy-shared">
            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">
        Either.
    </answer>



<!--
        <question id="exec-classloader">
            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">
        No.
    </answer>



<!--
        <question id="exec-component">
            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 behaviour 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">
        There is an &quot;orientation&quot; property which is honored by one of the three
        UI types to display tabs on the sides or bottom of the container.  It is a client
        property, since it is optional for the UI delegate to implement this functionality
        and only one UI type has a requirement for this behavior.
        
    </answer>



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



<!--
        <question id="exec-property">
            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 behaviour of your 
            code, somebody will likely use it. You should describe what it does 
            and the stability category of this API. You may use
            <pre>
                &lt;property name=&quot;id&quot; category=&quot;private&quot; >
                    description of the property, where it is used, what it influence, etc.
                &lt;/property>            
            </pre>
            </hint>
        </question>
-->
    <answer id="exec-property">
        <api category="devel" group="systemproperty" name="nb.tabs.suppressCloseButton" type="export">
            <p>
                The system property <code>nb.tabs.suppressCloseButton</code>
                can be used to hide close buttons by default.
            </p>
        </api>
        <api category="devel" group="systemproperty" name="winsys.stretching_view_tabs" type="export">
            <p>
                The system property <code>winsys.stretching_view_tabs</code>
                can be used to switch to stretching tab layout as implemented 
                in NetBeans version 7.0 and older.
            </p>
        </api>
    </answer>



<!--
        <question id="exec-reflection">
            Does your code use Java Reflection to execute other code?
            <hint>
            This usually indicates a missing or unsufficient 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">
        No.
    </answer>



<!--
        <question id="format-clipboard">
            Which data flavors (if any) does your code read from or insert to
            the clipboard?
        </question>
-->
    <answer id="format-clipboard">
        None.
    </answer>



<!--
        <question id="format-dnd">
            Which protocols (if any) does your code understand during Drag &amp; Drop?
        </question>
-->
    <answer id="format-dnd">
        N/A
    </answer>



<!--
        <question id="format-types">
            Which file formats (if any) does your code read or write on disk?
        </question>
-->
    <answer id="format-types">
        N/A
    </answer>



<!--
        <question id="lookup-lookup">
            Does your module use <code>org.openide.util.Lookup</code>
            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 clasify the stability of such
            API contract.
            </hint>
        </question>
-->
    <answer id="lookup-lookup">
        No.
    </answer>



<!--
        <question id="lookup-register">
            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">
        No.
    </answer>



<!--
        <question id="lookup-remove">
            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">
        No.
    </answer>



<!--
        <question id="perf-exit">
            Does your module run any code on exit?
        </question>
-->
    <answer id="perf-exit">
        No.
    </answer>



<!--
        <question id="perf-huge_dialogs">
            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">
        No.
    </answer>



<!--
        <question id="perf-limit">
            Are there any hardcoded or practical limits in the number or size of
            elements your code can handle?
        </question>
-->
    <answer id="perf-limit">
	No.  Different GUI types have different scalability characterisitics, in
        accordance with their intended uses - editor tabs are designed to be
        very lightweight and scalable, as there may be many; view tabs are less
        scalable (but the ui design for view tabs also doesn't scale - all tabs
        are displayed in a row and clipped if they don't fit); sliding tabs,
        actually create one JButton per tab, making them the least scalable.
    </answer>



<!--
        <question id="perf-mem">
            How much memory does your component consume? Estimate
            with a relation to the number of windows, etc.
        </question>
-->
    <answer id="perf-mem">
        Not measured.  No more than a similar usage of JTabbedPane, possibly less,
        discounting for the higher number of classes loaded.
    </answer>



<!--
        <question id="perf-menus">
            Does your module use dynamically updated context menus, or
            context-sensitive actions with complicated enablement logic?
        </question>
-->
    <answer id="perf-menus">
        No.
    </answer>



<!--
        <question id="perf-progress">
            Does your module execute any long-running tasks?
            <hint>Typically they are tasks like connecting over
            network, computing huge amount of data, compilation.
            Such communication should be done asynchronously (for example
            using <code>RequestProcessor</code>), definitively it should 
            not block AWT thread.
            </hint>
        </question>
-->
    <answer id="perf-progress">
        No.
    </answer>



<!--
        <question id="perf-scale">
            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?
            Please include some estimates.
        </question>
-->
    <answer id="perf-scale">
        Availability of hardware graphics acceleration to Java2D on look and
        feels other than Metal, some of which use GradientPaint and AlphaComposite
        and BufferedImage objects.
    </answer>



<!--
        <question id="perf-startup">
            Does your module run any code on startup?
        </question>
-->
    <answer id="perf-startup">
        No.
    </answer>



<!--
        <question id="perf-wakeup">
            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">
        No.
    </answer>



<!--
        <question id="resources-file">
            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 prefered
            way that should be used. But of course there can be situations when
            this is not suitable.
            </hint>
        </question>
-->
    <answer id="resources-file">
        No.
    </answer>



<!--
        <question id="resources-layer">
            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">
        No.
    </answer>



<!--
        <question id="resources-mask">
            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">
        No.
    </answer>



<!--
        <question id="resources-read">
            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 clasify according to 
            <a href="http://openide.netbeans.org/tutorial/api-design.html#categories">
            common stability categories</a>.
            </hint>
        </question>
-->
    <answer id="resources-read">
        No.
    </answer>

<!--
        <question id="exec-introspection">
            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">
        The displayed tabs are contained in a data model provided by the client.
        The &quot;user object&quot; of each element in the model may be a 
        Component instance, or something else (in which case the client code must
        supply a ComponentConverter instance to find the correct component when
        an element is selected).  The default implementation tests if the user
        object is a Component (which it always should be currently for NetBeans
        window system - a system of lazy loading of opened components based on
        ID's may be implemented in the future), and if it is not, returns null.
    </answer>



<!--
        <question id="exec-process">
            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">
        No.
    </answer>

<answer id="arch-overall">
The Swing components in this package were carefully designed to be consistent with standard Swing components in their
function, usage and ui registration mechanisms.
</answer>

<answer id="arch-quality">
Unit tests for the assorted data models involved are included.
</answer>

<answer id="arch-time">
NetBeans 4.0 feature freeze
</answer>

<answer id="arch-usecases">
Primary use cases are in the NetBeans window system, as top level containers in the main window;  future use cases
include providing a consistent UI for tabs in the property sheet, the component inspector and the output window, but
this probably will not happen for 4.0.
</answer>


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

<answer id="exec-threading">
All access must be on the AWT thread; this is enforced with assertions in some cases.
</answer>

<answer id="perf-spi">
It is highly unlikely that any look and feel will provide its own UI delegates for the tab control.
In the event that they do, it is up to the look and feel author to ensure adequate performance.
</answer>


<answer id="security-grant">
No.
</answer>


<answer id="security-policy">
No.
</answer>

</api-answers>

