Author: aadamchik
Date: Thu Nov 15 20:11:33 2012
New Revision: 1409966
URL: http://svn.apache.org/viewvc?rev=1409966&view=rev
Log:
CAY-1772 Real support for DbEntity catalogs
adding default catalog to DataMap
adding modeler support for default catalog
(also fixing setting of default schema on dbimport)
Added:
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/CatalogUpdateController.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DataMap.java
cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java
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=1409966&r1=1409965&r2=1409966&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
Thu Nov 15 20:11:33 2012
@@ -74,6 +74,13 @@ public class DataMap implements Serializ
public static final String DEFAULT_CLIENT_SUPERCLASS_PROPERTY =
"defaultClientSuperclass";
/**
+ * Defines the name of the property for default DB catalog.
+ *
+ * @since 3.2
+ */
+ public static final String DEFAULT_CATALOG_PROPERTY = "defaultCatalog";
+
+ /**
* Defines the name of the property for default DB schema.
*
* @since 1.1
@@ -115,6 +122,7 @@ public class DataMap implements Serializ
protected Boolean quotingSQLIdentifiers;
+ protected String defaultCatalog;
protected String defaultSchema;
protected String defaultPackage;
@@ -237,6 +245,7 @@ public class DataMap implements Serializ
Object lockType = properties.get(DEFAULT_LOCK_TYPE_PROPERTY);
Object packageName = properties.get(DEFAULT_PACKAGE_PROPERTY);
+ Object catalog = properties.get(DEFAULT_CATALOG_PROPERTY);
Object schema = properties.get(DEFAULT_SCHEMA_PROPERTY);
Object superclass = properties.get(DEFAULT_SUPERCLASS_PROPERTY);
Object clientEntities = properties.get(CLIENT_SUPPORTED_PROPERTY);
@@ -253,6 +262,7 @@ public class DataMap implements Serializ
this.quotingSQLIdentifiers = (quoteSqlIdentifier != null) ? "true"
.equalsIgnoreCase(quoteSqlIdentifier.toString()) : false;
this.defaultSchema = (schema != null) ? schema.toString() : null;
+ this.defaultCatalog = (catalog != null) ? catalog.toString() : null;
this.defaultSuperclass = (superclass != null) ? superclass.toString()
: null;
this.clientSupported = (clientEntities != null) ? "true"
.equalsIgnoreCase(clientEntities.toString()) : false;
@@ -326,6 +336,10 @@ public class DataMap implements Serializ
if (!Util.isEmptyString(defaultPackage)) {
encoder.printProperty(DEFAULT_PACKAGE_PROPERTY, defaultPackage);
}
+
+ if (!Util.isEmptyString(defaultCatalog)) {
+ encoder.printProperty(DEFAULT_CATALOG_PROPERTY, defaultCatalog);
+ }
if (!Util.isEmptyString(defaultSchema)) {
encoder.printProperty(DEFAULT_SCHEMA_PROPERTY, defaultSchema);
@@ -1286,4 +1300,18 @@ public class DataMap implements Serializ
public void setConfigurationSource(Resource configurationSource) {
this.configurationSource = configurationSource;
}
+
+ /**
+ * @since 3.2
+ */
+ public String getDefaultCatalog() {
+ return defaultCatalog;
+ }
+
+ /**
+ * @since 3.2
+ */
+ public void setDefaultCatalog(String defaultCatalog) {
+ this.defaultCatalog = defaultCatalog;
+ }
}
Modified:
cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java?rev=1409966&r1=1409965&r2=1409966&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
(original)
+++
cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
Thu Nov 15 20:11:33 2012
@@ -235,11 +235,19 @@ public class DbImportAction {
dataMap.setDefaultPackage(defaultPackage);
}
+ // do not override default catalog of existing DataMap unless it is
+ // explicitly requested by the plugin caller, and the provided catalog
is
+ // not a pattern
+ String catalog = parameters.getCatalog();
+ if (catalog != null && catalog.length() > 0 && catalog.indexOf('%') <
0) {
+ dataMap.setDefaultCatalog(catalog);
+ }
+
// do not override default schema of existing DataMap unless it is
// explicitly requested by the plugin caller, and the provided schema
is
// not a pattern
String schema = parameters.getSchema();
- if (schema != null && schema.length() > 0 && schema.indexOf('%') >= 0)
{
+ if (schema != null && schema.length() > 0 && schema.indexOf('%') < 0) {
dataMap.setDefaultSchema(schema);
}
Added:
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/CatalogUpdateController.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/CatalogUpdateController.java?rev=1409966&view=auto
==============================================================================
---
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/CatalogUpdateController.java
(added)
+++
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/CatalogUpdateController.java
Thu Nov 15 20:11:33 2012
@@ -0,0 +1,114 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.modeler.dialog.datamap;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.WindowConstants;
+
+import org.apache.cayenne.configuration.event.ProcedureEvent;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.Procedure;
+import org.apache.cayenne.map.event.EntityEvent;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.util.Util;
+
+public class CatalogUpdateController extends DefaultsPreferencesController {
+
+ public static final String ALL_CONTROL = "Set/update catalog for all
DbEntities";
+ public static final String UNINIT_CONTROL = "Do not override existing
non-empty catalog";
+
+ protected DefaultsPreferencesView view;
+
+ public CatalogUpdateController(ProjectController mediator, DataMap
dataMap) {
+ super(mediator, dataMap);
+ }
+
+ /**
+ * Creates and runs the catalog update dialog.
+ */
+ public void startupAction() {
+ view = new DefaultsPreferencesView(ALL_CONTROL, UNINIT_CONTROL);
+ view.setTitle("Update DbEntities Catalog");
+ initController();
+
+ view.pack();
+ view.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ view.setModal(true);
+ makeCloseableOnEscape();
+ centerView();
+ view.setVisible(true);
+ }
+
+ public Component getView() {
+ return this.view;
+ }
+
+ private void initController() {
+ view.getUpdateButton().addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent arg0) {
+ updateCatalog();
+ }
+ });
+
+ view.getCancelButton().addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent arg0) {
+ view.dispose();
+ }
+ });
+ }
+
+ protected void updateCatalog() {
+ boolean doAll = isAllEntities();
+ String defaultCatalog = dataMap.getDefaultCatalog();
+
+ // set catalog for DbEntities
+ for (DbEntity entity : dataMap.getDbEntities()) {
+ if (doAll || Util.isEmptyString(entity.getCatalog())) {
+ if (!Util.nullSafeEquals(defaultCatalog, entity.getCatalog()))
{
+ entity.setCatalog(defaultCatalog);
+
+ // any way to batch events, a big change will flood the app
+ // with entity events..?
+ mediator.fireDbEntityEvent(new EntityEvent(this, entity));
+ }
+ }
+ }
+
+ // set catalog for procedures...
+ for (Procedure procedure : dataMap.getProcedures()) {
+ if (doAll || Util.isEmptyString(procedure.getCatalog())) {
+ if (!Util.nullSafeEquals(defaultCatalog,
procedure.getCatalog())) {
+ procedure.setCatalog(defaultCatalog);
+
+ // any way to batch events, a big change will flood the app
+ // with procedure events..?
+ mediator.fireProcedureEvent(new ProcedureEvent(this,
procedure));
+ }
+ }
+ }
+ view.dispose();
+ }
+
+}
Modified:
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java?rev=1409966&r1=1409965&r2=1409966&view=diff
==============================================================================
---
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java
(original)
+++
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java
Thu Nov 15 20:11:33 2012
@@ -40,6 +40,7 @@ import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.datamap.CatalogUpdateController;
import org.apache.cayenne.modeler.dialog.datamap.LockingUpdateController;
import org.apache.cayenne.modeler.dialog.datamap.PackageUpdateController;
import org.apache.cayenne.modeler.dialog.datamap.SchemaUpdateController;
@@ -68,11 +69,13 @@ public class DataMapView extends JPanel
protected JLabel location;
protected JComboBox nodeSelector;
protected JCheckBox defaultLockType;
+ protected TextAdapter defaultCatalog;
protected TextAdapter defaultSchema;
protected TextAdapter defaultPackage;
protected TextAdapter defaultSuperclass;
protected JCheckBox quoteSQLIdentifiers;
+ protected JButton updateDefaultCatalog;
protected JButton updateDefaultSchema;
protected JButton updateDefaultPackage;
protected JButton updateDefaultSuperclass;
@@ -107,6 +110,14 @@ public class DataMapView extends JPanel
nodeSelector = Application.getWidgetFactory().createUndoableComboBox();
nodeSelector.setRenderer(CellRenderers.listRendererWithIcons());
+ updateDefaultCatalog = new JButton("Update...");
+ defaultCatalog = new TextAdapter(new JTextField()) {
+
+ protected void updateModel(String text) {
+ setDefaultCatalog(text);
+ }
+ };
+
updateDefaultSchema = new JButton("Update...");
defaultSchema = new TextAdapter(new JTextField()) {
@@ -167,6 +178,7 @@ public class DataMapView extends JPanel
builder.append("Quote SQL Identifiers:", quoteSQLIdentifiers, 3);
builder.appendSeparator("Entity Defaults");
+ builder.append("DB Catalog:", defaultCatalog.getComponent(),
updateDefaultCatalog);
builder.append("DB Schema:", defaultSchema.getComponent(),
updateDefaultSchema);
builder.append(
"Java Package:",
@@ -247,6 +259,13 @@ public class DataMapView extends JPanel
updateDefaultClientSuperclass();
}
});
+
+ updateDefaultCatalog.addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent e) {
+ updateDefaultCatalog();
+ }
+ });
updateDefaultSchema.addActionListener(new ActionListener() {
@@ -319,6 +338,7 @@ public class DataMapView extends JPanel
// init default fields
defaultLockType.setSelected(map.getDefaultLockType() !=
ObjEntity.LOCK_TYPE_NONE);
defaultPackage.setText(map.getDefaultPackage());
+ defaultCatalog.setText(map.getDefaultCatalog());
defaultSchema.setText(map.getDefaultSchema());
defaultSuperclass.setText(map.getDefaultSuperclass());
@@ -455,6 +475,26 @@ public class DataMapView extends JPanel
dataMap.setDefaultClientSuperclass(newSuperclass);
eventController.fireDataMapEvent(new DataMapEvent(this, dataMap));
}
+
+ void setDefaultCatalog(String newCatalog) {
+ DataMap dataMap = eventController.getCurrentDataMap();
+
+ if (dataMap == null) {
+ return;
+ }
+
+ if (newCatalog != null && newCatalog.trim().length() == 0) {
+ newCatalog = null;
+ }
+
+ String oldCatalog = dataMap.getDefaultCatalog();
+ if (Util.nullSafeEquals(newCatalog, oldCatalog)) {
+ return;
+ }
+
+ dataMap.setDefaultCatalog(newCatalog);
+ eventController.fireDataMapEvent(new DataMapEvent(this, dataMap));
+ }
void setDefaultSchema(String newSchema) {
DataMap dataMap = eventController.getCurrentDataMap();
@@ -566,6 +606,18 @@ public class DataMapView extends JPanel
eventController.fireDataNodeEvent(new DataNodeEvent(this, node));
}
}
+
+ void updateDefaultCatalog() {
+ DataMap dataMap = eventController.getCurrentDataMap();
+
+ if (dataMap == null) {
+ return;
+ }
+
+ if (dataMap.getDbEntities().size() > 0 ||
dataMap.getProcedures().size() > 0) {
+ new CatalogUpdateController(eventController,
dataMap).startupAction();
+ }
+ }
void updateDefaultSchema() {
DataMap dataMap = eventController.getCurrentDataMap();