You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by km...@apache.org on 2008/01/02 02:04:03 UTC

svn commit: r607954 - in /cayenne/main/trunk: docs/doc/src/main/resources/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ framework/cayenne-modeler/s...

Author: kmenard
Date: Tue Jan  1 17:03:52 2008
New Revision: 607954

URL: http://svn.apache.org/viewvc?rev=607954&view=rev
Log:
Fixed CAY-939:  Add a means of updating custom superclass for all client classes.

Modified:
    cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DataMapTest.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/SuperclassUpdateController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java

Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=607954&r1=607953&r2=607954&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Tue Jan  1 17:03:52 2008
@@ -29,6 +29,7 @@
 CAY-931 Enable revert action even for projects that are not modified
 CAY-933 Embeddable classes - support class generation
 CAY-936 Update Velocity templates for generics.
+CAY-939 Add a means of updating custom superclass for all client classes.
 CAY-945 PropertyUtils support for "compiled" property access
 CAY-946 JPA: property-based access to persistent objects
 CAY-948 Implement flattened attributes in Cayenne

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java?rev=607954&r1=607953&r2=607954&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java Tue Jan  1 17:03:52 2008
@@ -75,6 +75,13 @@
     public static final String DEFAULT_CLIENT_PACKAGE_PROPERTY = "defaultClientPackage";
 
     /**
+     * Defines the name of the property for default client Java superclass.
+     *
+     * @since 3.0
+     */
+    public static final String DEFAULT_CLIENT_SUPERCLASS_PROPERTY = "defaultClientSuperclass";
+
+    /**
      * Defines the name of the property for default DB schema.
      * 
      * @since 1.1
@@ -89,7 +96,7 @@
     public static final String DEFAULT_PACKAGE_PROPERTY = "defaultPackage";
 
     /**
-     * Defines the name of the property for default DB schema.
+     * Defines the name of the property for default Java superclass.
      * 
      * @since 1.1
      */
@@ -113,6 +120,7 @@
 
     protected boolean clientSupported;
     protected String defaultClientPackage;
+    protected String defaultClientSuperclass;
 
     private SortedMap<String, Embeddable> embeddablesMap;
     private SortedMap<String, ObjEntity> objEntityMap;
@@ -166,6 +174,7 @@
         Object superclass = properties.get(DEFAULT_SUPERCLASS_PROPERTY);
         Object clientEntities = properties.get(CLIENT_SUPPORTED_PROPERTY);
         Object clientPackageName = properties.get(DEFAULT_CLIENT_PACKAGE_PROPERTY);
+        Object clientSuperclass = properties.get(DEFAULT_CLIENT_SUPERCLASS_PROPERTY);
 
         this.defaultLockType = "optimistic".equals(lockType)
                 ? ObjEntity.LOCK_TYPE_OPTIMISTIC
@@ -178,6 +187,7 @@
                 .equalsIgnoreCase(clientEntities.toString()) : false;
         this.defaultClientPackage = (clientPackageName != null) ? clientPackageName
                 .toString() : null;
+        this.defaultClientSuperclass = (clientSuperclass != null) ? clientSuperclass.toString() : null;
     }
 
     /**
@@ -265,6 +275,10 @@
             encoder.printProperty(DEFAULT_CLIENT_PACKAGE_PROPERTY, defaultClientPackage);
         }
 
+        if (!Util.isEmptyString(defaultClientSuperclass)) {
+            encoder.printProperty(DEFAULT_CLIENT_SUPERCLASS_PROPERTY, defaultClientSuperclass);
+        }
+
         // embeddables
         encoder.print(getEmbeddableMap());
 
@@ -954,6 +968,22 @@
      */
     public void setDefaultClientPackage(String defaultClientPackage) {
         this.defaultClientPackage = defaultClientPackage;
+    }
+
+    /**
+     * Returns default client superclass.
+     *
+     * @since 3.0
+     */
+    public String getDefaultClientSuperclass() {
+        return defaultClientSuperclass;
+    }
+
+    /**
+     * @since 3.0
+     */
+    public void setDefaultClientSuperclass(String defaultClientSuperclass) {
+        this.defaultClientSuperclass = defaultClientSuperclass;
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DataMapTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DataMapTest.java?rev=607954&r1=607953&r2=607954&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DataMapTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/DataMapTest.java Tue Jan  1 17:03:52 2008
@@ -99,6 +99,17 @@
         assertNull(map.getDefaultClientPackage());
     }
 
