You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/11/05 13:28:58 UTC

[01/10] cayenne git commit: First implementation of table columns lazy loading.

Repository: cayenne
Updated Branches:
  refs/heads/master fb7f004a8 -> c18c0e31f


First implementation of table columns lazy loading.


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

Branch: refs/heads/master
Commit: 65d76d90b1b0c517a3518d9e56fe8fbe7820a611
Parents: 831442c
Author: kkomyak <co...@gmail.com>
Authored: Thu Oct 25 14:55:55 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Mon Oct 29 09:37:34 2018 +0300

----------------------------------------------------------------------
 .../modeler/action/LoadDbSchemaAction.java      |  31 +++--
 .../dialog/db/load/DbImportTreeNode.java        |  19 +++
 .../editor/dbimport/ColorTreeRenderer.java      |  15 ++-
 .../editor/dbimport/DatabaseSchemaLoader.java   |  97 ++++++++++----
 .../editor/dbimport/DbImportNodeHandler.java    |  25 ++--
 .../modeler/editor/dbimport/DbImportTree.java   | 128 ++++++++++++++++++-
 .../dbimport/DbImportTreeCellRenderer.java      |   1 +
 .../editor/dbimport/DraggableTreePanel.java     |   6 +
 .../cayenne/modeler/images/icon-dbi-column.png  | Bin 0 -> 203 bytes
 9 files changed, 269 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
index 840ec40..406dc64 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.modeler.action;
 import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.dialog.db.DataSourceWizard;
+import org.apache.cayenne.modeler.dialog.db.load.TransferableNode;
 import org.apache.cayenne.modeler.editor.dbimport.DatabaseSchemaLoader;
 import org.apache.cayenne.modeler.editor.dbimport.DbImportModel;
 import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
@@ -31,6 +32,7 @@ import org.apache.cayenne.modeler.pref.DataMapDefaults;
 import org.apache.cayenne.modeler.util.CayenneAction;
 
 import javax.swing.JOptionPane;
+import javax.swing.tree.TreePath;
 import java.awt.event.ActionEvent;
 import java.sql.SQLException;
 
