cornercorner
FeaturesPluginsDocs & SupportCommunityPartners

NetBeans Projects:
Usability Recommendations

Author: Chris LeDantec, Jan Rojcek
Last Updated: June 24, 2003
Document History
Revision:
1.7

Contents

Summary

This document outlines recommended UI changes resulting from the Projects Usability Study. In the present form the recommendations are draft and intended as a starting point for discussion among the interested parties (Java, Web Apps, EE, ME, etc).

The priority rankings:

P1 = Must be done for a usable projects release

P2 = Should be done for a usable projects release

P3 = Nice to have done for a usable projects release

The priorities only apply to issues discovered during the usability study. Other issues may merit consideration but are not covered by this document.

Recommendations

For more information about the problems these recommendations address, please see the Usability Report.

Project Explorer (Active Project, Node Order, Node Names)

Bugs: 33603, 33604

Priority: P1

The Project Explorer needs some changes to clarify the content of a project along with the Active project. To address these issues the following recommendations are made:

  • Remove Output and Resources nodes: Removing the output and resources nodes (placing their functionality into the project customizer below) will simplify the explorer tree.
  • Divide the display of the project into a Logical Tab and a Files Tab: By splitting the views up it should clear up confusion that may result from having items appear twice under the same tree as is the case now. The files tab also provides a better place to work with vcs commands on the project contents.
  • Change the way Active project is indicated and used (Infrastructure): Bold the title of the Active project in the Project Explorer; add a checkbox to the new project wizard to set the newly created project active (default is true. see new wizard section); make the Set Active popup menu item more visible.

Three things should help confer the importance of the Active project in the IDE: 1. better indication in the explorer; 2. a prominent option in all project wizards and open dialogs to set the new or opened project as Active; 3. more prominent location of the Set Active action in the project pop-up menu. A different term may help as well though it is not clear what that might be.

Along with better indication of the Active state, a project should automatically become active after it has been created (from the wizard) or opened. A check box in the wizard and in the filechooser for opening a project will let the user decide if they want the new/selected project to become active -by default this is set to true.

Infrastructure UI Spec:

The Project Explorer is the central location for working with projects in the IDE. Source files and objects are directly available in the Project Explorer and all configuration and management action for the project are available through contextual menus in the Project Explorer. The Project Explorer contains all open projects and project groups and is made up of two tabs, Logical View and Files View. Modules may add additional tabs if they need to break their projects into more views.

The Logical View provides a project specific logical view of project contents. The Files View shows all files and folders present in the project regardless of what kind of project it is. The view is very similar to the 3.x filesystems view in that every source root is a node under the project node. The contents of the Files Views are:

-My_Project
 |	  
 - c:\My_Project	        <- project root = implicit source root
 | |
 | + My_Project.project  <- project file and any other files and directories
 |                          contained in the project root (project file location).
 + Additional_Source_Root_1
 |
 + Additional_Source_Root_2
 |
 + Additional_Source_Root_n

 

For every source root there is one child node of the project node. The project root is the implicit source root and is the first node underneath the project node. All the additional source roots are defined in the Sources & Files page of Project Customizer.

Actions between the two views should be consistent. Whatever action is available on an object in one view should also be available on the corresponding object in the other view. Exceptions would be objects in the logical view that are aggregates of more than one physical thing -the action may not make the same sense for the individual pieces as it does for the aggregate.

+----------------------------------------------+
| Project Explorer                             |
+----------------------------------------------+
| Projects                                     |
| |                                            |
| + My Java Project                            |
| |                                            |
| + My Web App Project                         |
| |                                            |
| + My Server Project                          |
| |                                            |
| - My Library Project                         |
|   |                                          |
|   - c:\LibraryProject                        |
|   | |                                        |
|   | + docs                                   |
|   | |                                        |
|   | + output                                 |
|   | |                                        |
|   | + src                                    |
|   | |                                        |
|   | + build.xml                              |
|   | |                                        |
|   | + My Library Project.project             |
|   |                                          |
|   + c:\extra\src                             |
|                                              |
|                                              |
|                                              |
|________________              ________________|
|\ Logical View /\ Files View /                |
+----------------------------------------------+		
		

Components of the dialog:

  1. Logical View tab. Shows the logical view of the project. The structure of the logical view is entirely provided by the module(s) that provide that project.
  2. Files View tab. Shows the project contents as files and folders. Projects are listed in the same order as they appear in the Logical View. Children of the Project node in the Files View are all source root.

In addition to displaying sources and files in the project the Project Explorer indicates which project is active. One project is always Active -if there is only one project open then it is automatically Active, when there are multiple projects open one is at all times Active.

The active project is indicated with a bold project node title. A context menu item on non-Active projects lets the user set those projects to active.

Java UI Spec:

The Logical View in the Project Explorer provides a Java specific view of the project contents. All source roots that contain java roots contribute to a merged view in the Logical view so that all like package fragments form one node under the Project node.

A top-level package node is created from all Package Fragments that contain only Java source or are empty. If a package fragment org.netbeans.modules.java contained foo.java, it would be a top-level node in the Packages node. If bar.java was in the package org.netbeans.modules then the top-level node would be org.netbeans.modules and it would contain the Java source bar.java and the sub-package java.

Two or more java roots may contain Java sources that are in conflict -meaning that two java roots provide the same package fragments and source files of the same name. When this happens the order of the java root determines which source is used for build (the first in the Project Customizer, Sources and Files list gets preference). Both files are shown and the remaining files in conflict are badged so the user can resolve the conflict (or not) as necessary.

The conflict badging also depends on how the Compiled Classes Build Target is setup; conflicting classes in the Packages node will be badged with more information based on where they are used. If there is only one Compiled Classed node the file that is not used is marked [unused]. When there are more than on Compiled Classes Build Target and each has a slightly different order of Java Roots the classes in conflict can each be annotated with the name of the Build Target that uses them - [default Build Target], [test Build Target], [deployment Build Target]. This clarifies where each file is used.

+------------------------------------------------+
| Projects                                       |
+------------------------------------------------+
|                                                |
|-Projects                                       |
| |                                              |
| - My Java Project                              |
| | |                                            |
| | - org.netbeans.modules                       |
| |   |                                          |
| |   - java                                     |
| |   | |                                        |
| |   | - foo.java                               |
| |   |                                          |
| |   - bar.java                                 |
| |                                              |
| + My Web App Project                           |
| |                                              |
| + My Server Project                            |
| |                                              |
| + My Library Project                           |
|                                                |
|                                                |
|                ________________________________|
|\ Logical View /\ Files View /                  |
+------------------------------------------------+

All folders added to a package are considered packages if they follow the Java specification for package naming. If a folder (or sub-package) is added to a package and it uses characters illegal for Java packages it is displayed as a package with the error badge on the package icon.

+------------------------------------------------+
| Projects                                       |
+------------------------------------------------+
|                                                |
|-Projects                                       |
| |                                              |
| - My Java Project                              |
| | |                                            |
| | - org.netbeans.modules                       |
| |   |                                          |
| |   - java                                     |
| |   | |                                        |
| |   | - foo.java                               |
| |   |                                          |
| |   - bar.java                                 |
| |   |                                          |
| |   + doc$Folder                               |
| |                                              |
| + My Web App Project                           |
| |                                              |
| + My Server Project                            |
| |                                              |
| + My Library Project                           |
|                                                |
|                                                |
|                ________________________________|
|\ Logical View /\ Files View /                  |
+------------------------------------------------+

The Files View of this project, assuming that the packages root is under a source root which is different from the project root, would look like:

+------------------------------------------------+
| Project Explorer                               |
+------------------------------------------------+
| Projects                                       |
| |                                              |
| + My Java Project                              |
| | |                                            |
| | - c:\JavaProject                             |
| | | |                                          |
| | | + My Java Project.project                  |
| | |                                            |
| | - c:\allMyProjects\JavaProject               |
| |   |                                          |
| |   - src                                      |
| |   | |                                        |
| |   | - org                                    |
| |   |   |                                      |
| |   |   - netbeans                             |
| |   |     |                                    |
| |   |     - modules                            |
| |   |     | |                                  |
| |   |     | - foo.java                         |
| |   |     |                                    |
| |   |     + doc$Folder                         |
| |   |     |                                    |
| |   |     - bar.java                           |
| |   |                                          |
| |   + output                                   |
| |   |                                          |
| |   + misc                                     |
| |                                              |
| + My Webb Apps Project                         |
|________________              __________________|
|\ Logical View /\ Files View /                  |
+------------------------------------------------+

