This document lists changes made to the Project UI API.
Fuller descriptions of all changes can be found below (follow links).
Not all deprecations are listed here, assuming that the deprecated APIs continue to essentially work. For a full deprecation list, please consult the Javadoc.
projectOpened
and projectClosed
methods are called on
all ProjectOpenedHook
instances in the lookup.
findPath
method into a new interface PathFinder
definesMainProject
property to wizards
Templates.buildSimpleTargetChooser
CommonProjectActions.forType
ActionProvider
s
project.encoding
LookupMerger
implementation for ProjectOpenedHook
project.license
CommonProjectActions.setProjectConfigurationAction
projectOpened
and projectClosed
methods are called on
all ProjectOpenedHook
instances in the lookup.
OpenProjects
class
These API specification versions may be used to indicate that a module requires a certain API feature in order to function. For example, if you see here a feature you need which is labelled 1.20, your manifest should contain in its main attributes the line:
OpenIDE-Module-Module-Dependencies: org.netbeans.modules.projectuiapi/1 > 1.20
findPath
method into a new interface PathFinder
definesMainProject
property to wizards
Templates.buildSimpleTargetChooser
CommonProjectActions.forType
ActionProvider
s
project.encoding
LookupMerger
implementation for ProjectOpenedHook
project.license
CommonProjectActions.setProjectConfigurationAction
projectOpened
and projectClosed
methods are called on
all ProjectOpenedHook
instances in the lookup.
OpenProjects
class
org.netbeans.spi.project.ui.support.BuildExecutionSupport
org.netbeans.spi.project.ui.support.CommonProjectActions
CommonProjectActions.forType
CommonProjectActions.setProjectConfigurationAction
org.netbeans.spi.project.ui.support.FileActionPerformer
org.netbeans.spi.project.ui.support.FileSensitiveActions
ActionProvider
s
org.netbeans.spi.project.ui.LogicalViewProvider
org.netbeans.spi.project.ui.support.NodeFactory
org.netbeans.spi.project.ui.support.NodeFactorySupport
org.netbeans.spi.project.ui.support.NodeList
org.netbeans.api.project.ui.OpenProjects
OpenProjects
class
org.netbeans.spi.project.ui.PathFinder
org.netbeans.spi.project.ui.PrivilegedTemplates
org.netbeans.spi.project.ui.support.ProjectCustomizer
org.netbeans.api.project.ui.ProjectGroup
org.netbeans.api.project.ui.ProjectGroupChangeEvent
org.netbeans.api.project.ui.ProjectGroupChangeListener
org.netbeans.spi.project.ui.ProjectProblemResolver
org.netbeans.api.project.ui.ProjectProblems
org.netbeans.spi.project.ui.ProjectProblemsProvider
org.netbeans.spi.project.ui.support.ProjectProblemsProviderSupport
org.netbeans.spi.project.ui.templates.support.Templates
definesMainProject
property to wizards
Templates.buildSimpleTargetChooser
org.netbeans.spi.project.ui.support.UILookupMergerSupport
LookupMerger
implementation for ProjectOpenedHook
ProjectProblems API now delegates to ProjectProblemsImplementation registered in default Lookup.
CommonProjectActions
; made by: tstupka; issues:
#251563
CommonProjectActions.newProjectAction
makes it
so far posible to set the new projects parent folder by a
property. It would be also usefull to preselect the category
and to propagate custom properties to the new project wizard
descriptor.
BuildExecutionSupport
; made by: tstupka; issues:
#245350
BuildExecutionSupport
makes it so far posible to register a running build/run/debug task.
It would be also usefull to provide the last run item and to be notified about changes of it.
The following classes were moved into the org.netbeans.modules.projectuiapi.base module:
Runtime compatibility remains, compile time compatibility is
mostly preserved too. It is however recommended to upgrade
dependencies of client modules. Try running
ant fix-dependencies
in your Ant module.
org.netbeans.spi.project.ui.ProjectProblemsProvider
; made by: mkleint; issues:
#236325
ProjectProblemsProvider.ProjectProblem
has so far required a ProjectProblemResolver
effectively
making all problems resolvable, however a few places emerged where an automated resolution is not at hand and still we want to report the
error/warning. 2 new factory methods introduced.
CustomizerProvider2
has been available so far in java.api.common
but
requests have been made to move it to projectuiapi
, where its parent
CustomizerProvider
resides, before CustomizerProvider3
is defined.
For reasoning see Issue 229161.
When including license headers into templates, the only license templates from IDE's configuration were accessible.
Now templates can include new expression to set a path to a license template within the project's own space.
The new way to include license headers is <#include "${project.licensePath}">
.
Project types need to provide their own way of defining the license template location and mapping it to project.licensePath item in
their CreateFromTemplateAttributesProvider
implementation.
BuildExecutionSupport
; made by: mkleint; issues:
#193873
Implementing BuildExecutionSupport.ActionItem
allows creating execution history lists at various places, currently the toolbar for Run action.
CommonProjectActions
; made by: psomol; issues:
#217087
Added CommonProjectActions.PROJECT_PARENT_FOLDER constant that is respected by the CommonProjectActions.newProject()
action
and the project's parent directory can be set that way.
ProjectCustomizer
; made by: psomol; issues:
#219827
Added a Close listener to ProjectCustomizer.Category to enable correct memory management when specific project properties are to be maintained while Project Properties dialog is displayed, containing various, possibly extended, categories. This is the case with JWSProjectProperties and JFXProjectProperties, where cleanup is needed at the time of dialog closing. The introduction of a Close listener here actually enables to deprecate J2SECustomPropertySaver interface and thus make the same mechanism available even outside J2SE projects.
org.netbeans.spi.project.ui.support.ProjectProblemsProviderSupport
; made by: tmysik; issues:
#219313
Added support class for provider of project metadata problems.
org.netbeans.api.project.ui.OpenProjects
org.netbeans.api.project.ui.ProjectGroup
org.netbeans.api.project.ui.ProjectGroupChangeListener
org.netbeans.api.project.ui.ProjectGroupChangeEvent
; made by: mkleint; issues:
#91031
Added methods to
OpenProjects
to figure the currently active project group, access preferences related to it
and listen to changes in currently active group.
ProjectProblems
org.netbeans.spi.project.ui.ProjectProblemsProvider
org.netbeans.spi.project.ui.ProjectProblemResolver
; made by: tzezula; issues:
#215628
Added a SPI allowing project to provide project metadata problems. These problems are shown in the Resolve Project Problems Customizer, project with project problems are annotated by broken project badge.
findPath
method into a new interface PathFinder
PathFinder
; made by: tzezula; issues:
#208241
Extracted findPath
method from LogicalViewProvider
into a new interface PathFinder
.
A new PathFinder
simplifies delegation of findPath
method.
org.netbeans.api.project.ui.OpenProjects
org.netbeans.spi.project.ui.templates.support.Templates
; made by: jglick; issues:
#166780
Setting a main project programmatically is now deprecated. Checking for a main project set explicitly by the user is still common.
FileSensitiveActions
FileActionPerformer
; made by: yardus; issues:
#51571
Added FileSensitiveActions.fileSensitiveAction(performer, name, icon)
method for creating file sensitive actions with custom performers.
This method is a logical counterpart to ProjectSensitiveActions.projectSensitiveAction(performer, name, icon)
org.netbeans.api.project.ui.OpenProjects
; made by: jtulach; issues:
#203220
A new friend contract added for benefit of ide.ergonomics module.
definesMainProject
property to wizards
Templates
; made by: jglick; issues:
#184213
Added official way to specify whether a New Project wizard should set a main project.
Internally, an unspecified wizard property is used to store this information, which was previously hard-coded in certain modules. All modules using the magic constant should switch to using the new methods instead.
Templates.buildSimpleTargetChooser
Templates
; made by: jglick; issues:
#141886
Added a builder for simple target choosers.
freeFileExtension()
permits the user to pick a
file extension for the new file distinct from that of the template.
CommonProjectActions.forType
CommonProjectActions
; made by: jglick; issues:
#182488
Added a standard way for the context menu of a project's root node to be defined declaratively.
Project types which LogicalViewProvider
's root
node currently implements getActions
with a
hard-coded list are encouraged to switch to declarative
registration.
ProjectCustomizer
; made by: tboudreau; issues:
#182711
Added factory methods to ProjectCustomizer, for creating a ComboBoxModel of Charsets for all available character encodings with an initial selection, and a ListCellRenderer for Charset objects, for use in combo boxes.
ProjectCustomizer
; made by: jglick; issues:
#171029
@CompositeCategoryProvider.Registration
may be used
to register project customizer panels.
ActionProvider
s
FileSensitiveActions
; made by: jglick; issues:
#102081
ActionProvider
s may now be registered in global
lookup so as to enable certain file-sensitive actions on certain
selections without the support of any project.
org.netbeans.api.project.ui.OpenProjects
; made by: ovrabec; issues:
#162588
OpenProjects.open
has now new overloaded
variant that supports visual indication of the open progress.
org.netbeans.api.project.ui.OpenProjects
; made by: jtulach; issues:
#161120
It came to our attention that often users of OpenProjects
want to find out if their project is opened or not. To simplify
such code we offer a handy utility method.
NodeFactory
; made by: mkleint; issues:
#153015
Add annotation @NodeFactory.Registration to replace registration in layer files.
BuildExecutionSupport
; made by: mkleint; issues:
#110465
Added spi for plugging into the Repeat Build/Run and Stop Build/Run actions that were previously accessible by ant based projects only.
LogicalViewProvider
; made by: jglick; issues:
#135399
Project root nodes will now automatically be badged according to VCS status of contained files.
project.encoding
project.encoding
for templates using scripting language.
org.netbeans.spi.project.ui.PrivilegedTemplates
; made by: mkleint; issues:
#122942
org.netbeans.api.project.ui.OpenProjects
; made by: mkubec; issues:
#124980
ProjectCustomizer
; made by: mkubec; issues:
#91291
LookupMerger
implementation for ProjectOpenedHook
org.netbeans.spi.project.ui.support.UILookupMergerSupport
; made by: mkleint; issues:
#103106
UILookupMergerSupport.createProjectOpenHookMerger(ProjectOpenedHook)
creates an instance of
LookupMerger
that ensures that from the ProjectOpenedHook
instances in project's lookup, the
project's own is always called first.
project.license
project.license
for templates using scripting language.
ProjectCustomizer
; made by: mkubec; issues:
#91276
ProjectCustomizer
; made by: mkleint; issues:
#85405
ProjectCustomizer.Category
that will notify the Category
and it's panel that the changes ought to be applied. This is generally useful as a fallback, general
solution for 3rd party plugging into the project customizer in case the given project type doesn't provide
model-driven project updating mechanism.
org.netbeans.api.project.ui.OpenProjects
; made by: mkleint; issues:
#64491
OpenProjects.PROPERTY_MAIN_PROJECT
property and firing changes in main project property value
to listeners attached to OpenProjects.
org.netbeans.spi.project.ui.support.UILookupMergerSupport
; made by: mkleint; issues:
#83343
Related to 1.12 change in Project API.
LookupMerger
implementation for PrivilegedTemplates
and
RecommendedTemplates
added.
NodeFactory
NodeList
NodeFactorySupport
; made by: mkleint; issues:
#72441
CommonProjectActions.setProjectConfigurationAction
CommonProjectActions
; made by: jglick; issues:
#49652
Added method CommonProjectActions.setProjectConfigurationAction()
to permit projects supporting configurations to include a context menu
item in their logical view to change the active configuration.
ProjectCustomizer
; made by: mkleint; issues:
#74373
createCustomizerDialog(String, Lookup, String, ActionListener, HelpCtx)
method to ProjectCustomizer.
That allows to construct project customizer from a layer folder content. It assumes to find instances of
ProjectCustomizer.CompositeCategoryProvider
in the layer and constructs the UI from them.
The context is passed into the panel via a Lookup instance. What is in the lookup, is up to the individual project
implementations.
getMainProject
and setMainProject
methods to OpenProjects.
CommonProjectActions.deleteProjectAction
, CommonProjectActions.copyProjectAction
,
CommonProjectActions.moveProjectAction
, CommonProjectActions.removeProjectAction
methods.
DefaultProjectOperations
support to simplify implementation of project delete/copy/rename/move for simple projects.
ProjectCustomizer
; made by: mkrauskopf; issues:
#61036
Added ProjectCustomizer.Category.setErrorMessage
and
ProjectCustomizer.Category.getErrorMessage
methods. With those methods client can set an error message
for individual categories.
Also the default implementation of a customizer dialog uses
these methods for showing a message on the bottom of
category views and to mark category nodes for invalid
categories (similar to the error message in wizards).
ProjectCustomizer
; made by: mkrauskopf; issues:
#58457
Added ProjectCustomizer.Category.setValid
and
ProjectCustomizer.Category.isValid
methods.
With those methods client can affect whether the OK button
of the Customizer dialog is enabled.
CommonProjectActions
Templates
; made by: pkuzel; issues:
#58489
CommonProjectActions.newProjectAction
method
CommonProjectActions.EXISTING_SOURCES_FOLDER
property
Templates.getExistingSourcesFolder
method
projectOpened
and projectClosed
methods are called on
all ProjectOpenedHook
instances in the lookup.
The projectOpened
and projectClosed
methods are called on
all ProjectOpenedHook
instances found in a project's lookup.
This change is incompatible because a project type can return a lookup with several
ProjectOpenedHook
s and depend on only first one being notified on open/close.
Such a code should be rewritten using org.openide.util.lookup.Lookups.exclude
.
Projects/Actions/
which may hold
actions to be added to the context menu of any project type.
Existing project types need to add support for the new folder in order to comply with the guideline.
ProjectCustomizer
; made by: phrebejk; issues:
#49647
Added org.netbeans.spi.project.ui.support.ProjectCustomizer
containing support methods for creating standard looking project customizer
dialogs.
To indicate that this is now considered a stable API, the major release version was incremented to 1 from 0.
Clients should begin requesting the new version to avoid a warning at startup.
OpenProjects
class
org.netbeans.api.project.ui.OpenProjects
; made by: tzezula
Added open
and close
methods to org.netbeans.api.project.ui.OpenProjects
. The open
method
opens the specified projects. The close
method closes the specified projects.