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();
}
}