With the above example the project root is c:\JavaProject, the additional source root is c:\allMyProjects\JavaProject and the java root is contained within the additional source root and is the directory c:\allMyProjects\JavaProject\src.

If a java project (enhanced by a nature; or an other java based project, like webapp project) needs to show more than one type of logical hierarchies they are displayed underneath a special nodes in the logical view. It might look like this:

+------------------------------------------------+
| Projects                                       |
+------------------------------------------------+
|                                                |
|-Projects                                       |
| |                                              |
| - My Enhanced Java Project                     |
| | |                                            |
| | - Packages                                   |
| | | |                                          |
| | | - org.netbeans.modules                     |
| | |   |                                        |
| | |   - java                                   |
| | |   | |                                      |
| | |   | - foo.java                             |
| | |   |                                        |
| | |   - bar.java                               |
| | |   |                                        |
| | |   + doc$Folder                             |
| | |                                            |
| | + Special Logical Hierarchy                  |
| |                                              |
| + My Web App Project                           |
| |                                              |
| + My Server Project                            |
| |                                              |
| + My Library Project                           |
|                                                |
|                                                |
|                ________________________________|
|\ Logical View /\ Files View /                  |
+------------------------------------------------+

Special nodes can be added dynamically to a project as the user may create or add content that is provided for with specific categorization, e.g. JUnit functionality might break tests out as a separate node 'JUnit Tests'.

Open Questions: Should the 'Packages' node reappear when additional logical groupings are added to the view or should it be visible all the time regardless if it is the only gouping? Should the likely additional groupings (i.e. unit tests) be included automatically if a module that provides support is installed?

Project Customizer

Bugs: 33603

Priority: P1

Repeatedly, participants in the Usability Study looked for one central place to set project options. To address this issue it is recommended that:

  • All customizers be centralized into the Project Customizer (Infrastructure/Java Project): The centralization will help users not yet familiar or comfortable with the highly context sensitive nature of NetBeans and it will make using Configurations (or the love child of Profiles and Configurations) easier as there will be one place to manage settings (and choose which configuration to use). The context sensitive entry points will open the Project Customizer to the relevant location.

This recommendation will also resolve issues of the same customizer being shown in different ways -with all customizers a part of the larger Projects Customizer the presentation will be consistent.

The model for the Projects Customizer is the same as the Options redesign work.

Another point to consider is looking at a subset of project options that make sense to display as properties and not as members of a customizer.

Infrastructure UI Spec:

A single Project Customizer will contain all customizers that are relevant for the project. The basic customizer contains General project settings, Source directory settings, Resource settings, Build Step settings, Running Profiles and provides space for additional projects-specific settings. All customize actions in the project explorer will open the main Project Customizer to the correct panel -thus context sensitive entry points are preserved while providing a single location to manage project settings. Build Configuration management is also combined into the Project Customizer allowing the user to create new Build Configurations, choose which Build Configuration to use and provide better management of Build Configuration settings.

The project customizer is a modal dialog. The dialog consists of a list of categories along the left side of the panel and a corresponding panel of options on the right. The list consists of all context sensitive entry points in the project explorer along with a functional grouping of project specific settings. Along the bottom of the dialog are Ok and Cancel buttons.

The Build Configurations category is a special customizer category. It allows the user to create, delete and make a specific configuration active. The list of configurations is then used in other configuration dependent customizer categories, e.g. a specific build step. The combobox listing all the build configurations is shown above the configuration dependent customizer to let the user know that all the changes made in the customizer panel are stored only into this configuration.

Modules or project natures can add categories and sub-categories to the left hand list. Where necessary they may also replace or hide certain categories (i.e. Resources may be replaced with a category that makes more sense for the project nature). The recommended approach is to use tabbed options panes in the right when there are more sub-categories; however, when the number of tabs to the right exceeds what can reasonably be displayed in one row it is recommended to create sub-categories in the left hand list and move some of the tabs into the newly created sub-categories. A categories which contain build configurations dependent setting have to be shown bellow the Build Configuration category.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |                                                            | |
| | Sources & Files    |   |                                                            | |
| |                    |   |                                                            | |
| | Resources          |   |                                                            | |
| |                    |   |                                                            | |
| | Running Profiles   |   |                                                            | |
| |   Run Profile 1    |   |                   Options Panel                            | |
| |   Run Profile 2    |   |                                                            | |
| |   Run Profile n    |   |                                                            | |
| |                    |   |          The customizer of selected category.              | |
| | Build Configs      |   |                                                            | |
| |                    |   |                                                            | |
| | Build Steps        |   |                                                            | |
| |   Build Step 1     |   |                                                            | |
| |   Build Step 2     |   |                                                            | |
| |   Build Step n     |   |                                                            | |
| |                    |   |                                                            | |
| |                    |   |                                                            | |
| |                    |   |                                                            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
	  

The components of this dialog are:

  1. Project Options category list. A list of project options categories. Individual projects may overwrite, or extend the list for their own purposes. Instances of Running Profiles and Build Targets are listed also in the list as a subcategories for convenient access to their customizers. Default categories: General, Sources & Files, Resources, Running Profiles, Build Configurations, Build Steps
  2. Options panel. The space is used for displaying options for the selected category. The panel may be a tabbed panel to show sub-groupings within the left hand categories.
  3. Ok button. Commits changes and closes dialog.
  4. Cancel button. Discards any changes and closes dialog.
  5. Help button. Opens help window for the content currently selected.

The general category lets the user setup general properties of the project.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| |/General////////////|   |                                                            | |
| |                    |   |  Project Name: |____________________________________|      | |
| | Sources & Files    |   |                                                            | |
| |                    |   |  Project Directory: |_______________________________|      | |
| | Resources          |   |                                                            | |
| |                    |   |  Project File Name: |_______________________________|      | |
| | Running Profiles   |   |                                                            | |
| |   Run Profile 1    |   |  [X] Set this project as the Active project.               | |
| |   Run Profile 2    |   |                                                            | |
| |   Run Profile n    |   |                                                            | |
| |                    |   |                                                            | |
| | Build Configs      |   |                                                            | |
| |                    |   |                                                            | |
| | Build Steps        |   |                                                            | |
| |   Build Step 1     |   |                                                            | |
| |   Build Step 2     |   |                                                            | |
| |   Build Step n     |   |                                                            | |
| |                    |   |                                                            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
		

Components of this dialog are:

  1. Project name text field. Lets the user change the project's name.
  2. Project Directory text field. A read-only text field that tells the user where the project is located.
  3. Project File Name text field. This is non-editable text filed serving informational purpose. It displays the project file name. The name pattern is "<project name>.project".
  4. Set as the active project checkbox. Sets this project to be the active project (see below).

The Sources and Files category is where the sources and files are added to the project. Specific project natures can add in custom UI here. Modules can add functionality to recognize types of sources and files and choose to do something special with them.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Sources and Files:                                        | |
| |/Sources & Files////|   |  +--------------------------------------------+            | |
| |                    |   |  |                                            | [ Add... ] | |
| | Resources          |   |  |                                            |            | |
| |                    |   |  |                                            | [ Remove ] | |
| | Running Profiles   |   |  |                                            |            | |
| |   Run Profile 1    |   |  |       For rent by modules                  |            | |
| |   Run Profile 2    |   |  |                                            |            | |
| |   Run Profile n    |   |  |                                            |            | |
| |                    |   |  |                                            |            | |
| | Build Configs      |   |  |                                            |            | |
| |                    |   |  |                                            |            | |
| | Build Steps        |   |  |                                            |            | |
| |   Build Step 1     |   |  |                                            |            | |
| |   Build Step 2     |   |  |                                            |            | |
| |   Build Step n     |   |  |                                            |            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
			

