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/05 16:24:58 UTC

svn commit: r906967 - in /cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne: modeler/ modeler/action/ modeler/dialog/codegen/ modeler/editor/ modeler/editor/datanode/ modeler/pref/ pref/

Author: oltka
Date: Fri Feb  5 15:24:56 2010
New Revision: 906967

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

* DataMapDefaults to API
* change node name (in preferences) if change dataNode or dataMap name

Removed:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/_DataMapDefaults.java
Modified:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.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/action/SaveAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapDefaults.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodeDefaults.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceForProject.java

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java Fri Feb  5 15:24:56 2010
@@ -317,8 +317,8 @@
 
                 watchdog.reconfigure();
 
-//                addDomainListener(((ModelerProjectConfiguration) project
-//                        .getConfiguration()).getGraphRegistry());
+                // addDomainListener(((ModelerProjectConfiguration) project
+                // .getConfiguration()).getGraphRegistry());
             }
         }
     }
@@ -340,10 +340,9 @@
         }
 
         if (projectPreferences == null) {
-            String key = getProject().getConfigurationResource() == null//getProject().isLocationUndefined() 
-                    ? new String(IDUtil
-                    .pseudoUniqueByteSequence16()) : project
-                    .getConfigurationResource().getURL().getPath();
+            String key = getProject().getConfigurationResource() == null
+                    ? new String(IDUtil.pseudoUniqueByteSequence16())
+                    : project.getConfigurationResource().getURL().getPath();
 
             projectPreferences = getApplicationPreferenceDomain().getSubdomain(
                     Project.class).getSubdomain(key);
@@ -357,10 +356,9 @@
             throw new CayenneRuntimeException("No Project selected");
         }
         if (projectControllerPreferences == null) {
-            String key = getProject().getConfigurationResource() == null//getProject().isLocationUndefined() 
-                ? new String(IDUtil
-                    .pseudoUniqueByteSequence16()) : project
-                    .getConfigurationResource().getURL().getPath();
+            String key = getProject().getConfigurationResource() == null
+                    ? new String(IDUtil.pseudoUniqueByteSequence16())
+                    : project.getConfigurationResource().getURL().getPath();
 
             projectControllerPreferences = Preferences.userNodeForPackage(Project.class);
 
@@ -375,23 +373,13 @@
     }
 
     /**
-     * Returns top preferences Domain for the current project, throwing an exception if no
+     * Returns top preferences for the current project, throwing an exception if no
      * project is selected.
      */
-    public Domain getPreferenceDomainForDataDomain() {
-        DataChannelDescriptor dataDomain = (DataChannelDescriptor)getProject().getRootNode();
-        if (dataDomain == null) {
-            throw new CayenneRuntimeException("No DataDomain selected");
-        }
-
-        return getPreferenceDomainForProject()
-                .getSubdomain(DataChannelDescriptor.class)
-                .getSubdomain(dataDomain.getName());
-    }
-
     public Preferences getPreferenceForDataDomain() {
-        
-        DataChannelDescriptor dataDomain = (DataChannelDescriptor)getProject().getRootNode();
+
+        DataChannelDescriptor dataDomain = (DataChannelDescriptor) getProject()
+                .getRootNode();
         if (dataDomain == null) {
             throw new CayenneRuntimeException("No DataDomain selected");
         }
@@ -411,14 +399,17 @@
             throw new CayenneRuntimeException("No DataMap selected");
         }
 
