You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by nd...@apache.org on 2009/01/02 03:52:35 UTC

svn commit: r730659 [1/4] - in /harmony/enhanced/classlib/trunk/modules/prefs/src: main/java/java/util/prefs/ test/java/org/apache/harmony/prefs/tests/ test/java/org/apache/harmony/prefs/tests/java/util/prefs/

Author: ndbeyer
Date: Thu Jan  1 18:52:34 2009
New Revision: 730659

URL: http://svn.apache.org/viewvc?rev=730659&view=rev
Log:
format code, replace tabs with spaces - no functional changes

Modified:
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/BackingStoreException.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/InvalidPreferencesFormatException.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeEvent.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeListener.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeEvent.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeListener.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/Preferences.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferencesFactory.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/RegistryPreferencesFactoryImpl.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/RegistryPreferencesImpl.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/XMLParser.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/AllTests.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/AbstractPreferencesTest.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/AllTests.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/FilePreferencesImplTest.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/InvalidPreferencesFormatExceptionTest.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/MockAbstractPreferences.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/MockPreferencesFactory.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/MockSecurityManager.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/NodeChangeListenerTest.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/PreferenceChangeEventTest.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/PreferenceChangeListenerTest.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/PreferencesFactoryTest.java
    harmony/enhanced/classlib/trunk/modules/prefs/src/test/java/org/apache/harmony/prefs/tests/java/util/prefs/PreferencesTest.java

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/BackingStoreException.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/BackingStoreException.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/BackingStoreException.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/BackingStoreException.java Thu Jan  1 18:52:34 2009
@@ -17,7 +17,6 @@
 
 package java.util.prefs;
 
-
 /**
  * An exception to indicate that some error was encountered while accessing
  * the backing store.
@@ -25,29 +24,26 @@
  * @since 1.4
  */
 public class BackingStoreException extends Exception {
-    
+
     private static final long serialVersionUID = 859796500401108469L;
-    
-	/**
-	 * Constructs a new <code>BackingStoreException</code> instance using an 
-	 * exception message.
-	 * 
-	 * @param s 	the exception message.
-	 */
-	public BackingStoreException (String s) {
-		super(s);
-	}
 
-	/**
-	 * Constructs a new <code>BackingStoreException</code> instance using a
-	 * nested <code>Throwable</code> instance.
-	 *	
-	 * @param t		the nested <code>Throwable</code> instance.
-	 */
-	public BackingStoreException (Throwable t) {
-		super(t);
-	}
+    /**
+     * Constructs a new <code>BackingStoreException</code> instance using an 
+     * exception message.
+     * 
+     * @param s the exception message.
+     */
+    public BackingStoreException (String s) {
+        super(s);
+    }
+
+    /**
+     * Constructs a new <code>BackingStoreException</code> instance using a
+     * nested <code>Throwable</code> instance.
+     *	
+     * @param t the nested <code>Throwable</code> instance.
+     */
+    public BackingStoreException (Throwable t) {
+        super(t);
+    }
 }
-
-
-

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java Thu Jan  1 18:52:34 2009
@@ -97,7 +97,7 @@
      * Constructors
      * --------------------------------------------------------------
      */
-    
+
     /**
      * Construct root <code>FilePreferencesImpl</code> instance, construct 
      * user root if userNode is true, system root otherwise
@@ -108,7 +108,7 @@
         path = userNode ? USER_HOME : SYSTEM_HOME;
         initPrefs();
     }
-    
+
     /**
      * Construct a prefs using given parent and given name 
      */