Components of this dialog are:

  1. Sources and Files list: Space for rent by modules to list what sources roots are present in the project. Modules may complete replace this panel with their own UI -what is here comes from free from the infrastructure.
  2. Add... button. By default, displays a dialog that lets the user browse for an existing file or folder, and then add that object. If the project supports a special type of container or complex object that requires special browsing support (e.g., web apps) then after selecting a location a status dialog opens while the location is scanned for sources that are recognized by the project (e.g., java packages, web apps, etc).
  3. Remove button. This button is only enabled if something is selected in the source contents list. Clicking the button brings up a message dialog asking the user to confirm the removal.

The Resources category is where resources are added to the project. Specific project natures can add in custom UI here.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Resources:                                                | |
| | Sources & Files    |   |  +--------------------------------------------+            | |
| |                    |   |  |                                            | [ Add... ] | |
| |/Resources//////////|   |  |                                            |            | |
| |                    |   |  |                                            | [ Edit   ] | |
| | Running Profiles   |   |  |                                            |            | |
| |   Run Profile 1    |   |  |       For rent by modules                  | [ Remove ] | |
| |   Run Profile 2    |   |  |                                            |            | |
| |   Run Profile n    |   |  |                                            | [ Mv Up  ] | |
| |                    |   |  |                                            |            | |
| | Build Configs      |   |  |                                            | [ Mv Dwn ] | |
| |                    |   |  |                                            |            | |
| | Build Steps        |   |  |                                            |            | |
| |   Build Step 1     |   |  |                                            |            | |
| |   Build Step 2     |   |  |                                            |            | |
| |   Build Step n     |   |  |                                            |            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
			

Components of this dialog are:

  1. Resources list: Space for rent by modules to list what resources are present in the project. Modules may complete replace this panel with their own UI -what is here comes from free from the infrastructure.
  2. Add... button: opens a filechooser or wizard to select a resource to add to the project
  3. Edit button: opens the customizer for the selected resource
  4. Remove button: removes the selected resource in the list.
  5. Move Up/Down buttons: move the resource up or down in the list. The order defined here is inherited in Build Steps and Profiles (though it may be overridden at each of those places).

The Running Profiles category is where profiles are added and managed in the project. Specific project natures can add in custom UI here.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Running Profiles:                                         | |
| | Sources & Files    |   |  +--------------------------------------------+            | |
| |                    |   |  | Run Profile 1                              | [ Add... ] | |
| | Resources          |   |  |--------------------------------------------|            | |
| |                    |   |  | Run Profile 2 (Active)                     | [ Remove ] | |
| |/Running Profiles///|   |  |--------------------------------------------|            | |
| |   Run Profile 1    |   |  | Run Profile n                              | [Set Actv] | |
| |   Run Profile 2    |   |  |--------------------------------------------|            | |
| |   Run Profile n    |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Configs      |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Steps        |   |  |                                            |            | |
| |   Build Step 1     |   |  |--------------------------------------------|            | |
| |   Build Step 2     |   |  |                                            |            | |
| |   Build Step n     |   |  |--------------------------------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
			

Components of this dialog are:

  1. Running Profile list. Profiles lists the profiles in the project. The active profile is bold in the list. It is is used when the project is run.
  2. Add... button. opens the Profile wizard. A newly created profile is inserted into the profile list and also into the category list. The new profile list gets selected after closing the wizard, so that the user can preview the profile and make additional changes.
  3. Remove button: removes the selected Profile in the list.
  4. Set Active button: sets the selected profile active: Disabled if profile selected is already active.

Build Configurations category is the place where the user manages existing project build configurations. The user creates, removes or makes a build configuration active in this panel.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Build Configurations:                                     | |
| | Sources & Files    |   |  +--------------------------------------------+            | |
| |                    |   |  | Build Configuration 1 (Active)             | [ Add... ] | |
| | Resources          |   |  |--------------------------------------------|            | |
| |                    |   |  | Build Configuration 2                      | [ Edit   ] | |
| | Running Profiles   |   |  |--------------------------------------------|            | |
| |   Run Profile 1    |   |  | Build Configuration n                      | [ Remove ] | |
| |   Run Profile 2    |   |  |--------------------------------------------|            | |
| |   Run Profile n    |   |  |                                            | [Set Actv] | |
| |                    |   |  |--------------------------------------------|            | |
| |/Build Configs//////|   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Steps        |   |  |                                            |            | |
| |   Build Step 1     |   |  |--------------------------------------------|            | |
| |   Build Step 2     |   |  |                                            |            | |
| |   Build Step n     |   |  |--------------------------------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+

The components of this dialog are:

  1. Build Configurations list. Lists all the build configurations. The active configuration is bold with "(Active)" word appended.
  2. Add... button. Opens the Add Build Configuration dialog.
  3. Edit button. Opens the Edit Build Configuration dialog.
  4. Remove button. Removes the selected Build Configuration from the list.
  5. Set Active button. Sets the selected build configuration active. Disabled if build configuration selected is already active.

Adding a new build configuration dialog looks as follows:

+------------------------------------------------+
| New Build Configuration                        |
+------------------------------------------------+
|                                                |
| Build Config Name: |_________________________| |
|                                                |
| Copy Settings From: |_Build Config 2_______|v| |
|                                                |
| [x] The configuration is public and is checked |
|     into VCS with the project.                 |
|                                                |
|                              [ Ok ] [ Cancel ] |
+------------------------------------------------+
		

Components of this dialog are:

  1. Configuration name text field. Lets the user name the configuration. If the user provides the name of an existing configuration, she is asked (upon pressing OK) whether or not she wants to overwrite the old configuration.
  2. Copy Settings From combo box. Allows the user to base the new configuration on a existing configuration. One of the values is <Project Defaults>, which means the project default should be used. Default value is <Project Defaults>
  3. This configuration is public checkbox. Lets the user determine whether this configuration is stored in the VCS (and is therefore visible to others) or whether it's kept private. Checked by default.

The user can change the name and public status in the Edit Build Configuration dialog.

+------------------------------------------------+
| Build Configuration                            |
+------------------------------------------------+
|                                                |
| Build Config Name: |_________________________| |
|                                                |
| [x] The configuration is public and is checked |
|     into VCS with the project.                 |
|                                                |
|                              [ Ok ] [ Cancel ] |
+------------------------------------------------+
		

Components of this dialog are:

  1. Configuration name text field. Lets the user name the configuration. If the user provides the name of an existing configuration, she is asked (upon pressing OK) whether or not she wants to overwrite the old configuration. The text field contains the name of configuration by default.
  2. This configuration is public checkbox. Lets the user determine whether this configuration is stored in the VCS (and is therefore visible to others) or whether it's kept private. Shows the current status by default.

The Build Steps category is where build steps are added to the project. Specific project natures can add in custom UI here.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Build Steps:                                              | |
| | Sources & Files    |   |  +--------------------------------------------+            | |
| |                    |   |  | Build Step 1 (Default)                     | [ Add... ] | |
| | Resources          |   |  |--------------------------------------------|            | |
| |                    |   |  | Build Step 2                               | [ Remove ] | |
| | Running Profiles   |   |  |--------------------------------------------|            | |
| |   Run Profile 1    |   |  | Build Step n                               | [Set Dflt] | |
| |   Run Profile 2    |   |  |--------------------------------------------|            | |
| |   Run Profile n    |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Configs      |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| |/Build Steps////////|   |  |                                            |            | |
| |   Build Step 1     |   |  |--------------------------------------------|            | |
| |   Build Step 2     |   |  |                                            |            | |
| |   Build Step n     |   |  |--------------------------------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
			

Components of this dialog are:

  1. Build steps list. Space for rent by modules to list what build steps are present in the project. Modules may complete replace this panel with their own UI -what is here comes from free from the infrastructure. The default build step is bold with the (Default) word appended.
  2. Add... button. Adds a new build step by bringing up the New... wizard. After closing the wizard the new build step in the category list gets selected. The button is always enabled.
  3. Remove button. Removes the selected build step. Only enabled if a build step is selected. The user is also asked if they want to remove the associated build step directories.
  4. Set Default button. Makes the selected build step default. Disabled if the selected build step is the default.

When adding or editing a Build Step to the project the wizard or customizer that facilitates the action needs to include as a step or part of the customizer the following UI to specify the output directory. This UI is necessary only for build steps that produce some kind of output.