@@ -47,6 +49,7 @@ public class LoadDbSchemaAction extends CayenneAction {
 
     private static final String ICON_NAME = "icon-dbi-refresh.png";
     private static final String ACTION_NAME = "Refresh Db Schema";
+    public static final String LOAD_COLUMN_COMMAND = "load-columns";
     private DraggableTreePanel draggableTreePanel;
 
     LoadDbSchemaAction(Application application) {
@@ -80,15 +83,25 @@ public class LoadDbSchemaAction extends CayenneAction {
                     connectionInfo = getConnectionInfoFromPreferences();
                 }
 
-                ReverseEngineering databaseReverseEngineering = new DatabaseSchemaLoader()
-                        .load(connectionInfo, getApplication().getClassLoadingService());
-                draggableTreePanel.getSourceTree()
-                        .setEnabled(true);
-                draggableTreePanel.getSourceTree()
-                        .translateReverseEngineeringToTree(databaseReverseEngineering, true);
-                draggableTreePanel
-                        .bindReverseEngineeringToDatamap(getProjectController().getCurrentDataMap(), databaseReverseEngineering);
-                ((DbImportModel) draggableTreePanel.getSourceTree().getModel()).reload();
+                if (LOAD_COLUMN_COMMAND.equals(e.getActionCommand())) {
+                    TreePath source = (TreePath) e.getSource();
+                    ReverseEngineering databaseReverseEngineering = new DatabaseSchemaLoader()
+                            .loadColumns(connectionInfo, getApplication().getClassLoadingService(), source);
+                    draggableTreePanel.getSourceTree().updateTableColumns(databaseReverseEngineering);
+
+                } else {
+                    ReverseEngineering databaseReverseEngineering = new DatabaseSchemaLoader()
+                            .load(connectionInfo, getApplication().getClassLoadingService());
+                    draggableTreePanel.getSourceTree()
+                            .setEnabled(true);
+                    draggableTreePanel.getSourceTree()
+                            .translateReverseEngineeringToTree(databaseReverseEngineering, true);
+                    draggableTreePanel
+                            .bindReverseEngineeringToDatamap(getProjectController().getCurrentDataMap(), databaseReverseEngineering);
+                    ((DbImportModel) draggableTreePanel.getSourceTree().getModel()).reload();
+                }
+
+
             } catch (SQLException exception) {
                 JOptionPane.showMessageDialog(
                         Application.getFrame(),

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportTreeNode.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportTreeNode.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportTreeNode.java
index 20b46bc..98cc338 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportTreeNode.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbImportTreeNode.java
@@ -20,9 +20,11 @@
 package org.apache.cayenne.modeler.dialog.db.load;
 
 import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
 import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
 import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
 import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
 import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
 import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
 import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam;
@@ -39,6 +41,7 @@ import java.util.ArrayList;
 public class DbImportTreeNode extends DefaultMutableTreeNode {
 
     private boolean isColorized;
+    private boolean isLoaded;
 
     public DbImportTreeNode() {
         this(null);
@@ -59,6 +62,14 @@ public class DbImportTreeNode extends DefaultMutableTreeNode {
         return (getUserObject().getClass() == ExcludeTable.class);
     }
 
+    public boolean isIncludeColumn() {
+        return (getUserObject().getClass() == IncludeColumn.class);
+    }
+
+    public boolean isExcludeColumn() {
+        return (getUserObject().getClass() == ExcludeColumn.class);
+    }
+
     public boolean isExcludeProcedure() {
         return (getUserObject().getClass() == ExcludeProcedure.class);
     }
@@ -191,4 +202,12 @@ public class DbImportTreeNode extends DefaultMutableTreeNode {
     public void setColorized(boolean colorized) {
         isColorized = colorized;
     }
+
+    public boolean isLoaded() {
+        return isLoaded;
+    }
+
+    public void setLoaded(boolean loaded) {
+        isLoaded = loaded;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ColorTreeRenderer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ColorTreeRenderer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ColorTreeRenderer.java
index 2f58ea4..95d2861 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ColorTreeRenderer.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ColorTreeRenderer.java
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.modeler.editor.dbimport;
 
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
 import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
 import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
 
@@ -81,6 +82,18 @@ public class ColorTreeRenderer extends DbImportTreeCellRenderer {
 
         int traverseResult = handler.traverseTree(root);
         if (traverseResult > 0) {
+
+            if (root.getUserObject().getClass() == IncludeColumn.class) {
+                if (handler.nodesIsEqual(root)) {
+                    setForeground(handler.getColorByNodeType(root));
+                    node.setColorized(true);
+                    return this;
+                } else {
+                    setForeground(NON_INCLUDE_COLOR);
+                    node.setColorized(false);
+                    return this;
+                }
+            }
             // Case on IncludeProcedure on zero level is selected
             if (root.getUserObject().getClass() == IncludeProcedure.class) {
                 if (handler.nodesIsEqual(root)) {
@@ -95,7 +108,7 @@ public class ColorTreeRenderer extends DbImportTreeCellRenderer {
             }
             // If ReverseEngineering doesn't have catalogs or schemas on zero level
             if (!handler.isExistCatalogsOrSchemas()) {
-                if ((root.isExcludeTable()) || (root.isExcludeProcedure())) {
+                if ((root.isExcludeTable()) || (root.isExcludeProcedure() || root.isExcludeColumn())) {
                     if (handler.nodesIsEqual(root)) {
                         setForeground(handler.getColorByNodeType(root));
                         node.setColorized(true);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java
index ddb085f..6c2ee45 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java
@@ -19,14 +19,11 @@
 
 package org.apache.cayenne.modeler.editor.dbimport;
 
-import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
-import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
+import org.apache.cayenne.dbsync.reverse.dbimport.*;
 import org.apache.cayenne.modeler.ClassLoadingService;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 
+import javax.swing.tree.TreePath;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -47,6 +44,7 @@ public class DatabaseSchemaLoader {
     }
 
     public ReverseEngineering load(DBConnectionInfo connectionInfo, ClassLoadingService loadingService) throws SQLException {
+        String columnName = "Loading...";
         try (Connection connection = connectionInfo.makeDataSource(loadingService).getConnection()) {
             String[] types = {"TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"};
             try (ResultSet rs = connection.getMetaData().getCatalogs()) {
@@ -67,15 +65,37 @@ public class DatabaseSchemaLoader {
                         tableName = resultSet.getString(TABLE_INDEX);
                         schemaName = resultSet.getString(SCHEMA_INDEX);
                         catalogName = resultSet.getString(CATALOG_INDEX);
-                        packTable(tableName, catalogName, schemaName);
+                        packTable(tableName, catalogName, schemaName, columnName);
                     }
                     packFunctions(connection);
+                    columnName = null;
                 }
             }
         }
         return databaseReverseEngineering;
     }
 
+    public ReverseEngineering loadColumns(DBConnectionInfo connectionInfo, ClassLoadingService loadingService, TreePath path) throws SQLException {
+        String catalogName = path.getPathComponent(1).toString();
+        String schemaName = null;
+        String tableName = path.getPathComponent(2).toString();
+
+        try (Connection connection = connectionInfo.makeDataSource(loadingService).getConnection()) {
+            String[] types = {"TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"};
+            try (ResultSet rs = connection.getMetaData().getColumns(catalogName, schemaName, tableName, "");) {
+                String defaultCatalog = connection.getCatalog();
+
+                while (rs.next()) {
+                    String column = rs.getString(4);
+                    packTable(tableName, catalogName, schemaName, column);
+                }
+
+            }
+        }
+        return databaseReverseEngineering;
+    }
+
+
     private void packFunctions(Connection connection) throws SQLException {
         Collection<Catalog> catalogs = databaseReverseEngineering.getCatalogs();
         for (Catalog catalog : catalogs) {
@@ -116,57 +136,77 @@ public class DatabaseSchemaLoader {
     }
 
     private void packTable(String tableName, String catalogName, String schemaName) {
-        IncludeTable newTable = new IncludeTable();
-        newTable.setPattern(tableName);
+        packTable(tableName,catalogName, schemaName, null);
+    }
+
+    private void packTable(String tableName, String catalogName, String schemaName, String columnName) {
+        IncludeTable table = new IncludeTable();
+        table.setPattern(tableName);
+
         if ((catalogName == null) && (schemaName == null)) {
-            if (!databaseReverseEngineering.getIncludeTables().contains(newTable)) {
-                databaseReverseEngineering.addIncludeTable(newTable);
+            if (!databaseReverseEngineering.getIncludeTables().contains(table)) {
+                databaseReverseEngineering.addIncludeTable(table);
             }
         }
+
         if ((catalogName != null) && (schemaName == null)) {
             Catalog parentCatalog = getCatalogByName(databaseReverseEngineering.getCatalogs(), catalogName);
+
             if (parentCatalog != null) {
-                if (!parentCatalog.getIncludeTables().contains(newTable)) {
-                    parentCatalog.addIncludeTable(newTable);
+
+
+                if (!parentCatalog.getIncludeTables().contains(table)) {
+                    parentCatalog.addIncludeTable(table);
                 }
             } else {
                 parentCatalog = new Catalog();
                 parentCatalog.setName(catalogName);
-                if (!parentCatalog.getIncludeTables().contains(newTable)) {
-                    parentCatalog.addIncludeTable(newTable);
+                if (!parentCatalog.getIncludeTables().contains(table)) {
+                    parentCatalog.addIncludeTable(table);
                 }
                 databaseReverseEngineering.addCatalog(parentCatalog);
             }
+
+            IncludeTable foundTable = getTableByName(parentCatalog.getIncludeTables(), tableName);
+            table = foundTable != null ? foundTable : table;
+            if (columnName != null ) {
+                IncludeColumn includeColumn = new IncludeColumn(columnName);
+                table.addIncludeColumn(includeColumn);
+            }
         }
         if ((catalogName == null) && (schemaName != null)) {
             Schema parentSchema = getSchemaByName(databaseReverseEngineering.getSchemas(), schemaName);
             if (parentSchema != null) {
-                if (!parentSchema.getIncludeTables().contains(newTable)) {
-                    parentSchema.addIncludeTable(newTable);
+                if (!parentSchema.getIncludeTables().contains(table)) {
+                    parentSchema.addIncludeTable(table);
                 }
             } else {
                 parentSchema = new Schema();
                 parentSchema.setName(schemaName);
-                if (!parentSchema.getIncludeTables().contains(newTable)) {
-                    parentSchema.addIncludeTable(newTable);
+                if (!parentSchema.getIncludeTables().contains(table)) {
+                    parentSchema.addIncludeTable(table);
                 }
                 databaseReverseEngineering.addSchema(parentSchema);
             }
         }
         if ((catalogName != null) && (schemaName != null)) {
             Catalog parentCatalog = getCatalogByName(databaseReverseEngineering.getCatalogs(), catalogName);
+
+
+
             Schema parentSchema;
             if (parentCatalog != null) {
+
                 parentSchema = getSchemaByName(parentCatalog.getSchemas(), schemaName);
                 if (parentSchema != null) {
-                    if (!parentSchema.getIncludeTables().contains(newTable)) {
-                        parentSchema.addIncludeTable(newTable);
+                    if (!parentSchema.getIncludeTables().contains(table)) {
+                        parentSchema.addIncludeTable(table);
                     }
                 } else {
                     parentSchema = new Schema();
                     parentSchema.setName(schemaName);
-                    if (!parentSchema.getIncludeTables().contains(newTable)) {
-                        parentSchema.addIncludeTable(newTable);
+                    if (!parentSchema.getIncludeTables().contains(table)) {
+                        parentSchema.addIncludeTable(table);
                     }
                     parentCatalog.addSchema(parentSchema);
                 }
@@ -175,8 +215,8 @@ public class DatabaseSchemaLoader {
                 parentCatalog.setName(catalogName);
                 parentSchema = new Schema();
                 parentSchema.setName(schemaName);
-                if (!parentSchema.getIncludeTables().contains(newTable)) {
-                    parentSchema.addIncludeTable(newTable);
+                if (!parentSchema.getIncludeTables().contains(table)) {
+                    parentSchema.addIncludeTable(table);
                 }
                 databaseReverseEngineering.addCatalog(parentCatalog);
             }
@@ -192,6 +232,15 @@ public class DatabaseSchemaLoader {
         return null;
     }
 
+    private IncludeTable getTableByName(Collection<IncludeTable> tables, String catalogName) {
+        for (IncludeTable table : tables) {
+            if (table.getPattern().equals(catalogName)) {
+                return table;
+            }
+        }
+        return null;
+    }
+
     private Schema getSchemaByName(Collection<Schema> schemas, String schemaName) {
         for (Schema schema : schemas) {
             if (schema.getName().equals(schemaName)) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java
index ee30a9c..0b26c62 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java
@@ -19,13 +19,7 @@
 
 package org.apache.cayenne.modeler.editor.dbimport;
 
-import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
-import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
-import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
-import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
+import org.apache.cayenne.dbsync.reverse.dbimport.*;
 import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
 
 import javax.swing.tree.TreePath;
@@ -98,7 +92,7 @@ class DbImportNodeHandler {
         for (int i = 0; i < childCount; i++) {
             if (((DbImportTreeNode) reverseEngineeringTree.getRootNode().getChildAt(i)).
                     getUserObject().getClass() == Catalog.class) {
-                if (dbNode.getUserObject().getClass() == Catalog.class) {
+                if (dbNode.getUserObject().getClass() == Catalog.class || dbNode.getUserObject().getClass() == IncludeTable.class) {
                     return true;
                 } else {
                     return false;
@@ -167,6 +161,7 @@ class DbImportNodeHandler {
     *  Return 0, if rendered node not found.
     */
     int traverseTree(DbImportTreeNode rootNode) {
+        hasEntitiesInEmptyContainer = false;
         int traverseResult = 0;
         int childCount = rootNode.getChildCount();
         boolean hasProcedures = false;
@@ -217,7 +212,7 @@ class DbImportNodeHandler {
                 }
             }
             if ((!rootNode.isExcludeTable()) && (!nodesIsEqual(rootNode))
-                    && (!dbSchemaNode.isIncludeProcedure())) {
+                    && (!dbSchemaNode.isIncludeProcedure()) &&(!dbSchemaNode.isIncludeColumn())) {
                 traverseResult++;
             } else {
                 if ((!hasProcedures) && (!dbSchemaNode.isIncludeProcedure())) {
@@ -255,7 +250,7 @@ class DbImportNodeHandler {
             for (TreePath path : reverseEngineeringTree.getSelectionPaths()) {
                 DbImportTreeNode pathNode = (DbImportTreeNode) path.getLastPathComponent();
                 if (pathNode.getSimpleNodeName().equals(dbSchemaNode.getSimpleNodeName())) {
-                    if (pathNode.isExcludeTable() || pathNode.isExcludeProcedure()) {
+                    if (pathNode.isExcludeTable() || pathNode.isExcludeProcedure() || node.isExcludeColumn()) {
                         return EXCLUDE_COLOR;
                     } else {
                         return ACCEPT_COLOR;
@@ -263,7 +258,7 @@ class DbImportNodeHandler {
                 }
             }
         }
-        if (node.isExcludeTable() || node.isExcludeProcedure()) {
+        if (node.isExcludeTable() || node.isExcludeProcedure() || node.isExcludeColumn()) {
             return EXCLUDE_COLOR;
         } else {
             return ACCEPT_COLOR;
@@ -316,6 +311,12 @@ class DbImportNodeHandler {
         if ((firstClass.equals(ExcludeProcedure.class)) && (secondClass.equals(IncludeProcedure.class))) {
             return true;
         }
+        if ((firstClass.equals(ExcludeColumn.class)) && (secondClass.equals(IncludeColumn.class))) {
+            return true;
+        }
+        if ((firstClass.equals(IncludeColumn.class)) && (secondClass.equals(ExcludeColumn.class))) {
+            return true;
+        }
         return false;
     }
 
@@ -324,7 +325,7 @@ class DbImportNodeHandler {
     }
 
     public boolean getHasEntitiesInEmptyContainer() {
-        return hasEntitiesInEmptyContainer;
+        return true;
     }
 
     public void setHasEntitiesInEmptyContainer(boolean newFlag) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
index c7a0aed..b4a3ec6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
@@ -19,20 +19,24 @@
 
 package org.apache.cayenne.modeler.editor.dbimport;
 
-import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
-import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
-import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam;
-import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
+import org.apache.cayenne.dbsync.reverse.dbimport.*;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.action.LoadDbSchemaAction;
 import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
 import org.apache.cayenne.modeler.dialog.db.load.TransferableNode;
 
 import javax.swing.JTree;
+import javax.swing.event.TreeExpansionEvent;
+import javax.swing.event.TreeExpansionListener;
 import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
+import java.awt.*;
+import java.awt.event.ActionEvent;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Iterator;
+
+import static org.apache.cayenne.modeler.action.LoadDbSchemaAction.LOAD_COLUMN_COMMAND;
 
 /**
  * @since 4.1
@@ -61,14 +65,92 @@ public class DbImportTree extends JTree {
         printParams(reverseEngineering.getExcludeColumns(), root);
         printParams(reverseEngineering.getIncludeProcedures(), root);
         printParams(reverseEngineering.getExcludeProcedures(), root);
+        createTreeExpandListener();
         model.reload();
     }
 
+    public void updateTableColumns(ReverseEngineering reverseEngineering) {
+        DbImportModel model = (DbImportModel) this.getModel();
+
+        DbImportTreeNode root = (DbImportTreeNode) model.getRoot();
+        Iterator<Catalog> catalogs = reverseEngineering.getCatalogs().iterator();
+        while (catalogs.hasNext()) {
+            Catalog newCatalog = catalogs.next();
+            DbImportTreeNode catalog = findNodeInParent(root, newCatalog);
+
+            if (catalog == null) {
+                continue;
+            }
+
+            Iterator<IncludeTable> includeTables = newCatalog.getIncludeTables().iterator();
+            while (includeTables.hasNext()) {
+                IncludeTable newTable = includeTables.next();
+                DbImportTreeNode table = findNodeInParent(catalog, newTable);
+                if (table == null) {
+                    continue;
+                }
+                table.removeAllChildren();
+                newTable.getIncludeColumns().forEach(column ->
+                    table.add(new DbImportTreeNode(column)));
+                table.setLoaded(true);
+                model.reload(table);
+            }
+        }
+
+    }
+
+
+
+    private DbImportTreeNode findNodeInParent(DbImportTreeNode parent, Object object) {
+       for(int i = 0; i<= parent.getChildCount(); i++) {
+           DbImportTreeNode node = (DbImportTreeNode) parent.getChildAt(i);
+           Object userObject = node.getUserObject();
+
+           if (object instanceof Catalog) {
+               Catalog catalog = (Catalog) object;
+               if (!(userObject instanceof Catalog)) {
+                   continue;
+               }
+
+               Catalog currentCatalog = (Catalog) userObject;
+               if(currentCatalog.getName().equals(catalog.getName())  ) {
+                   return node;
+               }
+           }
+
+           if (object instanceof IncludeTable) {
+               IncludeTable table = (IncludeTable) object;
+               if (!(userObject instanceof IncludeTable)) {
+                   continue;
+               }
+
+               IncludeTable currentTable = (IncludeTable) userObject;
+               if (currentTable.getPattern().equals(table.getPattern())) {
+                   return node;
+               }
+           }
+
+           if (object instanceof ExcludeTable) {
+               ExcludeTable table = (ExcludeTable) object;
+               if (!(userObject instanceof ExcludeTable)) {
+                   continue;
+               }
+
+               ExcludeTable currentTable = (ExcludeTable) userObject;
+               if (currentTable.getPattern().equals(table.getPattern())) {
+                   return node;
+               }
+           }
+       }
+
+       return null;
+    }
+
     public DbImportTreeNode findNodeByParentsChain(DbImportTreeNode rootNode, DbImportTreeNode movedNode, int depth) {
         String parentName = ((DbImportTreeNode) movedNode.getParent()).getSimpleNodeName();
         if ((rootNode.parentsIsEqual(((DbImportTreeNode) movedNode.getParent())))
                 && (rootNode.getSimpleNodeName().equals(parentName))
-                && ((rootNode.isCatalog()) || (rootNode.isSchema()))) {
+                && ((rootNode.isCatalog()) || (rootNode.isSchema()) || (rootNode.isIncludeTable()))) {
             return rootNode;
         }
         for (int i = 0; i < rootNode.getChildCount(); i++) {
@@ -185,6 +267,38 @@ public class DbImportTree extends JTree {
         }
     }
 
+    private void createTreeExpandListener() {
+        TreeExpansionListener treeExpansionListener = new TreeExpansionListener() {
+
+            @Override
+            public void treeExpanded(TreeExpansionEvent event) {
+                TreePath path = event.getPath();
+                Object lastPathComponent = path.getLastPathComponent();
+                if (!(lastPathComponent instanceof TransferableNode)) {
+                    return;
+                }
+
+                DbImportTreeNode node = (DbImportTreeNode) lastPathComponent;
+                Object userObject = node.getUserObject();
+                if (userObject.getClass() == IncludeTable.class && !node.isLoaded()) {
+                    //reload columns action.
+
+                    LoadDbSchemaAction action = Application.getInstance().getActionManager().getAction(LoadDbSchemaAction.class);
+                    action.performAction(new ActionEvent(path, 1000, LOAD_COLUMN_COMMAND ));
+                }
+
+
+            }
+
+            @Override
+            public void treeCollapsed(TreeExpansionEvent event) {
+
+            }
+        };
+        this.addTreeExpansionListener(treeExpansionListener);
+    }
+
+
     public DbImportTreeNode getSelectedNode() {
         return (DbImportTreeNode) this.getSelectionPath().getLastPathComponent();
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTreeCellRenderer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTreeCellRenderer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTreeCellRenderer.java
index 9d9e505..5e1dce3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTreeCellRenderer.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTreeCellRenderer.java
@@ -58,6 +58,7 @@ public class DbImportTreeCellRenderer extends DefaultTreeCellRenderer {
         transferableTreeIcons.put(Schema.class, "icon-dbi-schema.png");
         transferableTreeIcons.put(IncludeTable.class, "icon-dbentity.png");
         transferableTreeIcons.put(IncludeProcedure.class, "icon-stored-procedure.png");
+        transferableTreeIcons.put(IncludeColumn.class, "icon-dbi-column.png");
     }
 
     private void initIcons() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DraggableTreePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DraggableTreePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DraggableTreePanel.java
index 9605e54..c53190c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DraggableTreePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DraggableTreePanel.java
@@ -238,6 +238,12 @@ public class DraggableTreePanel extends JScrollPane {
             if (selectedElement == null) {
                 return false;
             }
+            if (selectedElement.isIncludeColumn() || selectedElement.isExcludeColumn()) {
+                DbImportTreeNode node = targetTree.findNode(targetTree.getRootNode(), (DbImportTreeNode) selectedElement.getParent(), 0);
+                if(node != null && node.isExcludeTable()) {
+                    return false;
+                }
+            }
             Class draggableElementClass = selectedElement.getUserObject().getClass();
             Class reverseEngineeringElementClass;
             if (targetTree.getSelectionPath() != null) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/65d76d90/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbi-column.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbi-column.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbi-column.png
new file mode 100644
index 0000000..207b1f1
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbi-column.png differ


[02/10] cayenne git commit: Refactoring.

Posted by nt...@apache.org.
Refactoring.


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

Branch: refs/heads/master
Commit: 98541384b35f5a70d9eaf8e8d50d312cb9d77098
Parents: 65d76d9
Author: kkomyak <co...@gmail.com>
Authored: Mon Oct 29 10:16:36 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Mon Oct 29 10:50:33 2018 +0300

----------------------------------------------------------------------
 .../modeler/action/LoadDbSchemaAction.java      |  12 +-
 .../editor/dbimport/DatabaseSchemaLoader.java   |  21 ++--
 .../editor/dbimport/DbImportNodeHandler.java    |  12 +-
 .../modeler/editor/dbimport/DbImportTree.java   | 124 +++++++++----------
 4 files changed, 86 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/98541384/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
index 406dc64..da0c659 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/LoadDbSchemaAction.java
@@ -22,7 +22,6 @@ package org.apache.cayenne.modeler.action;
 import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.dialog.db.DataSourceWizard;
-import org.apache.cayenne.modeler.dialog.db.load.TransferableNode;
 import org.apache.cayenne.modeler.editor.dbimport.DatabaseSchemaLoader;
 import org.apache.cayenne.modeler.editor.dbimport.DbImportModel;
 import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
@@ -49,7 +48,6 @@ public class LoadDbSchemaAction extends CayenneAction {
 
     private static final String ICON_NAME = "icon-dbi-refresh.png";
     private static final String ACTION_NAME = "Refresh Db Schema";
-    public static final String LOAD_COLUMN_COMMAND = "load-columns";
     private DraggableTreePanel draggableTreePanel;
 
     LoadDbSchemaAction(Application application) {
@@ -62,6 +60,10 @@ public class LoadDbSchemaAction extends CayenneAction {
 
     @Override
     public void performAction(ActionEvent e) {
+        performAction(e, null);
+    }
+
+    public void performAction(ActionEvent e, TreePath tablePath) {
         final DbImportView rootParent = ((DbImportView) draggableTreePanel.getParent().getParent());
         rootParent.getLoadDbSchemaProgress().setVisible(true);
         rootParent.getLoadDbSchemaButton().setEnabled(false);
@@ -83,12 +85,10 @@ public class LoadDbSchemaAction extends CayenneAction {
                     connectionInfo = getConnectionInfoFromPreferences();
                 }
 
-                if (LOAD_COLUMN_COMMAND.equals(e.getActionCommand())) {
-                    TreePath source = (TreePath) e.getSource();
+                if (tablePath != null) {
                     ReverseEngineering databaseReverseEngineering = new DatabaseSchemaLoader()
-                            .loadColumns(connectionInfo, getApplication().getClassLoadingService(), source);
+                            .loadColumns(connectionInfo, getApplication().getClassLoadingService(), tablePath);
                     draggableTreePanel.getSourceTree().updateTableColumns(databaseReverseEngineering);
-
                 } else {
                     ReverseEngineering databaseReverseEngineering = new DatabaseSchemaLoader()
                             .load(connectionInfo, getApplication().getClassLoadingService());

http://git-wip-us.apache.org/repos/asf/cayenne/blob/98541384/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java
index 6c2ee45..43dc96c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DatabaseSchemaLoader.java
@@ -19,7 +19,12 @@
 
 package org.apache.cayenne.modeler.editor.dbimport;
 
-import org.apache.cayenne.dbsync.reverse.dbimport.*;
+import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
 import org.apache.cayenne.modeler.ClassLoadingService;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 
@@ -44,7 +49,6 @@ public class DatabaseSchemaLoader {
     }
 
     public ReverseEngineering load(DBConnectionInfo connectionInfo, ClassLoadingService loadingService) throws SQLException {
-        String columnName = "Loading...";
         try (Connection connection = connectionInfo.makeDataSource(loadingService).getConnection()) {
             String[] types = {"TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"};
             try (ResultSet rs = connection.getMetaData().getCatalogs()) {
@@ -65,10 +69,9 @@ public class DatabaseSchemaLoader {
                         tableName = resultSet.getString(TABLE_INDEX);
                         schemaName = resultSet.getString(SCHEMA_INDEX);
                         catalogName = resultSet.getString(CATALOG_INDEX);
-                        packTable(tableName, catalogName, schemaName, columnName);
+                        packTable(tableName, catalogName, schemaName, null);
                     }
                     packFunctions(connection);
-                    columnName = null;
                 }
             }
         }
@@ -81,10 +84,7 @@ public class DatabaseSchemaLoader {
         String tableName = path.getPathComponent(2).toString();
 
         try (Connection connection = connectionInfo.makeDataSource(loadingService).getConnection()) {
-            String[] types = {"TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"};
-            try (ResultSet rs = connection.getMetaData().getColumns(catalogName, schemaName, tableName, "");) {
-                String defaultCatalog = connection.getCatalog();
-
+            try (ResultSet rs = connection.getMetaData().getColumns(catalogName, schemaName, tableName, "")) {
                 while (rs.next()) {
                     String column = rs.getString(4);
                     packTable(tableName, catalogName, schemaName, column);
@@ -95,7 +95,6 @@ public class DatabaseSchemaLoader {
         return databaseReverseEngineering;
     }
 
-
     private void packFunctions(Connection connection) throws SQLException {
         Collection<Catalog> catalogs = databaseReverseEngineering.getCatalogs();
         for (Catalog catalog : catalogs) {
@@ -135,10 +134,6 @@ public class DatabaseSchemaLoader {
         }
     }
 
-    private void packTable(String tableName, String catalogName, String schemaName) {
-        packTable(tableName,catalogName, schemaName, null);
-    }
-
     private void packTable(String tableName, String catalogName, String schemaName, String columnName) {
         IncludeTable table = new IncludeTable();
         table.setPattern(tableName);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/98541384/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java
index 0b26c62..df25634 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportNodeHandler.java
@@ -19,7 +19,15 @@
 
 package org.apache.cayenne.modeler.editor.dbimport;
 
-import org.apache.cayenne.dbsync.reverse.dbimport.*;
+import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
 import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
 
 import javax.swing.tree.TreePath;
@@ -325,7 +333,7 @@ class DbImportNodeHandler {
     }
 
     public boolean getHasEntitiesInEmptyContainer() {
-        return true;
+        return hasEntitiesInEmptyContainer;
     }
 
     public void setHasEntitiesInEmptyContainer(boolean newFlag) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/98541384/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
index b4a3ec6..6019968 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
@@ -19,7 +19,14 @@
 
 package org.apache.cayenne.modeler.editor.dbimport;
 
-import org.apache.cayenne.dbsync.reverse.dbimport.*;
+import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.action.LoadDbSchemaAction;
 import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
@@ -30,13 +37,10 @@ import javax.swing.event.TreeExpansionEvent;
 import javax.swing.event.TreeExpansionListener;
 import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
-import java.awt.*;
-import java.awt.event.ActionEvent;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
+import java.util.Collections;
 
-import static org.apache.cayenne.modeler.action.LoadDbSchemaAction.LOAD_COLUMN_COMMAND;
 
 /**
  * @since 4.1
@@ -73,77 +77,70 @@ public class DbImportTree extends JTree {
         DbImportModel model = (DbImportModel) this.getModel();
 
         DbImportTreeNode root = (DbImportTreeNode) model.getRoot();
-        Iterator<Catalog> catalogs = reverseEngineering.getCatalogs().iterator();
-        while (catalogs.hasNext()) {
-            Catalog newCatalog = catalogs.next();
+        reverseEngineering.getCatalogs().forEach(newCatalog -> {
             DbImportTreeNode catalog = findNodeInParent(root, newCatalog);
 
             if (catalog == null) {
-                continue;
+                return;
             }
 
-            Iterator<IncludeTable> includeTables = newCatalog.getIncludeTables().iterator();
-            while (includeTables.hasNext()) {
-                IncludeTable newTable = includeTables.next();
+            newCatalog.getIncludeTables().forEach(newTable -> {
                 DbImportTreeNode table = findNodeInParent(catalog, newTable);
                 if (table == null) {
-                    continue;
+                    return;
                 }
                 table.removeAllChildren();
                 newTable.getIncludeColumns().forEach(column ->
-                    table.add(new DbImportTreeNode(column)));
+                        table.add(new DbImportTreeNode(column)));
                 table.setLoaded(true);
                 model.reload(table);
+            });
+        });
+    }
+
+    private DbImportTreeNode findNodeInParent(DbImportTreeNode parent, Object object) {
+        for (int i = 0; i <= parent.getChildCount(); i++) {
+            DbImportTreeNode node = (DbImportTreeNode) parent.getChildAt(i);
+            Object userObject = node.getUserObject();
+
+            if (object instanceof Catalog) {
+                Catalog catalog = (Catalog) object;
+                if (!(userObject instanceof Catalog)) {
+                    continue;
+                }
+
+                Catalog currentCatalog = (Catalog) userObject;
+                if (currentCatalog.getName().equals(catalog.getName())) {
+                    return node;
+                }
             }
-        }
 
-    }
+            if (object instanceof IncludeTable) {
+                IncludeTable table = (IncludeTable) object;
+                if (!(userObject instanceof IncludeTable)) {
+                    continue;
+                }
 
+                IncludeTable currentTable = (IncludeTable) userObject;
+                if (currentTable.getPattern().equals(table.getPattern())) {
+                    return node;
+                }
+            }
 
+            if (object instanceof ExcludeTable) {
+                ExcludeTable table = (ExcludeTable) object;
+                if (!(userObject instanceof ExcludeTable)) {
+                    continue;
+                }
 
-    private DbImportTreeNode findNodeInParent(DbImportTreeNode parent, Object object) {
-       for(int i = 0; i<= parent.getChildCount(); i++) {
-           DbImportTreeNode node = (DbImportTreeNode) parent.getChildAt(i);
-           Object userObject = node.getUserObject();
-
-           if (object instanceof Catalog) {
-               Catalog catalog = (Catalog) object;
-               if (!(userObject instanceof Catalog)) {
-                   continue;
-               }
-
-               Catalog currentCatalog = (Catalog) userObject;
-               if(currentCatalog.getName().equals(catalog.getName())  ) {
-                   return node;
-               }
-           }
-
-           if (object instanceof IncludeTable) {
-               IncludeTable table = (IncludeTable) object;
-               if (!(userObject instanceof IncludeTable)) {
-                   continue;
-               }
-
-               IncludeTable currentTable = (IncludeTable) userObject;
-               if (currentTable.getPattern().equals(table.getPattern())) {
-                   return node;
-               }
-           }
-
-           if (object instanceof ExcludeTable) {
-               ExcludeTable table = (ExcludeTable) object;
-               if (!(userObject instanceof ExcludeTable)) {
-                   continue;
-               }
-
-               ExcludeTable currentTable = (ExcludeTable) userObject;
-               if (currentTable.getPattern().equals(table.getPattern())) {
-                   return node;
-               }
-           }
-       }
-
-       return null;
+                ExcludeTable currentTable = (ExcludeTable) userObject;
+                if (currentTable.getPattern().equals(table.getPattern())) {
+                    return node;
+                }
+            }
+        }
+
+        return null;
     }
 
     public DbImportTreeNode findNodeByParentsChain(DbImportTreeNode rootNode, DbImportTreeNode movedNode, int depth) {
@@ -230,6 +227,11 @@ public class DbImportTree extends JTree {
         for (IncludeTable includeTable : collection) {
             DbImportTreeNode node = !isTransferable ? new DbImportTreeNode(includeTable) : new TransferableNode(includeTable);
             if (!node.getSimpleNodeName().equals("")) {
+
+                if (includeTable.getIncludeColumns().isEmpty() || includeTable.getExcludeColumns().isEmpty()) {
+                    printParams(Collections.singletonList(new IncludeColumn("Loading...")), node);
+                }
+
                 printParams(includeTable.getIncludeColumns(), node);
                 printParams(includeTable.getExcludeColumns(), node);
                 parent.add(node);
@@ -284,10 +286,8 @@ public class DbImportTree extends JTree {
                     //reload columns action.
 
                     LoadDbSchemaAction action = Application.getInstance().getActionManager().getAction(LoadDbSchemaAction.class);
-                    action.performAction(new ActionEvent(path, 1000, LOAD_COLUMN_COMMAND ));
+                    action.performAction(null, path);
                 }
-
-
             }
 
             @Override


[08/10] cayenne git commit: Small refactoring.

Posted by nt...@apache.org.
Small refactoring.


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

Branch: refs/heads/master
Commit: 34bd8a6c9f7f7736a40a8bdf99b7a1dc15703071
Parents: c5c3d79
Author: kkomyak <co...@gmail.com>
Authored: Mon Nov 5 16:11:36 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Mon Nov 5 16:11:36 2018 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/34bd8a6c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
index 13c8cb3..e1107fd 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
@@ -284,7 +284,7 @@ public class DbImportTree extends JTree {
                 }
 
                 DbImportTreeNode node = (DbImportTreeNode) lastPathComponent;
-                if (node.isIncludeColumn() && !node.isLoaded()) {
+                if (node.isIncludeTable() && !node.isLoaded()) {
                     //reload columns action.
 
                     LoadDbSchemaAction action = Application.getInstance().getActionManager().getAction(LoadDbSchemaAction.class);


[03/10] cayenne git commit: CAY-2491 Made DB Import View have flexible design. Moved 'Refresh Db Schema' and 'Run Import' buttons to toolbar. Added show/hide advanced options functionality. Add space in DbImport tab label.

Posted by nt...@apache.org.
CAY-2491 Made DB Import View have flexible design. Moved 'Refresh Db Schema' and 'Run Import' buttons to toolbar. Added show/hide advanced options functionality. Add space in DbImport tab label.


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

Branch: refs/heads/master
Commit: 438eec9b9f3f1738bfff843526474e58e1d284c1
Parents: 9854138
Author: kkomyak <co...@gmail.com>
Authored: Mon Oct 29 15:21:49 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Mon Oct 29 15:21:49 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |  1 +
 .../modeler/editor/DataMapTabbedView.java       |  3 +-
 .../modeler/editor/dbimport/DbImportView.java   | 60 +++++++++++++++-----
 .../dbimport/ReverseEngineeringTreePanel.java   |  1 +
 4 files changed, 50 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/438eec9b/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index c0c093c..fd08cdc 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -24,6 +24,7 @@ CAY-2481 Support for Object[] as return type in SQLTemplate and SQLExec
 CAY-2485 Compact Slf4j Logger
 CAY-2487 Removed usage of CayenneException.
 CAY-2489 Add validation to the case of not to PK relationships
+CAY-2491 Remaster Db Import View
 
 Bug Fixes:
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/438eec9b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
index ed1b6f1..b89b1c2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
@@ -24,7 +24,6 @@ import javax.swing.JTabbedPane;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
 
-
 /**
  * Data map editing tabs container
  *
@@ -56,7 +55,7 @@ public class DataMapTabbedView extends JTabbedPane {
         JScrollPane dataMapView = new JScrollPane(new DataMapView(mediator));
         JScrollPane dbImportView = new JScrollPane(new DbImportView(mediator));
         addTab("DataMap", dataMapView);
-        addTab("DbImport", dbImportView);
+        addTab("DB Import", dbImportView);
     }
 }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/438eec9b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java
index 3f0bb3b..38e3d87 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java
@@ -29,22 +29,29 @@ import org.apache.cayenne.modeler.action.ReverseEngineeringAction;
 import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
 import org.apache.cayenne.modeler.dialog.db.load.TransferableNode;
 import org.apache.cayenne.modeler.util.CayenneAction;
+import org.apache.cayenne.modeler.util.ModelerUtil;
 
+import javax.swing.AbstractAction;
+import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JPanel;
 import javax.swing.JProgressBar;
 import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
 
 /**
  * @since 4.1
  */
 public class DbImportView extends JPanel {
 
-    private static final String MAIN_LAYOUT = "fill:160dlu, 5dlu, fill:50dlu, 5dlu, fill:160dlu";
-    private static final String HEADER_LAYOUT = "fill:70dlu, 15dlu, fill:75dlu";
+    private static final String MAIN_LAYOUT = "fill:160dlu:grow, 5dlu, fill:50dlu, 5dlu, fill:160dlu:grow";
+    private static final String HEADER_LAYOUT = "fill:80dlu:grow";
     private static final String BUTTON_PANEL_LAYOUT = "fill:50dlu";
     private static final String PROGRESS_PANEL_LAYOUT = "fill:160dlu, 60dlu, fill:160dlu";
     private static final int ALL_LINE_SPAN = 5;
+    private static final ImageIcon rightArrow = ModelerUtil.buildIcon("icon-arrow-closed.png");
+    private static final ImageIcon downArrow = ModelerUtil.buildIcon("icon-arrow-open.png");
 
     private TreeToolbarPanel treeToolbar;
     private ReverseEngineeringTreePanel treePanel;
@@ -104,14 +111,6 @@ public class DbImportView extends JPanel {
 
         DefaultFormBuilder reverseEngineeringHeaderBuilder = new DefaultFormBuilder(headerLayout);
         reverseEngineeringHeaderBuilder.append("Import Configuration");
-        ReverseEngineeringAction reverseEngineeringAction = projectController.getApplication().getActionManager().
-                getAction(ReverseEngineeringAction.class);
-        reverseEngineeringAction.setView(this);
-        CayenneAction.CayenneToolbarButton reverseEngineeringButton = (CayenneAction.CayenneToolbarButton)
-                reverseEngineeringAction.buildButton(0);
-        reverseEngineeringButton.setShowingText(true);
-        reverseEngineeringButton.setText("Run Import");
-        reverseEngineeringHeaderBuilder.append(reverseEngineeringButton);
         builder.append(reverseEngineeringHeaderBuilder.getPanel());
 
         DefaultFormBuilder databaseHeaderBuilder = new DefaultFormBuilder(headerLayout);
@@ -120,12 +119,26 @@ public class DbImportView extends JPanel {
                 getAction(LoadDbSchemaAction.class);
         loadDbSchemaAction.setDraggableTreePanel(draggableTreePanel);
         loadDbSchemaButton = (CayenneAction.CayenneToolbarButton) loadDbSchemaAction.buildButton(0);
-        loadDbSchemaButton.setShowingText(true);
+        loadDbSchemaButton.setShowingText(false);
         loadDbSchemaButton.setText("Refresh DB Schema");
-        databaseHeaderBuilder.append(loadDbSchemaButton);
+        treeToolbar.add(loadDbSchemaButton);
+
+        ReverseEngineeringAction reverseEngineeringAction = projectController.getApplication().getActionManager().
+                getAction(ReverseEngineeringAction.class);
+        reverseEngineeringAction.setView(this);
+        CayenneAction.CayenneToolbarButton reverseEngineeringButton = (CayenneAction.CayenneToolbarButton)
+                reverseEngineeringAction.buildButton(0);
+        reverseEngineeringButton.setShowingText(true);
+        reverseEngineeringButton.setText("Run Import");
+        JPanel reverseEngineeringButtonPanel = new JPanel();
+        reverseEngineeringButtonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
+        reverseEngineeringButtonPanel.add(reverseEngineeringButton);
+        treeToolbar.addSeparator();
+        treeToolbar.add(reverseEngineeringButtonPanel);
 
         builder.append("");
         builder.append(databaseHeaderBuilder.getPanel());
+
         builder.append(treePanel);
         builder.append(buttonBuilder.getPanel());
         builder.append(draggableTreePanel);
@@ -142,11 +155,31 @@ public class DbImportView extends JPanel {
         progressBarBuilder.append(loadDbSchemaProgress);
         builder.append(progressBarBuilder.getPanel(), ALL_LINE_SPAN);
 
+        createAdvancedOptionsHiderPanel(builder);
+
         builder.append(configPanel, ALL_LINE_SPAN);
         this.setLayout(new BorderLayout());
         add(builder.getPanel(), BorderLayout.CENTER);
     }
 
+    private void createAdvancedOptionsHiderPanel(DefaultFormBuilder builder) {
+        JPanel advancedOptionsPanel = new JPanel();
+        advancedOptionsPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+        JButton hideButton = new JButton("Advanced Options");
+        hideButton.setIcon(configPanel.isVisible() ? downArrow : rightArrow);
+        hideButton.setBorderPainted(false);
+        hideButton.addActionListener(new AbstractAction() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                configPanel.setVisible(!configPanel.isVisible());
+                hideButton.setIcon(configPanel.isVisible() ? downArrow : rightArrow);
+            }
+        });
+        advancedOptionsPanel.add(hideButton);
+
+        builder.append(advancedOptionsPanel, ALL_LINE_SPAN);
+    }
+
     private void initFormElements() {
         DbImportTreeNode root = new DbImportTreeNode(new ReverseEngineering());
         DbImportTreeNode draggableTreeRoot = new DbImportTreeNode(new ReverseEngineering());
@@ -168,13 +201,14 @@ public class DbImportView extends JPanel {
         treeToolbar = new TreeToolbarPanel(projectController, reverseEngineeringTree, draggableTreePanel);
         treePanel = new ReverseEngineeringTreePanel(projectController, reverseEngineeringTree, draggableTree);
         treePanel.setTreeToolbar(treeToolbar);
-
         model.setDbSchemaTree(draggableTree);
         draggableTreeModel.setDbSchemaTree(draggableTree);
         ((ColorTreeRenderer) draggableTreePanel.getSourceTree().getCellRenderer()).
                 setReverseEngineeringTree(reverseEngineeringTree);
 
         configPanel = new ReverseEngineeringConfigPanel(projectController);
+        configPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+        configPanel.setVisible(false);
     }
 
     public boolean isSkipRelationshipsLoading() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/438eec9b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java
index 010e6c1..5f4e081 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java
@@ -39,6 +39,7 @@ import org.apache.cayenne.modeler.dialog.db.load.SchemaPopUpMenu;
 
 import javax.swing.JScrollPane;
 import javax.swing.JTree;
+import javax.swing.ScrollPaneLayout;
 import javax.swing.SwingUtilities;
 import javax.swing.tree.DefaultTreeCellRenderer;
 import javax.swing.tree.TreePath;


[06/10] cayenne git commit: Fixed ruin tree on expand after tree refresh.

Posted by nt...@apache.org.
Fixed ruin tree on expand after tree refresh.


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

Branch: refs/heads/master
Commit: ea120536fccc0e84fdc3f97a84d7a47b7cbadcde
Parents: aa62c10
Author: kkomyak <co...@gmail.com>
Authored: Mon Nov 5 15:52:59 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Mon Nov 5 15:52:59 2018 +0300

----------------------------------------------------------------------
 .../modeler/editor/dbimport/DbImportTree.java   |  7 +++--
 .../dbimport/ReverseEngineeringTreePanel.java   | 31 ++++++++++++++++----
 2 files changed, 30 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/ea120536/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
index 109049f..68656a4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
@@ -52,6 +52,7 @@ public class DbImportTree extends JTree {
 
     public DbImportTree(TreeNode node) {
         super(node);
+        createTreeExpandListener();
     }
 
     public void translateReverseEngineeringToTree(ReverseEngineering reverseEngineering, boolean isTransferable) {
@@ -69,7 +70,6 @@ public class DbImportTree extends JTree {
         printParams(reverseEngineering.getExcludeColumns(), root);
         printParams(reverseEngineering.getIncludeProcedures(), root);
         printParams(reverseEngineering.getExcludeProcedures(), root);
-        createTreeExpandListener();
         model.reload();
     }
 
@@ -89,11 +89,14 @@ public class DbImportTree extends JTree {
                 if (table == null) {
                     return;
                 }
-                table.removeAllChildren();
+                if (table.getChildCount() != 0) {
+                    table.removeAllChildren();
+                }
                 newTable.getIncludeColumns().forEach(column ->
                         table.add(new DbImportTreeNode(column)));
                 table.setLoaded(true);
                 model.reload(table);
+                System.out.println(table.getChildCount());
             });
         });
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ea120536/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java
index 5f4e081..877bd0f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringTreePanel.java
@@ -127,12 +127,31 @@ class ReverseEngineeringTreePanel extends JScrollPane {
                         popupMenu.show(e.getComponent(), e.getX(), e.getY());
                     }
                 } else if (reverseEngineeringTree.getSelectionPath() != null) {
-                    DbImportTreeNode findedNode = dbSchemaTree.findNode(
-                            dbSchemaTree.getRootNode(), reverseEngineeringTree.getSelectedNode(), 0
-                    );
-                    if (findedNode != null) {
-                        dbSchemaTree.expandPath(new TreePath(((DbImportTreeNode) findedNode.getParent()).getPath()));
-                        scrollToNode(dbSchemaTree, findedNode);
+                    DbImportTreeNode selectedNode = reverseEngineeringTree.getSelectedNode();
+
+                    if( selectedNode.isExcludeColumn() || selectedNode.isIncludeColumn()) {
+                        DbImportTreeNode expandNode = (DbImportTreeNode) selectedNode.getParent();
+
+                        DbImportTreeNode parentPath = dbSchemaTree.findNode(
+                                dbSchemaTree.getRootNode(), expandNode, 0
+                        );
+
+                        if (parentPath != null) {
+                            dbSchemaTree.expandPath(new TreePath((parentPath).getPath()));
+                            scrollToNode(dbSchemaTree, parentPath);
+                        }
+
+                    } else {
+
+                        DbImportTreeNode findNode = dbSchemaTree.findNode(
+                                dbSchemaTree.getRootNode(), selectedNode, 0
+                        );
+
+
+                        if (findNode != null) {
+                            dbSchemaTree.expandPath(new TreePath(((DbImportTreeNode) findNode.getParent()).getPath()));
+                            scrollToNode(dbSchemaTree, findNode);
+                        }
                     }
                 }
             }


[10/10] cayenne git commit: Merge PR #337

Posted by nt...@apache.org.
Merge PR #337


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

Branch: refs/heads/master
Commit: c18c0e31fc86ccb9063ebe2f648860a7ef05178a
Parents: fb7f004 2729e89
Author: Nikita Timofeev <st...@gmail.com>
Authored: Mon Nov 5 16:25:35 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Mon Nov 5 16:25:35 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |   1 +
 .../modeler/action/LoadDbSchemaAction.java      |  31 +++--
 .../dialog/db/load/DbImportTreeNode.java        |  19 +++
 .../modeler/editor/DataMapTabbedView.java       |   3 +-
 .../editor/dbimport/ColorTreeRenderer.java      |  15 ++-
 .../editor/dbimport/DatabaseSchemaLoader.java   |  84 +++++++++----
 .../editor/dbimport/DbImportNodeHandler.java    |  17 ++-
 .../modeler/editor/dbimport/DbImportTree.java   | 117 ++++++++++++++++++-
 .../dbimport/DbImportTreeCellRenderer.java      |   1 +
 .../modeler/editor/dbimport/DbImportView.java   |  62 +++++++---
 .../editor/dbimport/DraggableTreePanel.java     |   6 +
 .../dbimport/ReverseEngineeringTreePanel.java   |  32 ++++-
 .../cayenne/modeler/images/icon-dbi-column.png  | Bin 0 -> 203 bytes
 13 files changed, 331 insertions(+), 57 deletions(-)
----------------------------------------------------------------------



[04/10] cayenne git commit: Add flexibility to progress panels in dbImport view.

Posted by nt...@apache.org.
Add flexibility to progress panels in dbImport view.


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

Branch: refs/heads/master
Commit: f89836f5cd431aaabfc320671903aa28835a916f
Parents: 438eec9
Author: kkomyak <co...@gmail.com>
Authored: Thu Nov 1 16:56:38 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Thu Nov 1 16:56:38 2018 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/modeler/editor/dbimport/DbImportView.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/f89836f5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java
index 38e3d87..aacb1a4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportView.java
@@ -48,7 +48,7 @@ public class DbImportView extends JPanel {
     private static final String MAIN_LAYOUT = "fill:160dlu:grow, 5dlu, fill:50dlu, 5dlu, fill:160dlu:grow";
     private static final String HEADER_LAYOUT = "fill:80dlu:grow";
     private static final String BUTTON_PANEL_LAYOUT = "fill:50dlu";
-    private static final String PROGRESS_PANEL_LAYOUT = "fill:160dlu, 60dlu, fill:160dlu";
+    private static final String PROGRESS_PANEL_LAYOUT = "fill:160dlu:grow, 60dlu, fill:160dlu:grow";
     private static final int ALL_LINE_SPAN = 5;
     private static final ImageIcon rightArrow = ModelerUtil.buildIcon("icon-arrow-closed.png");
     private static final ImageIcon downArrow = ModelerUtil.buildIcon("icon-arrow-open.png");


[09/10] cayenne git commit: Removed unneeded System.out

Posted by nt...@apache.org.
Removed unneeded System.out


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

Branch: refs/heads/master
Commit: 2729e895f1b3d53ea85b664248ed2a3378e31400
Parents: 34bd8a6
Author: kkomyak <co...@gmail.com>
Authored: Mon Nov 5 16:18:59 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Mon Nov 5 16:18:59 2018 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java    | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/2729e895/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
index e1107fd..2bb51b3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
@@ -96,7 +96,6 @@ public class DbImportTree extends JTree {
                         table.add(new DbImportTreeNode(column)));
                 table.setLoaded(true);
                 model.reload(table);
-                System.out.println(table.getChildCount());
             });
         });
     }


[07/10] cayenne git commit: Small refactoring.

Posted by nt...@apache.org.
Small refactoring.


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

Branch: refs/heads/master
Commit: c5c3d79b597cb27df7943c912ccdda26bcccbd4e
Parents: ea12053
Author: kkomyak <co...@gmail.com>
Authored: Mon Nov 5 15:55:24 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Mon Nov 5 15:55:24 2018 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java  | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/c5c3d79b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
index 68656a4..13c8cb3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
@@ -284,8 +284,7 @@ public class DbImportTree extends JTree {
                 }
 
                 DbImportTreeNode node = (DbImportTreeNode) lastPathComponent;
-                Object userObject = node.getUserObject();
-                if (userObject.getClass() == IncludeTable.class && !node.isLoaded()) {
+                if (node.isIncludeColumn() && !node.isLoaded()) {
                     //reload columns action.
 
                     LoadDbSchemaAction action = Application.getInstance().getActionManager().getAction(LoadDbSchemaAction.class);


[05/10] cayenne git commit: Prevent adding 'Loading...' node to target tree in db import.

Posted by nt...@apache.org.
Prevent adding 'Loading...' node to target tree in db import.


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

Branch: refs/heads/master
Commit: aa62c101e7748a2fcd5162c7be1f99fc11ab4e35
Parents: f89836f
Author: kkomyak <co...@gmail.com>
Authored: Mon Nov 5 12:17:10 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Mon Nov 5 12:17:10 2018 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa62c101/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
index 6019968..109049f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/DbImportTree.java
@@ -228,7 +228,7 @@ public class DbImportTree extends JTree {
             DbImportTreeNode node = !isTransferable ? new DbImportTreeNode(includeTable) : new TransferableNode(includeTable);
             if (!node.getSimpleNodeName().equals("")) {
 
-                if (includeTable.getIncludeColumns().isEmpty() || includeTable.getExcludeColumns().isEmpty()) {
+                if (includeTable.getIncludeColumns().isEmpty() && includeTable.getExcludeColumns().isEmpty()) {
                     printParams(Collections.singletonList(new IncludeColumn("Loading...")), node);
                 }