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 2019/09/25 10:23:03 UTC

[cayenne] branch STABLE-4.1 updated: Sort tables and columns in DBImport DB schema view

This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/STABLE-4.1 by this push:
     new cfb1a43  Sort tables and columns in DBImport DB schema view
cfb1a43 is described below

commit cfb1a43b01b8bf5de55ba0e04c77929e40197101
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Sep 25 13:22:52 2019 +0300

    Sort tables and columns in DBImport DB schema view
---
 .../dbsync/reverse/dbimport/FilterContainer.java   | 37 +++++++++++-----------
 .../dbsync/reverse/dbimport/IncludeTable.java      | 15 +++++----
 .../reverse/dbimport/ReverseEngineering.java       |  9 +++---
 .../dbsync/reverse/dbimport/SchemaContainer.java   |  8 ++---
 .../editor/dbimport/DatabaseSchemaLoader.java      | 20 ++++++++++++
 5 files changed, 55 insertions(+), 34 deletions(-)

diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/FilterContainer.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/FilterContainer.java
index 3914439..22b62ec 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/FilterContainer.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/FilterContainer.java
@@ -21,9 +21,8 @@ package org.apache.cayenne.dbsync.reverse.dbimport;
 
 import org.apache.cayenne.util.Util;
 
-import java.util.Collection;
-import java.util.LinkedList;
-
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @since 4.0.
@@ -32,19 +31,19 @@ public abstract class FilterContainer {
 
     private String name;
 
-    private final Collection<IncludeTable> includeTableCollection = new LinkedList<>();
+    private final List<IncludeTable> includeTableCollection = new ArrayList<>();
 
-    private final Collection<ExcludeTable> excludeTableCollection = new LinkedList<>();
+    private final List<ExcludeTable> excludeTableCollection = new ArrayList<>();
 
-    private final Collection<IncludeColumn> includeColumnCollection = new LinkedList<>();
+    private final List<IncludeColumn> includeColumnCollection = new ArrayList<>();
 
-    private final Collection<ExcludeColumn> excludeColumnCollection = new LinkedList<>();
+    private final List<ExcludeColumn> excludeColumnCollection = new ArrayList<>();
 
-    private final Collection<IncludeProcedure> includeProcedureCollection = new LinkedList<>();
+    private final List<IncludeProcedure> includeProcedureCollection = new ArrayList<>();
 
-    private final Collection<ExcludeProcedure> excludeProcedureCollection = new LinkedList<>();
+    private final List<ExcludeProcedure> excludeProcedureCollection = new ArrayList<>();
 
-    private final Collection<ExcludeRelationship> excludeRelationshipCollection = new LinkedList<>();
+    private final List<ExcludeRelationship> excludeRelationshipCollection = new ArrayList<>();
 
     public FilterContainer() {
     }
@@ -71,34 +70,34 @@ public abstract class FilterContainer {
         }
     }
 
