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

  &api-questions;


<!--
        <question id="arch-overall" when="init">
            Describe the overall architecture.
            <hint>
            What will be API for
            <a href="http://wiki.netbeans.org/API_Design#Separate_API_for_clients_from_support_API">
                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 and specify their
            <a href="http://wiki.netbeans.org/API_Stability#Private">
            stability categories</a>.
            If possible please provide simple diagrams.
            </hint>
        </question>
-->
 <answer id="arch-overall">
  <p>
      The Bugtracking SPI/API makes it possible to integrate bugtracking system 
      providers into the IDE workflow:<br/>
      - to access and manage bugtracking Issues via the Tasks Dashboard<br/>
      - to make bugtracking functionality accessible for integration with other subsystems in the IDE 
        - e.g. VCS, Team Support (aka kenai.com, java.net)<br/>
  </p>     
    <p>
      <api name="BugrackingSPI" group="java" type="export" category="devel">
          Enables Bugtracking modules to fully integrate into Bugtracking Issue Management facilities 
          and other IDE workflow.
      </api>
      <br/><br/>
      <api name="BugrackingAPI" group="java" type="export" category="devel">
          Provides Bugtracking functionality for other subsystems in the IDE.
      </api>
  </p>  
    
  <p>
      <b>SPI Registration:</b><br/>
      A bugtracking module extends <code>BugtrackingConnector</code> and registers it via the
      <code>BugtrackingConnector.Registration</code> annotation.
  </p>
    
  <p>
      <b>Cookbook and sample implementation:</b><br/>
      For a more detailed description on how to start writting a bugtracking plugin for NetBeans see also the 
      <a href="https://netbeans.apache.org/wiki/BugtrackingCookbook">Bugtracking Cookbook</a> (sample module attached).
  </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? How you find out that your
            project was successful?
            </hint>
        </question>
-->
 <answer id="arch-quality">
  <p>
   Module's APIs will be tested by unit tests, all areas should be covered.
  </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>
   The module is done.
  </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://wiki.netbeans.org/API_Design#The_Importance_of_Being_Use_Case_Oriented">
            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>
      The main Bugtracking SPI and API Use Cases are based on:<br/>
  <!--     - the <a href="http://xdesign-tools.cz.oracle.com/projects/netbeans/IssueTracking/">Bugtracking UI spec.</a><br/>     --> 
      - the <a href="https://netbeans.apache.org/wiki/TaskManagementUseCases">Issue Management Use Cases</a>. 
      For additional information see also <a href="https://netbeans.apache.org/wiki/TaskDashboardDesignSpec">Tasks Dashboard UI spec</a><br/>
  </p>    
      
    <usecase id="1" name="Registration and setup">
        The Bugtracking SPI provides a way to register bugtracking plugins and 
        to setup remote Repository configurations of one kind.
    </usecase>
    
    <usecase id="2" name="Accessing Issues">
        All registered plugins provide the capability to access Issues from a Repository via:<br/>
            - their ID<br/>
            - based on a simple text criteria<br/>
            - the capability to create, edit and execute more complex Queries
    </usecase>
    
    <usecase id="3" name="Issue management">
        For the needs of Issue Management all registered plugins provide:
        - the capability to create and edit Issues<br/>
        - basic Issue information like id, summary, priority, scheduling ...
    </usecase>
    
    <usecase id="4" name="Automated Issue Operations">
        All registered plugins provide bugtracking functionality (if available)
        to other IDE workflows via the Bugtracking API.
        - e.g. attaching files, closing Issues, etc. 
    </usecase>
    
    <p>    
        See also the more detailed <a href="https://netbeans.apache.org/wiki/BugtrackingAPISPIUseCases">API/SPI requirements.</a>      
    </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>
   The module allows to integrate Bugtracking systems into the IDE workflow. 
  </p>
 </answer>



