<?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.26"
  author="abadea@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>
   The Database module provides the 
   <api group="java" name="DatabaseExplorerAPI" type="export" category="official" url="@TOP@index.html"/>
   which allows access to the database connections and drivers
   defined in the Database Explorer. It allows a client to retrieve the
   connection list and their properties, to create new connections and remove
   existing ones. The Database Explorer also manages a list of JDBC drivers used to
   connect to databases. The API provides access to these drivers and allows
   to create new and remove existing drivers.
  </p>
  <p>
   The <api group="layer" name="DatabaseExplorerLayerAPI" type="export" category="official" url="@TOP@index.html"/> 
   allows for the declarative registration of database connections and JDBC
   drivers in the module layer. Database runtimes (which are representations of
   an instance of a database server) can also be registered in the layer.
  </p>
  <!--
   The Actions folder for dbschema and sql files. They should actually be in db/model and db/core, but
   those modules don't have Javadoc, therefore the description is here. 
   -->
  <p>
   <api group="layer" name="Loaders-text-dbschema-Actions" type="export" category="devel" url="@TOP@index.html"/> 
   allows extending <code>.dbschema</code> files with own actions by registering them in the 
   <code>Loaders/text/x-dbschema/Actions</code> folder. Note that this folder is actually provided by the
   <code>org-netbeans-modules-dbschema.jar</code> module.
  </p>
  <p>
   <api group="layer" name="Loaders-text-sql-Actions" type="export" category="devel" url="@TOP@index.html"/> 
   allows extending <code>.sql</code> files with own actions by registering them in the 
   <code>Loaders/text/x-sql/Actions</code> folder. Note that this folder is actually provided by the
   <code>org-netbeans-modules-db-core.jar</code> module.
  </p>
  <p>
   This module also provides a <api group="java" name="SQLSupportAPI" type="export"
     category="official" url="@TOP@org/netbeans/api/db/sql/support/package-summary.html"/>
     which provides utilities for working with SQL such as quoting identifiers.
  </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>
   All Javadoc-specified functionality should be covered by unit tests.
  </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>
   Most code is already written. About 5 man-days are still needed
   for the registration of database runtimes and cleanups
   and about two weeks shall be spent writing tests. The milestone by which
   this API should be stable is promo-G.
  </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">
  <usecase id="register-drivers" name="Registering JDBC ../db.drivers">
   <p>
    An external module can register JDBC drivers. A typical example is a module
    which provides integration with a database server. In this case the module
    contains the JDBC driver for that database server and uses the Database
    Explorer API to add it do the Database Explorer.
   </p>
   <p>
    Another client of this API could be a module providing integration with a J2EE
    application server. Sometimes a J2EE application server bundles a database server
    for improving the out-of-the-box experience. When the server is registered
    in the IDE the JDBC drivers for the bundled database server are added to the Database
    Explorer.
   </p>
   <p>
    The drivers are registered by making calls on
    <a href="@TOP@org/netbeans/api/db/explorer/JDBCDriverManager.html">JDBCDriverManager</a> or 
    by registering an XML file which describes the driver in the module layer.
    The XML file is described by the 
    <a href="http://www.netbeans.org/dtds/jdbc-driver-1_1.dtd">JDBC Driver DTD</a>. 
    An example of a registration file describing the JDBC driver for PostgreSQL follows:
   </p>
   <pre>
    &lt;?xml version='1.0'?&gt;
    &lt;!DOCTYPE driver PUBLIC '-//NetBeans//DTD JDBC Driver 1.0//EN' 'http://www.netbeans.org/dtds/jdbc-driver-1_0.dtd'&gt;
    &lt;driver&gt;
      &lt;name value='postgresql-7'/&gt;
      &lt;display-name value='PostgreSQL (v7.0 and later)'/&gt;
      &lt;class value='org.postgresql.Driver'/&gt;
      &lt;urls&gt;
        &lt;url value='file:/folder1/folder2/drivers/pg74.1jdbc3.jar'/&gt;
      &lt;/urls&gt;
    &lt;/driver&gt;
   </pre>
   <p>
    This file should be registered in the <code>Databases/JDBCDrivers</code> folder of the module layer.
    To addres a bundled JAR inside the IDE the nbinst protocol can be used in the URLs: 
    <code>nbinst:/modules/ext/bundled-driver.jar</code>.
   </p>
  </usecase>
  <usecase id="get-jdbc-driver" name="Get the underlying JDBC Driver instance for a JDBCDriver">
   <p>
      You can use the <a href="@TOP@org/netbeans/api/db/explorer/JDBCDriver.html#getDriver--">JDBCDriver.getDriver()</a>
      method to obtain a reference to the underlying JDBC Driver instance.  This is useful if you want to use the registered
      drivers but create your own JDBC connections independent of the Database Explorer.

   </p>
  </usecase>
  <usecase id="retrieve-drivers" name="Retrieving the list of JDBC ../db.drivers">
   <p>
    When creating a new connection the JDBC driver which it should use can be specified.
    A list of all the registered JDBC drivers can be retrieved using 
    <a href="@TOP@org/netbeans/api/db/explorer/JDBCDriverManager.html#getDrivers--">JDBCDriverManager.getDrivers()</a>.
   </p>
  </usecase>
  <usecase id="register-runtimes" name="Registering database runtimes">
   <p>
    An external module can register new database runtimes. A database runtime
    is an abstraction of a database server instance 
    (usually bundled with the IDE, an integration module or with a J2EE server). It allows a database
    server instance to be started and stopped when a connection to this
    instance is made in the IDE. Database runtimes are represented by the
    <a href="@TOP@org/netbeans/spi/db/explorer/DatabaseRuntime.html">DatabaseRuntime</a>
    SPI interface and are registered in the <code>Databases/Runtimes</code> of the module layer.
   </p>
  </usecase>
  <usecase id="create-connections" name="Creating database connections">
   <p>
    A module can create new database connections (for example to a bundled database).
    New connections can be added by calling 
    <a href="@TOP@org/netbeans/api/db/explorer/DatabaseConnection.html#create-org.netbeans.api.db.explorer.JDBCDriver-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-">DatabaseConnection.create()</a>
    to create a new DatabaseConnection instance and then 
    <a href="@TOP@org/netbeans/api/db/explorer/ConnectionManager.html#addConnection-org.netbeans.api.db.explorer.DatabaseConnection-">ConnectionManager.addConnection()</a> to
    add the connection to the Database Explorer.
   </p>
   <p>
    New connections can also be added by registering them in the module layer. 
    The format of the registration file is described by the 
    <a href="http://www.netbeans.org/dtds/connection-1_0.dtd">Database Connection DTD</a>. 
    An example of a registration file describing a connection to a PostgreSQL database follows:
   </p>
   <pre>
    &lt;?xml version='1.0'?&gt;
    &lt;!DOCTYPE connection PUBLIC '-//NetBeans//DTD Database Connection 1.1//EN' 'http://www.netbeans.org/dtds/connection-1_1.dtd'&gt;
    &lt;connection&gt;
      &lt;driver-class value='org.postgresql.Driver'/&gt;
      &lt;driver-name value='postgres-7'/&gt;
      &lt;database-url value='jdbc:postgresql:test'/&gt;
      &lt;schema value='public'/&gt;
      &lt;user value='test'/&gt;
      &lt;password value='cGFzc3dvcmQ='/&gt;
    &lt;/connection&gt;
   </pre>
   <p>
    This file should be registered in the <code>Databases/Connections</code> folder 
    of the module layer.  
    </p>
    <p>
    The password element is optional, but if it is included, 
    its value must be the Base64 encoding of the UTF-8 representation of the 
    password.  Note that the UTF-8 representation of passwords composed entirely of
    ASCII characters is the same as their ASCII representation, so for such 
    passwords all that needs to be done is to convert them to Base64.
    </p>
    <p>
    Base64 encoding serves as a simple scrambling to prevent 
    accidental revelation of the password.  It is not indended to offer any 
    real security.   You can protect the password by assigning appropriate
    file protections to the connection XML file.
   </p>
  </usecase>
  <usecase id="retrieve-connections" name="Retrieving and displaying the list of database connections">
   <p>
    Sometimes the list of connections needs to be displayed somewhere
    else in the IDE than the Runtime tab. A typical example is the SQL Editor,
    which allows the user to select the database connection which the SQL statement
    will be executed against in a combo box in the editor toolbar. 
    The list of connections can be obtained by calling
    <a href="@TOP@org/netbeans/api/db/explorer/ConnectionManager.html#getConnections--">ConnectionManager.getConnections()</a>,
    which returns an array of 
    <a href="@TOP@org/netbeans/api/db/explorer/DatabaseConnection.html">DatabaseConnection</a>
    instances.
   </p>
   <p>
    The client usually needs to show the display name of the connection. The
    display name can be retrieved using the 
    <a href="@TOP@org/netbeans/api/db/explorer/DatabaseConnection.html#getDisplayName--">DatabaseConnection.getDisplayName()</a>
    method.
   </p>
  </usecase>
  <usecase id="retrieve-connection-props" name="Retrieving the properties of database connections">
   <p>
    Sometimes a client needs to retrieve the connection properties, such as the driver class.
    An example could be a module for a J2EE server creating a connection pool. The properties can
    be retrieved using the <code>getDriverClass()</code>, <code>getDatabaseURL()</code>, 
    <code>getSchema()</code>, <code>getUser()</code> and <code>getPassword()</code>
    methods of the 
    <a href="@TOP@org/netbeans/api/db/explorer/DatabaseConnection.html">DatabaseConnection</a>
    class.
   </p>
  </usecase>
  <usecase id="new-connection" name="Showing the New Database Connection dialog">
   <p>
    Usually when displaying a list of connections (usually in a combo box),
    the last item is "New Connection", which displays the standard New Database Connection 
    dialog of the Database Explorer. This can be achieved by calling one of the
    <a href="@TOP@org/netbeans/api/db/explorer/ConnectionManager.html#showAddConnectionDialog-org.netbeans.api.db.explorer.JDBCDriver-">ConnectionManager.showAddConnectionDialog()</a> methods.
   </p>
  </usecase>
  <usecase id="remove-connection" name="Remove a database connection">
   <p>
       A user of this API may want to remove a connection from the list of connections
       registered by the Database Explorer.  This is done using 
       <a href="@TOP@org/netbeans/api/db/explorer/ConnectionManager.html#removeConnection-org.netbeans.api.db.explorer.DatabaseConnection-">ConnectionManager.removeConnection()</a>
   </p>
  </usecase>
 <usecase id="connect-database" name="Connecting to a database">
   <p>
    A component which provides database functionality (such as the SQL Editor)
    will need to connect to a database. This can be achieved using the
    <a href="@TOP@org/netbeans/api/db/explorer/ConnectionManager.html#showConnectionDialog-org.netbeans.api.db.explorer.DatabaseConnection-">DatabaseConnection.showConnectionDialog()</a>
    method and the <code>java.sql.Connection</code> instance can be retrieved using the 
    <a href="@TOP@org/netbeans/api/db/explorer/DatabaseConnection.html#getJDBCConnection--">getJDBCConnection()</a>
    method.
   </p>
   <p>
     If you want to connect to the database without showing a dialog or any kind of UI, you can use the
     <a href="@TOP@org/netbeans/api/db/explorer/ConnectionManager.html#connect-org.netbeans.api.db.explorer.DatabaseConnection-">DatabaseConnection.connect()</a>
     method.
   </p>
  </usecase>
 <usecase id="test-connection" name="Test a database connection for validity">
   <p>
    You may want to test to make sure the underlying physical JDBC connection
    obtained from a DatabaseConnection is either valid or null.  This is done using the
    <a href="@TOP@org/netbeans/api/db/explorer/DatabaseConnection.html#getJDBCConnection-boolean-">
        DatabaseConnection.getJDBCConnection(boolean test)</a>
    method, which validates the underlying connection before returning it.  If the
    connection is invalid, it marks the DatabaseConnection as disconnected and returns null.
   </p>
  </usecase>
  <usecase id="connections-combo-box" name="Displaying the database connections in the UI">
   <p>
    A component which provides database functionality (such as the SQL Editor
    or a module providing support for data sources) will need to let the user
    select the a database connection, usually through a combo box.
    This can be achieved using the
    <a href="@TOP@org/netbeans/api/db/explorer/support/DatabaseExplorerUIs.html#connect-javax.swing.JComboBox-org.netbeans.api.db.explorer.ConnectionManager-">DatabaseExplorerUIs.connect()</a>
    method. The <code>JComboBox</code> passed to the method will be filled with the list of connections as returned by 
    <a href="@TOP@org/netbeans/api/db/explorer/ConnectionManager.html#getConnections--">ConnectionManager.getConnections()</a>, followed by a separator
    and a <em>New Database Connection</em> item which will display the dialog for adding a new database connection when selected.
   </p>
  </usecase>
  <usecase id="metadata-transfer" name="Drag and drop support for database objects">
   <p>
    A component might need to allow database tables from the Database Explorer to 
    be dragged to a visual editor. An API is provided in <code>DatabaseMetaDataTransfer</code>
    containing <code>DataFlavor</code>s for database objects and nested classes
    encapsulating those database objects during a drag and drop transfer.
   </p>
  </usecase>
  <usecase id="sql-identifier-support" name="Get support for working with SQL identifiers">
   <p>
       A component might need support for working with SQL identifiers. In particular,
       it's important to know when to quote a SQL identifier.  The
       <a href="@TOP@org/netbeans/api/db/sql/support/SQLIdentifiers.Quoter.html">
           SQLIdentifiers.Quoter</a> class is provided for this.
   </p> 
  </usecase>
 </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>
   This project provides access to objects defined in the Database Explorer.
   Documentation is available in the Javadoc.
  </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>
   Yes.
  </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>
   No.
  </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>
   The module can read old settings, but doesn't store version numbers.
  </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>
   The module runs on JRE 1.4 and higher.
  </p>
 </answer>



