You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ol...@apache.org on 2009/11/30 10:59:43 UTC

svn commit: r885368 - in /cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne: modeler/ modeler/action/ modeler/util/ pref/

Author: oltka
Date: Mon Nov 30 09:59:43 2009
New Revision: 885368

URL: http://svn.apache.org/viewvc?rev=885368&view=rev
Log:
CAY-1314

*convert the old org.apache.cayenne.modeler.ModelerPreferences to use Preferences API

Added:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreference.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceDecorator.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/Preference.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/UpgradeCayennePreferenceDecorator.java
Modified:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExitAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceService.java

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java?rev=885368&r1=885367&r2=885368&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java Mon Nov 30 09:59:43 2009
@@ -29,9 +29,10 @@
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.io.File;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
 
 import javax.swing.WindowConstants;
 
@@ -236,8 +237,9 @@
 
     /** Adds path to the list of last opened projects in preferences. */
     public void addToLastProjListAction(String path) {
-        ModelerPreferences pref = ModelerPreferences.getPreferences();
-        Vector arr = pref.getVector(ModelerPreferences.LAST_PROJ_FILES);
+
+        Preferences frefLastProjFiles = ModelerPreferences.getLastProjFilesPref();
+        Vector arr = ModelerPreferences.getLastProjFiles();
         // Add proj path to the preferences
         // Prevent duplicate entries.
         if (arr.contains(path)) {
@@ -249,10 +251,16 @@
             arr.remove(arr.size() - 1);
         }
 
-        pref.remove(ModelerPreferences.LAST_PROJ_FILES);
-        Iterator iter = arr.iterator();
-        while (iter.hasNext()) {
-            pref.addProperty(ModelerPreferences.LAST_PROJ_FILES, iter.next());
+        try {
+            frefLastProjFiles.clear();
+        }
+        catch (BackingStoreException e) {
+            // ignore exception
+        }
+        int size = arr.size();
+        
+        for (int i=0; i< size; i++) {
+            frefLastProjFiles.put(String.valueOf(i), arr.get(i).toString());
         }
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java?rev=885368&r1=885367&r2=885368&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java Mon Nov 30 09:59:43 2009
@@ -25,6 +25,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
+import java.util.prefs.Preferences;
 
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
@@ -89,12 +90,12 @@
         PreferenceDetail autoLoadPref = Application.getInstance().getPreferenceDomain().getDetail(GeneralPreferences.AUTO_LOAD_PROJECT_PREFERENCE, true);
         
         if ((autoLoadPref != null) && (true == autoLoadPref.getBooleanProperty(GeneralPreferences.AUTO_LOAD_PROJECT_PREFERENCE))) {
-            ModelerPreferences modelerPreferences = ModelerPreferences.getPreferences();
-            Vector arr = modelerPreferences.getVector(ModelerPreferences.LAST_PROJ_FILES);
-
+            Preferences modelerPreferences = ModelerPreferences.getEditorPreferences();
+            
+            Preferences lastProjFilesPref = ModelerPreferences.getLastProjFilesPref();
+            Vector<String> arr = ModelerPreferences.getLastProjFiles();
             return new File((String) arr.get(0));
         }
-
         return null;
     }
 
@@ -117,7 +118,6 @@
 
                     if (null != projectFileFromPrefs) {
                         OpenProjectAction action = new OpenProjectAction(Application.instance);
-
                         action.openProject(projectFileFromPrefs);
                     }
                 }