+------------------------------------------------+
|                                                |
| Output Directory: |_____________| [ Browse...] |
|                                                |
| [x] Append a directory for each project        |
|     configuration.                             |
|                                                |
| Preview: |_preview\of\final\dir______________| |
|                                                |
+------------------------------------------------+	  
	  

Components of this dialog are:

  1. Output Directory text field. Provides a directory under which built output can be collected. By default, this text field is populated with "<project-home>/output". Each build step stores its built output under a subdirectory that bears the build step's name. In other words, a single build step stores its output under "<output-directory>/<build-step-name>/". Note that the use of this umbrella output directory for any one build step is optional. The build step may let the user choose a completely different directory for the built files, or it may use none at all.
  2. Browse... button. Opens a jfilechooser for selecting the output directory.
  3. Append a sub folder checkbox. If checked, then a set of subdirectories is created under the umbrella step. Each subdirectory bears the name of one of the current settings configurations. If an individual build step is using these default output directories, then its own folder is moved to be underneath this configuration sub folder. Thus, a single build step stores its output under "<output-directory>/<settings-configuration-name>/<build-step-name>/". This box is checked by default.
  4. Preview of out directory. A read only textfield with the output directory. The content changes based on the state of the check box. When the string is too long to be completely visible in the text field it should be possitioned so that the end (right most) of the string is visible.

The customizer of a specific Build Step instance contains the Build Configuration selector.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+                                                                  | 
| | General            |   Build Configuration: |_Build Configuration 1 (Active)______|v| |
| |                    |   +------------------------------------------------------------+ |
| | Sources & Files    |   |                                                            | |
| |                    |   |                                                            | |
| | Resources          |   |                                                            | |
| |                    |   |                                                            | |
| | Running Profiles   |   |                                                            | |
| |   Run Profile 1    |   |                                                            | |
| |   Run Profile 2    |   |                                                            | |
| |   Run Profile n    |   |                 Build Step Customizer                      | |
| |                    |   |                                                            | |
| | Build Configs      |   |                                                            | |
| |                    |   |                                                            | |
| | Build Steps        |   |                                                            | |
| |///Build Step 1/////|   |                                                            | |
| |   Build Step 2     |   |                                                            | |
| |   Build Step n     |   |                                                            | |
| |                    |   |                                                            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
			

Components of this dialog are:

  1. Build Configuration combo box. Allows the user select a configuration she wants to change the settings in. All the changes made in the Build Step customizer are stored into the configuration.
  2. Build Step Customizer is a panel provided by the selected build step.

Java Project UI Spec

The Project Customizer for a Java project replaces some of the basic functionality provided for by the infrastructure as well as adds additional tabs to the default categories.

The General category has two tabs: General and Platform. The general tab is no different than what is provided by the infrastructure. The Platform tab lets the user select the platform for the project.

The java executor, compiler and other tools' settings provided by the platform can be changed in individual Build Steps and Running Profiles. Also the compiler can be changed only in an individual Build Step.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+     _________  __________                                        |
| |/General////////////|    / General \/ Platform \                                       |
| |                    |   |----------/            \------------------------------------+ | 
| | Sources & Files    |   |                                                            | |
| |                    |   |  Target Platform: |_JDK 1.4_Standard Edition__|v| [ Edit ] | |
| | Resources          |   |                                                            | |
| |                    |   |                                                            | |
| | Running Profiles   |   |                                                            | |
| |   Run Main Class   |   |                                                            | |
| |   Run Applet       |   |                                                            | |
| |   Run Tests        |   |                                                            | |
| |                    |   |                                                            | |
| | Build Configs      |   |                                                            | |
| |                    |   |                                                            | |
| | Build Steps        |   |                                                            | |
| |   Compile          |   |                                                            | |
| |   Create Jar       |   |                                                            | |
| |   Compile Tests    |   |                                                            | |
| |                    |   |                                                            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
			  

Components of this dialog are:

  1. Target Platform combo box. A list of known platforms in the IDE. The default for J2SE projects is the platform the IDE is running on.
  2. Edit button: Opens the platform registry dialog that lets the user add or edit platforms the IDE knows about. (no change from current spec).
  3. Space for rent. Each platform may add options to this area.

The Sources and Files category panel is replaced with a tree-table. The left column lists source roots added to the project. Each source root is listed by its full path. The right column contains a combobox for specifying the role of a directory in the project.

The parent nodes are the regular source roots displayed in the physical view of the project explorer. Children of the source roots are directories with a special role in the project. The role is defined by the right column. In case of java project the only role is the package root. Each source root can have only one level of children, it means the roles can not be nested.

Regardless of what the source will be used for the user adds sources the same way. The Add... button opens a filechooser that lets the user select a location. If selected directory is underneath an existing source root then it is added as its child. The user can then define the role (Package Root) of this directory. If a completely new source location is selected a status dialog opens and a heuristic check determines if the source root or its children can be used as java roots:

  • If a source root is a java root it is added to the tree-table and the Package Root role is selected by default. A java root is considered the directory containing sources (i.e. in /src/org/netbeans/modules, src is the java root).
  • If a source root contains java roots some number of directories below the source root is added to the tree-table and each java root is added as a child of the source root in the tree-table. The children nodes are listed as the full path relative to the source root that contains them. The parent source root does not have selected role but each of the found java root does.

The dialog below contains two source roots. The first is the project root that contains two java roots: c:\myProjects\funny\src and c:\myProjects\funny\lib, the second is a simple java root located at c:\mySources\stuff\src.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Sources and Files:                                        | |
| |/Sources & Files////|   |  +--------------------------------------------+            | |
| |                    |   |  | Location               |       Role        | [ Add... ] | |
| | Resources          |   |  |------------------------|-------------------|            | |
| |                    |   |  | c:\myProject           |_Plain Src Root__|v| [ Remove ] | |
| | Running Profiles   |   |  |------------------------|-------------------|            | |
| |   Run Main Class   |   |  |   funny\src            |_Package Root____|v|            | |
| |   Run Applet       |   |  |------------------------|-------------------|            | |
| |   Run Tests        |   |  |   funny\lib            |_Package Root____|v|            | |
| |                    |   |  |------------------------|-------------------|            | |
| | Build Configs      |   |  | c:\mySources\stuff\src |_Package Root____|v|            | |
| |                    |   |  |------------------------|-------------------|            | |
| | Build Steps        |   |  |                        |                   |            | |
| |   Compile          |   |  |------------------------|-------------------|            | |
| |   Create Jar       |   |  |                        |                   |            | |
| |   Compile Tests    |   |  |------------------------|-------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
			  

Components of this dialog are:

  1. Sources and Files list: Tree-table displaying source roots on the left and how they are used on the right. Java roots and source roots that contain no java roots are single row nodes in the tree-table. Source roots that contain java roots show the java roots as children of the source roots.
  2. Role column. Displays and allows the user to specify the role of directory in the project. The values for regular source items are "Package Root" and "Plain Source Root".
  3. Add... button. Opens a filechooser. The user selects the location to add. After clicking Ok in the filechooser a heuristic search checks if the source root added contains java source. A progress dialog may be shown during the search.
  4. Remove button. This button is only enabled if something is selected in the source contents list. Removing source roots follows these rules:
    • Removing a row that does not have children removes the row.
    • Removing a row that does have children removes both the row and all of its children
    Remove button is disable if the project directory is selected.

The Resources contains tabs for each of the different types of project wide resources. A single resource can be added to more than one tab though generally, the tabs are used for resources that are separate. The resources edited in this category are applied project wide. Order and use are used as default values for Build Steps and Running Profiles but both may change the order and or usage or project wide resources. See below for more details.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+     ___________  _____________  _____________                    |
| | General            |    / Classpath \/ Lib Javadoc \/ Lib Sources \                   |
| |                    |   |             \----------------------------------------------+ | 
| | Sources & Files    |   |                                                            | |
| |                    |   |  +--------------------------------------------+            | |
| |/Resources//////////|   |  | Libraries                   |   Use In     | [ Add... ] | |
| |                    |   |  |-----------------------------|--------------|            | |
| | Running Profiles   |   |  | c:\jars\libs.jar            | Everywhere |V| [ Edit   ] | |
| |   Run Main Class   |   |  |-----------------------------|--------------|            | |
| |   Run Applet       |   |  | c:\jars\utils.jar           | Everywhere |V| [ Remove ] | |
| |   Run Tests        |   |  |-----------------------------|--------------|            | |
| |                    |   |  | c:\jars\misc.jar            | Runtime    |V| [ Mv Up  ] | |
| | Build Configs      |   |  |-----------------------------|--------------|            | |
| |                    |   |  | [xmlLibrary] xmlParse.jar   | Everywhere |V| [ Mv Dwn ] | |
| | Build Steps        |   |  |-----------------------------|--------------|            | |
| |   Compile          |   |  |                             |              |            | |
| |   Create Jar       |   |  |-----------------------------|--------------|            | |
| |   Compile Tests    |   |  |                             |              |            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+
			  