<!--
        <question id="dep-jrejdk" when="final">
            Do you require the JDK or is the JRE enough?
        </question>
-->
 <answer id="dep-jrejdk">
  <p>
   JRE is enough.
  </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'/>
  <p>
   <api group="java" name="Lookup" type="import" category="official">
     JDBC drivers and database runtimes are registered in the default lookup.
   </api>
  </p>
  <p>
   <api group="java" name="org.openide.actions" type="import" category="official">
    Needed in the Database Explorer UI.
   </api>
  </p>
  <p>
   <api group="java" name="org.openide.filesystems" type="import" category="official">
    Neded for writing JDBC driver registration files.
   </api>
  </p>
  <p>
   <api group="java" name="org.openide.util" type="import" category="official">
    Multiple usages (bundles, request processor).
  </api>
  </p>
  <p>
   <api group="java" name="org.openide.modules" type="import" category="official">
    For installing a ModuleInstall.close() method which disconnects the connected connections upon IDE shutdown.
   </api>
  </p>
  <p>
   <api group="java" name="org.openide.nodes" type="import" category="official">
    Needed in the Database Explorer UI.
   </api>
  </p>
  <p>
   <api group="java" name="org.openide.dialogs" type="import" category="official">
    Needed in the Database Explorer UI.
   </api>
  </p>
  <p>
   <api group="java" name="org.openide.windows" type="import" category="official">
    Needed in the Database Explorer UI (the Execute Command top component).
   </api>
  </p>
  <p>
   <api group="java" name="org.openide.loaders" type="import" category="official">
    Neded for writing JDBC driver registration files.
   </api>
  </p>
  <p>
   <api group="java" name="org.netbeans.api.progress" type="import" category="official">
    Needed in the Database Explorer UI.
   </api>
  </p>
 </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>
   None.
  </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>
   No known platform dependencies.
  </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>
   There are two JAR files: the module JAR file modules/org-netbeans-modules-db.jar 
   and a library used by the module located at modules/ext/ddl.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>
   Yes.
  </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>
   Only API and SPI packages are exported.
  </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>
   Anywhere.
  </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>
   No.
  </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>
   A class loader is created for loading JDBC drivers.
  </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>
   No.
  </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>
   No.
  </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>
   No.
  </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>
   No. Database runtime implementations could execute such actions though (especially
   executing external scripts which start/stop a database server).
  </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>
   No.
  </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>
   No.
  </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>
   The API is thread-safe. Most methods are not required to run on the event queue (although
   the implementation of methods which display an UI switches to the event thread where necessary).
   The methods which are required to run on the event queue say so in the
   Javadoc and exceptions are thrown if this condition does not hold.
   Events are fired synchronously.
  </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>
   Implementations of PasteType representing database tables and indexes are placed on the 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>
   None.
  </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>
   The database connections, JDBC drivers and database runtimes are saved as XML files whose
   DTDs are published.
  </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>
   FolderLookup is used to locate database runtimes. The 
   Databases/Runtimes folder in the default filesystem is searched for implementations 
   of the <code>DatabaseRuntime</code> interface.
  </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>
   No.
  </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>
   No.
  </p>
 </answer>