<!--
        <question id="arch-where" when="impl">
            Where one can find sources for your module?
            <hint>
                Please provide link to the Hg web client at
                http://hg.netbeans.org/
                or just use tag defaultanswer generate='here'
            </hint>
        </question>
-->
 <answer id="arch-where">
  <defaultanswer generate='here' />
 </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>
   The module introduces a new SPI and API, it does not deprecate any old ones.
  </p>
 </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>
   The module does not implement or define any 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>
    Yes, the module is designed to evolve over time. 
    Currently the module persists bugtracking repository properties (see&nbsp; 
    <code>o.n.m.bugtracking.spi.RepositoryInfo</code>) and some Tasks Dashboard 
    settings via the standard NbPreferences API and ignores all other settings. 
    It is expected, that it can live happily with future releases.
  </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>
   1.7
  </p>
 </answer>



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



<!--
        <question id="dep-nb" when="init">
            What other NetBeans projects and modules does this one depend on?
            <hint>
            Depending on other NetBeans projects influnces the ability of
            users of your work to customize their own branded version of
            NetBeans by enabling and disabling some modules. Too
            much dependencies restrict this kind of customization. If that
            is your case, then you may want to split your functionality into
            pieces of autoload, eager and regular modules which can be
            enabled independently. Usually the answer to this question
            is generated from your <code>project.xml</code> file, but
            if it is not guessed correctly, you can suppress it by
            specifying &lt;defaultanswer generate="none"/&gt; and
            write here your own. Please 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>.
            By doing this information gets listed in the summary page of your
            javadoc.
            </hint>
        </question>
-->
 <answer id="dep-nb">
  <defaultanswer generate='here' />
 </answer>



<!--
        <question id="dep-non-nb" when="init">
            What other projects outside NetBeans does this one depend on?
            
            <hint>
            Depending on 3rd party libraries is always problematic,
            especially if they are not open source, as that complicates
            the licensing scheme of NetBeans. Please enumerate your
            external dependencies here, so it is correctly understood since
            the begining what are the legal implications of your project.
            Also please note that
            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 and share such third-party libraries.
            </hint>
        </question>
-->
 <answer id="dep-non-nb">
  <p>
   The module does NOT depend on any external projects.
  </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 you plan any dependency on OS or any usage of native code,
            please describe why you are doing so and describe how you envision
            to enforce the portability of your code.
            Please note that there is a support for <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-os-specific">OS conditionally
            enabled modules</a> which together with autoload/eager modules
            can allow you to enable to provide the best OS aware support
            on certain OSes while providing compatibility bridge on the not
            supported ones.
            Also please list the supported
            OSes/HW platforms and mentioned the lovest version of JDK required
            for your project to run on. Also state whether JRE is enough or
            you really need JDK.
            </hint>
        </question>
-->
 <answer id="dep-platform">
  <p>
   The module does NOT depend on OS-specific features, it is pure Java.
  </p>
 </answer>



<!--
        <question id="deploy-dependencies" when="final">
            What do other modules need to do to declare a dependency on this one,
            in addition to or instead of the normal module dependency declaration
            (e.g. tokens to require)?
            <hint>
                Provide a sample of the actual lines you would add to a module manifest
                to declare a dependency, for example OpenIDE-Module-Requires: some.token.
                If other modules should not depend on this module, or should just use a
                simple regular module dependency, you can just answer "nothing". If you
                intentionally expose a semistable API to clients using implementation
                dependencies, you should mention that here (but there is no need to give
                an example of usage).
            </hint>
        </question>
-->
 <answer id="deploy-dependencies">
  <p>
   No special requirements here.
  </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>
   Just the module's JAR file.
  </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>
            By default NetBeans build harness treats all packages are private.
            If you export some of them - either as public or friend packages,
            you should have a reason. If the reason is described elsewhere
            in this document, you can ignore this question.
            </hint>
        </question>