Components of this dialog are:

  1. Libraries table: Left column lists the path to the classpath resource. This may be a directory or a jar file. The right column, Use In, determines where to use the item. Values are: Everywhere, use the Resource for building and running the project; Run Time, only use the resource when running the project; Compile Time, only use the resource when building the project. Default: Everywhere.
  2. Add... button: opens a wizard for adding a new resource. (Wizard from current Java Spec will be used with minor changes). Always enabled.
  3. Edit button: opens the customizer for the selected resource. (Customizers for types of resources are unchanged from current spec). Enabled when a resource is selected.
  4. Remove button: removes the selected resource in the list. Enabled when a resource is selected. Disabled when a resource added by a Library is selected.
  5. Move Up/Down buttons: move the resource up or down in the list. The order defined here is inherited by Build Steps and Profiles (though it may be overridden at each of those places). Enabled when a resource is selected.

The Javadoc tab lists javadoc resources in the project.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+     ___________  _____________  _____________                    |
| | General            |    / Classpath \/ Lib Javadoc \/ Lib Sources \                   |
| |                    |   |------------/               \-------------------------------+ | 
| | Sources & Files    |   |                                                            | |
| |                    |   |  Library Javadoc:                                          | |
| |/Resources//////////|   |  +--------------------------------------------+ [ Add... ] | |
| |                    |   |  |                                            |            | |
| | Running Profiles   |   |  |--------------------------------------------| [ Edit   ] | |
| |   Run Main Class   |   |  |                                            |            | |
| |   Run Applet       |   |  |--------------------------------------------| [ Remove ] | |
| |   Run Tests        |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Configs      |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Steps        |   |  |                                            |            | |
| |   Compile          |   |  |--------------------------------------------|            | |
| |   Create Jar       |   |  |                                            |            | |
| |   Compile Tests    |   |  |--------------------------------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+

Components of this dialog are:

  1. Javadoc roots list: A list of Javadocs given by their location.
  2. Add... button: Opens the add javadoc dialog. Always enabled.
  3. Edit button: opens the edit javadoc dialog. Enabled when an item is selected.
  4. Remove button: removes the selected resource in the list. Enabled when an item is selected.

The Lib Sources tab lists sources of libraries used in the project.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+     ___________  _____________  _____________                    |
| | General            |    / Classpath \/ Lib Javadoc \/ Lib Sources \                   |
| |                    |   |---------------------------/               \----------------+ | 
| | Sources & Files    |   |                                                            | |
| |                    |   |  Library Sources:                                          | |
| |/Resources//////////|   |  +--------------------------------------------+ [ Add... ] | |
| |                    |   |  |                                            |            | |
| | Running Profiles   |   |  |--------------------------------------------| [ Edit   ] | |
| |   Run Main Class   |   |  |                                            |            | |
| |   Run Applet       |   |  |--------------------------------------------| [ Remove ] | |
| |   Run Tests        |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Configs      |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Steps        |   |  |                                            |            | |
| |   Compile          |   |  |--------------------------------------------|            | |
| |   Create Jar       |   |  |                                            |            | |
| |   Compile Tests    |   |  |--------------------------------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+

Components of this dialog are:

  1. Library Sources list: A list of library sources used in the project.
  2. Add... button: Opens the add sources dialog. Always enabled.
  3. Edit button: opens the edit sources dialog. Enabled when an item is selected.
  4. Remove button: removes the selected source item in the list. Enabled when an item is selected.

The Running Profiles category is where profiles are added and managed in the project.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Running Profiles:                                         | |
| | Sources & Files    |   |  +--------------------------------------------+            | |
| |                    |   |  | Run Main Class                             | [ Add... ] | |
| | Resources          |   |  |--------------------------------------------|            | |
| |                    |   |  | Run Applet (Active)                        | [ Remove ] | |
| |/Running Profiles///|   |  |--------------------------------------------|            | |
| |   Run Main Class   |   |  | Run Tests                                  | [Set Actv] | |
| |   Run Applet       |   |  |--------------------------------------------|            | |
| |   Run Tests        |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Configs      |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Steps        |   |  |                                            |            | |
| |   Compile          |   |  |--------------------------------------------|            | |
| |   Create Jar       |   |  |                                            |            | |
| |   Compile Tests    |   |  |--------------------------------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+

Components of this dialog are:

  1. Running Profile list. Profiles lists the profiles in the project. The active profile is bold in the list. It is is used when the project is run.
  2. Add... button. opens the Profile wizard. A newly created profile is inserted into the profile list and also into the category list. The new profile list gets selected after closing the wizard, so that the user can preview the profile and make additional changes.
  3. Remove button: removes the selected Profile in the list.
  4. Set Active button: sets the selected profile active: Disabled if profile selected is already active.

Build Configurations

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Build Configurations:                                     | |
| | Sources & Files    |   |  +--------------------------------------------+            | |
| |                    |   |  | Debug (Active)                             | [ Add... ] | |
| | Resources          |   |  |--------------------------------------------|            | |
| |                    |   |  | Release                                    | [ Edit   ] | |
| | Running Profiles   |   |  |--------------------------------------------|            | |
| |   Run Main Class   |   |  |                                            | [ Remove ] | |
| |   Run Applet       |   |  |--------------------------------------------|            | |
| |   Run Tests        |   |  |                                            | [Set Actv] | |
| |                    |   |  |--------------------------------------------|            | |
| |/Build Configs//////|   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Steps        |   |  |                                            |            | |
| |   Compile          |   |  |--------------------------------------------|            | |
| |   Create Jar       |   |  |                                            |            | |
| |   Compile Tests    |   |  |--------------------------------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+

The components of this dialog are:

  1. Build Configurations list. Lists all the build configurations. The active configuration is bold with "(Active)" word appended.
  2. Add... button. Opens the Add Build Configuration dialog.
  3. Edit button. Opens the Edit Build Configuration dialog.
  4. Remove button. Removes the selected Build Configuration from the list.
  5. Set Active button. Sets the selected build configuration active. Disabled if build configuration selected is already active.

The Build Steps category is where build steps are added to the project. Specific project natures can add in custom UI here.

+-----------------------------------------------------------------------------------------+
| Project Customizer                                                                      |
+-----------------------------------------------------------------------------------------+
| +--------------------+   +------------------------------------------------------------+ |
| | General            |   |                                                            | |
| |                    |   |  Build Steps:                                              | |
| | Sources & Files    |   |  +--------------------------------------------+            | |
| |                    |   |  | Compile (Default)                          | [ Add... ] | |
| | Resources          |   |  |--------------------------------------------|            | |
| |                    |   |  | Create Jar                                 | [ Remove ] | |
| | Running Profiles   |   |  |--------------------------------------------|            | |
| |   Run Main Class   |   |  | Compile Tests                              | [Set Dflt] | |
| |   Run Applet       |   |  |--------------------------------------------|            | |
| |   Run Tests        |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| | Build Configs      |   |  |                                            |            | |
| |                    |   |  |--------------------------------------------|            | |
| |/Build Steps////////|   |  |                                            |            | |
| |   Compile          |   |  |--------------------------------------------|            | |
| |   Create Jar       |   |  |                                            |            | |
| |   Compile Tests    |   |  |--------------------------------------------|            | |
| |                    |   |  +--------------------------------------------+            | |
| +--------------------+   +------------------------------------------------------------+ |
|                                                                                         |
|                                                              [ Ok ] [ Cancel ] [ Help ] |
+-----------------------------------------------------------------------------------------+

