+ NbPreferences
gets new method forModule(Preferences, Class)
+ to be able to create a module based subtree even for non-root nodes..
+
Preferences.forModule(Preferences.root(), cls)
*
* @param cls the class for which a user preference node is desired.
* @return the user preference node
*/
public static Preferences forModule(Class cls) {
+ return forModule(root(), cls);
+ }
+
+ /**
+ * Returns user preference node . {@link Preferences#absolutePath} of such
+ * a node depends whether class provided as a parameter was loaded as a part of any module
+ * or not. If so, then absolute path corresponds to slashified code name base of module.
+ * If not, then absolute path corresponds to class's package.
+ *
+ * @param root the reference point, base Preferences node.
+ * @param cls the class for which a user preference node is desired.
+ * @return the user preference node
+ * @since 8.27
+ */
+ public static Preferences forModule(Preferences root, Class cls) {
if (PREFS_IMPL == null) {
PREFS_IMPL = getPreferencesProvider();
}
- return PREFS_IMPL.preferencesForModule(cls);
+ return PREFS_IMPL.preferencesForModule(root, cls);
}
+
/**
* Returns the root preference node.
*
@@ -92,13 +108,29 @@
Provider retval = Lookup.getDefault().lookup(Provider.class);
if (retval == null) {
retval = new Provider() {
- public Preferences preferencesForModule(Class cls) {
- return Preferences.userNodeForPackage(cls);
+
+ @Override
+ public Preferences preferencesForModule(Preferences root, Class cls) {
+ return root.node(nodeName(cls));
}
+ @Override
public Preferences preferencesRoot() {
return Preferences.userRoot();
}
+ private String nodeName(Class c) {
+ if (c.isArray()) {
+ throw new IllegalArgumentException(
+ "Arrays have no associated preferences node.");
+ }
+ String className = c.getName();
+ int pkgEndIndex = className.lastIndexOf('.');
+ if (pkgEndIndex < 0) {
+ return "/