-->
 <answer id="deploy-packages">
  <p>
      Packages <code>org.netbeans.modules.bugtracking.spi</code> 
      and <code>org.netbeans.modules.bugtracking.api</code> are declared as public, 
      all others are left private.
  </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>
   Does not matter.
  </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>
   No.
  </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, the module does not depend on any such public property. Maybe worth to mention, 
    that on Issue editors, provided by the particular implementations, 
    <code>&nbsp;setClientProperty("highlights.property", ...)&nbsp;</code>is used internaly
    to store text higlight relevant information on TextPanes contained in those editor components.
  </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>
    Yes:<br/>
    - the<code>&nbsp;instanceof&nbsp;</code>operator is used on several places, but all checks switching 
    the control flow are made either on module private types or in cases like e.g.<code>&nbsp;.equals(Object)&nbsp;</code>.<br/>
    - <code>&nbsp;Class.getName()&nbsp;</code> is used a couple of time, typicaly to use it for a Logger name. 
    Otherwise no type relevant<code>&nbsp;Class.*&nbsp;</code>methods are not used.<br/>
  </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.
  </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?
            On a similar note, is there something interesting that you
            pass to <code>java.util.logging.Logger</code>? Or do you observe
            what others log?
            <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://wiki.netbeans.org/API_Stability">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>
   Yes:<br/>
   - <code>System.getProperty("netbeans.bugtracking.noOpenProjects")</code> to block 
           creating of team repositories based on open project beineg checked out from a Team Server 
           (e.g. kenai.com, java.net).<br/>
   - <code>System.getProperty("netbeans.bugzilla.url")</code> to override the hardcoded netbeans bugzilla url. 
           Testing purposes only.<br/>
   - <code>System.getProperty("org.netbeans.modules.bugtracking.logPasswords")</code> when logging repository 
           information, the password isn't obfuscated. Diagnostic purposes only.<br/>
  </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="init">
            What threading models, if any, does your module adhere to? How the
            project behaves with respect to threading?
            <hint>
                Is your API threadsafe? Can it be accessed from any threads or
                just from some dedicated ones? Any special relation to AWT and
                its Event Dispatch thread? Also
                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 SPI defines entry points from the IDE to bugtracking implementors. There is no guarantee about threading,
    SPI methods can be called by any thread in any order, the SPI implementors must synchronize access to 
    their structures as needed. All callbacks back to SPI are threadsafe.
  </p>
  <p>
    In cases in the SPI (and accordingly and the API) where it is expected from the implementation to block for the whole time of execution 
    it is pointed out in the javadoc.
  </p>
  <p>
    In cases in the SPI where the call might be done in AWT and a fast exection is essential it is explicitely 
    pointed out in the javadoc.
  </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>
   No clipboard interaction.
  </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>
   There is some internal Tasks Dashoard  DnD interaction between different 
      dashboard node containers (though not<code>&nbsp;o.openide.nodes.Node</code>). 
  </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 module does not communicate with ouside world via files/network protocols.
  </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>
            NetBeans is build around a generic registry of services called
            lookup. It is preferable to use it for registration and discovery
            if possible. See
            <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/lookup/doc-files/index.html">
            The Solution to Comunication Between Components
            </a>. If you do not plan to use lookup and insist usage
            of other solution, then please describe why it is not working for
            you.
            <br/>
            When filling the final version of your arch document, 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. Use &lt;api group=&amp;lookup&amp; /&gt; tag, so
            your information gets listed in the summary page of your javadoc.
            </hint>
        </question>
