|
org.openide.util 7.9.0 1 | |||||||||
PREV NEXT | FRAMES NO FRAMES |
See:
Description
Utilities API | |
---|---|
org.openide | Provides ErrorManager - the central place for logging and reproting failures in NetBeans based system. |
org.openide.util | A set of utility classes covering a few general infrastructure points in the Open APIs. |
org.openide.util.actions | There are several types of standard actions that should be used for many user interactions within NetBeans. |
org.openide.util.datatransfer | NetBeans uses special extensions to data transfer. |
org.openide.util.io | A set of utility classes providing extensions to the Java I/O system. |
org.openide.util.lookup | Support classes for the Registration and Lookup extension mechanism. |
org.openide.xml | A set of utility classes assisting in the manipulation of XML documents. |
This module contains general classes needed in NetBeans, extensions to basic JRE contepts, useful methods and other UtilitiesAPI classes.
Also this module defines the Lookup which the NetBeans way for dynamic registration and lookup of components in our modularized component system. It allows lookup and discovery of features by description of their interfaces. The classes are devided into two parts. The LookupAPI allows the discovery and the LookupSPI simplifies creation and registration of own lookup objects.
Lookups.forPath
New method Lookups.forPath(String) has been added to replace now deprecated FolderLookup and allow modules who wants to read settings from layers to do so with a simpler code, without dependency on DataSystems API.
ChangeSupport
Added a ChangeSupport
class to simplify
the management of ChangeListener
s and the
firing of ChangeEvent
s.
Utilities.isMac()
method
Added a Utilities.isMac()
method for checking
if current platform is Mac.
Parameters
Added a Parameters
class for checking the
values of method parameters.
NbCollections.iterable(...)
methods
Added two new methods to make enhanced for-loops easier to use
with legacy APIs returning Iterator
or Enumeration
.
How can I specify (in the xml, or programmatically) that this service should only be added to the Lookup if the platform is Windows? >
In general there are three ways to achieve this.It is possible to write a specific module and enable it only on windows. See os specific modules documentation. Then you can put a registration of your instance into your module's META-INF/services directory and it will be available only on Windows.
Another possibility that does not require new module, but which executes
a code on startup (which may have performance implications) is to use methodvalue
attribute. Register your instance in layer using your-Object.instance
file
as described at
services
documentation and in your factory method either return the instance
your want or null
depending on result of
Utilities.isWindows() call.
In some cases, the interface for which you will register an implementation permits a
no-operation semantics. For example, InstalledFileLocator.locate(...)
can
return a valid File
, or null. You could always register an
InstalledFileLocator
instance yet disable it on non-Windows platforms
(always returning null).
Q: I have more modules one of them providing the core functionality and few more that wish to extend it. What is the right way to do it? How does the Netbeans platform declare such extension point?
Start with declaring an extension interface in your
core module and put it into the module's public packages. Imagine
for example that the core module is in JAR file org-my-netbeans-coremodule.jar
and already contains in manifests line like
OpenIDE-Module: org.my.netbeans.coremodule/1
and wants
to display various tips of the day provided by other modules and thus defines:
package org.my.netbeans.coremodule; public interface TipsOfTheDayProvider { public String provideTipOfTheDay (); }
And in its manifest adds line
OpenIDE-Module-Public-Packages: org.my.netbeans.coremodule.*
to specify that this package contains exported API and shall be
accessible to other modules.
When the core module is about to display the tip of the day it can ask
the system for all registered instances of the TipsOfTheDayProvider
,
randomly select one of them:
import java.util.Collection; import java.util.Collections; import org.openide.util.Lookup; Lookup.Result result = Lookup.getDefault ().lookup (new Lookup.Template (TipsOfTheDayProvider.class)); Collection c = result.allInstances (); Collections.shuffle (c); TipsOfTheDayProvider selected = (TipsOfTheDayProvider)c.iterator ().next ();
and then display the tip. Simple, trivial, just by the usage of
Lookup interface once
creates a registry that other modules can enhance. But such enhancing
of course requires work on the other side. Each module that would like
to register its TipsOfTheDayProvider
needs to depend on the
core module - add
OpenIDE-Module-Module-Dependencies: org.my.netbeans.coremodule/1
into its manifest and write a class with its own implementation of the
provider:
package org.my.netbeans.extramodule; class ExtraTip implements TipsOfTheDayProvider { public String provideTipOfTheDay () { return "Do you know that in order to write extension point you should use Lookup?"; } }
Then, the only necessary thing is to register such class by using the
J2SE standard META-INF/services/org.my.netbeans.coremodule.TipsOfTheDayProvider
in the module JAR containing just one line:
org.my.netbeans.extramodule.ExtraTip
and your modules are now ready to communicate using your own extension point.
If you are interested in logging from inside your module, or in writing your own log handler or in configuring the whole system, then best place to start is the NetBeans logging guide.
|
|
|
The sources for the module are in NetBeans CVS in openide/util directory.
Nothing.
Read more about the implementation in the answers to architecture questions.
|
org.openide.util 7.9.0 1 | |||||||||
PREV NEXT | FRAMES NO FRAMES |