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


Reply via email to