+    public void testDefaultClientSuperclass() {
+        DataMap map = new DataMap();
+        String tstSuperclass = "tst_superclass";
+        assertNull(map.getDefaultClientSuperclass());
+        map.setDefaultClientSuperclass(tstSuperclass);
+        assertEquals(tstSuperclass, map.getDefaultClientSuperclass());
+
+        map.setDefaultClientSuperclass(null);
+        assertNull(map.getDefaultClientSuperclass());
+    }
+
     public void testDefaultPackage() {
         DataMap map = new DataMap();
         String tstPackage = "tst.pkg";

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/SuperclassUpdateController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/SuperclassUpdateController.java?rev=607954&r1=607953&r2=607954&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/SuperclassUpdateController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/SuperclassUpdateController.java Tue Jan  1 17:03:52 2008
@@ -38,8 +38,11 @@
     public static final String ALL_CONTROL = "cayenne.modeler.datamap.defaultprefs.superclass.radio";
     public static final String UNINIT_CONTROL = "cayenne.modeler.datamap.defaultprefs.superclassnull.radio";
 
-    public SuperclassUpdateController(ProjectController mediator, DataMap dataMap) {
+    protected boolean clientUpdate;
+
+    public SuperclassUpdateController(ProjectController mediator, DataMap dataMap, boolean clientUpdate) {
         super(mediator, dataMap);
+        this.clientUpdate = clientUpdate;
     }
 
     /**
@@ -63,14 +66,14 @@
 
     protected void updateSuperclass() {
         boolean doAll = ((DefaultsPreferencesModel) getModel()).isAllEntities();
-        String defaultSuperclass = dataMap.getDefaultSuperclass();
+        String defaultSuperclass = getSuperclass();
 
         Iterator it = dataMap.getObjEntities().iterator();
         while (it.hasNext()) {
             ObjEntity entity = (ObjEntity) it.next();
-            if (doAll || Util.isEmptyString(entity.getSuperClassName())) {
-                if (!Util.nullSafeEquals(defaultSuperclass, entity.getSuperClassName())) {
-                    entity.setSuperClassName(defaultSuperclass);
+            if (doAll || Util.isEmptyString(getSuperClassName(entity))) {
+                if (!Util.nullSafeEquals(defaultSuperclass, getSuperClassName(entity))) {
+                    setSuperClassName(entity, defaultSuperclass);
 
                     // any way to batch events, a big change will flood the app with
                     // entity events..?
@@ -82,4 +85,20 @@
         shutdown();
     }
 
+    protected String getSuperclass() {
+        return clientUpdate ? dataMap.getDefaultClientSuperclass() : dataMap.getDefaultSuperclass();
+    }
+
+    protected String getSuperClassName(ObjEntity entity) {
+        return clientUpdate ? entity.getClientSuperClassName() : entity.getSuperClassName();
+    }
+
+    protected void setSuperClassName(ObjEntity entity, String superClassName) {
+        if (clientUpdate) {
+            entity.setClientSuperClassName(superClassName);
+        }
+        else {
+            entity.setSuperClassName(superClassName);
+        }
+    }
 }

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=607954&r1=607953&r2=607954&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 Tue Jan  1 17:03:52 2008
@@ -86,7 +86,9 @@
 
     protected JLabel defaultClientPackageLabel;
     protected TextAdapter defaultClientPackage;
+    protected TextAdapter defaultClientSuperclass;
     protected JButton updateDefaultClientPackage;
+    protected JButton updateDefaultClientSuperclass;
 
     public DataMapView(ProjectController eventController) {
         this.eventController = eventController;
@@ -144,6 +146,14 @@
             }
         };
 
+        updateDefaultClientSuperclass = new JButton("Update...");
+        defaultClientSuperclass = new TextAdapter(new JTextField()) {
+
+            protected void updateModel(String text) {
+                setDefaultClientSuperclass(text);
+            }
+        };
+
         // assemble
         FormLayout layout = new FormLayout(
                 "right:70dlu, 3dlu, fill:110dlu, 3dlu, fill:100",
@@ -174,6 +184,10 @@
                 "Client Java Package:",
                 defaultClientPackage.getComponent(),
                 updateDefaultClientPackage);
+        builder.append(
+                "Custom Superclass:",
+                defaultClientSuperclass.getComponent(),
+                updateDefaultClientSuperclass);
 
         this.setLayout(new BorderLayout());
         add(builder.getPanel(), BorderLayout.CENTER);
@@ -220,6 +234,13 @@
             }
         });
 
+        updateDefaultClientSuperclass.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                updateDefaultClientSuperclass();
+            }
+        });
+
         updateDefaultSchema.addActionListener(new ActionListener() {
 
             public void actionPerformed(ActionEvent e) {
@@ -293,6 +314,7 @@
         // client defaults
         clientSupport.setSelected(map.isClientSupported());
         defaultClientPackage.setText(map.getDefaultClientPackage());
+        defaultClientSuperclass.setText(map.getDefaultClientSuperclass());
         toggleClientProperties(map.isClientSupported());
     }
 
@@ -300,6 +322,9 @@
         defaultClientPackage.getComponent().setEnabled(enabled);
         updateDefaultClientPackage.setEnabled(enabled);
         defaultClientPackageLabel.setEnabled(enabled);
+
+        defaultClientSuperclass.getComponent().setEnabled(enabled);
+        updateDefaultClientSuperclass.setEnabled(enabled);
     }
 
     void setDefaultLockType(int lockType) {
@@ -386,6 +411,26 @@
         eventController.fireDataMapEvent(new DataMapEvent(this, dataMap));
     }
 
+    void setDefaultClientSuperclass(String newSuperclass) {
+        DataMap dataMap = eventController.getCurrentDataMap();
+
+        if (dataMap == null) {
+            return;
+        }
+
+        if (newSuperclass != null && newSuperclass.trim().length() == 0) {
+            newSuperclass = null;
+        }
+
+        String oldSuperclass = dataMap.getDefaultClientSuperclass();
+        if (Util.nullSafeEquals(newSuperclass, oldSuperclass)) {
+            return;
+        }
+
+        dataMap.setDefaultClientSuperclass(newSuperclass);
+        eventController.fireDataMapEvent(new DataMapEvent(this, dataMap));
+    }
+
     void setDefaultSchema(String newSchema) {
         DataMap dataMap = eventController.getCurrentDataMap();
 
@@ -535,7 +580,7 @@
         }
 
         if (dataMap.getObjEntities().size() > 0) {
-            new SuperclassUpdateController(eventController, dataMap).startup();
+            new SuperclassUpdateController(eventController, dataMap, false).startup();
         }
     }
 
@@ -560,6 +605,18 @@
 
         if (dataMap.getObjEntities().size() > 0) {
             new PackageUpdateController(eventController, dataMap, true).startup();
+        }
+    }
+
+    void updateDefaultClientSuperclass() {
+        DataMap dataMap = eventController.getCurrentDataMap();
+
+        if (dataMap == null) {
+            return;
+        }
+
+        if (dataMap.getObjEntities().size() > 0) {
+            new SuperclassUpdateController(eventController, dataMap, true).startup();
         }
     }