-    public Collection<IncludeTable> getIncludeTables() {
+    public List<IncludeTable> getIncludeTables() {
         return includeTableCollection;
     }
 
-    public Collection<ExcludeTable> getExcludeTables() {
+    public List<ExcludeTable> getExcludeTables() {
         return excludeTableCollection;
     }
 
-    public Collection<IncludeColumn> getIncludeColumns() {
+    public List<IncludeColumn> getIncludeColumns() {
         return includeColumnCollection;
     }
 
-    public Collection<ExcludeColumn> getExcludeColumns() {
+    public List<ExcludeColumn> getExcludeColumns() {
         return excludeColumnCollection;
     }
 
-    public Collection<IncludeProcedure> getIncludeProcedures() {
+    public List<IncludeProcedure> getIncludeProcedures() {
         return includeProcedureCollection;
     }
 
-    public Collection<ExcludeProcedure> getExcludeProcedures() {
+    public List<ExcludeProcedure> getExcludeProcedures() {
         return excludeProcedureCollection;
     }
 
     /**
      * @since 4.1
      */
-    public Collection<ExcludeRelationship> getExcludeRelationship() {
+    public List<ExcludeRelationship> getExcludeRelationship() {
         return excludeRelationshipCollection;
     }
 
@@ -193,7 +192,7 @@ public abstract class FilterContainer {
             && includeProcedureCollection.isEmpty() && excludeProcedureCollection.isEmpty() && excludeRelationshipCollection.isEmpty();
     }
 
-    static boolean isBlank(Collection<?> collection) {
+    static boolean isBlank(List<?> collection) {
         return collection == null || collection.isEmpty();
     }
 
@@ -214,7 +213,7 @@ public abstract class FilterContainer {
         return res;
     }
 
-    protected void appendCollection(StringBuilder res, String prefix, Collection<? extends PatternParam> collection) {
+    protected void appendCollection(StringBuilder res, String prefix, List<? extends PatternParam> collection) {
         if (!isBlank(collection)) {
             for (PatternParam item : collection) {
                 item.toString(res, prefix);
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/IncludeTable.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/IncludeTable.java
index 0dd46f2..a1f1f2a 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/IncludeTable.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/IncludeTable.java
@@ -23,19 +23,20 @@ import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.util.XMLEncoder;
 import org.apache.cayenne.util.XMLSerializable;
 
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.LinkedList;
+import java.util.List;
 
 /**
  * @since 4.0.
  */
 public class IncludeTable extends PatternParam implements XMLSerializable {
 
-    private final Collection<IncludeColumn> includeColumns = new LinkedList<>();
+    private final List<IncludeColumn> includeColumns = new ArrayList<>();
 
-    private final Collection<ExcludeColumn> excludeColumns = new LinkedList<>();
+    private final List<ExcludeColumn> excludeColumns = new ArrayList<>();
 
-    private final Collection<ExcludeRelationship> excludeRelationship = new LinkedList<>();
+    private final List<ExcludeRelationship> excludeRelationship = new ArrayList<>();
 
     public IncludeTable() {
     }
@@ -54,7 +55,7 @@ public class IncludeTable extends PatternParam implements XMLSerializable {
         }
     }
 
-    public Collection<IncludeColumn> getIncludeColumns() {
+    public List<IncludeColumn> getIncludeColumns() {
         return includeColumns;
     }
 
@@ -62,7 +63,7 @@ public class IncludeTable extends PatternParam implements XMLSerializable {
         this.includeColumns.addAll(includeColumns);
     }
 
-    public Collection<ExcludeColumn> getExcludeColumns() {
+    public List<ExcludeColumn> getExcludeColumns() {
         return excludeColumns;
     }
 
@@ -73,7 +74,7 @@ public class IncludeTable extends PatternParam implements XMLSerializable {
     /**
      * @since 4.1
      */
-    public Collection<ExcludeRelationship> getExcludeRelationship() {
+    public List<ExcludeRelationship> getExcludeRelationship() {
         return excludeRelationship;
     }
 
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/ReverseEngineering.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/ReverseEngineering.java
index 28b0e70..184c673 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/ReverseEngineering.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/ReverseEngineering.java
@@ -20,9 +20,10 @@
 package org.apache.cayenne.dbsync.reverse.dbimport;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.LinkedList;
+import java.util.List;
 
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.dbsync.xml.DbImportExtension;
@@ -118,9 +119,9 @@ public class ReverseEngineering extends SchemaContainer implements Serializable,
      * <li> "SYNONYM"
      * </ul>
      */
-    private final Collection<String> tableTypes = new LinkedList<>();
+    private final List<String> tableTypes = new ArrayList<>();
 
-    private final Collection<Catalog> catalogCollection = new LinkedList<>();
+    private final List<Catalog> catalogCollection = new ArrayList<>();
 
     public ReverseEngineering() {
     }
@@ -160,7 +161,7 @@ public class ReverseEngineering extends SchemaContainer implements Serializable,
         this.skipPrimaryKeyLoading = skipPrimaryKeyLoading;
     }
 
-    public Collection<Catalog> getCatalogs() {
+    public List<Catalog> getCatalogs() {
         return catalogCollection;
     }
 
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/SchemaContainer.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/SchemaContainer.java
index 8d18417..512ee70 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/SchemaContainer.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/SchemaContainer.java
@@ -19,17 +19,17 @@
 
 package org.apache.cayenne.dbsync.reverse.dbimport;
 
-import java.util.Collection;
-import java.util.LinkedList;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @since 4.0
  */
 public abstract class SchemaContainer extends FilterContainer {
 
-    private final Collection<Schema> schemaCollection = new LinkedList<>();
+    private final List<Schema> schemaCollection = new ArrayList<>();
 
-    public Collection<Schema> getSchemas() {
+    public List<Schema> getSchemas() {
         return schemaCollection;
     }
 
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 fafd9c8..0f32766 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
@@ -25,6 +25,7 @@ import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.List;
 
 import org.apache.cayenne.dba.DbAdapter;
@@ -33,6 +34,7 @@ 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;
 import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
 import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
 import org.apache.cayenne.modeler.ClassLoadingService;
@@ -60,9 +62,26 @@ public class DatabaseSchemaLoader {
                             "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"};
             processCatalogs(connection, types, dbAdapter);
         }
+
+        sort();
         return databaseReverseEngineering;
     }
 
+    private void sort() {
+        databaseReverseEngineering.getCatalogs().forEach(catalog -> {
+            catalog.getSchemas().forEach(this::sort);
+            sort(catalog);
+        });
+        sort(databaseReverseEngineering);
+    }
+
+    private void sort(FilterContainer filterContainer) {
+        Comparator<PatternParam> comparator = Comparator.comparing(PatternParam::getPattern);
+        filterContainer.getIncludeTables().sort(comparator);
+        filterContainer.getIncludeTables().forEach(table -> table.getIncludeColumns().sort(comparator));
+        filterContainer.getIncludeProcedures().sort(comparator);
+    }
+
     private void processCatalogs(Connection connection, String[] types, DbAdapter dbAdapter) throws SQLException {
         try (ResultSet rsCatalog = connection.getMetaData().getCatalogs()) {
             boolean hasCatalogs = false;
@@ -133,6 +152,7 @@ public class DatabaseSchemaLoader {
                 }
             }
         }
+        sort();
         return databaseReverseEngineering;
     }