You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2014/04/27 09:58:47 UTC

[1/2] git commit: CAY-1921 Migrate Dabase Schema - SqlServer 2008

Repository: cayenne
Updated Branches:
  refs/heads/master 449294f2e -> 0056d5ab1


CAY-1921 Migrate Dabase Schema - SqlServer 2008

patch by Arkadiusz Milewski


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/f6aeb0a5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/f6aeb0a5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/f6aeb0a5

Branch: refs/heads/master
Commit: f6aeb0a540d7b419943fc6a5bb5acd15d5a2f0c9
Parents: 449294f
Author: aadamchik <aa...@apache.org>
Authored: Sun Apr 27 10:39:28 2014 +0300
Committer: aadamchik <aa...@apache.org>
Committed: Sun Apr 27 10:40:32 2014 +0300

----------------------------------------------------------------------
 .../java/org/apache/cayenne/merge/DbMerger.java |  15 +--
 .../cayenne/modeler/action/MigrateAction.java   |  43 ++++++-
 .../dialog/db/DbMigrateOptionsDialog.java       | 126 +++++++++++++++++++
 .../modeler/dialog/db/MergerOptions.java        |   7 +-
 4 files changed, 179 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/f6aeb0a5/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java b/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java
index 28ea256..b0914a1 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/merge/DbMerger.java
@@ -60,8 +60,13 @@ public class DbMerger {
     private MergerFactory factory;
     
     private ValueForNullProvider valueForNull = new EmptyValueForNullProvider();
+    private String schema;
+    
+    public void setSchema(String schema) {
+		this.schema = schema;
+	}
 
-    /**
+	/**
      * Set a {@link ValueForNullProvider} that will be used to set value for null on not
      * null columns
      */
@@ -109,12 +114,8 @@ public class DbMerger {
                     return merger.includeTableName(tableName);
                 }
             };
