⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preferences.java

📁 gcc的JAVA模块的源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* Preferences - Preference node containing key value entries and subnodes   Copyright (C) 2001 Free Software Foundation, Inc.This file is part of GNU Classpath.GNU Classpath is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version. GNU Classpath is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU Classpath; see the file COPYING.  If not, write to theFree Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307 USA.Linking this library statically or dynamically with other modules ismaking a combined work based on this library.  Thus, the terms andconditions of the GNU General Public License cover the wholecombination.As a special exception, the copyright holders of this library give youpermission to link this library with independent modules to produce anexecutable, regardless of the license terms of these independentmodules, and to copy and distribute the resulting executable underterms of your choice, provided that you also meet, for each linkedindependent module, the terms and conditions of the license of thatmodule.  An independent module is a module which is not derived fromor based on this library.  If you modify this library, you may extendthis exception to your version of the library, but you are notobligated to do so.  If you do not wish to do so, delete thisexception statement from your version. */package java.util.prefs;import java.io.InputStream;import java.io.OutputStream;import java.io.IOException;import java.security.AccessController;import java.security.Permission;import java.security.PrivilegedAction;import gnu.java.util.prefs.NodeReader;/** * Preference node containing key value entries and subnodes. * <p> * There are two preference node trees, a system tree which can be accessed * by calling <code>systemRoot()</code> containing system preferences usefull * for all users, and a user tree that can be accessed by calling * <code>userRoot()</code> containing preferences that can differ between * different users. How different users are identified is implementation * depended. It can be determined by Thread, Access Control Context or Subject. * <p> * This implementation uses the "java.util.prefs.PreferencesFactory" system * property to find a class that implement <code>PreferencesFactory</code> * and initialized that class (if it has a public no arguments contructor) * to get at the actual system or user root. If the system property is not set, * or the class cannot be initialized it uses the default implementation * <code>gnu.java.util.prefs.FileBasedFactory</code>. * <p> * Besides the two static method above to get the roots of the system and user * preference node trees there are also two convenience methods to access the * default preference node for a particular package an object is in. These are * <code>userNodeForPackage()</code> and <code>systemNodeForPackage()</code>. * Both methods take an Object as an argument so accessing preferences values * can be as easy as calling <code>Preferences.userNodeForPackage(this)</code>. * <p> * Note that if a security manager is installed all static methods check for * <code>RuntimePermission("preferences")</code>. But if this permission is * given to the code then it can access and change all (user) preference nodes * and entries. So you should be carefull not to store to sensitive information * or make security decissions based on preference values since there is no * more fine grained control over what preference values can be changed once * code has been given the correct runtime permission. * <p> * XXX * * @since 1.4 * @author Mark Wielaard (mark@klomp.org) */public abstract class Preferences {    // Static Fields    /**     * Default PreferencesFactory class used when the system property     * "java.util.prefs.PreferencesFactory" is not set.	 * <p>	 * XXX - Currently set to MemoryBasedFactory, should be changed	 * when FileBasedPreferences backend works.     */    private static final String defaultFactoryClass        = "gnu.java.util.prefs.MemoryBasedFactory";    /** Permission needed to access system or user root. */    private static final Permission prefsPermission        = new RuntimePermission("preferences");    /**     * The preferences factory object that supplies the system and user root.     * Set and returned by the getFactory() method.     */    private static PreferencesFactory factory;    /** Maximum node name length. 80 characters. */    public static final int MAX_NAME_LENGTH = 80;    /** Maximum entry key length. 80 characters. */    public static final int MAX_KEY_LENGTH = 80;    /** Maximum entry value length. 8192 characters. */    public static final int MAX_VALUE_LENGTH = 8192;    // Constructors    /**     * Creates a new Preferences node. Can only be used by subclasses.     * Empty implementation.     */    protected Preferences() {}    // Static methods    /**     * Returns the system preferences root node containing usefull preferences     * for all users. It is save to cache this value since it should always     * return the same preference node.     *     * @return the root system preference node     * @exception SecurityException when a security manager is installed and     * the caller does not have <code>RuntimePermission("preferences")</code>.     */    public static Preferences systemRoot() throws SecurityException {        // Get the preferences factory and check for permission        PreferencesFactory factory = getFactory();        return factory.systemRoot();    }    /**     * Returns the user preferences root node containing preferences for the     * the current user. How different users are identified is implementation     * depended. It can be determined by Thread, Access Control Context or     * Subject.     *     * @return the root user preference node     * @exception SecurityException when a security manager is installed and     * the caller does not have <code>RuntimePermission("preferences")</code>.     */    public static Preferences userRoot() throws SecurityException {        // Get the preferences factory and check for permission        PreferencesFactory factory = getFactory();        return factory.userRoot();    }    /**     * Private helper method for <code>systemRoot()</code> and     * <code>userRoot()</code>. Checks security permission and instantiates the     * correct factory if it has not yet been set.     * <p>     * When the preferences factory has not yet been set this method first     * tries to get the system propery "java.util.prefs.PreferencesFactory"     * and tries to initializes that class. If the system property is not set     * or initialization fails it returns an instance of the default factory     * <code>gnu.java.util.prefs.FileBasedPreferencesFactory</code>.     *     * @return the preferences factory to use     * @exception SecurityException when a security manager is installed and     * the caller does not have <code>RuntimePermission("preferences")</code>.     */    private static PreferencesFactory getFactory() throws SecurityException {        // First check for permission        SecurityManager sm = System.getSecurityManager();        if (sm != null) {            sm.checkPermission(prefsPermission);        }        // Get the factory        if (factory == null) {            // Caller might not have enough permissions            factory = (PreferencesFactory) AccessController.doPrivileged(                        new PrivilegedAction() {                            public Object run() {                                PreferencesFactory pf = null;                                String className = System.getProperty                                    ("java.util.prefs.PreferencesFactory");                                if (className != null) {                                    try {                                        Class fc = Class.forName(className);                                        Object o = fc.newInstance();                                        pf = (PreferencesFactory) o;                                    } catch (ClassNotFoundException cnfe)                                        {/*ignore*/}                                    catch (InstantiationException ie)                                        {/*ignore*/}                                    catch (IllegalAccessException iae)                                        {/*ignore*/}                                    catch (ClassCastException cce)                                        {/*ignore*/}                                }                                return pf;                            }                        });            // Still no factory? Use our default.            if (factory == null)	      {                try		  {                    Class cls = Class.forName (defaultFactoryClass);                    factory = (PreferencesFactory) cls.newInstance();                  }		catch (Exception e)		  {                    throw new RuntimeException ("Couldn't load default factory"                        + " '"+ defaultFactoryClass +"'");                    // XXX - when using 1.4 compatible throwables add cause                  }              }        }	        return factory;    }    /**     * Returns the system preferences node for the package of an object.     * The package node name of the object is determined by dropping the     * class name of the object of the fully quallified class name and     * replacing all '.' to '/' in the package name. If the class of the     * object has no package then the package node name is "<unnamed>".     * The returened node is <code>systemRoot().node(packageNodeName)</code>.     *     * @param o Object whose default system preference node is requested     * @returns system preferences node that should be used by object o     * @exception SecurityException when a security manager is installed and     * the caller does not have <code>RuntimePermission("preferences")</code>.     */    public static Preferences systemNodeForPackage(Class c)            throws SecurityException    {        return nodeForPackage(c, systemRoot());    }    /**     * Returns the user preferences node for the package of an object.     * The package node name of the object is determined by dropping the     * class name of the object of the fully quallified class name and     * replacing all '.' to '/' in the package name. If the class of the     * object has no package then the package node name is "<unnamed>".     * The returened node is <code>userRoot().node(packageNodeName)</code>.     *     * @param o Object whose default user preference node is requested     * @returns user preferences node that should be used by object o     * @exception SecurityException when a security manager is installed and     * the caller does not have <code>RuntimePermission("preferences")</code>.     */    public static Preferences userNodeForPackage(Class c)            throws SecurityException    {        return nodeForPackage(c, userRoot());    }    /**     * Private helper method for <code>systemNodeForPackage()</code> and     * <code>userNodeForPackage()</code>. Given the correct system or user     * root it returns the correct Preference node for the package node name     * of the given object.     */    private static Preferences nodeForPackage(Class c, Preferences root) {        // Get the package path        String className = c.getName();        String packagePath;        int index = className.lastIndexOf('.');        if(index == -1) {            packagePath = "<unnamed>";        } else {            packagePath = className.substring(0,index).replace('.','/');        }        return root.node(packagePath);    }    /**     * XXX     */    public static void importPreferences(InputStream is)                                     throws InvalidPreferencesFormatException,                                           IOException    {        PreferencesFactory factory = getFactory();        NodeReader reader = new NodeReader(is, factory);        reader.importPreferences();    }    // abstract methods (identification)    /**     * Returns the absolute path name of this preference node.     * The absolute path name of a node is the path name of its parent node      * plus a '/' plus its own name. If the node is the root node and has no     * parent then its name is "" and its absolute path name is "/".     */    abstract public String absolutePath();    /**     * Returns true if this node comes from the user preferences tree, false     * if it comes from the system preferences tree.     */    abstract public boolean isUserNode();    /**     * Returns the name of this preferences node. The name of the node cannot     * be null, can be mostly 80 characters and cannot contain any '/'     * characters. The root node has as name "".     */    abstract public String name();    /**     * Returns the String given by     * <code>     * (isUserNode() ? "User":"System") + " Preference Node: " + absolutePath()     * </code>     */    abstract public String toString();    // abstract methods (navigation)    /**

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -