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

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<!DOCTYPE api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [
  <!ENTITY api-questions SYSTEM "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml">
]>

<api-answers
  question-version="1.24"
  author="dkonecny@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>
   Web development support for freeform project. There is no API/SPI.
  </p>
  <p>
   The behavior of this extension is entirely controlled by
   <code>project.xml</code>:
  </p>
  <ol>
   <li>
    <api group="dtd" name="freeform-project-web.xsd" type="export" category="official" url="http://www.netbeans.org/ns/freeform-project-web/1.xsd">
     <p>
      XML schema for the Web-specific section. Users are allowed
      to modify this section by hand and can refer to this schema for available
      syntax.
     </p>
    </api>
   </li>
  </ol>
 </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>
   Unit test coverage should be high, except for the GUI portions which may be
   covered by functional tests in the future.
  </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>
   Complete.
  </p>
 </answer>



<!--
        <question id="arch-usecases" when="init">
            Describe the main <a href="http://openide.netbeans.org/tutorial/api-design.html#usecase">
            use cases</a> of the new API. Who will use it under
            what circumstances? What kind of code would typically need to be written
            to use the module?
        </question>
-->
 <answer id="arch-usecases">
  <p>
   See the <a
   href="http://projects.netbeans.org/buildsys/design.html#freeform">Architecture
   Sketch</a> for justifications of the module.
  </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>
   This module implements Web development support in Freeform project type.
   See Freeform project type documentation for its general description. The
   main features of this extension are:
  </p>
  <ol>
   <li>
    <p>
     Answers Web specific <dfn>queries</dfn> like WebModule provider, etc.
    </p>
   </li>
   <li>
    <p>
     Provides wizard to help the user set up a new project with Web support.
    </p>
   </li>
  </ol>
  <p>
   Specifications:
  </p>
  <ol>
   <li>
    <a href="http://projects.netbeans.org/buildsys/freeform-project-ui-spec.html">UI Specification</a>
   </li>
   <li>
    <a href="http://projects.netbeans.org/buildsys/design.html#freeform">Architecture Sketch</a>
   </li>
  </ol>
 </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>
   Defines project syntax of Web support. There is no known independent format for this.
  </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>
   Project XML schemas namespaces are versioned.
  </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.4+.
  </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.
  </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">
  <ul>
   <li>
    <api group="java" name="FreeformProjectSPI" type="import" category="friend">
     <p>
      Base Freeform SPI.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="AntProjectAPI" type="import" category="official">
     <p>
      The SPI is used heavily to implement various queries, evaluate Ant
      properties at development time, etc.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="JavaSupportAPIs" type="import" category="official">
     <p>
      Implements the classpath query.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="JavaPlatformAPI" type="import" category="official">
     <p>
      Looks for registered Java platforms to handle the boot classpath.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="JavaFreeformProjectSPI" type="import" category="friend">
     <p>
      Used for instantiation of Java support in Web freeform project.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="JavaProjectAPI" type="import" category="official">
     <p>
      Used for the Java package view, etc.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="WebModuleAPI" type="import" category="official">
     <p>
      Used to answer web-app-specific queries.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="ProjectAPI" type="import" category="official">
     <p>
      Basic project API.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="ProjectUIAPI" type="import" category="official">
     <p>
      Used to register the project open hook, etc.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="GeneralQueriesAPI" type="import" category="official">
     <p>
      For checking file collocation.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="Filesystems" type="import" category="official">
     <p>
      Used for many purposes.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="Nodes" type="import" category="official">
     <p>
      Used to show the logical view.
     </p>
    </api>
   </li>
   <li>
    <api group="java" name="Wizards" type="import" category="official">
     <p>
      For the new project wizards.
     </p>
    </api>
   </li>
  </ul>
 </answer>



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



 <answer id="deploy-dependencies">
  <p>
   N/A
  </p>
 </answer>



<!--
        <question id="deploy-jar" when="impl">
            Do you deploy just module JAR file(s) or other files as well?
            <hint>
            If your module consists of just one module JAR file, just confirm that.
            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 a 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>
   Yes
  </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-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.
  </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.
  </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>
   Uses <code>ProjectManager.mutex()</code> in some cases. Mostly depends on
   threading model of queries. EQ for GUI things of course.
  </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>
   None.
  </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?
        </question>
-->
 <answer id="format-types">
  <p>
   None.
  </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>
   Just usual <code>getDefault</code> methods.
  </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>
   Implementation of <code>ProjectNature</code> is registered in <code>META-INF/services</code>.
  </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>
   No. There is one customizer panel which is provided by this 
   extension and which is part of Freeform project customizer, but it
   is of reasonable size.
  </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 in particular.
  </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>
   Unknown; probably small.
  </p>
 </answer>



<!--
        <question id="perf-menus" when="final">
            Does your module use dynamically updated context menus, or
            context-sensitive actions with complicated enablement logic?
        </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>
   No.
  </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>
   Nothing known.
  </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>
   N/A
  </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>
   Where needed to evaluate Ant properties or satisfy queries.
  </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>
   Registers new project wizards.
  </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>
   No.
  </p>
 </answer>



<!--
        <question id="security-grant" when="final">
            Does your code grant addition rights to some code?
            <hint>Avoid using a classloder that adds some extra
            permissions to loaded code unless realy necessary.
            Also note that your API implementation
            can also expose unneeded permissions to enemy code by
            AccessController.doPrilileged() calls.</hint>
        </question>
-->
 <answer id="security-grant">
  <p>
   No.
  </p>
 </answer>



<!--
        <question id="security-policy" when="final">
            Does your functionality require standard policy file modification?
            <hint>Your code may pass control to third party code not
            coming from trusted domain. It covers code downloaded over
            network or code coming from libraries that are not bundled
            with NetBeans. Which permissions it needs to grant to which domain?</hint>
        </question>
-->
 <answer id="security-policy">
  <p>
   No.
  </p>
 </answer>

</api-answers>
