You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/01/16 10:41:21 UTC

svn commit: r612397 - in /servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences: AbstractPreferencesImpl.java FilePreferencesImpl.java

Author: gnodet
Date: Wed Jan 16 01:41:18 2008
New Revision: 612397

URL: http://svn.apache.org/viewvc?rev=612397&view=rev
Log:
Fix compilation errors

Modified:
    servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/AbstractPreferencesImpl.java
    servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/FilePreferencesImpl.java

Modified: servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/AbstractPreferencesImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/AbstractPreferencesImpl.java?rev=612397&r1=612396&r2=612397&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/AbstractPreferencesImpl.java (original)
+++ servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/AbstractPreferencesImpl.java Wed Jan 16 01:41:18 2008
@@ -255,13 +255,13 @@
         flush();
     }
 
-    private String internalGetValue(String key) throws BackingStoreException {
+    private String internalGetValue(String key) {
         check(key);
         checkStatus();
         return doGetValue(key);
     }
 
-    private void internalSetValue(String key, String value) throws BackingStoreException {
+    private void internalSetValue(String key, String value) {
         check(key);
         checkStatus();
         String v = doGetValue(key);
@@ -294,19 +294,19 @@
         }
     }
 
-    abstract String doGetValue(String key) throws BackingStoreException;
+    abstract String doGetValue(String key);
 
-    abstract void doSetValue(String key, String value) throws BackingStoreException;
+    abstract void doSetValue(String key, String value);
 
-    abstract boolean doRemoveValue(String key) throws BackingStoreException;
+    abstract boolean doRemoveValue(String key);
 
     abstract boolean doClear() throws BackingStoreException;
 
     abstract List<String> doGetKeys() throws BackingStoreException;
 
-    abstract List<AbstractPreferencesImpl> doGetChildren() throws BackingStoreException;
+    abstract List<AbstractPreferencesImpl> doGetChildren();
 
-    abstract AbstractPreferencesImpl doCreateChild(String name) throws BackingStoreException;
+    abstract AbstractPreferencesImpl doCreateChild(String name);
 
     abstract void doRemoveNode(String node) throws BackingStoreException;
 

Modified: servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/FilePreferencesImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/FilePreferencesImpl.java?rev=612397&r1=612396&r2=612397&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/FilePreferencesImpl.java (original)
+++ servicemix/smx4/nmr/trunk/preferences/src/main/java/org/apache/servicemix/preferences/FilePreferencesImpl.java Wed Jan 16 01:41:18 2008
@@ -2,11 +2,16 @@
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
-import org.osgi.service.prefs.BackingStoreException;
-
 /**
  * Created by IntelliJ IDEA.
  * User: gnodet
@@ -20,59 +25,164 @@
 
     private File root;
     private Properties props;
+    private Map<String, FilePreferencesImpl> children;
+    private List<FilePreferencesImpl> deleted;
 
     public FilePreferencesImpl(AbstractPreferencesImpl parent, String name, File path) {
         super(parent, name);
         this.root = path;
     }
 
-    String doGetValue(String key) throws BackingStoreException {
+    String doGetValue(String key) {
         ensureLoaded();
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return props.getProperty(key);
     }
 
     void doSetValue(String key, String value) {
-        //To change body of implemented methods use File | Settings | File Templates.
+        ensureLoaded();
+        props.setProperty(key, value);
     }
 
     boolean doRemoveValue(String key) {
-        return false;  //To change body of implemented methods use File | Settings | File Templates.
+        ensureLoaded();
+        return props.remove(key) != null;
     }
 
     boolean doClear() {
-        return false;  //To change body of implemented methods use File | Settings | File Templates.
+        ensureLoaded();
+        if (props.isEmpty()) {
+            return false;
+        }
+        props.clear();
+        return true;
     }
 
     List<String> doGetKeys() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        ensureLoaded();
+        List<String> keys = new ArrayList<String>();
+        for (Object k : props.keySet()) {
+            keys.add((String) k);
+        }
+        return keys;
     }
 
     List<AbstractPreferencesImpl> doGetChildren() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        ensureLoaded();
+        return new ArrayList<AbstractPreferencesImpl>(children.values());
     }
 
     AbstractPreferencesImpl doCreateChild(String name) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        ensureLoaded();
+        File f = new File(root, name);
+        FilePreferencesImpl child = new FilePreferencesImpl(this, f.getName(), f);
+        children.put(child.name(), child);
+        return child;
     }
 
     void doRemoveNode(String node) {
-        //To change body of implemented methods use File | Settings | File Templates.
+        ensureLoaded();
+        FilePreferencesImpl child = children.remove(node);
+        if (child != null) {
+            deleted.add(child);
+        }
     }
 
     void doFlush() {
-        //To change body of implemented methods use File | Settings | File Templates.
+        ensureLoaded();
+        if (!root.exists()) {
+            root.mkdirs();
+        }
+        OutputStream os = null;
+        try {
+            os = new FileOutputStream(new File(root, PROPS_FILE));
+            props.store(os, "Preferences for node " + name());
+        } catch (IOException e) {
+            error("Unable to store nore " + name(), e);
+        } finally {
+            if (os != null) {
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    // Ignore
+                }
+            }
+        }
+        for (FilePreferencesImpl c : deleted) {
+            deleteFile(c.root);
+        }
+        deleted.clear();
+        for (FilePreferencesImpl c : children.values()) {
+            c.doFlush();
+        }
     }
 
-    private void ensureLoaded() throws BackingStoreException {
-        try {
-            if (props == null) {
-                Properties p = new Properties();
-                p.load(new FileInputStream(new File(root, PROPS_FILE)));
-                props = p;
+    private void ensureLoaded() {
+        if (props != null) {
+            return;
+        }
+        props = new Properties();
+        children = new HashMap<String, FilePreferencesImpl>();
+        deleted = new ArrayList<FilePreferencesImpl>();
+        if (root.exists()) {
+            InputStream is = null;
+            try {
+                is = new FileInputStream(new File(root, PROPS_FILE));
+                props.load(is);
+            } catch (IOException e) {
+                error("Unable to load node " + name(), e);
+            } finally {
+                if (is != null) {
+                    try {
+                        is.close();
+                    } catch (IOException e) {
+                        // Ignore
+                    }
+                }
+            }
+            for (File f : root.listFiles()) {
+                if (f.isDirectory()) {
+                    FilePreferencesImpl child = new FilePreferencesImpl(this, f.getName(), f);
+                    children.put(child.name(), child);
+                }
             }
-        } catch (Exception e) {
-            throw new BackingStoreException("Unable to load node", e);
         }
     }
 
+    private void error(String s, IOException e) {
+        System.out.println(s);
+        e.printStackTrace();
+    }
+
+    /**
+     * Delete a file
+     *
+     * @param fileToDelete
+     * @return true if the File is deleted
+     */
+    public static boolean deleteFile(File fileToDelete) {
+        if (fileToDelete == null || !fileToDelete.exists()) {
+            return true;
+        }
+        boolean result = true;
+        if (fileToDelete.isDirectory()) {
+            File[] files = fileToDelete.listFiles();
+            if (files == null) {
+                result = false;
+            } else {
+                for (int i = 0; i < files.length; i++) {
+                    File file = files[i];
+                    if (file.getName().equals(".") || file.getName().equals("..")) {
+                        continue;
+                    }
+                    if (file.isDirectory()) {
+                        result &= deleteFile(file);
+                    } else {
+                        result &= file.delete();
+                    }
+                }
+            }
+        }
+        result &= fileToDelete.delete();
+        return result;
+    }
 }