Components of this dialog are:

  1. Build steps list. Space for rent by modules to list what build steps are present in the project. Modules may complete replace this panel with their own UI -what is here comes from free from the infrastructure. The default build step is bold with the (Default) word appended.
  2. Add... button. Adds a new build step by bringing up the New... wizard. After closing the wizard the new build step in the category list gets selected. The button is always enabled.
  3. Remove button. Removes the selected build step. Only enabled if a build step is selected. The user is also asked if they want to remove the associated build step directories.
  4. Set Default button. Makes the selected build step default. Disabled if the selected build step is the default.

The classpath tab for Compiled Classes Build Steps and all Java Profiles contains the list of project wide classpath resources in a gray color and resources added specifically to the build step in black. A column along the right lets the user choose to use the resource in the build target or not. Classpath items that are project wide cannot be removed from the build step but those that were added only to the build step can.

  ___________ 
 / Classpath \
|             \----------------------------------------------+ 
|                                                            |
|  +--------------------------------------------+            | 
|  | Libraries                   |     Use      | [ Add... ] | 
|  |-----------------------------|--------------|            | 
|  | c:\jars\libs.jar            |     [X]      | [ Edit   ] | 
|  |-----------------------------|--------------|            | 
|  | c:\jars\utils.jar           |     [X]      | [ Remove ] | 
|  |-----------------------------|--------------|            | 
|  | c:\jars\misc.jar            |     [ ]      | [ Mv Up  ] | 
|  |-----------------------------|--------------|            | 
|  | [xmlLibrary] xmlParse.jar   |     [X]      | [ Mv Dwn ] | 
|  |-----------------------------|--------------|            | 
|  | c:\jars\tools.jar           |     [X]      |            | 
|  |-----------------------------|--------------|            | 
|  |                             |              |            | 
|  +--------------------------------------------+            | 
+------------------------------------------------------------+ 

Components of this dialog are:

  1. Resource tree: Left column is a list of resources identified by their location. The right column is a list of check boxes indicating if the resource should be used or not.
  2. Add... button. Adds a new resource. Always enabled. (current java spec has more rules about how this works for build steps and profiles).
  3. Edit... button. Brings up the build step editor. Enabled when a resource is selected.
  4. Remove button. Removes the selected build step. Only enabled on resources that belong to the build step/profile (listed in black).
  5. Move Up/Down buttons: Moves the selected resource up or down. Only enabled on resources that belong to the build step/profile.

Java Root/Source Root interaction

Bugs: 33597, 33599

Priority: P1

The Java root/Source root distinction confused most of the participants as well and from further review really seems to be an implementation detail and not a user level concept (or at least not a very clear user level concept). The problem that this is solving is two fold: 1. a requirement at the time was that it was unacceptable to mix java and non-java source nodes under one container (the Source node); 2. the Packages node communicates what has been effectively added as sources to the classpath of the project.

These two problems can still be solved but with Source and Java root removed from the user experience. The main idea is to remove the user concept of Java and Source roots from the UI and let the containers and logical structure of the project define those differences without special terminology. To do so some basic interaction needs to be changed:

  • Adding Sources from the wizard (Java Project): User adds only source files. After doing so the IDE works out if the new source root is a java root or contains a java root. If it is a java root it will be selected for the classpath by default; if it contains one or more java roots they will be shown as children of the source root and also added to the project classpath by default. See the Sources and Files customizer in the Project Customizer section.
  • Split Logical and Physical views in the Explorer: By splitting the views the idea that the Packages node is a sub-set of project contents is clearer. See the Explorer section for more details.

Profiles

Bugs: 33606

Priority: P2

Profiles were confusing to all participants. They only added complexity to what should have been a very task -running the project or a class therein. Running a project and running a class should be very straight forward; one set of recommendations is to:

  • Remove the Profile setup as a necessary step (Infrastructure): When a project is run with no main class set a dialog opens that lets the user select from the runnable classes in the project. Finding runnable classes may take some time so the search mechanism shows status and can be canceled. Selecting this class creates a profile with the same name but does not actually open the profile dialog.
  • Automatically create and set a profile active (Infrastructure/Java Project): When a new runnable class is created a profile for it is automatically created (the profile should have the same name as the class) and the wizard contains an option to use that class when running the project.

The same rules should be applicable to debugging.

Another complexity is the typing of profiles -the difference between running and debugging adds a layer to the interaction that may not need to be there. The recommendation is to:

  • Remove Profile types -run/debug (Infrastructure): Have only one type of profile for running or debugging. This profile is active or not and applies to both project wide run and debug actions. If the active profile cannot be used for one of the actions (run or debug) a dialog warns the user with the option to change the active profile or not.

Infrastructure UI Spec:

Profiles still maintain the same functionality but the project specific handling of how to automatically create and manage projects to streamline running a project is more clearly specified in the Java UI Spec.

The only change necessary in the Infrastructure UI Spec is the removal of typing between run and debug profiles.

Java UI Spec:

Profiles manage how the project is run and are necessary for a project to be run or debugged. The user manages profiles through the Project Customizer. The user gets to the Profiles section by either opening the Project customize from the Project node or through the Run | Edit Profiles menu item in the main menu. The main menu item opens the Project Customizer for the selected project or the active project if no project is currently selected. The profile editor panel dialog lets the user create new and edit existing profiles.

When there are multiple profiles one must be set as active so the project can be run or debugged. The active profile is normally used for both running and debugging; however, if the profile uses something that cannot be used for one or the other of these actions a dialog will warn the user and let them select a different profile to complete the action.

Profiles for runnable objects can be created:

  • as part of the new wizard when a runnable object is being created
  • as a search for runnable objects if no profile has been set up
  • as the result of a manual add through the profile editor dialog

Automatically created profiles are named after the package and classes they use (e.g. org.netbeans.modules.Main).

Profiles are deleted when the class they use is deleted, removed or edited so that it is no longer runnable. When a class that a profile depends on is moved (cut/paste) the profile stays in synch with the class move -the user should not have to change anything provided the class is moved to a location still within the classpath of the project.

New Profile from New Class Wizard:

When creating a new runnable class the final step allows the user to specify whether to create a profile or not. The default is to create a profile for a runnable class with default execution for the type of class being created (class execution, applet execution, etc) The final panel looks like this:

+--------------------------------------------------------------+
|                                                              |
|  [x] Create a new Profile using <class name> class           |
|                                                              |
|      Run as: |_<default for class type>__________________|V| |
|                                                              |
|      Runtime Arguments: |__________________________________| |
|                                                              |
|      [x] Set as active Profile                               |
|                                                              |
+--------------------------------------------------------------+

Components of this panel are:

  1. Checkbox with choice for creating a new profile. Default: Checked
  2. Field for selecting how to Run the class. Default: <default for class type>
  3. Runtime Arguments text field. Allows the user to pass runtime arguments to java executor. Enabled only for main class execution. Default: empty
  4. Checkbox to set profile active: Default: Checked (Checked and disabled if there are no other profiles in the project)
Creating a Profile Automatically:

When the user tries to run or debug a project with none existing profile a dialog opens asking the user to select a class to run. At the same time a status dialog opens on top of the select class dialog indicating that the IDE is searching through the project sources for runnable classes. The user can cancel the search and manually select a class or, if the search is allowed to finish select from the candidate classes which they want to run.

+--------------------------------------------------------------+
| Select runnable class                                        |
+--------------------------------------------------------------+
|                                                              |
|      Run class: |_<package>.<class name>_____|V| [Browse...] |
|                                                              |
|      Run as: |_<default for class type>__________________|V| |
|                                                              |
|      Runtime Arguments: |__________________________________| |
|                                                              |
|                                            [ Ok ] [ Cancel ] |
+--------------------------------------------------------------+

Components of this dialog are:

  1. Run class combo-box for selecting from found classes. Editable. Default: empty.
    • If only one runnable class was found it is selected in the combo-box.
    • If multiple runnable classes were found the combo-box is opened to show the choice and indicate that the user needs to select one.
    • If no runnable classes were found a warning dialog prompts the user that no runnable classes were found and they should either create one or manually select a class if they wish.
  2. Browse button opens a logical view filechooser for manually selecting class to run.
  3. Field for selecting how to Run the class: Default: <default for class type>
  4. Field for arguments: Default: empty
  5. Ok and Cancel buttons