<!--
        <question id="perf-exit" when="final">
            Does your module run any code on exit?
        </question>
-->
 <answer id="perf-exit">
  <p>
   Yes. The connected database connections are disconnected.
  </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>
   No.
  </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>
   None known.
  </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>
   A small amount of memory is necessary for the database connections, drivers and
   runtimes. The amount of memory needed for displaying the structure of a 
   database is directly proportional to the number of elements in the database.
  </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>
   No.
  </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>
   Yes, any database call can be a long-running task. However, these calls are not executed in the
   event thread.
  </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>
   Performance scales linearly with the number of connections and ../db.drivers, 
   but usually the numbers are small.
  </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>
   Some methods of the database runtimes may take a long time (especially
   the start method). These methods are never called in the event thread and
   a progress dialog is displayed.
  </p>
 </answer>



<!--
        <question id="perf-startup" when="final">
            Does your module run any code on startup?
        </question>
-->
 <answer id="perf-startup">
  <p>
   No.
  </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>
   No.
  </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>
   No.
  </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>
   Yes. The module contains a standard layer which describes menu items, actions and services. The
   folders Databases/Connections, Databases/JDBCDrivers and Databases/Runtimes, where database connections, 
   JDBC drivers and database runtimes are registered, are created.
  </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>
   No.
  </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>
   Only resources registered by this module are 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>
   No.
  </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>
   No.
  </p>
 </answer>




<!--
        <question id="compat-deprecation" when="init">
            How the introduction of your project influences functionality
            provided by previous version of the product?
            <hint>
            If you are planning to deprecate/remove/change any existing APIs,
            list them here accompanied with the reason explaining why you
            are doing so.
            </hint>
        </question>
-->
 <answer id="compat-deprecation">
  <p>
   XXX no answer for compat-deprecation
  </p>
 </answer>



<!--
        <question id="resources-preferences" when="final">
            Does your module uses preferences via Preferences API? Does your module use NbPreferences or
            or regular JDK Preferences ? Does it read, write or both ? 
            Does it share preferences with other modules ? If so, then why ?
            <hint>
                You may use
                    &lt;api type="export" group="preferences"
                    name="preference node name" category="private"&gt;
                    description of individual keys, where it is used, what it
                    influences, whether the module reads/write it, etc.
                    &lt;/api&gt;
                Due to XML ID restrictions, rather than /org/netbeans/modules/foo give the "name" as org.netbeans.modules.foo.
                Note that if you use NbPreferences this name will then be the same as the code name base of the module.
            </hint>
        </question>
-->
 <answer id="resources-preferences">
  <p>
   XXX no answer for resources-preferences
  </p>
 </answer>

</api-answers>
