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 2010/02/26 13:34:32 UTC

svn commit: r916661 - in /cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne: modeler/ modeler/dialog/codegen/ modeler/dialog/pref/ pref/

Author: oltka
Date: Fri Feb 26 12:34:31 2010
New Revision: 916661

URL: http://svn.apache.org/viewvc?rev=916661&view=rev
Log:
CAY-1327 Migrate HSQLDB modeler preferences to Java preferences API

* ClasspathPreferences to Preferences API

Modified:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceCreator.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceDuplicator.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplateCreator.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceEditor.java

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java Fri Feb 26 12:34:31 2010
@@ -23,7 +23,9 @@
 import java.awt.Frame;
 import java.awt.Window;
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
 import javax.swing.JFrame;
@@ -37,6 +39,7 @@
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.modeler.dialog.LogConsole;
+import org.apache.cayenne.modeler.dialog.pref.ClasspathPreferences;
 import org.apache.cayenne.modeler.undo.CayenneUndoManager;
 import org.apache.cayenne.modeler.util.AdapterMapping;
 import org.apache.cayenne.modeler.util.CayenneAction;
@@ -45,7 +48,6 @@
 import org.apache.cayenne.pref.CayennePreference;
 import org.apache.cayenne.pref.CayenneProjectPreferences;
 import org.apache.cayenne.pref.Domain;
-import org.apache.cayenne.pref.DomainPreference;
 import org.apache.cayenne.pref.HSQLEmbeddedPreferenceEditor;
 import org.apache.cayenne.pref.HSQLEmbeddedPreferenceService;
 import org.apache.cayenne.pref.PreferenceService;
@@ -280,18 +282,32 @@
         final FileClassLoadingService classLoader = new FileClassLoadingService();
 
         // init from preferences...
-        Domain classLoaderDomain = getPreferenceDomain().getSubdomain(
-                FileClassLoadingService.class);
+        Preferences classLoaderPreference = Application.getInstance().getPreferencesNode(
+                ClasspathPreferences.class,
+                "");
+
+        Collection details = new ArrayList<String>();
+        String[] keys = null;
+
+        try {
+            keys = classLoaderPreference.keys();
+        }
+        catch (BackingStoreException e) {
+            // do nothing
+        }
+
+        for (int i = 0; i < keys.length; i++) {
+            details.add(keys[i]);
+        }
 