The search dialog that opens atop the Select runnable class dialog look like:

+---------------------------------------------------------------+
| Searching...                                                  |
+---------------------------------------------------------------+
|                                                               |
|  Searching for runnable classes in the project:               |
|                                                               |
|  |/////////////////////////_48%_____________________________| |
|                                                               |
|                                                    [ Cancel ] |
+---------------------------------------------------------------+

Components of this dialog are:

  1. Status bar for search completion
  2. Cancel button to cancel search and return to Select runnable class dialog

When the search completes the dialog closes and returns the user to the Select runnable class dialog.

Manually adding a Profile through the Profile Editor dialog

This work flow represents no change from the ui spec.

Menus (order, context sensitive items)

Bugs: 33600

Priority: P2

Main menu structure contributed to a confusion of participants. The goal of recommendations is to fix the ordering and structure of main menu items and incorporate changes that reflect other usability recommendations.

Expose "Customize Project" menu item in the Project menu. Customization of project is centralized in one place, containing all the project pieces. The menu item allowing access to the project customizer should be put at more visible place in the main menu.

Remove items for creating a new resource and output from main menu. Items for creating a new resource and new output are removed from the main menu as a result of moving Resources and Output management into project customizer.

Expose build steps in the main menu. Build Steps (former Output Nodes) are removed from the explorer. Therefor it is needed to allow the user easy access to building a project using also other than the default build step.

Merge run/build profiles menus. It should works the same way as selecting the active configurations. Or if it works as now, then we should change the name and position of actions, e.g. "Run Active Project With >", "Run Active Project in Debugger With >".

Infrastructure/Java UI Spec:

1 Menubar Menus

The goal of main menu composition is to provide convenient access to all important actions.

1.1 File Menu

The first menu in main menu is an object menu. It means, it lets the user create, open and close all types of objects the IDE allows to create.

Project menu:

    |  File  |
    ----------
    New                           > 
    Open                          >
    Close "<current>" Project
    Customize "<current>" Project
    -------------------------------
    Save "<current file>"
    Save All Files
    Close "<current file>"
    -------------------------------
    Recent Projects               >
    -------------------------------
    Printer Page Setup
    Print...
    -------------------------------
    Exit

The first section of File menu is an object creation and project manipulation section. It allows to create and open all types of objects (project, project group, file) and close and customize a current project.

The second section is a file manipulation section. It allows to save and close a current file or all files. The third section is a recent project section, and the last is a printer section.

The function of menu items is following:

  1. New - displays New pullright menu.
  2. Open - displays Open pullrigh menu.
  3. Close "<current>" Project - closes the current project.
  4. Customize "<current>" Project - opens the customizer of current project.
  5. Save "<current file>" - saves a current file.
  6. Save All Files - saves all open and modified files.
  7. Close "<current file>" - closes a current file.
  8. Recent Projects - displays a recently closed projects.
  9. Printer Page Setup - opens a printer page customizer.
  10. Print - opens the print dialog.
  11. Exit - exits the application.

1.1.1 File|New Menu

File|New menu allows to create a new project, project group and file or folder inside a project. The menu composition is following:

    Project...
    Project Group...
    ----------------
    File/Folder...

The function of menu items is following:

  1. Project - opens the new project wizard.
  2. Project Group - opens the new project group wizard.
  3. File/Folder - opens the new file/folder wizard.

1.1.2 File|Open Menu

Would not change.

1.1.3 File|Recent Projects Menu

Would not change

1.2 Build Menu

Build menu is used for building a project. Building an individual files is not supported. The menu lets the user to build the active project or current project. User can cancel the build process, navigate between build errors and also switch and modify project configurations.

Build menu:

    Build Active Project
    Clean & Build Active Project
    -----------------------------------
    Build "<current>" Project         >
    Clean & Build "<current>" Project >
    -----------------------------------
    Compile "<current object>"
    -----------------------------------
    Stop Building
    -----------------------------------
    Next Error
    Previous Error
    -----------------------------------
    "<current>" Configurations        >

Menu item functions are:

  1. Build Active Project - builds the active project using its active build configuration and default build step.
  2. Clean & Build Active Project - cleans and builds the active project using its active build configuration and default build step.
  3. Build "<current>" Project - shows a menu containing build steps of the current project. Allows the user to invoke the current project's build step.
  4. Clean & Build "<current>" Project - shows a menu containing build steps of the current project. Allows the user to invoke the current project's build step. Clean is run prior to building.
  5. Compile "<current object>" - invokes a compiled classes build target containing the current object. E.g. 'Compile "Anagram.java"' looks for compiled classes build target that contains the "Anagram.java" and builds the build target. "Anagram.java" should be the first source that gets compiled to show the compiler errors of this class as first in the output window.
  6. Stop Building - stops all the builds being processed.
  7. Next Error - navigates to the next error in the editor and output window.
  8. Previous Error - navigates to the previous error in the editor and output window.
  9. "<current>" Configurations - shows the list of current project's build configurations. Allows the user to change the default config.

1.2.1 Build|Build "<current>" Project Menu

This menu allows the user to select which build step should be used for building the current project. Shows the all build steps of the current project.

Build "<current>" Project menu:

 
    <Build Step 1>
    ..
    <Build Step 2>
    <Build Step n>
    -------------------
    Edit Build Steps...

Menu item functions are:

  1. List of current project's build step - menu items allowing the user to the current project with selected build step.
  2. Edit Build Steps - opens the project customizer with the build steps page selected.

1.2.2 Build|"<current>" Configurations Menu

Configurations menu allows the user to choose the current configuration, which is used for building the current project. It also provides access for managing build configurations.

"<current>" Configurations menu:

    (o) <config 1> 
    ( ) <config 2>
    ..
    ( ) <config n> 
    ---------------------- 
    Edit Configurations...

Menu item functions are:

  1. List of configurations - radio button menu items allow to set the current build configuration.
  2. Edit Configurations - opens the project customizer with the build configurations page selected.

1.3 Run Menu

The Run menu allows the user to run and debug a project. It contains menu items for running a project, starting, controlling and terminating a debugger sessions. The Run menu also provides access to managing the profiles.

Run menu structure:

    Run Active Project
    ---------------------------
    Start Debugger Session    >
    Finish Debugger Sessions...
    ---------------------------
    Pause
    Continue
    ---------------------------
    Step Over
    Step Into
    Step Out
    Run to Cursor
    ---------------------------
    Fix
    ---------------------------
    Stack                     >
    ---------------------------
    New Breakpoint...
    New Watch...
    ---------------------------
    Profiles                  >

The menu item functions are:

  1. Run Active Project - runs the active project.
  2. Start Debugger Session - displays menu containing menu items for starting the debugger sessions.
  3. Finish Debugger Sessions - opens Finish Debugger Sessions dialog.
  4. Pause .. New Watch - debugger menu items.
  5. Profiles - displays menu for selecting the current profile.

1.3.1 Run|Start Debugger Session Menu

This menu allows the user to start a debugger session. Contains menu items for a different ways of session starting.

Run|Start Debugger Session menu structure:

    Run Active Project in Debugger
    Attach...

Menu item functions are:

  1. Run Active Project in Debugger - runs the active project in the debugger.
  2. Attach - opens Attach dialog.

1.3.2 Run|Profiles Menu

The Profiles menu lets the user select the active profile, which is then used when "Run Active Project" and "Run Active Project in Debugger" actions are invoked.

    (o) <profile 1> 
    ( ) <profile 2>
    ..
    ( ) <profile n> 
    ---------------------- 
    Edit Profiles...

Menu item functions are:

  1. List of profiles - radio button menu items allow to set the active build configuration.
  2. Edit Profiles - opens the project customizer with a profiles panel selected.

Naming (action names add/new)

Bugs: 33596

Priority: P2

Change name "Active" project. The term "Active" project is not precise in what it really describes. As defined in the spec the active project serves purpose of fixed entry point for starting execution an debugging. In the usability study participants thought that the active project was the one they were working with. So, the current project was active in their thinking. New name options: Main, Default, StartUp.