@@ -132,16 +132,16 @@
     @Override
     protected String[] childrenNamesSpi() throws BackingStoreException {
         String[] names = AccessController
-                .doPrivileged(new PrivilegedAction<String[]>() {
-                    public String[] run() {
-                        return dir.list(new FilenameFilter() {
-                            public boolean accept(File parent, String name) {
-                                return new File(path + File.separator + name).isDirectory(); 
-                            }
-                        });
-
+        .doPrivileged(new PrivilegedAction<String[]>() {
+            public String[] run() {
+                return dir.list(new FilenameFilter() {
+                    public boolean accept(File parent, String name) {
+                        return new File(path + File.separator + name).isDirectory(); 
                     }
                 });
+
+            }
+        });
         if (null == names) {// file is not a directory, exception case
             // prefs.3=Cannot get children names for {0}!
             throw new BackingStoreException(

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/InvalidPreferencesFormatException.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/InvalidPreferencesFormatException.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/InvalidPreferencesFormatException.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/InvalidPreferencesFormatException.java Thu Jan  1 18:52:34 2009
@@ -27,40 +27,37 @@
  * @since 1.4
  */
 public class InvalidPreferencesFormatException extends Exception {
-    
-    private static final long serialVersionUID = -791715184232119669L;
-    
-	/**
-	 * Constructs a new <code>InvalidPreferencesFormatException</code> instance using an 
-	 * exception message.
-	 * 
-	 * @param s 	the exception message.
-	 */
-	public InvalidPreferencesFormatException (String s) {
-		super(s);
-	}
-
-	/**
-	 * Constructs a new <code>InvalidPreferencesFormatException</code> instance using a 
-	 * exception message and a nested <code>Throwable</code> instance.
-	 * 
-	 * @param s 	the exception message.
-	 * @param t		the nested <code>Throwable</code> instance.
-	 */
-	public InvalidPreferencesFormatException (String s, Throwable t) {
-		super(s,t);
-	}
 
-	/**
-	 * Constructs a new <code>InvalidPreferencesFormatException</code> instance using a
-	 * nested <code>Throwable</code> instance.
-	 *	
-	 * @param t		the nested <code>Throwable</code> instance.
-	 */
-	public InvalidPreferencesFormatException (Throwable t) {
-		super(t);
-	}
-}
+    private static final long serialVersionUID = -791715184232119669L;
 
+    /**
+     * Constructs a new <code>InvalidPreferencesFormatException</code> instance using an 
+     * exception message.
+     * 
+     * @param s the exception message.
+     */
+    public InvalidPreferencesFormatException (String s) {
+        super(s);
+    }
 
+    /**
+     * Constructs a new <code>InvalidPreferencesFormatException</code> instance using a 
+     * exception message and a nested <code>Throwable</code> instance.
+     * 
+     * @param s the exception message.
+     * @param t the nested <code>Throwable</code> instance.
+     */
+    public InvalidPreferencesFormatException (String s, Throwable t) {
+        super(s,t);
+    }
 
+    /**
+     * Constructs a new <code>InvalidPreferencesFormatException</code> instance using a
+     * nested <code>Throwable</code> instance.
+     *	
+     * @param t the nested <code>Throwable</code> instance.
+     */
+    public InvalidPreferencesFormatException (Throwable t) {
+        super(t);
+    }
+}

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeEvent.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeEvent.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeEvent.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeEvent.java Thu Jan  1 18:52:34 2009
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-
 package java.util.prefs;
 
 import java.io.Serializable;
@@ -37,61 +36,56 @@
  * @since 1.4
  */
 public class NodeChangeEvent extends EventObject implements Serializable {
-	
+
     private static final long serialVersionUID = 8068949086596572957L;
-    
+
     private final Preferences parent;
     private final Preferences child;
-    
+
     /**
      * Construct a new <code>NodeChangeEvent</code> instance.
      * 
-     * @param p		the <code>Preferences</code> instance that this event happened, 
-     * 				this object is considered as event's source.
-     * @param c		the child <code>Preferences</code> instance that was added 
-     * 				or deleted.
+     * @param p the <code>Preferences</code> instance that this event happened, this object is
+     *            considered as event's source.
+     * @param c the child <code>Preferences</code> instance that was added or deleted.
+     */
+    public NodeChangeEvent (Preferences p, Preferences c) {
+        super(p);
+        parent = p;
+        child = c;
+    }
+
+    /**
+     * Get the <code>Preferences</code> instance that this event happened.
+     * 
+     * @return the <code>Preferences</code> instance that this event happened.
      */
-	public NodeChangeEvent (Preferences p, Preferences c) {
-		super(p);
-		parent = p;
-		child = c;
-	}
-	
-	/**
-	 * Get the <code>Preferences</code> instance that this event happened.
-	 * 
-	 * @return		the <code>Preferences</code> instance that this event happened.
-	 */
-	public Preferences getParent() {
-		return parent;
-	}
-	
-	/**
-	 * Get the child <code>Preferences</code> node that was added or removed.
-	 * 
-	 * @return		the child <code>Preferences</code> node that was added or removed.
-	 */
-	public Preferences getChild() {
-		return child;
-	}
-	
-    /*
+    public Preferences getParent() {
+        return parent;
+    }
+
+    /**
+     * Get the child <code>Preferences</code> node that was added or removed.
+     * 
+     * @return the child <code>Preferences</code> node that was added or removed.
+     */
+    public Preferences getChild() {
+        return child;
+    }
+
+    /**
      * This method always throws a <code>NotSerializableException</code>, because 
      * this object cannot be serialized,  
      */
-	private void writeObject (ObjectOutputStream out) throws IOException {
-		throw new NotSerializableException();
-	}
-	
-    /*
+    private void writeObject (ObjectOutputStream out) throws IOException {
+        throw new NotSerializableException();
+    }
+
+    /**
      * This method always throws a <code>NotSerializableException</code>, because 
      * this object cannot be serialized,  
      */
-	private void readObject (ObjectInputStream in) throws IOException, ClassNotFoundException {
-		throw new NotSerializableException();
-	}
+    private void readObject (ObjectInputStream in) throws IOException, ClassNotFoundException {
+        throw new NotSerializableException();
+    }
 }
-
-
-
- 

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeListener.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeListener.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeListener.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/NodeChangeListener.java Thu Jan  1 18:52:34 2009
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-
 package java.util.prefs;
 
 import java.util.EventListener;
@@ -30,20 +29,17 @@
  * @since 1.4
  */
 public interface NodeChangeListener extends EventListener {
-	/**
-	 * This method gets called whenever a child is added to a node.
-	 * 
-	 * @param e Node change event.
-	 */
-	public void childAdded (NodeChangeEvent e);
-	
-	/**
-	 * This method gets called whenever a child is removed from a node.
-	 * 
-	 * @param e Node change event.
-	 */
-	public void childRemoved (NodeChangeEvent e);
+    /**
+     * This method gets called whenever a child is added to a node.
+     * 
+     * @param e Node change event.
+     */
+    public void childAdded (NodeChangeEvent e);
+
+    /**
+     * This method gets called whenever a child is removed from a node.
+     * 
+     * @param e Node change event.
+     */
+    public void childRemoved (NodeChangeEvent e);
 }
-
-
- 

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeEvent.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeEvent.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeEvent.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeEvent.java Thu Jan  1 18:52:34 2009
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-
 package java.util.prefs;
 
 import java.io.IOException;
@@ -40,7 +39,7 @@
 public class PreferenceChangeEvent extends EventObject implements Serializable {
 
     private static final long serialVersionUID = 793724513368024975L;
-    
+
     private final Preferences node;
 
     private final String key;
@@ -50,11 +49,11 @@
     /**
      * Construct a new <code>PreferenceChangeEvent</code> instance.
      * 
-     * @param p		the <code>Preferences</code> instance that this event happened, 
-     * 				this object is considered as event's source.
-     * @param k		the changed preference's key
-     * @param v		the new value of the changed preference, this value can be null, 
-     * 				which means the preference is removed.
+     * @param p the <code>Preferences</code> instance that this event happened, this object is
+     *            considered as event's source.
+     * @param k the changed preference's key
+     * @param v the new value of the changed preference, this value can be null, which means the
+     *            preference is removed.
      */
     public PreferenceChangeEvent(Preferences p, String k, String v) {
         super(p);
@@ -92,7 +91,7 @@
         return node;
     }
 
-    /*
+    /**
      * This method always throws a <code>NotSerializableException</code>, because 
      * this object cannot be serialized,  
      */
@@ -100,7 +99,7 @@
         throw new NotSerializableException();
     }
 
-    /*
+    /**
      * This method always throws a <code>NotSerializableException</code>, because 
      * this object cannot be serialized,  
      */
@@ -108,5 +107,3 @@
         throw new NotSerializableException();
     }
 }
-
-

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeListener.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeListener.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeListener.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferenceChangeListener.java Thu Jan  1 18:52:34 2009
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-
 package java.util.prefs;
 
 import java.util.EventListener;
@@ -30,16 +29,12 @@
  * @since 1.4
  */
 public interface PreferenceChangeListener extends EventListener {
-    
+
     /**
-     * This method gets invoked whenever some preference is added, deleted or 
-     * updated.
+     * This method gets invoked whenever some preference is added, deleted or updated.
      * 
-     * @param pce 	the event instance which describes the changed Preferences 
-     * 				instance and preferences value.
+     * @param pce the event instance which describes the changed Preferences instance and
+     *            preferences value.
      */
-	void preferenceChange (PreferenceChangeEvent pce);
+    void preferenceChange (PreferenceChangeEvent pce);
 }
-
-
- 

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/Preferences.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/Preferences.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/Preferences.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/Preferences.java Thu Jan  1 18:52:34 2009
@@ -89,33 +89,26 @@
  * @since 1.4
  */
 public abstract class Preferences {
-    
-    /*
-     * ---------------------------------------------------------
-     * Class fields 
-     * ---------------------------------------------------------
-     */
-    
-	/**
-	 * Maximum size in characters of preferences key  
-	 */
-	public static final int MAX_KEY_LENGTH = 80;
-	
-	/**
-	 * Maximum size in characters of preferences name
-	 */
-	public static final int MAX_NAME_LENGTH = 80;
-	
-	/**
-	 * Maximum size in characters of preferences value
-	 */
-	public static final int MAX_VALUE_LENGTH = 8192;
-
-	//permission
-	private static final RuntimePermission PREFS_PERM = new RuntimePermission("preferences"); //$NON-NLS-1$
-	
+    /**
+     * Maximum size in characters of preferences key  
+     */
+    public static final int MAX_KEY_LENGTH = 80;
+
+    /**
+     * Maximum size in characters of preferences name
+     */
+    public static final int MAX_NAME_LENGTH = 80;
+
+    /**
+     * Maximum size in characters of preferences value
+     */
+    public static final int MAX_VALUE_LENGTH = 8192;
+
+    //permission
+    private static final RuntimePermission PREFS_PERM = new RuntimePermission("preferences"); //$NON-NLS-1$
+
     //factory used to get user/system prefs root
-	private static final PreferencesFactory factory;
+    private static final PreferencesFactory factory;
 
     // default provider factory name for Windows
     private static final String DEFAULT_FACTORY_NAME_WIN = "java.util.prefs.RegistryPreferencesFactoryImpl"; //$NON-NLS-1$
@@ -123,11 +116,6 @@
     // default provider factory name for Unix
     private static final String DEFAULT_FACTORY_NAME_UNIX = "java.util.prefs.FilePreferencesFactoryImpl"; //$NON-NLS-1$
 
-    /**
-     * ---------------------------------------------------------
-     * Class initializer
-     * ---------------------------------------------------------
-     */		
     static {
         String factoryClassName = AccessController.doPrivileged(new PrivilegedAction<String>() {
             public String run() {
@@ -165,710 +153,608 @@
         }
     }
 
-    /*
-     * ---------------------------------------------------------
-     * Constructors
-     * ---------------------------------------------------------
-     */
-    
-	/**
-	 *	Default constructor, for use by subclasses only.
-	 */
-	protected Preferences() {
+    /**
+     *	Default constructor, for use by subclasses only.
+     */
+    protected Preferences() {
         super();
-	}
-	
-    /*
-     * ---------------------------------------------------------
-     * Methods
-     * ---------------------------------------------------------
-     */
-    
-	/**
-	 * Get this preference node's absolute path string.
-	 * 
-	 * @return this preference node's absolute path string.
-	 */
-	public abstract String absolutePath();
-	
-	/**
-	 * Return names of all children of this node, or empty string if this node 
-	 * has no children. 
-	 * 
-	 * @return 		names of all children of this node
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract String[] childrenNames() throws BackingStoreException;
-	
-	/**
-	 * Remove all preferences of this node. 
-	 * 
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract void clear() throws BackingStoreException;
-	
-	/**
-	 * Export all preferences of this node to the given output stream in XML 
-	 * document. 
-	 * <p>
-	 * This XML document has the following DOCTYPE declaration:
-	 * <pre>
-	 * &lt;!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd"&gt;</pre>
-	 * And the UTF-8 encoding will be used. Please note that this node is not 
-	 * thread-safe, which is an exception of this class. 
-	 * </p>
-	 * @param  ostream
-	 * 				the output stream to export the XML
-	 * @throws IOException
-	 * 				if export operation caused an <code>IOException</code>
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract void exportNode (OutputStream ostream) throws IOException, BackingStoreException;
-	
-	/**
-	 * Export all preferences of this node and its all descendants to the given 
-	 * output stream in XML document. 
-	 * <p>
-	 * This XML document has the following DOCTYPE declaration:
-	 * <pre>
-	 * &lt;!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd"&gt;</pre>	 * 
-	 * And the UTF-8 encoding will be used. Please note that this node is not 
-	 * thread-safe, which is an exception of this class. 
-	 * </p>
-	 * @param  ostream
-	 * 				the output stream to export the XML
-	 * @throws IOException
-	 * 				if export operation caused an <code>IOException</code>
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract void exportSubtree (OutputStream ostream) throws IOException, BackingStoreException;
-	
-	/**
-	 * Force the updates to this node and its descendants to the backing store. 
-	 * <p>
-	 * If this node has been removed, then the invocation of this method only 
-	 * flush this node without descendants.
-	 * </p> 
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure
-	 */
-	public abstract void flush() throws BackingStoreException;
-	
-	/**
-	 * Return the string value mapped to the given key, or default value if no 
-	 * value is mapped or backing store is unavailable.
-	 * <p>
-	 * Some implementations may store default values in backing stores. In this case, 
-	 * if there is no value mapped to the given key, the stored default value is 
-	 * returned.
-	 * </p>
-	 * 
-	 * @param key	the preference key
-	 * @param deflt	the default value, which will be returned if no value is 
-	 * 				mapped to the given key or backing store unavailable 
-	 * @return 		the preference value mapped to the given key, or default value if 
-	 * 				no value is mapped or backing store unavailable 
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 * @throws NullPointerException
-	 * 				if parameter key is null 
-	 */
-	public abstract String get (String key, String deflt);
-	
-	/**
-	 * Return the boolean value mapped to the given key, or default value if no 
-	 * value is mapped, backing store is unavailable, or the value is invalid.
-	 * <p>
-	 * The valid value is string equals "true", which represents true, or "false", 
-	 * which represents false, case is ignored. 
-	 * </p>  
-	 * <p>
-	 * Some implementations may store default values in backing stores. In this case, 
-	 * if there is no value mapped to the given key, the stored default value is 
-	 * returned.
-	 * </p>
-	 * 
-	 * @param key	the preference key
-	 * @param deflt	the default value, which will be returned if no value is 
-	 * 				mapped to the given key, backing store unavailable or value 
-	 * 				is invalid 
-	 * @return 		the boolean value mapped to the given key, or default value if 
-	 * 				no value is mapped, backing store unavailable or value is invalid
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 * @throws NullPointerException
-	 * 				if parameter key is null 
-	 */
-	public abstract boolean getBoolean (String key, boolean deflt);
-	
-	/**
-	 * Return the byte array value mapped to the given key, or default value if no 
-	 * value is mapped, backing store is unavailable, or the value is invalid string.
-	 * <p>
-	 * The valid value string is Base64 encoded binary data. The Base64 encoding 
-	 * is as defined in <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>, 
-	 * section 6.8.
-	 * </p>  
-	 * <p>
-	 * Some implementations may store default values in backing stores. In this case, 
-	 * if there is no value mapped to the given key, the stored default value is 
-	 * returned.
-	 * </p>
-	 * 
-	 * @param key	the preference key
-	 * @param deflt	the default value, which will be returned if no value is 
-	 * 				mapped to the given key, backing store unavailable or value 
-	 * 				is invalid 
-	 * @return 		the byte array value mapped to the given key, or default value if 
-	 * 				no value is mapped, backing store unavailable or value is invalid
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 * @throws NullPointerException
-	 * 				if parameter key is null 
-	 */
-	public abstract byte[] getByteArray (String key, byte[] deflt);
-	
-	/**
-	 * Return the double value mapped to the given key, or default value if no 
-	 * value is mapped, backing store is unavailable, or the value is invalid string.
-	 * <p>
-	 * The valid value string can be converted to double number by 
-	 * {@link Double#parseDouble(String) Double.parseDouble(String)}.
-	 * </p>  
-	 * <p>
-	 * Some implementations may store default values in backing stores. In this case, 
-	 * if there is no value mapped to the given key, the stored default value is 
-	 * returned.
-	 * </p>
-	 * 
-	 * @param key	the preference key
-	 * @param deflt	the default value, which will be returned if no value is 
-	 * 				mapped to the given key, backing store unavailable or value 
-	 * 				is invalid 
-	 * @return 		the double value mapped to the given key, or default value if 
-	 * 				no value is mapped, backing store unavailable or value is invalid
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 * @throws NullPointerException
-	 * 				if parameter key is null 
-	 */
-	public abstract double getDouble (String key, double deflt);
-	
-	/**
-	 * Return the float value mapped to the given key, or default value if no 
-	 * value is mapped, backing store is unavailable, or the value is invalid string.
-	 * <p>
-	 * The valid value string can be converted to float number by 
-	 * {@link Float#parseFloat(String) Float.parseFloat(String)}.
-	 * </p>  
-	 * <p>
-	 * Some implementations may store default values in backing stores. In this case, 
-	 * if there is no value mapped to the given key, the stored default value is 
-	 * returned.
-	 * </p>
-	 * 
-	 * @param key	the preference key
-	 * @param deflt	the default value, which will be returned if no value is 
-	 * 				mapped to the given key, backing store unavailable or value 
-	 * 				is invalid 
-	 * @return 		the float value mapped to the given key, or default value if 
-	 * 				no value is mapped, backing store unavailable or value is invalid
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 * @throws NullPointerException
-	 * 				if parameter key is null 
-	 */
-	public abstract float getFloat (String key, float deflt);
-	
-	/**
-	 * Return the float value mapped to the given key, or default value if no 
-	 * value is mapped, backing store is unavailable, or the value is invalid string.
-	 * <p>
-	 * The valid value string can be converted to integer by 
-	 * {@link Integer#parseInt(String) Integer.parseInt(String)}.
-	 * </p>  
-	 * <p>
-	 * Some implementations may store default values in backing stores. In this case, 
-	 * if there is no value mapped to the given key, the stored default value is 
-	 * returned.
-	 * </p>
-	 * 
-	 * @param key	the preference key
-	 * @param deflt	the default value, which will be returned if no value is 
-	 * 				mapped to the given key, backing store unavailable or value 
-	 * 				is invalid 
-	 * @return 		the integer value mapped to the given key, or default value if 
-	 * 				no value is mapped, backing store unavailable or value is invalid
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 * @throws NullPointerException
-	 * 				if parameter key is null 
-	 */
-	public abstract int getInt (String key, int deflt);
-	
-	/**
-	 * Return the long value mapped to the given key, or default value if no 
-	 * value is mapped, backing store is unavailable, or the value is invalid string.
-	 * <p>
-	 * The valid value string can be converted to long integer by 
-	 * {@link Long#parseLong(String) Long.parseLong(String)}.
-	 * </p>  
-	 * <p>
-	 * Some implementations may store default values in backing stores. In this case, 
-	 * if there is no value mapped to the given key, the stored default value is 
-	 * returned.
-	 * </p>
-	 * 
-	 * @param key	the preference key
-	 * @param deflt	the default value, which will be returned if no value is 
-	 * 				mapped to the given key, backing store unavailable or value 
-	 * 				is invalid 
-	 * @return 		the long value mapped to the given key, or default value if 
-	 * 				no value is mapped, backing store unavailable or value is invalid
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 * @throws NullPointerException
-	 * 				if parameter key is null 
-	 */
-	public abstract long getLong (String key, long deflt);
-	
-	/**
-	 * Import all preferences from the given input stream in XML document. 
-	 * <p>
-	 * This XML document has the following DOCTYPE declaration:
-	 * <pre>
-	 * &lt;!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd"&gt;</pre>	 * 
-	 * Please note that this node is not thread-safe, which is an exception of 
-	 * this class. 
-	 * </p>
-	 * 
-	 * @param istream
-	 * 				the given input stream to read data
-	 * @throws InvalidPreferencesFormatException
-	 * 				if the data read from given input stream is not valid XML 
-	 * 				document
-	 * @throws IOException
-	 * 				if import operation caused an <code>IOException</code>
-	 * @throws SecurityException
-	 * 				if <code>RuntimePermission("preferences")</code> is denied 
-	 * 				by a <code>SecurityManager</code>
-	 */
-	public static void importPreferences (InputStream istream) throws InvalidPreferencesFormatException, IOException {
-	    checkSecurity();
-	    if(null == istream){
+    }
+
+    /**
+     * Get this preference node's absolute path string.
+     * 
+     * @return this preference node's absolute path string.
+     */
+    public abstract String absolutePath();
+
+    /**
+     * Return names of all children of this node, or empty string if this node has no children.
+     * 
+     * @return names of all children of this node
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract String[] childrenNames() throws BackingStoreException;
+
+    /**
+     * Remove all preferences of this node.
+     * 
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void clear() throws BackingStoreException;
+
+    /**
+     * Export all preferences of this node to the given output stream in XML document.
+     * <p>
+     * This XML document has the following DOCTYPE declaration:
+     * 
+     * <pre>
+     * &lt;!DOCTYPE preferences SYSTEM &quot;http://java.sun.com/dtd/preferences.dtd&quot;&gt;
+     * </pre>
+     * 
+     * And the UTF-8 encoding will be used. Please note that this node is not thread-safe, which is
+     * an exception of this class.
+     * </p>
+     * 
+     * @param ostream the output stream to export the XML
+     * @throws IOException if export operation caused an <code>IOException</code>
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void exportNode(OutputStream ostream) throws IOException, BackingStoreException;
+
+    /**
+     * Export all preferences of this node and its all descendants to the given output stream in XML
+     * document.
+     * <p>
+     * This XML document has the following DOCTYPE declaration:
+     * 
+     * <pre>
+     * &lt;!DOCTYPE preferences SYSTEM &quot;http://java.sun.com/dtd/preferences.dtd&quot;&gt;
+     * </pre>
+     * 
+     * And the UTF-8 encoding will be used. Please note that this node is not thread-safe, which is
+     * an exception of this class.
+     * </p>
+     * 
+     * @param ostream the output stream to export the XML
+     * @throws IOException if export operation caused an <code>IOException</code>
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void exportSubtree(OutputStream ostream) throws IOException,
+            BackingStoreException;
+
+    /**
+     * Force the updates to this node and its descendants to the backing store.
+     * <p>
+     * If this node has been removed, then the invocation of this method only flush this node
+     * without descendants.
+     * </p>
+     * 
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     */
+    public abstract void flush() throws BackingStoreException;
+
+    /**
+     * Return the string value mapped to the given key, or default value if no value is mapped or
+     * backing store is unavailable.
+     * <p>
+     * Some implementations may store default values in backing stores. In this case, if there is no
+     * value mapped to the given key, the stored default value is returned.
+     * </p>
+     * 
+     * @param key the preference key
+     * @param deflt the default value, which will be returned if no value is mapped to the given key
+     *            or backing store unavailable
+     * @return the preference value mapped to the given key, or default value if no value is mapped
+     *         or backing store unavailable
+     * @throws IllegalStateException if this node has been removed
+     * @throws NullPointerException if parameter key is null
+     */
+    public abstract String get(String key, String deflt);
+
+    /**
+     * Return the boolean value mapped to the given key, or default value if no value is mapped,
+     * backing store is unavailable, or the value is invalid.
+     * <p>
+     * The valid value is string equals "true", which represents true, or "false", which represents
+     * false, case is ignored.
+     * </p>
+     * <p>
+     * Some implementations may store default values in backing stores. In this case, if there is no
+     * value mapped to the given key, the stored default value is returned.
+     * </p>
+     * 
+     * @param key the preference key
+     * @param deflt the default value, which will be returned if no value is mapped to the given
+     *            key, backing store unavailable or value is invalid
+     * @return the boolean value mapped to the given key, or default value if no value is mapped,
+     *         backing store unavailable or value is invalid
+     * @throws IllegalStateException if this node has been removed
+     * @throws NullPointerException if parameter key is null
+     */
+    public abstract boolean getBoolean(String key, boolean deflt);
+
+    /**
+     * Return the byte array value mapped to the given key, or default value if no value is mapped,
+     * backing store is unavailable, or the value is invalid string.
+     * <p>
+     * The valid value string is Base64 encoded binary data. The Base64 encoding is as defined in <a
+     * href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>, section 6.8.
+     * </p>
+     * <p>
+     * Some implementations may store default values in backing stores. In this case, if there is no
+     * value mapped to the given key, the stored default value is returned.
+     * </p>
+     * 
+     * @param key the preference key
+     * @param deflt the default value, which will be returned if no value is mapped to the given
+     *            key, backing store unavailable or value is invalid
+     * @return the byte array value mapped to the given key, or default value if no value is mapped,
+     *         backing store unavailable or value is invalid
+     * @throws IllegalStateException if this node has been removed
+     * @throws NullPointerException if parameter key is null
+     */
+    public abstract byte[] getByteArray(String key, byte[] deflt);
+
+    /**
+     * Return the double value mapped to the given key, or default value if no value is mapped,
+     * backing store is unavailable, or the value is invalid string.
+     * <p>
+     * The valid value string can be converted to double number by
+     * {@link Double#parseDouble(String) Double.parseDouble(String)}.
+     * </p>
+     * <p>
+     * Some implementations may store default values in backing stores. In this case, if there is no
+     * value mapped to the given key, the stored default value is returned.
+     * </p>
+     * 
+     * @param key the preference key
+     * @param deflt the default value, which will be returned if no value is mapped to the given
+     *            key, backing store unavailable or value is invalid
+     * @return the double value mapped to the given key, or default value if no value is mapped,
+     *         backing store unavailable or value is invalid
+     * @throws IllegalStateException if this node has been removed
+     * @throws NullPointerException if parameter key is null
+     */
+    public abstract double getDouble(String key, double deflt);
+
+    /**
+     * Return the float value mapped to the given key, or default value if no value is mapped,
+     * backing store is unavailable, or the value is invalid string.
+     * <p>
+     * The valid value string can be converted to float number by {@link Float#parseFloat(String)
+     * Float.parseFloat(String)}.
+     * </p>
+     * <p>
+     * Some implementations may store default values in backing stores. In this case, if there is no
+     * value mapped to the given key, the stored default value is returned.
+     * </p>
+     * 
+     * @param key the preference key
+     * @param deflt the default value, which will be returned if no value is mapped to the given
+     *            key, backing store unavailable or value is invalid
+     * @return the float value mapped to the given key, or default value if no value is mapped,
+     *         backing store unavailable or value is invalid
+     * @throws IllegalStateException if this node has been removed
+     * @throws NullPointerException if parameter key is null
+     */
+    public abstract float getFloat(String key, float deflt);
+
+    /**
+     * Return the float value mapped to the given key, or default value if no value is mapped,
+     * backing store is unavailable, or the value is invalid string.
+     * <p>
+     * The valid value string can be converted to integer by {@link Integer#parseInt(String)
+     * Integer.parseInt(String)}.
+     * </p>
+     * <p>
+     * Some implementations may store default values in backing stores. In this case, if there is no
+     * value mapped to the given key, the stored default value is returned.
+     * </p>
+     * 
+     * @param key the preference key
+     * @param deflt the default value, which will be returned if no value is mapped to the given
+     *            key, backing store unavailable or value is invalid
+     * @return the integer value mapped to the given key, or default value if no value is mapped,
+     *         backing store unavailable or value is invalid
+     * @throws IllegalStateException if this node has been removed
+     * @throws NullPointerException if parameter key is null
+     */
+    public abstract int getInt(String key, int deflt);
+
+    /**
+     * Return the long value mapped to the given key, or default value if no value is mapped,
+     * backing store is unavailable, or the value is invalid string.
+     * <p>
+     * The valid value string can be converted to long integer by {@link Long#parseLong(String)
+     * Long.parseLong(String)}.
+     * </p>
+     * <p>
+     * Some implementations may store default values in backing stores. In this case, if there is no
+     * value mapped to the given key, the stored default value is returned.
+     * </p>
+     * 
+     * @param key the preference key
+     * @param deflt the default value, which will be returned if no value is mapped to the given
+     *            key, backing store unavailable or value is invalid
+     * @return the long value mapped to the given key, or default value if no value is mapped,
+     *         backing store unavailable or value is invalid
+     * @throws IllegalStateException if this node has been removed
+     * @throws NullPointerException if parameter key is null
+     */
+    public abstract long getLong(String key, long deflt);
+
+    /**
+     * Import all preferences from the given input stream in XML document.
+     * <p>
+     * This XML document has the following DOCTYPE declaration:
+     * 
+     * <pre>
+     * &lt;!DOCTYPE preferences SYSTEM &quot;http://java.sun.com/dtd/preferences.dtd&quot;&gt;
+     * </pre>
+     * 
+     * Please note that this node is not thread-safe, which is an exception of this class.
+     * </p>
+     * 
+     * @param istream the given input stream to read data
+     * @throws InvalidPreferencesFormatException if the data read from given input stream is not
+     *             valid XML document
+     * @throws IOException if import operation caused an <code>IOException</code>
+     * @throws SecurityException if <code>RuntimePermission("preferences")</code> is denied by a
+     *             <code>SecurityManager</code>
+     */
+    public static void importPreferences (InputStream istream) throws InvalidPreferencesFormatException, IOException {
+        checkSecurity();
+        if(null == istream){
             // prefs.0=Inputstream cannot be null\!
-	        throw new MalformedURLException(Messages.getString("prefs.0")); //$NON-NLS-1$
-	    }
-	    XMLParser.importPrefs(istream);
-	}
-	
-	/**
-	 * Return true if this is a user preferences, false if this is a system 
-	 * preferences
-	 * 
-	 * @return 		true if this is a user preferences, false if this is a 
-	 * 				system preferences
-	 */
-	public abstract boolean isUserNode();
-	
-	/**
-	 * Return all preferences keys stored in this node, or empty array if no 
-	 * key is found.
-	 * 
-	 * @return 		all preferences keys in this node
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract String[] keys() throws BackingStoreException;
-	
-	/**
-	 * Return name of this node.
-	 * 
-	 * @return 		the name of this node
-	 */
-	public abstract String name();
-	
-	/**
-	 * Return the preferences node with the given path name. The path name can 
-	 * be relative or absolute. The dictated preferences and its ancestors will 
-	 * be created if they do not exist.
-	 * <p>
-	 * The path is treated as relative to this node if it doesn't start with 
-	 * slash, or as absolute otherwise.</p>  
-	 *  
-	 * @param path	the path name of dictated preferences
-	 * @return 		the dictated preferences node
-	 * @throws IllegalStateException
-	 * 				if this node has been removed.
-	 * @throws IllegalArgumentException
-	 * 				if the path name is invalid.
-	 * @throws NullPointerException
-	 * 				if given path is null.
-	 */
-	public abstract Preferences node (String path);
-	
-	/**
-	 * Return the preferences node with the given path name. The path is treated 
-	 * as relative to this node if it doesn't start with slash, or as absolute 
-	 * otherwise.
-	 * <p>
-	 * Please note that if this node has been removed, invocation of this node 
-	 * will throw <code>IllegalStateException</code> except the given path is 
-	 * empty string, which will return false.
-	 * </p>
-	 * 
-	 * @param path	the path name of dictated preferences
-	 * @return 		true if the dictated preferences node exists
-	 * @throws IllegalStateException
-	 * 				if this node has been removed and the path is not empty string.
-	 * @throws IllegalArgumentException
-	 * 				if the path name is invalid.
-	 * @throws NullPointerException
-	 * 				if given path is null.
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure
-	 */
-	public abstract boolean nodeExists (String path) throws BackingStoreException;
-	
-	/**
-	 * Return the parent preferences node of this node, or null if this node is root.
-	 * 
-	 * @return the parent preferences node of this node.
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract Preferences parent();
-	
-	/**
-	 * Add new preferences to this node using given key and value, or update 
-	 * value if preferences with given key has already existed.
-	 * 
-	 * @param key	the preferences key to be added or be updated 
-	 * @param value	the preferences value for the given key
-	 * @throws NullPointerException
-	 * 				if the given key or value is null
-	 * @throws IllegalArgumentException
-	 * 				if the given key's length is bigger than 
-	 * 				<code>MAX_KEY_LENGTH</code>, or the value's length is bigger 
-	 * 				than <code>MAX_VALUE_LENGTH</code>
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract void put (String key, String value);
-	
-	/**
-	 * Add new preferences to this node using given key and string form of given 
-	 * value, or update value if preferences with given key has already existed. 
-	 * 
-	 * @param key	the preferences key to be added or be updated 
-	 * @param value	the preferences value for the given key
-	 * @throws NullPointerException
-	 * 				if the given key is null
-	 * @throws IllegalArgumentException
-	 * 				if the given key's length is bigger than 
-	 * 				<code>MAX_KEY_LENGTH</code>
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract void putBoolean (String key, boolean value);
-	
-	/**
-	 * Add new preferences to this node using given key and string form of given 
-	 * value, or update value if preferences with given key has already existed. 
-	 * <p>
-	 * The string form of value is the Base64 encoded binary data of the given 
-	 * byte array. The Base64 encoding is as defined in 
-	 * <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>, section 6.8.</p>
-	 * 
-	 * @param key	the preferences key to be added or be updated 
-	 * @param value	the preferences value for the given key
-	 * @throws NullPointerException
-	 * 				if the given key or value is null
-	 * @throws IllegalArgumentException
-	 * 				if the given key's length is bigger than 
-	 * 				<code>MAX_KEY_LENGTH</code> or value's length is bigger than  
-	 * 				three quarters of <code>MAX_KEY_LENGTH</code>
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract void putByteArray (String key, byte[] value);
-	
-	/**
-	 * Add new preferences to this node using given key and string form of given 
-	 * value, or update value if preferences with given key has already existed. 
-	 * <p>
-	 * The string form of given value is the result of invoking 
-	 * {@link Double#toString(double) Double.toString(double)}</p>
-	 * 
-	 * @param key	the preferences key to be added or be updated 
-	 * @param value	the preferences value for the given key
-	 * @throws NullPointerException
-	 * 				if the given key is null
-	 * @throws IllegalArgumentException
-	 * 				if the given key's length is bigger than 
-	 * 				<code>MAX_KEY_LENGTH</code>
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract void putDouble (String key, double value);
-	
-	/**
-	 * Add new preferences to this node using given key and string form of given 
-	 * value, or update value if preferences with given key has already existed. 
-	 * <p>
-	 * The string form of given value is the result of invoking 
-	 * {@link Float#toString(float) Float.toString(float)}</p>
-	 * 
-	 * @param key	the preferences key to be added or be updated 
-	 * @param value	the preferences value for the given key
-	 * @throws NullPointerException
-	 * 				if the given key is null
-	 * @throws IllegalArgumentException
-	 * 				if the given key's length is bigger than 
-	 * 				<code>MAX_KEY_LENGTH</code>
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract void putFloat (String key, float value);
-	
-	/**
-	 * Add new preferences to this node using given key and string form of given 
-	 * value, or update value if preferences with given key has already existed. 
-	 * <p>
-	 * The string form of given value is the result of invoking 
-	 * {@link Integer#toString(int) Integer.toString(int)}</p>
-	 * 
-	 * @param key	the preferences key to be added or be updated 
-	 * @param value	the preferences value for the given key
-	 * @throws NullPointerException
-	 * 				if the given key is null
-	 * @throws IllegalArgumentException
-	 * 				if the given key's length is bigger than 
-	 * 				<code>MAX_KEY_LENGTH</code>
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract void putInt (String key, int value);
-	
-	/**
-	 * Add new preferences to this node using given key and string form of given 
-	 * value, or update value if preferences with given key has already existed. 
-	 * <p>
-	 * The string form of given value is the result of invoking 
-	 * {@link Long#toString(long) Long.toString(long)}</p>
-	 * 
-	 * @param key	the preferences key to be added or be updated 
-	 * @param value	the preferences value for the given key
-	 * @throws NullPointerException
-	 * 				if the given key is null
-	 * @throws IllegalArgumentException
-	 * 				if the given key's length is bigger than 
-	 * 				<code>MAX_KEY_LENGTH</code>
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract void putLong (String key, long value);
-
-	/**
-	 * Remove the preferences mapped to the given key from this node.
-	 * 
-	 * @param key	the given preferences key to removed 
-	 * @throws NullPointerException
-	 * 				if the given key is null
-	 * @throws IllegalStateException
-	 * 			if this node has been removed	
-	 */
-	public abstract void remove (String key);
-	
-	/**
-	 * Remove this preferences node and its all descendants. The removal maybe
-	 * won't be persisted until the <code>flush()</code> method is invoked. 
-	 * 
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure 
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 * @throws UnsupportedOperationException
-	 * 				if this is a root node
-	 */
-	public abstract void removeNode() throws BackingStoreException;
-	
-	/**
-	 * Register an <code>NodeChangeListener</code> instance for this node, which 
-	 * will receive <code>NodeChangeEvent</code>. <code>NodeChangeEvent</code> will 
-	 * be produced when direct child node is added to or removed from this node. 
-	 * 
-	 * @param ncl	the given listener to be registered
-	 * @throws NullPointerException
-	 * 				if the given listener is null
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract void addNodeChangeListener (NodeChangeListener ncl);
-	
-	/**
-	 * Register an <code>PreferenceChangeListener</code> instance for this node, which 
-	 * will receive <code>PreferenceChangeEvent</code>. <code>PreferenceChangeEvent</code> will 
-	 * be produced when preference is added to, removed from or updated for this node. 
-	 * 
-	 * @param pcl	the given listener to be registered
-	 * @throws NullPointerException
-	 * 				if the given listener is null
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract void addPreferenceChangeListener (PreferenceChangeListener pcl);
-	
-	/**
-	 * Remove the given <code>NodeChangeListener</code> instance from this node. 
-	 * 
-	 * @param ncl	the given listener to be removed
-	 * @throws IllegalArgumentException
-	 * 				if the given listener 
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract void removeNodeChangeListener (NodeChangeListener ncl);
-	
-	/**
-	 * Remove the given <code>PreferenceChangeListener</code> instance from this node. 
-	 * 
-	 * @param pcl	the given listener to be removed
-	 * @throws IllegalArgumentException
-	 * 				if the given listener 
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract void removePreferenceChangeListener (PreferenceChangeListener pcl);
-	
-	/**
-	 * Synchronize this preferences node and its descendants' data with the back 
-	 * end preferences store. The changes of back end should be reflect by this 
-	 * node and its descendants, meanwhile, the changes of this node and descendants 
-	 * should be persisted.
-	 * 
-	 * @throws BackingStoreException
-	 * 				if backing store is unavailable or causes operation failure
-	 * @throws IllegalStateException
-	 * 				if this node has been removed
-	 */
-	public abstract void sync() throws BackingStoreException;
-	
-    /**
-     * Return the system preference node for the package of given class. The 
-     * absolute path of the returned node is one slash followed by the given 
-     * class's full package name with replacing each period ('.') with slash.
-     * For example, the preference's associated with class <code>Object<code> 
+            throw new MalformedURLException(Messages.getString("prefs.0")); //$NON-NLS-1$
+        }
+        XMLParser.importPrefs(istream);
+    }
+
+    /**
+     * Return true if this is a user preferences, false if this is a system preferences
+     * 
+     * @return true if this is a user preferences, false if this is a system preferences
+     */
+    public abstract boolean isUserNode();
+
+    /**
+     * Return all preferences keys stored in this node, or empty array if no key is found.
+     * 
+     * @return all preferences keys in this node
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract String[] keys() throws BackingStoreException;
+
+    /**
+     * Return name of this node.
+     * 
+     * @return the name of this node
+     */
+    public abstract String name();
+
+    /**
+     * Return the preferences node with the given path name. The path name can be relative or
+     * absolute. The dictated preferences and its ancestors will be created if they do not exist.
+     * <p>
+     * The path is treated as relative to this node if it doesn't start with slash, or as absolute
+     * otherwise.
+     * </p>
+     * 
+     * @param path the path name of dictated preferences
+     * @return the dictated preferences node
+     * @throws IllegalStateException if this node has been removed.
+     * @throws IllegalArgumentException if the path name is invalid.
+     * @throws NullPointerException if given path is null.
+     */
+    public abstract Preferences node(String path);
+
+    /**
+     * Return the preferences node with the given path name. The path is treated as relative to this
+     * node if it doesn't start with slash, or as absolute otherwise.
+     * <p>
+     * Please note that if this node has been removed, invocation of this node will throw
+     * <code>IllegalStateException</code> except the given path is empty string, which will return
+     * false.
+     * </p>
+     * 
+     * @param path the path name of dictated preferences
+     * @return true if the dictated preferences node exists
+     * @throws IllegalStateException if this node has been removed and the path is not empty string.
+     * @throws IllegalArgumentException if the path name is invalid.
+     * @throws NullPointerException if given path is null.
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     */
+    public abstract boolean nodeExists(String path) throws BackingStoreException;
+
+    /**
+     * Return the parent preferences node of this node, or null if this node is root.
+     * 
+     * @return the parent preferences node of this node.
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract Preferences parent();
+
+    /**
+     * Add new preferences to this node using given key and value, or update value if preferences
+     * with given key has already existed.
+     * 
+     * @param key the preferences key to be added or be updated
+     * @param value the preferences value for the given key
+     * @throws NullPointerException if the given key or value is null
+     * @throws IllegalArgumentException if the given key's length is bigger than
+     *             <code>MAX_KEY_LENGTH</code>, or the value's length is bigger than
+     *             <code>MAX_VALUE_LENGTH</code>
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void put(String key, String value);
+
+    /**
+     * Add new preferences to this node using given key and string form of given value, or update
+     * value if preferences with given key has already existed.
+     * 
+     * @param key the preferences key to be added or be updated
+     * @param value the preferences value for the given key
+     * @throws NullPointerException if the given key is null
+     * @throws IllegalArgumentException if the given key's length is bigger than
+     *             <code>MAX_KEY_LENGTH</code>
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void putBoolean(String key, boolean value);
+
+    /**
+     * Add new preferences to this node using given key and string form of given value, or update
+     * value if preferences with given key has already existed.
+     * <p>
+     * The string form of value is the Base64 encoded binary data of the given byte array. The
+     * Base64 encoding is as defined in <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>,
+     * section 6.8.
+     * </p>
+     * 
+     * @param key the preferences key to be added or be updated
+     * @param value the preferences value for the given key
+     * @throws NullPointerException if the given key or value is null
+     * @throws IllegalArgumentException if the given key's length is bigger than
+     *             <code>MAX_KEY_LENGTH</code> or value's length is bigger than three quarters of
+     *             <code>MAX_KEY_LENGTH</code>
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void putByteArray(String key, byte[] value);
+
+    /**
+     * Add new preferences to this node using given key and string form of given value, or update
+     * value if preferences with given key has already existed.
+     * <p>
+     * The string form of given value is the result of invoking {@link Double#toString(double)
+     * Double.toString(double)}
+     * </p>
+     * 
+     * @param key the preferences key to be added or be updated
+     * @param value the preferences value for the given key
+     * @throws NullPointerException if the given key is null
+     * @throws IllegalArgumentException if the given key's length is bigger than
+     *             <code>MAX_KEY_LENGTH</code>
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void putDouble(String key, double value);
+
+    /**
+     * Add new preferences to this node using given key and string form of given value, or update
+     * value if preferences with given key has already existed.
+     * <p>
+     * The string form of given value is the result of invoking {@link Float#toString(float)
+     * Float.toString(float)}
+     * </p>
+     * 
+     * @param key the preferences key to be added or be updated
+     * @param value the preferences value for the given key
+     * @throws NullPointerException if the given key is null
+     * @throws IllegalArgumentException if the given key's length is bigger than
+     *             <code>MAX_KEY_LENGTH</code>
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void putFloat(String key, float value);
+
+    /**
+     * Add new preferences to this node using given key and string form of given value, or update
+     * value if preferences with given key has already existed.
+     * <p>
+     * The string form of given value is the result of invoking {@link Integer#toString(int)
+     * Integer.toString(int)}
+     * </p>
+     * 
+     * @param key the preferences key to be added or be updated
+     * @param value the preferences value for the given key
+     * @throws NullPointerException if the given key is null
+     * @throws IllegalArgumentException if the given key's length is bigger than
+     *             <code>MAX_KEY_LENGTH</code>
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void putInt(String key, int value);
+
+    /**
+     * Add new preferences to this node using given key and string form of given value, or update
+     * value if preferences with given key has already existed.
+     * <p>
+     * The string form of given value is the result of invoking {@link Long#toString(long)
+     * Long.toString(long)}
+     * </p>
+     * 
+     * @param key the preferences key to be added or be updated
+     * @param value the preferences value for the given key
+     * @throws NullPointerException if the given key is null
+     * @throws IllegalArgumentException if the given key's length is bigger than
+     *             <code>MAX_KEY_LENGTH</code>
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void putLong(String key, long value);
+
+    /**
+     * Remove the preferences mapped to the given key from this node.
+     * 
+     * @param key the given preferences key to removed
+     * @throws NullPointerException if the given key is null
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void remove(String key);
+
+    /**
+     * Remove this preferences node and its all descendants. The removal maybe won't be persisted
+     * until the <code>flush()</code> method is invoked.
+     * 
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     * @throws IllegalStateException if this node has been removed
+     * @throws UnsupportedOperationException if this is a root node
+     */
+    public abstract void removeNode() throws BackingStoreException;
+
+    /**
+     * Register an <code>NodeChangeListener</code> instance for this node, which will receive
+     * <code>NodeChangeEvent</code>. <code>NodeChangeEvent</code> will be produced when direct child
+     * node is added to or removed from this node.
+     * 
+     * @param ncl the given listener to be registered
+     * @throws NullPointerException if the given listener is null
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void addNodeChangeListener(NodeChangeListener ncl);
+
+    /**
+     * Register an <code>PreferenceChangeListener</code> instance for this node, which will receive
+     * <code>PreferenceChangeEvent</code>. <code>PreferenceChangeEvent</code> will be produced when
+     * preference is added to, removed from or updated for this node.
+     * 
+     * @param pcl the given listener to be registered
+     * @throws NullPointerException if the given listener is null
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void addPreferenceChangeListener (PreferenceChangeListener pcl);
+
+    /**
+     * Remove the given <code>NodeChangeListener</code> instance from this node.
+     * 
+     * @param ncl the given listener to be removed
+     * @throws IllegalArgumentException if the given listener
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void removeNodeChangeListener (NodeChangeListener ncl);
+
+    /**
+     * Remove the given <code>PreferenceChangeListener</code> instance from this node.
+     * 
+     * @param pcl the given listener to be removed
+     * @throws IllegalArgumentException if the given listener
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void removePreferenceChangeListener (PreferenceChangeListener pcl);
+
+    /**
+     * Synchronize this preferences node and its descendants' data with the back end preferences
+     * store. The changes of back end should be reflect by this node and its descendants, meanwhile,
+     * the changes of this node and descendants should be persisted.
+     * 
+     * @throws BackingStoreException if backing store is unavailable or causes operation failure
+     * @throws IllegalStateException if this node has been removed
+     */
+    public abstract void sync() throws BackingStoreException;
+
+    /**
+     * <p>Return the system preference node for the package of given class. The absolute path of the
+     * returned node is one slash followed by the given class's full package name with replacing
+     * each period ('.') with slash. For example, the preference's associated with class
+     * <code>Object<code> 
      * has absolute path like "/java/lang". As a special case, the unnamed 
-     * package is associated with preference node "/<unnamed>". 
+     * package is associated with preference node "/<unnamed>".</p> 
      *  
-	 * This method will create node and its ancestors if needed, and the new 
-	 * created nodes maybe won't be persisted until the <code>flush()</code> 
-	 * is invoked.
-	 * 
-	 * @param c		the given class 
-	 * @return 		the system preference node for the package of given class. 
-	 * @throws NullPointerException
-	 * 				if the given class is null
-	 * @throws SecurityException
-	 * 				if <code>RuntimePermission("preferences")</code> is denied 
-	 * 				by a <code>SecurityManager</code>
-	 */
-	public static Preferences systemNodeForPackage (Class<?> c) {
-	    checkSecurity();
-		return factory.systemRoot().node(getNodeName(c));
-	}
-	
-	/**
-	 * Return the root node for system preference hierarchy.
-	 * 
-	 * @return 		the root node for system preference hierarchy
-	 * @throws SecurityException
-	 * 				if <code>RuntimePermission("preferences")</code> is denied 
-	 * 				by a <code>SecurityManager</code>
-	 */
-	public static Preferences systemRoot() {
-	    checkSecurity();
-	    return factory.systemRoot();
-	}
-	
-	//check the RuntimePermission("preferences")
+     * <p>This method will create node and its ancestors if needed, and the new 
+     * created nodes maybe won't be persisted until the <code>flush()</code> is invoked.</p>
+     * 
+     * @param c the given class
+     * @return the system preference node for the package of given class.
+     * @throws NullPointerException if the given class is null
+     * @throws SecurityException if <code>RuntimePermission("preferences")</code> is denied by a
+     *             <code>SecurityManager</code>
+     */
+    public static Preferences systemNodeForPackage (Class<?> c) {
+        checkSecurity();
+        return factory.systemRoot().node(getNodeName(c));
+    }
+
+    /**
+     * Return the root node for system preference hierarchy.
+     * 
+     * @return the root node for system preference hierarchy
+     * @throws SecurityException if <code>RuntimePermission("preferences")</code> is denied by a
+     *             <code>SecurityManager</code>
+     */
+    public static Preferences systemRoot() {
+        checkSecurity();
+        return factory.systemRoot();
+    }
+
+    //check the RuntimePermission("preferences")
     private static void checkSecurity() {
         SecurityManager manager = System.getSecurityManager();
         if(null != manager){
             manager.checkPermission(PREFS_PERM);
         }
-        
+
     }
 
     /**
-     * Return the user preference node for the package of given class. The 
-     * absolute path of the returned node is one slash followed by the given 
-     * class's full package name with replacing each period ('.') with slash.
-     * For example, the preference's associated with class <code>Object<code> 
+     * <p>Return the user preference node for the package of given class. The absolute path of the
+     * returned node is one slash followed by the given class's full package name with replacing
+     * each period ('.') with slash. For example, the preference's associated with class
+     * <code>Object<code> 
      * has absolute path like "/java/lang". As a special case, the unnamed 
-     * package is associated with preference node "/<unnamed>". 
+     * package is associated with preference node "/<unnamed>".</p> 
      *  
-	 * This method will create node and its ancestors if needed, and the new 
-	 * created nodes maybe won't be persisted until the <code>flush()</code> 
-	 * is invoked.
-	 * 
-	 * @param c	the given class 
-	 * @return 		the user preference node for the package of given class. 
-	 * @throws NullPointerException
-	 * 	 				if the given class is null
-	 * @throws SecurityException
-	 * 				if <code>RuntimePermission("preferences")</code> is denied 
-	 * 				by a <code>SecurityManager</code>
-	 */
-	public static Preferences userNodeForPackage (Class<?> c) {
-	    checkSecurity();
-		return factory.userRoot().node(getNodeName(c));
-	}
-	
-	//parse node's absolute path from class instance
-	private static String getNodeName(Class<?> c){
-	    Package p = c.getPackage();
-	    if(null == p){
-	        return "/<unnamed>"; //$NON-NLS-1$
-	    }
-	    return "/"+p.getName().replace('.', '/'); //$NON-NLS-1$
-	}
-
-	/**
-	 * Return the root node for user preference hierarchy.
-	 * 
-	 * @return 		the root node for user preference hierarchy
-	 * @throws SecurityException
-	 * 				if <code>RuntimePermission("preferences")</code> is denied 
-	 * 				by a <code>SecurityManager</code>
-	 */
-	public static Preferences userRoot() {
-	    checkSecurity();
-	    return factory.userRoot();
-	}
-	
-	/**
-	 * Return a string description of this node. The format is "User/System 
-	 * Preference Node: " followed by this node's absolute path.
-	 * 
-	 * @return a string description of this node
-	 * 
-	 */
-	@Override
+     * <p>This method will create node and its ancestors if needed, and the new 
+     * created nodes maybe won't be persisted until the <code>flush()</code> is invoked.</p>
+     * 
+     * @param c the given class
+     * @return the user preference node for the package of given class.
+     * @throws NullPointerException if the given class is null
+     * @throws SecurityException if <code>RuntimePermission("preferences")</code> is denied by a
+     *             <code>SecurityManager</code>
+     */
+    public static Preferences userNodeForPackage (Class<?> c) {
+        checkSecurity();
+        return factory.userRoot().node(getNodeName(c));
+    }
+
+    //parse node's absolute path from class instance
+    private static String getNodeName(Class<?> c){
+        Package p = c.getPackage();
+        if(null == p){
+            return "/<unnamed>"; //$NON-NLS-1$
+        }
+        return "/"+p.getName().replace('.', '/'); //$NON-NLS-1$
+    }
+
+    /**
+     * Return the root node for user preference hierarchy.
+     * 
+     * @return the root node for user preference hierarchy
+     * @throws SecurityException if <code>RuntimePermission("preferences")</code> is denied by a
+     *             <code>SecurityManager</code>
+     */
+    public static Preferences userRoot() {
+        checkSecurity();
+        return factory.userRoot();
+    }
+
+    /**
+     * Return a string description of this node. The format is "User/System 
+     * Preference Node: " followed by this node's absolute path.
+     * 
+     * @return a string description of this node
+     */
+    @Override
     public abstract String toString();
 }

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferencesFactory.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferencesFactory.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferencesFactory.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/PreferencesFactory.java Thu Jan  1 18:52:34 2009
@@ -14,35 +14,29 @@
  * limitations under the License.
  */
 
-
 package java.util.prefs;
 
 /**
- * This interface is used by {@link Preferences} class 
- * as factory class to create Preferences instance. This interface can be implemented 
- * and installed to replace the default preferences implementation.
+ * This interface is used by {@link Preferences} class as factory class to create Preferences
+ * instance. This interface can be implemented and installed to replace the default preferences
+ * implementation.
  * 
  * @see java.util.prefs.Preferences
  * 
  * @since 1.4
  */
 public interface PreferencesFactory {
-	/**
-	 * Returns the root of the preferences hierarchy for the calling user
-	 * context.
-	 * 
-	 * @return The user root preferences node.
-	 */
-	Preferences userRoot();
-	
-	/**
-	 * Returns the root of the system preferences hierarchy.
-	 * 
-	 * @return The root of the system preferences hierarchy.
-	 */
-	Preferences systemRoot();
+    /**
+     * Returns the root of the preferences hierarchy for the calling user context.
+     * 
+     * @return The user root preferences node.
+     */
+    Preferences userRoot();
+
+    /**
+     * Returns the root of the system preferences hierarchy.
+     * 
+     * @return The root of the system preferences hierarchy.
+     */
+    Preferences systemRoot();
 }
-
-
-
- 

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/RegistryPreferencesFactoryImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/RegistryPreferencesFactoryImpl.java?rev=730659&r1=730658&r2=730659&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/RegistryPreferencesFactoryImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/RegistryPreferencesFactoryImpl.java Thu Jan  1 18:52:34 2009
@@ -20,20 +20,20 @@
 import java.util.prefs.PreferencesFactory;
 
 /**
- * Default implementation of <code>PreferencesFactory</code> for windows 
- * platform, using windows Registry as back end.
+ * Default implementation of <code>PreferencesFactory</code> for windows platform, using windows
+ * Registry as back end.
  * 
  * @since 1.4
  */
 class RegistryPreferencesFactoryImpl implements PreferencesFactory {
-    //user root preferences
+    // user root preferences
     private static final Preferences USER_ROOT = new RegistryPreferencesImpl(true);
 
-    //system root preferences
+    // system root preferences
     private static final Preferences SYSTEM_ROOT = new RegistryPreferencesImpl(false);
-    
+
     public RegistryPreferencesFactoryImpl() {
-    	super();
+        super();
     }
 
     public Preferences userRoot() {
@@ -44,7 +44,3 @@
         return SYSTEM_ROOT;
     }
 }
-
-
-
-