-        if (nameSuffix == null) {
-            nameSuffix = "";
+        Preferences pref;
+        if (nameSuffix == null || nameSuffix.length() == 0) {
+            pref = getPreferenceForDataDomain().node("DataMap").node(map.getName());
         }
-
-        return (DataMapDefaults) getPreferenceDomainForDataDomain().getDetail(
-                map.getName() + nameSuffix,
-                DataMapDefaults.class,
-                true);
+        else {
+            pref = getPreferenceForDataDomain().node("DataMap").node(map.getName()).node(
+                    nameSuffix);
+        }
+        return (DataMapDefaults) application
+                .getCayenneProjectPreferences()
+                .getProjectDetailObject(DataMapDefaults.class, pref);
     }
 
     /**
@@ -1656,7 +1647,8 @@
         // new map was added.. link it to domain (and node if possible)
         currentState.domain.getDataMaps().add(map);
 
-        if (currentState.node != null && !currentState.node.getDataMapNames().contains(map.getName())) {
+        if (currentState.node != null
+                && !currentState.node.getDataMapNames().contains(map.getName())) {
             currentState.node.getDataMapNames().add(map.getName());
             fireDataNodeEvent(new DataNodeEvent(this, currentState.node));
         }
@@ -1914,7 +1906,8 @@
     }
 
     public ArrayList<Embeddable> getEmbeddableNamesInCurRentDataDomain() {
-        DataChannelDescriptor dataChannelDescriptor = (DataChannelDescriptor)getProject().getRootNode();
+        DataChannelDescriptor dataChannelDescriptor = (DataChannelDescriptor) getProject()
+                .getRootNode();
         Collection<DataMap> maps = dataChannelDescriptor.getDataMaps();
         Iterator<DataMap> it = maps.iterator();
         ArrayList<Embeddable> embs = new ArrayList<Embeddable>();

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=906967&r1=906966&r2=906967&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 Fri Feb  5 15:24:56 2010
@@ -21,6 +21,7 @@
 
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.dialog.LogConsole;
+import org.apache.cayenne.pref.CayennePreferenceForProject;
 import org.apache.cayenne.project.ProjectPath;
 
 import java.awt.event.ActionEvent;
@@ -48,13 +49,12 @@
         if (!checkSaveOnClose()) {
             return;
         }
-        
-		// write prefs to persistent store
-//		ModelerPreferences.storePreferences();
 		
 		//stop logging before JVM shutdown to prevent hanging
 		LogConsole.getInstance().stopLogging();
 
+		CayennePreferenceForProject.removeNewPreferences();
+		
 		// goodbye
         System.exit(0);
     }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAction.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAction.java Fri Feb  5 15:24:56 2010
@@ -25,6 +25,7 @@
 import javax.swing.KeyStroke;
 
 import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.pref.CayennePreferenceForProject;
 import org.apache.cayenne.pref.Domain;
 import org.apache.cayenne.project2.Project;
 import org.apache.cayenne.project2.ProjectSaver;
@@ -72,6 +73,8 @@
 
         preference.rename(p.getConfigurationResource().getURL().getPath());
 
+        CayennePreferenceForProject.removeOldPreferences();
+        
         getApplication().getFrameController().changePathInLastProjListAction(oldPath, 
                 p.getConfigurationResource().getURL().getPath());
         Application.getFrame().fireRecentFileListChanged();

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java Fri Feb  5 15:24:56 2010
@@ -34,6 +34,7 @@
 import org.apache.cayenne.modeler.dialog.validator.ValidationDisplayHandler;
 import org.apache.cayenne.modeler.dialog.validator.ValidatorDialog;
 import org.apache.cayenne.modeler.util.CayenneAction;
+import org.apache.cayenne.pref.CayennePreferenceForProject;
 import org.apache.cayenne.pref.Domain;
 import org.apache.cayenne.project.ProjectPath;
 import org.apache.cayenne.project.validator.ValidationInfo;
@@ -110,6 +111,8 @@
 
         // update preferences domain key
         preference.rename(projectDir.getPath());
+        
+        CayennePreferenceForProject.removeOldPreferences();
 
         if (oldPath != null && oldPath.length() != 0) {
             getApplication().getFrameController().changePathInLastProjListAction(

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java Fri Feb  5 15:24:56 2010
@@ -64,7 +64,7 @@
         DataMapDefaults prefs = getApplication()
                 .getFrameController()
                 .getProjectController()
-                .getDataMapPreferences("__client");
+                .getDataMapPreferences(this.getClass().getName().replace(".", "/"));
 
         prefs.updateSuperclassPackage(getParentController().getDataMap(), true);
         this.preferences = prefs;

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java Fri Feb  5 15:24:56 2010
@@ -146,10 +146,11 @@
     }
 
     protected DataMapDefaults createDefaults() {
+        Class obt = this.getClass();
         DataMapDefaults prefs = getApplication()
                 .getFrameController()
                 .getProjectController()
-                .getDataMapPreferences("__custom");
+                .getDataMapPreferences(this.getClass().getName().replace(".", "/"));
 
         prefs.updateSuperclassPackage(getParentController().getDataMap(), false);
         this.preferences = prefs;

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java Fri Feb  5 15:24:56 2010
@@ -23,6 +23,8 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.Map;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
 
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.JButton;
@@ -31,6 +33,7 @@
 import javax.swing.JPanel;
 import javax.swing.JTextField;
 
+import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.access.DataDomain;
 import org.apache.cayenne.access.DataRowStore;
 import org.apache.cayenne.cache.MapQueryCacheFactory;
@@ -352,14 +355,33 @@
         DataChannelDescriptor dataChannelDescriptor = (DataChannelDescriptor) Application
                 .getProject()
                 .getRootNode();
-        Domain prefs = projectController.getPreferenceDomainForDataDomain();
+        Preferences prefs = projectController.getPreferenceForDataDomain();
 
         DomainEvent e = new DomainEvent(
                 this,
                 dataChannelDescriptor,
                 dataChannelDescriptor.getName());
         ProjectUtil.setDataDomainName(dataChannelDescriptor, newName);
-        prefs.rename(newName);
+
+        // rename preference
+        
+        Preferences oldPref = prefs;
+        try {
+            String[] names = oldPref.keys();
+            
+            Preferences parent = oldPref.parent();
+            Preferences newPref = parent.node(newName);
+            for(int i=0; i<names.length; i++){
+                newPref.put(names[i], oldPref.get(names[i], ""));
+            }
+          
+          
+            oldPref.removeNode();
+        }
+        catch (BackingStoreException ex) {
+           new CayenneRuntimeException("Error remane preferences");
+        }
+        
         projectController.fireDomainEvent(e);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java Fri Feb  5 15:24:56 2010
@@ -523,7 +523,7 @@
         DataMapDefaults pref = eventController.getDataMapPreferences("");
         DataMapEvent e = new DataMapEvent(this, map, map.getName());
         ProjectUtil.setDataMapName((DataChannelDescriptor)eventController.getProject().getRootNode(), map, newName);
-        pref.rename(newName);
+        pref.copyPreferences(newName);
         eventController.fireDataMapEvent(e);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java Fri Feb  5 15:24:56 2010
@@ -47,6 +47,7 @@
 import org.apache.cayenne.modeler.event.DataNodeDisplayEvent;
 import org.apache.cayenne.modeler.event.DataNodeDisplayListener;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
+import org.apache.cayenne.modeler.pref.DataNodeDefaults;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.ProjectUtil;
 import org.apache.cayenne.swing.BindingBuilder;
@@ -157,6 +158,7 @@
         }
 
         ProjectController parent = (ProjectController) getParent();
+        DataNodeDefaults oldPref = parent.getDataNodePreferences();
         DataChannelDescriptor dataChannelDescriptor = (DataChannelDescriptor)Application.getProject().getRootNode();
 
         Collection<DataNodeDescriptor> matchingNode = dataChannelDescriptor.getNodeDescriptors();
@@ -177,6 +179,9 @@
         // TODO: fixme....there is a slight chance that domain is different than the one
         // cached node belongs to
         ProjectUtil.setDataNodeName((DataChannelDescriptor)parent.getProject().getRootNode(), node, newName);
+        
+    
+        oldPref.copyPreferences(newName);
     }
 
     // ======== other stuff

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapDefaults.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapDefaults.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapDefaults.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataMapDefaults.java Fri Feb  5 15:24:56 2010
@@ -18,19 +18,40 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.pref;
 
+import java.util.prefs.Preferences;
+
 import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.pref.CayennePreferenceForProject;
 import org.apache.cayenne.util.Util;
 
-public class DataMapDefaults extends _DataMapDefaults {
+public class DataMapDefaults extends CayennePreferenceForProject {
 
+    private boolean generatePairs;
+    private String outputPath;
+    private String subclassTemplate;
+    private String superclassPackage;
+    private String superclassTemplate;
+    
+    private boolean initGeneratePairs;
+    
+    public static final String GENERATE_PAIRS_PROPERTY = "generatePairs";
+    public static final String OUTPUT_PATH_PROPERTY = "outputPath";
+    public static final String SUBCLASS_TEMPLATE_PROPERTY = "subclassTemplate";
+    public static final String SUPERCLASS_PACKAGE_PROPERTY = "superclassPackage";
+    public static final String SUPERCLASS_TEMPLATE_PROPERTY = "superclassTemplate";
+    
     public static final String DEFAULT_SUPERCLASS_PACKAGE_SUFFIX = "auto";
+    
+    public DataMapDefaults(Preferences pref) {
+        super(pref);
+    }
 
     /**
      * Returns a superlcass package tailored for a given DataMap.
      */
     public void updateSuperclassPackage(DataMap dataMap, boolean isClient) {
 
-        String storedPackage = super.getSuperclassPackage();
+        String storedPackage = getSuperclassPackage();
         if (Util.isEmptyString(storedPackage)
                 || DEFAULT_SUPERCLASS_PACKAGE_SUFFIX.equals(storedPackage)) {
             String mapPackage = (isClient) ? dataMap.getDefaultClientPackage() : dataMap
@@ -86,4 +107,101 @@
         String dot = (suffix.length() > 0 && prefix.length() > 0) ? "." : "";
         setSuperclassPackage(prefix + dot + suffix);
     }
+    
+    public boolean getGeneratePairs() {
+        if(!initGeneratePairs){
+            generatePairs = getCurrentPreference().getBoolean(GENERATE_PAIRS_PROPERTY, false);
+            initGeneratePairs = true;
+        }
+        return generatePairs;
+    }
+    
+    public void setGeneratePairs(Boolean bool) {
+        if (getCurrentPreference() != null) {
+            this.generatePairs = bool;
+            getCurrentPreference().putBoolean(GENERATE_PAIRS_PROPERTY, bool);
+        }
+    }
+    
+    public String getOutputPath() {
+        if(outputPath == null){
+            outputPath = getCurrentPreference().get(OUTPUT_PATH_PROPERTY, null);
+        }
+        return outputPath;
+    }
+    
+    public void setOutputPath(String outputPath) {
+        if (getCurrentPreference() != null) {
+            this.outputPath = outputPath;
+            getCurrentPreference().put(OUTPUT_PATH_PROPERTY, outputPath);
+        }
+    }
+
+    public String getSubclassTemplate() {
+        if(subclassTemplate == null){
+            subclassTemplate = getCurrentPreference().get(SUBCLASS_TEMPLATE_PROPERTY, null);
+        }
+        return subclassTemplate;
+    }
+
+    public void setSubclassTemplate(String subclassTemplate) {
+        if (getCurrentPreference() != null) {
+            this.subclassTemplate = subclassTemplate;
+            getCurrentPreference().put(SUBCLASS_TEMPLATE_PROPERTY, subclassTemplate);
+        }
+    }
+    
+    public String getSuperclassPackage() {
+        if(superclassPackage == null){
+            superclassPackage = getCurrentPreference().get(SUPERCLASS_PACKAGE_PROPERTY, null);
+        }
+        return superclassPackage;
+    }
+    
+    public void setSuperclassPackage(String superclassPackage) {
+        if (getCurrentPreference() != null) {
+            this.superclassPackage = superclassPackage;
+            getCurrentPreference().put(SUPERCLASS_PACKAGE_PROPERTY, superclassPackage);
+        }
+    }
+    
+    public String getSuperclassTemplate() {
+        if(superclassTemplate == null){
+            superclassTemplate = getCurrentPreference().get(SUPERCLASS_TEMPLATE_PROPERTY, null);
+        }
+        return superclassTemplate;
+    }
+    
+    public void setSuperclassTemplate(String superclassTemplate) {
+        if (getCurrentPreference() != null) {
+            this.superclassTemplate = superclassTemplate;
+            getCurrentPreference().put(SUPERCLASS_TEMPLATE_PROPERTY, superclassTemplate);
+        }
+    }
+    
+    public String getProperty(String property) {
+        if(property == null){
+            return getCurrentPreference().get(property, null);
+        }
+        return null;
+    }
+    
+    public void setProperty(String property, String value) {
+        if (getCurrentPreference() != null) {
+            getCurrentPreference().put(property, value);
+        }
+    }
+    
+    public void setBooleanProperty(String property, boolean value) {
+        if (getCurrentPreference() != null) {
+            getCurrentPreference().putBoolean(property, value);
+        }
+    }
+    
+    public boolean getBooleanProperty(String property) {
+        if(property == null){
+            return getCurrentPreference().getBoolean(property, false);
+        }
+        return false;
+    }
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodeDefaults.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodeDefaults.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodeDefaults.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/DataNodeDefaults.java Fri Feb  5 15:24:56 2010
@@ -25,13 +25,13 @@
 public class DataNodeDefaults extends CayennePreferenceForProject {
     
     private String localDataSource;
+    
+    public static final String LOCAL_DATA_SOURCE_PROPERTY = "localDataSource";
 
     public DataNodeDefaults(Preferences pref) {
         super(pref);
     }
 
-    public static final String LOCAL_DATA_SOURCE_PROPERTY = "localDataSource";
-
     public void setLocalDataSource(String localDataSource) {
         if (getCurrentPreference() != null) {
             this.localDataSource = localDataSource;

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceForProject.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceForProject.java?rev=906967&r1=906966&r2=906967&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceForProject.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/pref/CayennePreferenceForProject.java Fri Feb  5 15:24:56 2010
@@ -18,11 +18,139 @@
  ****************************************************************/
 package org.apache.cayenne.pref;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
+import org.apache.cayenne.CayenneRuntimeException;
 
 public abstract class CayennePreferenceForProject extends CayennePreference {
+
+    private static List<Preferences> newNode; 
+    private static List<Preferences> oldNode;
+
     public CayennePreferenceForProject(Preferences pref) {
         setCurrentPreference(pref);
     }
+
+    public void copyPreferences(String newName) {
+
+        Preferences oldPref = getCurrentPreference();
+        try {
+            
+            // copy all preferences in this node
+            String[] names = oldPref.keys();
+            Preferences parent = oldPref.parent();
+            Preferences newPref = parent.node(newName);
+            for (int i = 0; i < names.length; i++) {
+                newPref.put(names[i], oldPref.get(names[i], ""));
+            }
+
+            String[] children = oldPref.childrenNames();
+            String oldPath = oldPref.absolutePath();
+            String newPath = newPref.absolutePath();
+
+            // copy children nodes and its preferences
+
+            ArrayList<Preferences> childrenOldPref = childrenCopy(oldPref, oldPath, newPath);
+
+            while (childrenOldPref.size() > 0) {
+
+                ArrayList<Preferences> childrenPrefTemp = new ArrayList<Preferences>();
+
+                Iterator<Preferences> it = childrenOldPref.iterator();
+                while (it.hasNext()) {
+                    Preferences child = it.next();
+                    ArrayList<Preferences> childArray = childrenCopy(child, oldPath, newPath);
+
+                    childrenPrefTemp.addAll(childArray);
+                }
+
+                childrenOldPref.clear();
+                childrenOldPref.addAll(childrenPrefTemp);
+            }
+
+            if (newNode == null) {
+                newNode = new ArrayList<Preferences>();
+            }
+            if (oldNode == null) {
+                oldNode = new ArrayList<Preferences>();
+            }
+
+            newNode.add(newPref);
+            oldNode.add(oldPref);
+            setCurrentPreference(newPref);
+        }
+        catch (BackingStoreException e) {
+            new CayenneRuntimeException("Error remane preferences");
+        }
+    }
+
+    private ArrayList<Preferences> childrenCopy(Preferences pref, String oldPath, String newPath) {
+
+        try {
+            String[] children = pref.childrenNames();
+
+            ArrayList<Preferences> prefChild = new ArrayList<Preferences>();
+
+            for (int j = 0; j < children.length; j++) {
+                String child = children[j];
+                // get old preference
+                Preferences childNode = pref.node(child);
+                
+                // path to node
+                String path = childNode.absolutePath().replace(oldPath, newPath);
+                
+                // copy all preferences in this node
+                String[] names = childNode.keys();
+                Preferences newPref = Preferences.userRoot().node(path);
+                for (int i = 0; i < names.length; i++) {
+                    newPref.put(names[i], pref.get(names[i], ""));
+                }
+                prefChild.add(childNode);
+            }
+
+            return prefChild;
+        }
+        catch (BackingStoreException e) {
+        }
+        return null;
+    }
+
+    public static void removeOldPreferences() {
+        if (oldNode != null) {
+            Iterator<Preferences> it = oldNode.iterator();
+
+            while (it.hasNext()) {
+                Preferences pref = it.next();
+                try {
+                    pref.removeNode();
+                }
+                catch (BackingStoreException e) {
+                }
+            }
+            oldNode.clear();
+            newNode.clear();
+        }
+
+    }
+
+    public static void removeNewPreferences() {
+        if (newNode != null) {
+            Iterator<Preferences> it = newNode.iterator();
+
+            while (it.hasNext()) {
+                Preferences pref = it.next();
+                try {
+                    pref.removeNode();
+                }
+                catch (BackingStoreException e) {
+                }
+            }
+            oldNode.clear();
+            newNode.clear();
+        }
+    }
 }