Rename "Add" to "Add Existing" contextual menus. Emphasize that "Add" is used for adding existing objects to a project by renaming it to "Add Existing".

Rename "Outputs" to "Build Steps". This much better communicates what it is about.

New Wizard

Bugs: 33596, 33598, 33599, 33601, 33608

Priority: P2

Only one template for creating a new java project should be provided.

  • Second step: Consider changing the label "Home Directory". It actually depends whether the usage of project home dir as a source dir is allowed/mistake or not. If it is not, than the wizard should check presence of correct packages under the project home and propose these in the sources panel.
  • Second step: New checkbox for setting up a active project should be used in this panel. It should say something like: "Set this project as the Active project.", or something similar depending on naming of active project.
  • Third step: This step should specify content of sources node. It means specification of sources and package roots should be done in one step.
  • Third step: Allows to specify resources.
  • Fourth step: Asks for the output dir as it does now.

<Not yet agreed on>
New File/Folder wizard should contain also project selection in the target panel. New File/Folder menu item should be less context sensitive. The set of templates the user can choose from would be determined from the open projects. All the templates would be listed in the wizard, but only those templates which are accepted by the open projects are enabled inside the template selector. The target selection in the next wizard step should allow the user to select any project which accepts selected template in the previous step. Of course, the current project is target project by default. Allowing the user to select a different than the current project in the second step of the wizard should help solving a situation when user realizes in the second step that incorrect project is the current project. So instead of closing the wizard she would just select select a different project.
</Not yet agreed on>

Infrastructure UI Spec

1 New Project Wizard

Going through the new project wizard results in a new project. By default, the project is populated with enough skeleton code to be a) immediately buildable/runnable, and b) useful for starting to build whatever it is that the user wants to build. (Exactly what this skeleton code consists of is left to the individual modules.)

1.1 Page 1: Select Project Type

The first page of the New wizard shows all current project types, arranged by category. The page will be largely similar to the current page, but the structure of the templates will be:

    [ ] <Module Category>
     - [ ] <Template 1>
     - [ ] <Template 2>
     (etc)

So, for example, we might have:

    [ ] Basic Java Applications
     - [ ] Applet Project
     - [ ] Swing GUI Project
    [ ] Web Applications
     - [ ] Basic Web Application
     - [ ] Blank Web Application

The panel layout is:

+-----------------------------------------------------------------+
|                                                                 |
|  Select Project Type:                                           |
|  +------------------------------------------------------------+ |
|  | [ ] <Module Category>                                      | |
|  |  - [ ] <Template 1>                                        | |
|  |  - [ ] <Template 2>                                        | |
|  |  (etc)                                                     | |
|  |                                                            | |
|  |                                                            | |
|  |                                                            | |
|  |                                                            | |
|  |                                                            | |
|  +------------------------------------------------------------+ |
|                                                                 |
|  Description:                                                   |
|  +------------------------------------------------------------+ |
|  |                                                            | |
|  |                                                            | |
|  |                                                            | |
|  +------------------------------------------------------------+ |
+-----------------------------------------------------------------+

Components of this panel are:

  1. Select Project Type tree. Contains list of project categories and project templates.
  2. Description area. Displays a description of selected template or category.

Wizard panel characteristics:

  • Title of the step is "Select Project Type".
  • Next button is enabled if a template is selected. Finish button is always disabled.

1.2 Page 2: Project Name and Location

The second page of the New wizard lets the user select the project name and the project home directory's name and location. The relevant panel (without the wizard boilerplate) is pictured below:

+-----------------------------------------------------------------------------+
|                                                                             |
|  Project Name:          |_myJavaProject____________________|                |
|                                                                             |
|  Project Directory:     |_/home/dr/Projects/myJavaProject__| [ Browse... ]  |
|                                                                             |
|  Project File Name:     |_myJavaProject.project____________|                |
|                                                                             |
|                                                                             |
|  [x] Set this project as the Active Project                                 |
|                                                                             |
+-----------------------------------------------------------------------------+

The components of this panel are:

  1. Project Name text field. Used for specifying user name of the project. The value is empty by default.
  2. Project Directory text field. Used for specifying location of project file, and also serves the purpose of the default project content directory. The default value is "<user.home>/Projects/<project name>".
  3. Browser button. Opens regular file chooser allowing the user to select a directory. By default selects the home directory, next time selects the last location.
  4. Project File Name text field. This is non-editable text filed serving informational purpose. It displays the project file name. The name pattern is "<project name>.project".
  5. "Set this project as the Active Project" check box. Allows the user to make the project active in a time of project creation. It also introduces this concept to a first time user. It is checked by default. TODO: The "Active" term should be changed.

Wizard panel characteristics:

  • Title of the step is "Project Name and Location".
  • Next button and finish buttons are enabled if the user enters a project name.

3.3 Page 3: Project Contents

The third page is used for specifying top level directories representing contents of the project. The contents include all kinds of sources, resources and outputs. Directories specified in this panel are shown in project explorer in some form. The panel displayed is the same as one shown in the project customizer.

+-----------------------------------------------------------------+
|                                                                 |
|  Sources and Files:                                             |
|  +----------------------------------------------+               |
|  |                                              | [   Add...  ] |
|  |                                              |               |
|  |                                              | [  Remove   ] |
|  |                                              |               |
|  |                                              | [  Move Up  ] |
|  |                                              |               |
|  |                                              | [ Move Down ] |
|  |                                              |               |
|  |                                              |               |
|  +----------------------------------------------+               |
|                                                                 |
+-----------------------------------------------------------------+

The panel components are specified in the project customizer section. By default, the project file location should be in the Sources and Files list.

Java UI Spec:

1 New Java Project Wizard

This section is the specification of the New Java Project Wizard.

2 Use Cases

2.1 Create a java project from existing sources

The goal of creating a java project from existing sources is to create and set up a project, so that it can be build/run without any extra effort. One of the project creation steps is to specify where are the existing project directories located. It includes existing packages, libraries, output directories and other project files/directories. Possible layout of existing source directories:

  1. Simple project with one src directory, one directory containing libraries and one output directory.
     
        ../project/src/org/netbeans/...
        ../project/out/..
        ../project/lib/..
        ../project/manifest.mf
        ../project/build.xml
  2. Simple project with one src directory, a directory containing testing sources, one lib directory and one out directory.
     
        ../project/src/org/netbeans/...
        ../project/testsrc/org/netbeans/...
        ../project/out/..
        ../project/lib/..
        ../project/manifest.mf
        ../project/build.xml
    
  3. Project with two source directories and central dir for unit tests. Central build script creates jar files for both source directories. The project has one lib directory, two output directories, one doc directory and a few "non-java" source directories, e.g. db - contains db scripts, model - contains project specification documents, config - contains project configuration files (manifest.mf, ...).
     
        ../project/src/org/netbeans/...
        ../project/libsrc/org/netbeans/...
        ../project/test/unit/src/org/netbeans/...
        ../project/out/..
        ../project/out_distrib/..
        ../project/doc/..
        ../project/lib/..
        ../project/db/..
        ../project/model/..
        ../project/config/..
        ../project/build.xml
    
  4. Project with two subprojects, each containing more source directories. Unit test directory is centralized. Central build script creates jar files also for subprojects. Each subproject contains build scripts for building a subproject.
     
        ../project/src/org/netbeans/...
        ../project/libsrc/org/netbeans/...
        ../project/out/..
        ../project/lib/..
        ../project/subproject1/src/org/netbeans/...
        ../project/subproject1/libsrc/org/netbeans/...
        ../project/subproject1/out/...
        ../project/subproject1/lib/...
        ../project/subproject1/manifest.mf
        ../project/subproject1/build.xml
        ../project/subproject1/libsrc/org/netbeans/...
        ../project/subproject2/src/org/netbeans/...
        ../project/subproject1/out/...
        ../project/subproject1/lib/...
        ../project/subproject2/manifest.mf
        ../project/subproject2/build.xml
        ../project/test/unit/src/org/netbeans/...
        ../project/test/unit/build.xml
        ../project/manifest.mf
        ../project/build.xml
    

2.2 Create a java project from scratch

Creating a new java project from scratch requires specifying at least one java package root directory. All of the other files and directories are created du