-        Collection details = classLoaderDomain.getPreferences();
         if (details.size() > 0) {
 
             // transform preference to file...
             Transformer transformer = new Transformer() {
 
                 public Object transform(Object object) {
-                    DomainPreference pref = (DomainPreference) object;
-                    return new File(pref.getKey());
+                    String pref = (String) object;
+                    return new File(pref);
                 }
             };
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java Fri Feb 26 12:34:31 2010
@@ -154,7 +154,7 @@
         generator.addEmbeddables(getParentController().getSelectedEmbeddables());
         generator.addQueries(getParentController().getDataMap().getQueries());
         
-        Preferences preferences = application.getPreferencesNode(ClassGenerationAction.class, "").node(GeneralPreferences.ENCODING_PREFERENCE);
+        Preferences preferences = application.getPreferencesNode(ClassGenerationAction.class, "");
 
         if (preferences != null) {
             generator.setEncoding(preferences

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java Fri Feb 26 12:34:31 2010
@@ -23,17 +23,20 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
 
 import javax.swing.JFileChooser;
 import javax.swing.filechooser.FileFilter;
 import javax.swing.table.AbstractTableModel;
 
-import org.apache.cayenne.modeler.FileClassLoadingService;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.FileFilters;
-import org.apache.cayenne.pref.Domain;
-import org.apache.cayenne.pref.PreferenceDetail;
+import org.apache.cayenne.pref.CayennePreferenceEditor;
 import org.apache.cayenne.pref.PreferenceEditor;
 
 /**
@@ -41,16 +44,31 @@
 public class ClasspathPreferences extends CayenneController {
 
     protected ClasspathPreferencesView view;
-    protected PreferenceEditor editor;
-    protected List classPathEntries;
+    protected List<String> classPathEntries;
     protected ClasspathTableModel tableModel;
+    protected CayennePreferenceEditor editor;
 
     public ClasspathPreferences(PreferenceDialog parentController) {
         super(parentController);
 
-        this.editor = parentController.getEditor();
         this.view = new ClasspathPreferencesView();
-        this.classPathEntries = getClassLoaderDomain().getDetails();
+
+        PreferenceEditor editor = parentController.getEditor();
+        if (editor instanceof CayennePreferenceEditor) {
+            this.editor = (CayennePreferenceEditor) editor;
+        }
+
+        String[] arr = null;
+        try {
+            arr = getClassLoader().keys();
+        }
+        catch (BackingStoreException e) {
+        }
+        this.classPathEntries = new ArrayList<String>();
+        for (int i = 0; i < arr.length; i++) {
+            classPathEntries.add(arr[i]);
+        }
+
         this.tableModel = new ClasspathTableModel();
 
         initBindings();
@@ -60,10 +78,8 @@
         return view;
     }
 
-    protected Domain getClassLoaderDomain() {
-        return editor
-                .editableInstance(getApplication().getPreferenceDomain())
-                .getSubdomain(FileClassLoadingService.class);
+    protected Preferences getClassLoader() {
+        return getApplication().getPreferencesNode(this.getClass(), "");
     }
 
     protected void initBindings() {
@@ -111,8 +127,8 @@
             return;
         }
 
-        PreferenceDetail selection = (PreferenceDetail) classPathEntries.remove(selected);
-        editor.deleteDetail(getClassLoaderDomain(), selection.getKey());
+        addRemovedPreferences((String) classPathEntries.get(selected));
+        classPathEntries.remove(selected);
         tableModel.fireTableRowsDeleted(selected, selected);
     }
 
@@ -142,11 +158,30 @@
 
             int len = classPathEntries.size();
             String key = selected.getAbsolutePath();
-            classPathEntries.add(editor.createDetail(getClassLoaderDomain(), key));
+            addChangedPreferences(key, "");
+            classPathEntries.add(key);
             tableModel.fireTableRowsInserted(len, len);
         }
     }
 
+    public void addChangedPreferences(String key, String value) {
+        Map<String, String> map = editor.getChangedPreferences().get(getClassLoader());
+        if (map == null) {
+            map = new HashMap<String, String>();
+        }
+        map.put(key, value);
+        editor.getChangedPreferences().put(getClassLoader(), map);
+    }
+    
+    public void addRemovedPreferences(String key) {
+        Map<String, String> map = editor.getRemovedPreferences().get(getClassLoader());
+        if (map == null) {
+            map = new HashMap<String, String>();
+        }
+        map.put(key, "");
+        editor.getRemovedPreferences().put(getClassLoader(), map);
+    }
+
     class ClasspathTableModel extends AbstractTableModel {
 
         public int getColumnCount() {
@@ -158,9 +193,7 @@
         }
 
         public Object getValueAt(int rowIndex, int columnIndex) {
-            PreferenceDetail preference = (PreferenceDetail) classPathEntries
-                    .get(rowIndex);
-            return preference.getKey();
+            return classPathEntries.get(rowIndex);
         }
 
         public String getColumnName(int column) {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceCreator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceCreator.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceCreator.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceCreator.java Fri Feb 26 12:34:31 2010
@@ -31,8 +31,6 @@
 import org.apache.cayenne.modeler.util.AdapterMapping;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.DbAdapterInfo;
-import org.apache.cayenne.pref.Domain;
-import org.apache.cayenne.pref.PreferenceEditor;
 import org.apache.cayenne.swing.BindingBuilder;
 
 /**
@@ -42,8 +40,6 @@
     private static final String NO_ADAPTER = "Custom / Undefined";
 
     protected DataSourceCreatorView view;
-    protected PreferenceEditor editor;
-    protected Domain domain;
     protected boolean canceled;
     protected Map dataSources;
 
@@ -51,8 +47,6 @@
         super(parent);
         this.view = new DataSourceCreatorView((JDialog) SwingUtilities
                 .getWindowAncestor(parent.getView()));
-        this.editor = parent.getEditor();
-        this.domain = parent.getDataSourceDomain();
         this.dataSources = parent.getDataSources();
 
         DefaultComboBoxModel model = new DefaultComboBoxModel(DbAdapterInfo

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceDuplicator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceDuplicator.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceDuplicator.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourceDuplicator.java Fri Feb 26 12:34:31 2010
@@ -26,8 +26,6 @@
 
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.pref.Domain;
-import org.apache.cayenne.pref.PreferenceEditor;
 import org.apache.cayenne.swing.BindingBuilder;
 
 /**
@@ -35,8 +33,6 @@
 public class DataSourceDuplicator extends CayenneController {
 
     protected DataSourceDuplicatorView view;
-    protected PreferenceEditor editor;
-    protected Domain domain;
     protected boolean canceled;
     protected Map dataSources;
     protected String prototypeKey;
@@ -46,8 +42,6 @@
         this.view = new DataSourceDuplicatorView("Create a copy of \""
                 + prototypeKey
                 + "\"");
-        this.editor = parent.getEditor();
-        this.domain = parent.getDataSourceDomain();
         this.dataSources = parent.getDataSources();
         this.prototypeKey = prototypeKey;
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DataSourcePreferences.java Fri Feb 26 12:34:31 2010
@@ -20,24 +20,33 @@
 package org.apache.cayenne.modeler.dialog.pref;
 
 import java.awt.Component;
+import java.io.File;
 import java.sql.Connection;
 import java.sql.Driver;
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.prefs.Preferences;
 
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.JOptionPane;
 
 import org.apache.cayenne.conn.DriverDataSource;
+import org.apache.cayenne.modeler.FileClassLoadingService;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.pref.CayennePreferenceEditor;
 import org.apache.cayenne.pref.ChildrenMapPreference;
-import org.apache.cayenne.pref.Domain;
 import org.apache.cayenne.pref.PreferenceEditor;
 import org.apache.cayenne.swing.BindingBuilder;
 import org.apache.cayenne.util.Util;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Transformer;
 
 /**
  * Editor for the local DataSources configured in preferences.
@@ -46,16 +55,20 @@
 public class DataSourcePreferences extends CayenneController {
 
     protected DataSourcePreferencesView view;
-    protected PreferenceEditor editor;
     protected String dataSourceKey;
     protected Map dataSources;
     protected ChildrenMapPreference dataSourcePreferences;
+    protected CayennePreferenceEditor editor;
 
     public DataSourcePreferences(PreferenceDialog parentController) {
         super(parentController);
 
         this.view = new DataSourcePreferencesView(this);
-        this.editor = parentController.getEditor();
+
+        PreferenceEditor editor = parentController.getEditor();
+        if (editor instanceof CayennePreferenceEditor) {
+            this.editor = (CayennePreferenceEditor) editor;
+        }
 
         // init view data
         this.dataSourcePreferences = getApplication()
@@ -96,14 +109,6 @@
         builder.bindToComboSelection(view.getDataSources(), "dataSourceKey");
     }
 
-    public Domain getDataSourceDomain() {
-        return editor.editableInstance(getApplication().getPreferenceDomain());
-    }
-
-    public PreferenceEditor getEditor() {
-        return editor;
-    }
-
     public Map getDataSources() {
         return dataSources;
     }
@@ -170,7 +175,6 @@
     public void removeDataSourceAction() {
         String key = getDataSourceKey();
         if (key != null) {
-            editor.deleteDetail(getDataSourceDomain(), key);
             dataSourcePreferences.remove(key);
 
             dataSources = dataSourcePreferences.getChildrenPreferences();
@@ -224,8 +228,63 @@
         }
 
         try {
-            Class driverClass = getApplication().getClassLoadingService().loadClass(
-                    currentDataSource.getJdbcDriver());
+
+            FileClassLoadingService classLoader = new FileClassLoadingService();
+
+            List<File> oldPathFiles = ((FileClassLoadingService) getApplication()
+                    .getClassLoadingService()).getPathFiles();
+
+            Collection details = new ArrayList<String>();
+            for (int i = 0; i < oldPathFiles.size(); i++) {
+                details.add(oldPathFiles.get(i).getAbsolutePath());
+            }
+
+            Preferences classPathPreferences = getApplication().getPreferencesNode(
+                    ClasspathPreferences.class,
+                    "");
+            if (editor.getChangedPreferences().containsKey(classPathPreferences)) {
+                Map<String, String> map = editor.getChangedPreferences().get(
+                        classPathPreferences);
+
+                Iterator iterator = map.entrySet().iterator();
+                while (iterator.hasNext()) {
+                    Map.Entry en = (Map.Entry) iterator.next();
+                    String key = (String) en.getKey();
+                    if (!details.contains(key)) {
+                        details.add(key);
+                    }
+                }
+            }
+
+            if (editor.getRemovedPreferences().containsKey(classPathPreferences)) {
+                Map<String, String> map = editor.getRemovedPreferences().get(
+                        classPathPreferences);
+
+                Iterator iterator = map.entrySet().iterator();
+                while (iterator.hasNext()) {
+                    Map.Entry en = (Map.Entry) iterator.next();
+                    String key = (String) en.getKey();
+                    if (details.contains(key)) {
+                        details.remove(key);
+                    }
+                }
+            }
+
+            if (details.size() > 0) {
+
+                // transform preference to file...
+                Transformer transformer = new Transformer() {
+
+                    public Object transform(Object object) {
+                        String pref = (String) object;
+                        return new File(pref);
+                    }
+                };
+
+                classLoader.setPathFiles(CollectionUtils.collect(details, transformer));
+            }
+
+            Class driverClass = classLoader.loadClass(currentDataSource.getJdbcDriver());
             Driver driver = (Driver) driverClass.newInstance();
 
             // connect via Cayenne DriverDataSource - it addresses some driver issues...
@@ -276,5 +335,4 @@
             return;
         }
     }
-
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java Fri Feb 26 12:34:31 2010
@@ -20,13 +20,14 @@
 package org.apache.cayenne.modeler.dialog.pref;
 
 import java.awt.Component;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.prefs.Preferences;
 
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.pref.CayennePreferenceEditor;
 import org.apache.cayenne.pref.CayennePreferenceService;
-import org.apache.cayenne.pref.PrefDetail;
 import org.apache.cayenne.pref.PreferenceEditor;
 import org.apache.cayenne.swing.BindingBuilder;
 import org.apache.cayenne.swing.ObjectBinding;
@@ -42,10 +43,11 @@
 
     protected GeneralPreferencesView view;
     protected CayennePreferenceEditor editor;
+
     protected boolean autoLoadProjectPreference;
-    protected PrefDetail classGeneratorPreferences;
+    protected String encoding;
     protected boolean deletePromptPreference;
-    
+
     protected Preferences preferences;
 
     protected ObjectBinding saveIntervalBinding;
@@ -80,10 +82,15 @@
     protected void initBindings() {
         // init model objects
         preferences = application.getPreferencesNode(ClassGenerationAction.class, "");
-        
-        this.classGeneratorPreferences = new PrefDetail(preferences.node(ENCODING_PREFERENCE));
-        this.autoLoadProjectPreference = preferences.getBoolean(AUTO_LOAD_PROJECT_PREFERENCE, false);
-        this.deletePromptPreference = preferences.getBoolean(DELETE_PROMPT_PREFERENCE, false);
+
+        this.encoding = preferences.get(ENCODING_PREFERENCE, null);
+
+        this.autoLoadProjectPreference = preferences.getBoolean(
+                AUTO_LOAD_PROJECT_PREFERENCE,
+                false);
+        this.deletePromptPreference = preferences.getBoolean(
+                DELETE_PROMPT_PREFERENCE,
+                false);
 
         // build child controllers...
         EncodingSelector encodingSelector = new EncodingSelector(this, view
@@ -94,17 +101,21 @@
                 getApplication().getBindingFactory(),
                 this);
 
-        this.saveIntervalBinding = builder.bindToTextField(view.getSaveInterval(),
+        this.saveIntervalBinding = builder.bindToTextField(
+                view.getSaveInterval(),
                 "timeInterval");
 
-        this.encodingBinding = builder.bindToProperty(encodingSelector,
-                "classGeneratorPreferences.property[\"encoding\"]",
+        this.encodingBinding = builder.bindToProperty(
+                encodingSelector,
+                "encoding",
                 EncodingSelector.ENCODING_PROPERTY_BINDING);
 
-        this.autoLoadProjectBinding = builder.bindToCheckBox(view.getAutoLoadProject(),
+        this.autoLoadProjectBinding = builder.bindToCheckBox(
+                view.getAutoLoadProject(),
                 "autoLoadProject");
 
-        this.deletePromptBinding = builder.bindToCheckBox(view.getDeletePrompt(),
+        this.deletePromptBinding = builder.bindToCheckBox(
+                view.getDeletePrompt(),
                 "deletePrompt");
     }
 
@@ -112,6 +123,15 @@
         return this.editor.getSaveInterval() / 1000.0;
     }
 
+    public String getEncoding() {
+        return encoding;
+    }
+
+    public void setEncoding(String encoding) {
+        addChangedPreferences(ENCODING_PREFERENCE, encoding);
+        this.encoding = encoding;
+    }
+
     public void setTimeInterval(double d) {
         int ms = (int) (d * 1000.0);
         if (ms < CayennePreferenceService.MIN_SAVE_INTERVAL) {
@@ -124,22 +144,40 @@
     }
 
     public boolean getAutoLoadProject() {
-        return preferences.getBoolean(GeneralPreferences.AUTO_LOAD_PROJECT_PREFERENCE, false);
+        return autoLoadProjectPreference;
     }
 
     public void setAutoLoadProject(boolean autoLoadProject) {
-        preferences.putBoolean(GeneralPreferences.AUTO_LOAD_PROJECT_PREFERENCE, autoLoadProject);
+
+        addChangedBooleanPreferences(AUTO_LOAD_PROJECT_PREFERENCE, autoLoadProject);
+        this.autoLoadProjectPreference = autoLoadProject;
     }
 
     public boolean getDeletePrompt() {
-        return preferences.getBoolean(GeneralPreferences.DELETE_PROMPT_PREFERENCE, false);
+        return deletePromptPreference;
     }
 
     public void setDeletePrompt(boolean deletePrompt) {
-        preferences.putBoolean(GeneralPreferences.DELETE_PROMPT_PREFERENCE, deletePrompt);
+
+        addChangedBooleanPreferences(DELETE_PROMPT_PREFERENCE, deletePrompt);
+        this.deletePromptPreference = deletePrompt;
     }
 
-    public PrefDetail getClassGeneratorPreferences() {
-        return classGeneratorPreferences;
+    public void addChangedBooleanPreferences(String key, boolean value) {
+        Map<String, Boolean> map = editor.getChangedBooleanPreferences().get(preferences);
+        if (map == null) {
+            map = new HashMap<String, Boolean>();
+        }
+        map.put(key, value);
+        editor.getChangedBooleanPreferences().put(preferences, map);
+    }
+
+    public void addChangedPreferences(String key, String value) {
+        Map<String, String> map = editor.getChangedPreferences().get(preferences);
+        if (map == null) {
+            map = new HashMap<String, String>();
+        }
+        map.put(key, value);
+        editor.getChangedPreferences().put(preferences, map);
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplateCreator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplateCreator.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplateCreator.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplateCreator.java Fri Feb 26 12:34:31 2010
@@ -24,7 +24,6 @@
 import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import javax.swing.JDialog;

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceEditor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceEditor.java?rev=916661&r1=916660&r2=916661&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceEditor.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceEditor.java Fri Feb 26 12:34:31 2010
@@ -19,9 +19,16 @@
 
 package org.apache.cayenne.pref;
 
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.prefs.Preferences;
+
 import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 
+
 /**
  * An editor for modifying CayennePreferenceService.
  * 
@@ -33,8 +40,12 @@
     protected boolean restartRequired;
     protected int saveInterval;
     protected CayenneProjectPreferences cayenneProjectPreferences;
+    private Map<Preferences, Map<String, String>> changedPreferences;
+    private Map<Preferences, Map<String, String>> removedPreferences;
+    private Map<Preferences, Map<String, Boolean>> changedBooleanPreferences;
 
-    public CayennePreferenceEditor(CayennePreferenceService service, CayenneProjectPreferences cayenneProjectPreferences) {
+    public CayennePreferenceEditor(CayennePreferenceService service,
+            CayenneProjectPreferences cayenneProjectPreferences) {
         this.service = service;
         this.editingContext = service
                 .getDataContext()
@@ -42,6 +53,24 @@
                 .createDataContext();
         this.saveInterval = service.getSaveInterval();
         this.cayenneProjectPreferences = cayenneProjectPreferences;
+        this.changedPreferences = new HashMap<Preferences, Map<String, String>>();
+        this.removedPreferences = new HashMap<Preferences, Map<String, String>>();
+        this.changedBooleanPreferences = new HashMap<Preferences, Map<String, Boolean>>();
+    }
+
+    
+    
+    public Map<Preferences, Map<String, String>> getRemovedPreferences() {
+        return removedPreferences;
+    }
+
+
+    public Map<Preferences, Map<String, String>> getChangedPreferences() {
+        return changedPreferences;
+    }
+
+    public Map<Preferences, Map<String, Boolean>> getChangedBooleanPreferences() {
+        return changedBooleanPreferences;
     }
 
     protected boolean isRestartRequired() {
@@ -66,7 +95,8 @@
 
     public PreferenceDetail createDetail(Domain domain, String key) {
         domain = editableInstance(domain);
-        DomainPreference preference = getEditingContext().newObject(DomainPreference.class);
+        DomainPreference preference = getEditingContext().newObject(
+                DomainPreference.class);
         preference.setDomain(domain);
         preference.setKey(key);
 
@@ -75,7 +105,8 @@
 
     public PreferenceDetail createDetail(Domain domain, String key, Class javaClass) {
         domain = editableInstance(domain);
-        DomainPreference preferenceLink = getEditingContext().newObject(DomainPreference.class);
+        DomainPreference preferenceLink = getEditingContext().newObject(
+                DomainPreference.class);
         preferenceLink.setDomain(domain);
         preferenceLink.setKey(key);
 
@@ -123,6 +154,57 @@
         if (restartRequired) {
             restart();
         }
+
+        // update boolean preferences
+        Iterator it = changedBooleanPreferences.entrySet().iterator();
+        while (it.hasNext()) {
+            Map.Entry entry = (Map.Entry) it.next();
+            Preferences pref = (Preferences) entry.getKey();
+            Map<String, Boolean> map =  (Map<String, Boolean>) entry.getValue();
+
+            Iterator iterator = map.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry en = (Map.Entry) iterator.next();
+                String key = (String) en.getKey();
+                Boolean value = (Boolean) en.getValue();
+                
+                pref.putBoolean(key, value);
+            }
+        }
+        
+        // update string preferences
+        Iterator iter = changedPreferences.entrySet().iterator();
+        while (iter.hasNext()) {
+            Map.Entry entry = (Map.Entry) iter.next();
+            Preferences pref = (Preferences) entry.getKey();
+            Map<String, String> map =  (Map<String, String>) entry.getValue();
+
+            Iterator iterator = map.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry en = (Map.Entry) iterator.next();
+                String key = (String) en.getKey();
+                String value = (String) en.getValue();
+                
+                pref.put(key, value);
+            }
+        }
+        
+        // remove string preferences
+        Iterator iterator = removedPreferences.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            Preferences pref = (Preferences) entry.getKey();
+            Map<String, String> map =  (Map<String, String>) entry.getValue();
+
+            Iterator itRem = map.entrySet().iterator();
+            while (itRem.hasNext()) {
+                Map.Entry en = (Map.Entry) itRem.next();
+                String key = (String) en.getKey();
+                pref.remove(key);
+            }
+        }
+        
+        Application.getInstance().initClassLoader();
     }
 
     public void revert() {