-            
-            DataMap detectedDataMap = dbLoader.loadDataMapFromDB(
-                    null,
-                    null,
-                    new DataMap());
-            
+            DataMap detectedDataMap = new DataMap();
+            dbLoader.load(detectedDataMap, null, schema, null, (String[]) null);
             detectedDataMap.setQuotingSQLIdentifiers(dataMap.isQuotingSQLIdentifiers());
             
             Map<String, DbEntity> dbEntityToDropByName = new HashMap<String, DbEntity>(

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f6aeb0a5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java
index f98b052..ddc7509 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/MigrateAction.java
@@ -20,10 +20,19 @@
 package org.apache.cayenne.modeler.action;
 
 import java.awt.event.ActionEvent;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
 
+import javax.sql.DataSource;
+import javax.swing.JOptionPane;
+
+import org.apache.cayenne.access.DbLoader;
+import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.dialog.db.DataSourceWizard;
+import org.apache.cayenne.modeler.dialog.db.DbMigrateOptionsDialog;
 import org.apache.cayenne.modeler.dialog.db.MergerOptions;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 
@@ -55,19 +64,47 @@ public class MigrateAction extends DBWizardAction {
             // canceled
             return;
         }
-
+        
         DataMap map = getProjectController().getCurrentDataMap();
-
+        //migarte options
+        
         // sanity check
         if (map == null) {
             throw new IllegalStateException("No current DataMap selected.");
         }
+        //showOptions dialog
+       String selectedSchema = null;
+       try {
+			List<String> schemas = getSchemas(connectWizard);
+	        if (schemas != null && !schemas.isEmpty()) {
+	        	DbMigrateOptionsDialog optionsDialog = new DbMigrateOptionsDialog(schemas, connectWizard.getConnectionInfo().getUserName());
+	        	optionsDialog.showDialog();
+	        	if (optionsDialog.getChoice() == DbMigrateOptionsDialog.SELECT) {
+	        		selectedSchema = optionsDialog.getSelectedSchema();
+	        	}
+	        }
+		} catch (Exception ex) {
+			JOptionPane.showMessageDialog(
+	                Application.getFrame(),
+	                ex.getMessage(),
+	                "Error loading schemas dialog",
+	                JOptionPane.ERROR_MESSAGE);
+		}
+        
 
         // ... show dialog...
         new MergerOptions(
                 getProjectController(),
                 "Migrate DB Schema: Options",
                 connectWizard.getConnectionInfo(),
-                map).startupAction();
+                map, selectedSchema).startupAction();
+    }
+    
+    private List<String> getSchemas(DataSourceWizard connectWizard) throws Exception {
+    	DbAdapter dbAdapter = connectWizard.getConnectionInfo()
+    			.makeAdapter(getApplication().getClassLoadingService());
+    	DataSource dataSource = connectWizard.getConnectionInfo()
+    			.makeDataSource(getApplication().getClassLoadingService());
+    	return new DbLoader(dataSource.getConnection(), dbAdapter, null).getSchemas();
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f6aeb0a5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java
new file mode 100644
index 0000000..43c1cb3
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java
@@ -0,0 +1,126 @@
+package org.apache.cayenne.modeler.dialog.db;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collection;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.util.CayenneDialog;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class DbMigrateOptionsDialog extends CayenneDialog {
+	private static final long serialVersionUID = 1L;
+	public static final int CANCEL = 0;
+    public static final int SELECT = 1;
+
+	protected JLabel schemaLabel;
+    protected JComboBox<String> schemaSelector;
+    protected JButton selectButton;
+    protected JButton cancelButton;
+    protected int choice;
+    
+    public DbMigrateOptionsDialog(Collection<String> schemas, String dbUserName) {
+        super(Application.getFrame(), "Migrater DB Schema: Select Schema");
+        init();
+        initController();
+        initFromModel(schemas, dbUserName);
+
+        pack();
+        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+        setModal(true);
+        centerWindow();    	
+    }
+    
+    protected void init() {
+        selectButton = new JButton("Continue");
+        cancelButton = new JButton("Cancel");
+        schemaSelector = new JComboBox<String>();
+        FormLayout layout = new FormLayout(
+                "right:pref, 3dlu, fill:max(170dlu;pref):grow",
+                "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+        builder.setDefaultDialogBorder();
+
+        schemaLabel = builder.append("Select Schema:", schemaSelector);
+
+        JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+        buttons.add(selectButton);
+        buttons.add(cancelButton);
+        
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        getContentPane().add(buttons, BorderLayout.SOUTH);        
+    }
+    
+    protected void initController() {
+        selectButton.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                processSelect();
+            }
+        });
+
+        cancelButton.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                processCancel();
+            }
+        });
+    }
+    
+    private void processSelect() {
+        choice = SELECT;
+        setVisible(false);
+    }
+
+    private void processCancel() {
+    	schemaSelector.setSelectedItem(null);
+        choice = CANCEL;
+        setVisible(false);
+    }
+    
+    protected void initFromModel(Collection<String> schemas, String dbUserName) {
+
+        this.choice = CANCEL;
+
+        schemaSelector.setVisible(true);
+        schemaLabel.setVisible(true);
+        schemaSelector.setModel(new DefaultComboBoxModel<String>(schemas.toArray(new String[] {})));
+
+        // select schema belonging to the user
+        if (dbUserName != null) {
+            for (String schema : schemas) {
+                if (dbUserName.equalsIgnoreCase(schema)) {
+                    schemaSelector.setSelectedItem(schema);
+                    break;
+                }
+            }
+        }
+    }
+    
+    /**
+     * Returns selected schema.
+     */
+    public String getSelectedSchema() {
+    	return (String) schemaSelector.getSelectedItem();
+    }
+    
+    public int getChoice() {
+    	return choice;
+    }
+    
+    public void showDialog() {
+    	setVisible(true);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f6aeb0a5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
index 13eadbb..cf5bf68 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
@@ -79,15 +79,17 @@ public class MergerOptions extends CayenneController {
 
     protected DbMerger merger;
     protected MergerTokenSelectorController tokens;
-
+    protected String defaultSchema;
+    
     public MergerOptions(ProjectController parent, String title,
-            DBConnectionInfo connectionInfo, DataMap dataMap) {
+            DBConnectionInfo connectionInfo, DataMap dataMap, String defaultSchema) {
         super(parent);
 
         this.dataMap = dataMap;
         this.tokens = new MergerTokenSelectorController(parent);
         this.view = new MergerOptionsView(tokens.getView());
         this.connectionInfo = connectionInfo;
+        this.defaultSchema = defaultSchema;
         /*
          * TODO:? this.generatorDefaults = (DBGeneratorDefaults) parent
          * .getPreferenceDomainForProject() .getDetail("DbGenerator",
@@ -163,6 +165,7 @@ public class MergerOptions extends CayenneController {
                     .getClassLoadingService());
             tokens.setMergerFactory(adapter.mergerFactory());
             merger = new DbMerger();
+            merger.setSchema(defaultSchema);
             List<MergerToken> mergerTokens = merger.createMergeTokens(
                     adapter,
                     connectionInfo.makeDataSource(getApplication()


[2/2] git commit: CAY-1921 Migrate Dabase Schema - SqlServer 2008

Posted by aa...@apache.org.
CAY-1921 Migrate Dabase Schema - SqlServer 2008

removing generics - still supporting Java 6
typo in the title


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/0056d5ab
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/0056d5ab
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/0056d5ab

Branch: refs/heads/master
Commit: 0056d5ab17e4c92e457a92220b327bc709526ab2
Parents: f6aeb0a
Author: aadamchik <aa...@apache.org>
Authored: Sun Apr 27 10:39:28 2014 +0300
Committer: aadamchik <aa...@apache.org>
Committed: Sun Apr 27 10:57:41 2014 +0300

----------------------------------------------------------------------
 .../cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java    | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/0056d5ab/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java
index 43c1cb3..8a22455 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbMigrateOptionsDialog.java
@@ -25,13 +25,13 @@ public class DbMigrateOptionsDialog extends CayenneDialog {
     public static final int SELECT = 1;
 
 	protected JLabel schemaLabel;
-    protected JComboBox<String> schemaSelector;
+    protected JComboBox schemaSelector;
     protected JButton selectButton;
     protected JButton cancelButton;
     protected int choice;
     
     public DbMigrateOptionsDialog(Collection<String> schemas, String dbUserName) {
-        super(Application.getFrame(), "Migrater DB Schema: Select Schema");
+        super(Application.getFrame(), "Migrate DB Schema: Select Schema");
         init();
         initController();
         initFromModel(schemas, dbUserName);
@@ -45,7 +45,7 @@ public class DbMigrateOptionsDialog extends CayenneDialog {
     protected void init() {
         selectButton = new JButton("Continue");
         cancelButton = new JButton("Cancel");
-        schemaSelector = new JComboBox<String>();
+        schemaSelector = new JComboBox();
         FormLayout layout = new FormLayout(
                 "right:pref, 3dlu, fill:max(170dlu;pref):grow",
                 "");
@@ -96,7 +96,7 @@ public class DbMigrateOptionsDialog extends CayenneDialog {
 
         schemaSelector.setVisible(true);
         schemaLabel.setVisible(true);
-        schemaSelector.setModel(new DefaultComboBoxModel<String>(schemas.toArray(new String[] {})));
+        schemaSelector.setModel(new DefaultComboBoxModel(schemas.toArray(new String[] {})));
 
         // select schema belonging to the user
         if (dbUserName != null) {