@@ -156,18 +156,18 @@
     protected void configureLogging() {
  
         // get preferences
-        ModelerPreferences prefs = ModelerPreferences.getPreferences();
-
+        Preferences prefs = ModelerPreferences.getEditorPreferences();
+        
         // check whether to set up logging to a file
         boolean logfileEnabled = prefs.getBoolean(
                 ModelerPreferences.EDITOR_LOGFILE_ENABLED,
                 true);
-        prefs.setProperty(ModelerPreferences.EDITOR_LOGFILE_ENABLED, String
+        prefs.put(ModelerPreferences.EDITOR_LOGFILE_ENABLED, String
                 .valueOf(logfileEnabled));
 
         if (logfileEnabled) {
             String defaultPath = getLogFile().getPath();
-            String logfilePath = prefs.getString(
+            String logfilePath = prefs.get(
                     ModelerPreferences.EDITOR_LOGFILE,
                     defaultPath);
             try {
@@ -189,7 +189,7 @@
                     }
 
                     // remember working path
-                    prefs.setProperty(ModelerPreferences.EDITOR_LOGFILE, logfilePath);
+                    prefs.put(ModelerPreferences.EDITOR_LOGFILE, logfilePath);
 
                     // TODO: andrus, 8/16/2006 - redirect STDOUT and STDERR to file??
                     // TODO: andrus, 8/16/2006 - use Java logging API with comons-logging
@@ -202,15 +202,15 @@
     }
 
     protected String getLookAndFeelName() {
-        ModelerPreferences prefs = ModelerPreferences.getPreferences();
-        return prefs.getString(
+        Preferences prefs = ModelerPreferences.getEditorPreferences();
+        return prefs.get(
                 ModelerPreferences.EDITOR_LAFNAME,
                 ModelerConstants.DEFAULT_LAF_NAME);
     }
 
     protected String getThemeName() {
-        ModelerPreferences prefs = ModelerPreferences.getPreferences();
-        return prefs.getString(
+        Preferences prefs = ModelerPreferences.getEditorPreferences();
+        return prefs.get(
                 ModelerPreferences.EDITOR_THEMENAME,
                 ModelerConstants.DEFAULT_THEME_NAME);
     }
@@ -220,9 +220,7 @@
      */
     protected void configureLookAndFeel() {
         // get preferences
-        ModelerPreferences prefs = ModelerPreferences.getPreferences();
-
-  
+        Preferences prefs = ModelerPreferences.getEditorPreferences();
         String lfName = getLookAndFeelName();
         String themeName = getThemeName();
 
@@ -272,12 +270,12 @@
         }
         finally {
             // remember L&F settings
-            prefs.setProperty(ModelerPreferences.EDITOR_LAFNAME, UIManager
+            prefs.put(ModelerPreferences.EDITOR_LAFNAME, UIManager
                     .getLookAndFeel()
                     .getClass()
                     .getName());
 
-            prefs.setProperty(ModelerPreferences.EDITOR_THEMENAME, themeName);
+            prefs.put(ModelerPreferences.EDITOR_THEMENAME, themeName);
         }
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java?rev=885368&r1=885367&r2=885368&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java Mon Nov 30 09:59:43 2009
@@ -19,13 +19,15 @@
 
 package org.apache.cayenne.modeler;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.apache.cayenne.project.CayenneUserDir;
-import org.apache.commons.collections.ExtendedProperties;
+import java.util.Vector;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.PreferenceChangeEvent;
+import java.util.prefs.PreferenceChangeListener;
+import java.util.prefs.Preferences;
+
+import org.apache.cayenne.pref.CayennePreference;
+import org.apache.cayenne.pref.Preference;
+import org.apache.cayenne.pref.UpgradeCayennePreferenceDecorator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -36,97 +38,71 @@
  * <i>This class is obsolete; its users will be migrated to use preference service. </i>
  * </p>
  */
-public class ModelerPreferences extends ExtendedProperties {
+public class ModelerPreferences implements PreferenceChangeListener {
 
+    private static Preferences cayennePrefs;
+    
     private static final Log logObj = LogFactory.getLog(ModelerPreferences.class);
 
-    /** Name of the preferences file. */
-    public static final String PREFERENCES_NAME = "modeler.preferences";
-
     /** Name of the log file. */
     public static final String LOGFILE_NAME = "modeler.log";
-
-    // Keys for the preference file.
-
+    
     /** List of the last 12 opened project files. */
-    public static final String LAST_PROJ_FILES = "Editor.lastSeveralProjectFiles";
     public static final int LAST_PROJ_FILES_SIZE = 12;
 
     /** GUI layout */
-    public static final String EDITOR_LAFNAME = "Editor.lookAndFeel";
-    public static final String EDITOR_THEMENAME = "Editor.theme";
+    public static final String EDITOR_LAFNAME = "lookAndFeel";
+    public static final String EDITOR_THEMENAME = "theme";
 
     /** Log file */
-    public static final String EDITOR_LOGFILE_ENABLED = "Editor.logfileEnabled";
-    public static final String EDITOR_LOGFILE = "Editor.logfile";
+    public static final String EDITOR_LOGFILE_ENABLED = "logfileEnabled";
+    public static final String EDITOR_LOGFILE = "logfile";
     
     /*
      * Number of items in combobox visible without scrolling 
      */
     public static final int COMBOBOX_MAX_VISIBLE_SIZE = 12;
-    
-    protected static ModelerPreferences sharedInstance;
-
-    protected ModelerPreferences() {
-    }
 
     /**
      * Returns Cayenne preferences singleton.
      */
-    public static ModelerPreferences getPreferences() {
-        if (sharedInstance == null) {
-            sharedInstance = new ModelerPreferences();
-            sharedInstance.loadPreferences();
+    public static Preferences getPreferences() {
+        if(cayennePrefs==null){
+            Preference decoratedPref = new UpgradeCayennePreferenceDecorator(new CayennePreference());
+            cayennePrefs = decoratedPref.getRootPreference();
+            cayennePrefs.addPreferenceChangeListener(new ModelerPreferences());
         }
-
-        return sharedInstance;
+        return cayennePrefs;
     }
-
-    /**
-     * Returns preferences directory <code>$HOME/.cayenne</code>. If such directory
-     * does not exist, it is created as a side effect of this method.
-     */
-    public File preferencesDirectory() {
-        return CayenneUserDir.getInstance().getDirectory();
+    
+    public static Preferences getEditorPreferences() {
+        return getPreferences().node(CayennePreference.EDITOR);
+    }
+    
+    public static Preferences getLastProjFilesPref() {
+        return getEditorPreferences().node(CayennePreference.LAST_PROJ_FILES);
     }
 
-    /**
-     * Saves preferences. Preferences stored in
-     * <code>$HOME/.cayenne/modeler.preferences</code> file.
-     */
-    public void storePreferences() {
-        File prefFile = new File(preferencesDirectory(), PREFERENCES_NAME);
+    public static Vector getLastProjFiles() {
+        Preferences filesPrefs = getLastProjFilesPref();
+        Vector arrayLastProjFiles = new Vector<String>();
+        String[] keys = null;
         try {
-            if (!prefFile.exists()) {
-                logObj.debug("Cannot save preferences - file "
-                        + prefFile
-                        + " does not exist");
-                return;
-            }
-            save(new FileOutputStream(prefFile), "");
+            keys = filesPrefs.keys();
         }
-        catch (IOException e) {
-            logObj.debug("Error saving preferences: ", e);
+        catch (BackingStoreException e) {
+            logObj.warn("Error reading preferences file.", e);
         }
-    }
-
-    /**
-     * Loads preferences from <code>$HOME/.cayenne/modeler.preferences</code> file.
-     */
-    public void loadPreferences() {
-        try {
-            File prefsFile = new File(preferencesDirectory(), PREFERENCES_NAME);
-            if (!prefsFile.exists()) {
-                if (!prefsFile.createNewFile()) {
-                    logObj.warn("Can't create preferences file " + prefsFile);
-                }
+        if(keys!=null){
+            int len = keys.length;
+            for(int i = 0; i< len; i++){
+               arrayLastProjFiles.add(filesPrefs.get(keys[i], "")); 
             }
-
-            load(new FileInputStream(prefsFile));
-        }
-        catch (IOException e) {
-            logObj.warn("Error creating preferences file.", e);
         }
+        return arrayLastProjFiles;
     }
 
+    public void preferenceChange(PreferenceChangeEvent evt) {
+        evt.getNode().put(evt.getKey(), evt.getNewValue());
+    }
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java?rev=885368&r1=885367&r2=885368&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java Mon Nov 30 09:59:43 2009
@@ -186,8 +186,10 @@
     }
     
     public void recentFileListChanged() {
-        ModelerPreferences pref = ModelerPreferences.getPreferences();
-        final Vector<?> arr = (Vector<?>) pref.getVector(ModelerPreferences.LAST_PROJ_FILES).clone();
+       // Preferences pref = ModelerPreferences.getPreferences();
+        
+        
+        final Vector<?> arr = (Vector<?>) ModelerPreferences.getLastProjFiles().clone();
         
         recentsList.setModel(
             new AbstractListModel() {
@@ -304,9 +306,6 @@
                 rolloverRow = newRow;
                 list.repaint();
             }
-            
-            
         }
-        
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExitAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExitAction.java?rev=885368&r1=885367&r2=885368&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExitAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ExitAction.java Mon Nov 30 09:59:43 2009
@@ -49,9 +49,9 @@
         if (!checkSaveOnClose()) {
             return;
         }
-
+        
 		// write prefs to persistent store
-		ModelerPreferences.getPreferences().storePreferences();
+//		ModelerPreferences.storePreferences();
 		
 		//stop logging before JVM shutdown to prevent hanging
 		LogConsole.getInstance().stopLogging();

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java?rev=885368&r1=885367&r2=885368&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java Mon Nov 30 09:59:43 2009
@@ -57,8 +57,8 @@
      * preferences.
      */
     public void rebuildFromPreferences() {
-        ModelerPreferences pref = ModelerPreferences.getPreferences();
-        Vector<?> arr = pref.getVector(ModelerPreferences.LAST_PROJ_FILES);
+  
+        Vector<?> arr = ModelerPreferences.getLastProjFiles();
         while (arr.size() > ModelerPreferences.LAST_PROJ_FILES_SIZE) {
             arr.remove(arr.size() - 1);
         }

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreference.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreference.java?rev=885368&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreference.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreference.java Mon Nov 30 09:59:43 2009
@@ -0,0 +1,29 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.pref;
+
+import java.util.prefs.Preferences;
+
+
+public class CayennePreference implements Preference {
+
+    public Preferences getRootPreference() {
+        return  Preferences.userRoot().node(CAYENNE_PREFERENCES);
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceDecorator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceDecorator.java?rev=885368&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceDecorator.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceDecorator.java Mon Nov 30 09:59:43 2009
@@ -0,0 +1,29 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.pref;
+
+public abstract class CayennePreferenceDecorator implements Preference {
+
+    protected Preference decoratedPreference;
+    
+    public CayennePreferenceDecorator (Preference decoratedPreference) {
+        this.decoratedPreference = decoratedPreference;
+    }
+
+}

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceService.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceService.java?rev=885368&r1=885367&r2=885368&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceService.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceService.java Mon Nov 30 09:59:43 2009
@@ -20,7 +20,6 @@
 package org.apache.cayenne.pref;
 
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/Preference.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/Preference.java?rev=885368&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/Preference.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/Preference.java Mon Nov 30 09:59:43 2009
@@ -0,0 +1,36 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.pref;
+
+import java.util.prefs.Preferences;
+
+
+public interface Preference {
+
+    /** Key for preferences. */
+    public static final String CAYENNE_PREFERENCES = "cayennePreferences";
+    
+    /**  node name for editor */ 
+    public static final String EDITOR = "editor";
+    
+    /** node name for list of the last 12 opened project files. */
+    public static final String LAST_PROJ_FILES = "lastSeveralProjectFiles";
+    
+    public Preferences getRootPreference();
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/UpgradeCayennePreferenceDecorator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/UpgradeCayennePreferenceDecorator.java?rev=885368&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/UpgradeCayennePreferenceDecorator.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/UpgradeCayennePreferenceDecorator.java Mon Nov 30 09:59:43 2009
@@ -0,0 +1,113 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.pref;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Vector;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
+
+import org.apache.cayenne.modeler.ModelerPreferences;
+import org.apache.cayenne.project.CayenneUserDir;
+import org.apache.commons.collections.ExtendedProperties;
+
+public class UpgradeCayennePreferenceDecorator extends CayennePreferenceDecorator {
+
+    /** Name of the preferences file. */
+    public static final String PREFERENCES_NAME_OLD = "modeler.preferences";
+
+    public static final String LAST_PROJ_FILES_OLD = "Editor.lastSeveralProjectFiles";
+
+    /** GUI layout */
+    public static final String EDITOR_LAFNAME_OLD = "Editor.lookAndFeel";
+    public static final String EDITOR_THEMENAME_OLD = "Editor.theme";
+
+    /** Log file */
+    public static final String EDITOR_LOGFILE_ENABLED_OLD = "Editor.logfileEnabled";
+    public static final String EDITOR_LOGFILE_OLD = "Editor.logfile";
+
+    public UpgradeCayennePreferenceDecorator(Preference decoratedPreference) {
+        super(decoratedPreference);
+    }
+
+    public void upgrade() {
+        try {
+
+            if (!Preferences.userRoot().nodeExists(CAYENNE_PREFERENCES)) {
+
+                File prefsFile = new File(preferencesDirectory(), PREFERENCES_NAME_OLD);
+                if (prefsFile.exists()) {
+                    ExtendedProperties ep = new ExtendedProperties();
+                    try {
+                        ep.load(new FileInputStream(prefsFile));
+
+                        Preferences prefEditor = Preferences.userRoot().node(
+                                CAYENNE_PREFERENCES).node(EDITOR);
+
+                        prefEditor.putBoolean(ModelerPreferences.EDITOR_LOGFILE_ENABLED, ep.getBoolean(EDITOR_LOGFILE_ENABLED_OLD));
+                        prefEditor.put(ModelerPreferences.EDITOR_LOGFILE, ep.getString(EDITOR_LOGFILE_OLD));
+                        prefEditor.put(ModelerPreferences.EDITOR_LAFNAME, ep.getString(EDITOR_LAFNAME_OLD));
+                        prefEditor.put(ModelerPreferences.EDITOR_THEMENAME, ep.getString(EDITOR_THEMENAME_OLD));
+                        
+                        Preferences frefLastProjFiles = prefEditor.node(LAST_PROJ_FILES);
+                        
+                        Vector arr = ep.getVector(LAST_PROJ_FILES_OLD);
+                        
+                        while (arr.size() > ModelerPreferences.LAST_PROJ_FILES_SIZE) {
+                            arr.remove(arr.size() - 1);
+                        }
+                        
+                        frefLastProjFiles.clear();
+                        int size = arr.size();
+                        
+                        for (int i=0; i< size; i++) {
+                            frefLastProjFiles.put(String.valueOf(i), arr.get(i).toString());
+                        }
+                    }
+                    catch (FileNotFoundException e) {
+                        e.printStackTrace();
+                    }
+                    catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        catch (BackingStoreException e) {
+            // do nothing
+        }
+    }
+
+    /**
+     * Returns preferences directory <code>$HOME/.cayenne</code>. If such directory does
+     * not exist, it is created as a side effect of this method.
+     */
+    public File preferencesDirectory() {
+        return CayenneUserDir.getInstance().getDirectory();
+    }
+
+    public Preferences getRootPreference() {
+        upgrade();
+        return decoratedPreference.getRootPreference();
+    }
+
+}