-->
 <answer id="lookup-lookup">
  <p>
    The module uses default Lookup to:<br/>
        - find registered bugtracking modules by searching for all
            <code>&nbsp;org.netbeans.modules.bugtracking.spi.BugtrackingConnector&nbsp;</code>instaces. 
            Order does not matter.<br/>
        - find RepositoryQuery implementations by searching for all 
            <code>&nbsp;org.netbeans.modules.bugtracking.spi.RepositoryQueryImplementations&nbsp;</code>instances. 
            Order does not matter.<br/>
        - find implementations of <code>&nbsp;org.netbeans.modules.team.ide.spi.IDEServices&nbsp;</code>and 
            <code>&nbsp;org.netbeans.modules.team.ide.spi.ProjectServices&nbsp;</code>for 1 expected instance.<br/>
  </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 a declarative annotation such as <code>@ServiceProvider</code>?
            Who is supposed to find your component?
            </hint>
        </question>
-->
 <answer id="lookup-register">
  <p>
    <code>javax.annotation.processing.Processor&nbsp;</code>to handle registrations of 
    <code>&nbsp;o.n.m.bugtracking.spi.BugtrackingConnector.Registration&nbsp;</code> 
    - see<code>&nbsp;o.n.m.bugtracking.BugtrackingRegistrationProcessor</code>
    <br/>
  </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>
   No.
  </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>
   Yes, the Tasks Dashboard provides a tree of all known Repositories, 
   Queries associated with those Repositories and Issues coming from those Queries. 
   Typicaly it is not expected that a big amout of Queries is registered and only the first 50 of issues are listed, 
   though it is possible for the user to change this setup. 
  </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?
            <hint>
                Most of algorithms have increasing memory and speed complexity
                with respect to size of data they operate on. What is the critical
                part of your project that can be seen as a bottleneck with
                respect to speed or required memory? What are the practical
                sizes of data you tested your project with? What is your estimate
                of potential size of data that would cause visible performance
                problems? Is there some kind of check to detect such situation
                and prevent "hard" crashes - for example the CloneableEditorSupport
                checks for size of a file to be opened in editor
                and if it is larger than 1Mb it shows a dialog giving the
                user the right to decide - e.g. to cancel or commit suicide.
            </hint>
        </question>
-->
 <answer id="perf-limit">
  <p>
    No limits hardcoded. In extreme situations it might happen that a particular bugtracking 
    implementation provides a too big amount of issues (tested with thousands 
    without running into problems). Considering the fact, that the significant amount of involved data 
    is generated in the involved bugtracking plugin, it is seen as its problem 
    to handle such scenarious. The additional memory overhead caused by wrapping and handling 
    the provided Issues in the bugtracking module is not relevant in the overall scheme of things. 
  </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>
    Amount of memory is proportional to the size of opened issue and query 
    editors as well as to the amount of registered repositories, queries and issues listed in the Tasks Dashboard. 
    Exact memory consumption depends on the underlying bugtracking system implementations.<br/>
  </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 expensive menus or actions.
  </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>
    All long-running task (e.g. like executing and underlying query implementation) are done by using RequestProcessor.
  </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>
    The amount of Issues listed in the Tasks Dashboard, though the relevant computations ( e.g. when expanding container 
    nodes) aren't done in AWT.
  </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>
    SPI will log (on demand) performance of calls on plugged-in implementations such like e.g. query.refresh(), issue.refresh(), ...
  </p>
 </answer>



<!--
        <question id="perf-startup" when="final">
            Does your module run any code on startup?
        </question>
-->
 <answer id="perf-startup">
  <p>
    No, also that the infrastructure waits until all projects are opened before 
    populating the Tasks Dashboard in case it was opened from a previous session.
  </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>
    Registered queries are periodicaly refeshed by a customizable interval with a default value.
  </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>
    Yes it does, but FileObject-s are used in cases, when working with IDE relevant files.
  </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>
    Not explicitely. Registration of some actions and the Tasks Dashboard Window 
    is done via annotations.
  </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-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>
    Yes, using NbPreferences for its own settings. It does not share them.
  </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://wiki.netbeans.org/API_Design#What_is_an_API.3F">
            common stability categories</a>.
            </hint>
        </question>
-->
 <answer id="resources-read">
  <p>
    No.
  </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>

</api-answers>
