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

abulatski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new 0febc0b  Add tableTypes field to dbImport config in dataMap
     new cd9d744  Merge PR #399
0febc0b is described below

commit 0febc0b058c3934aeee1c382906f0996cdfd6a78
Author: Arseni Bulatski <ancars...@gmail.com>
AuthorDate: Fri Jul 12 11:23:02 2019 +0300

    Add tableTypes field to dbImport config in dataMap
---
 RELEASE-NOTES.txt                                  |  1 +
 .../reverse/dbimport/ReverseEngineering.java       | 28 +++++++---
 .../dbsync/reverse/dbload/EntityLoader.java        | 34 ++++++++----
 .../apache/cayenne/dbsync/xml/ConfigHandler.java   | 33 +++--------
 .../cayenne/dbsync/xml/TableTypesHandler.java      | 64 ++++++++++++++++++++++
 .../org/apache/cayenne/schema/10/dbimport.xsd      |  8 ++-
 .../apache/cayenne/tools/DbImporterMojoTest.java   |  5 ++
 .../tools/dbimport/testTableTypesMap-pom.xml       | 47 ++++++++++++++++
 .../tools/dbimport/testTableTypesMap.map.xml       | 36 ++++++++++++
 .../dbimport/testTableTypesMap.map.xml-result      | 41 ++++++++++++++
 .../cayenne/tools/dbimport/testTableTypesMap.sql   | 25 +++++++++
 .../modeler/dialog/db/load/DbLoaderContext.java    | 15 +++--
 .../modeler/editor/dbimport/DbImportView.java      |  7 +++
 .../dbimport/ReverseEngineeringConfigPanel.java    | 37 +++++++++++++
 14 files changed, 329 insertions(+), 52 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 6f465e0..41269ed 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -40,6 +40,7 @@ CAY-2579 Review and possibly relax usage of readonly flag of 
ObjRelationship
 CAY-2585 Rename scalarQuery and params methods in SQLSelect
 CAY-2590 Add method to set query timeout to queries
 CAY-2592 Modeler: make all datamaps selected in global cgen tab
+CAY-2593 Add tableTypes field to dbImport config in dataMap
 
 Bug Fixes:
 
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 ca0c333..b9059f3 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
@@ -19,17 +19,16 @@
 
 package org.apache.cayenne.dbsync.reverse.dbimport;
 
-import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
-import org.apache.cayenne.dbsync.xml.DbImportExtension;
-import org.apache.cayenne.util.Util;
-import org.apache.cayenne.util.XMLEncoder;
-import org.apache.cayenne.util.XMLSerializable;
-
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedList;
 
+import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
+import org.apache.cayenne.dbsync.xml.DbImportExtension;
+import org.apache.cayenne.util.XMLEncoder;
+import org.apache.cayenne.util.XMLSerializable;
+
 /**
  * @since 4.0
  */
@@ -169,6 +168,10 @@ public class ReverseEngineering extends SchemaContainer 
implements Serializable,
         return tableTypes.toArray(new String[tableTypes.size()]);
     }
 
+    public Collection<String> getTableTypesCollection() {
+        return tableTypes;
+    }
+
     /*
      * Typical types are "TABLE",
      * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
@@ -300,9 +303,16 @@ public class ReverseEngineering extends SchemaContainer 
implements Serializable,
                 .nested(this.getIncludeProcedures(), delegate)
                 .nested(this.getExcludeProcedures(), delegate)
                 .nested(this.getCatalogs(), delegate)
-                .nested(this.getSchemas(), delegate)
-                .simpleTag("db-type", 
Util.join(Arrays.asList(this.getTableTypes()), ","))
-                .simpleTag("defaultPackage", this.getDefaultPackage())
+                .nested(this.getSchemas(), delegate);
+        String[] tableTypes = this.getTableTypes();
+        if(tableTypes.length != 0) {
+            encoder.start("tableTypes");
+            for(String type : tableTypes) {
+                encoder.simpleTag("tableType", type);
+            }
+            encoder.end();
+        }
+        encoder.simpleTag("defaultPackage", this.getDefaultPackage())
                 .simpleTag("forceDataMapCatalog", 
Boolean.toString(this.isForceDataMapCatalog()))
                 .simpleTag("forceDataMapSchema", 
Boolean.toString(this.isForceDataMapSchema()))
                 .simpleTag("meaningfulPkTables", this.getMeaningfulPkTables())
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoader.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoader.java
index c8db77b..f878358 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoader.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/EntityLoader.java
@@ -90,19 +90,31 @@ class EntityLoader extends PerCatalogAndSchemaLoader {
 
     private String[] getTableTypes() {
         String[] configTypes = config.getTableTypes();
-        if (configTypes != null && configTypes.length > 0) {
-            return configTypes;
-        }
-
-        List<String> list = new ArrayList<>(2);
         String viewType = adapter.tableTypeForView();
-        if (viewType != null) {
-            list.add(viewType);
-        }
         String tableType = adapter.tableTypeForTable();
-        if (tableType != null) {
-            list.add(tableType);
+
+        List<String> resultTableTypes = new ArrayList<>();
+        if(configTypes == null || configTypes.length == 0) {
+            addTypeToList(viewType, resultTableTypes);
+            addTypeToList(tableType, resultTableTypes);
+        } else {
+            for(String type : configTypes) {
+                if(type.equalsIgnoreCase("TABLE")) {
+                    addTypeToList(tableType, resultTableTypes);
+                } else if(type.equalsIgnoreCase("VIEW")) {
+                    addTypeToList(viewType, resultTableTypes);
+                } else {
+                    addTypeToList(type, resultTableTypes);
+                }
+            }
+        }
+
+        return resultTableTypes.toArray(new String[0]);
+    }
+
+    private void addTypeToList(String type, List<String> tableTypes) {
+        if(type != null) {
+            tableTypes.add(type);
         }
-        return list.toArray(new String[0]);
     }
 }
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/ConfigHandler.java 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/ConfigHandler.java
index eeb9fe7..e9921b5 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/ConfigHandler.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/ConfigHandler.java
@@ -20,15 +20,13 @@
 package org.apache.cayenne.dbsync.xml;
 
 import org.apache.cayenne.configuration.xml.DataChannelMetaData;
-import org.apache.cayenne.configuration.xml.DataMapLoaderListener;
 import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
 import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
 import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
-import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
 import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
 import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
-import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
@@ -43,7 +41,7 @@ class ConfigHandler extends NamespaceAwareNestedTagHandler {
 
     private static final String CATALOG_TAG = "catalog";
     private static final String SCHEMA_TAG = "schema";
-    private static final String TABLE_TYPE_TAG = "tableType";
+    private static final String TABLE_TYPES_TAG = "tableTypes";
     private static final String DEFAULT_PACKAGE_TAG = "defaultPackage";
     private static final String FORCE_DATAMAP_CATALOG_TAG = 
"forceDataMapCatalog";
     private static final String FORCE_DATAMAP_SCHEMA_TAG = 
"forceDataMapSchema";
@@ -76,8 +74,6 @@ class ConfigHandler extends NamespaceAwareNestedTagHandler {
     protected boolean processElement(String namespaceURI, String localName, 
Attributes attributes) throws SAXException {
         switch (localName) {
             case CONFIG_TAG:
-                createConfig();
-                return true;
             case OLD_CONFIG_TAG:
                 createConfig();
                 return true;
@@ -98,6 +94,8 @@ class ConfigHandler extends NamespaceAwareNestedTagHandler {
                     return new SchemaHandler(this, configuration);
                 case INCLUDE_TABLE_TAG:
                     return new IncludeTableHandler(this , configuration);
+                case TABLE_TYPES_TAG:
+                    return new TableTypesHandler(this, configuration);
             }
         }
 
@@ -107,9 +105,6 @@ class ConfigHandler extends NamespaceAwareNestedTagHandler {
     @Override
     protected void processCharData(String localName, String data) {
         switch (localName) {
-            case TABLE_TYPE_TAG:
-                createTableType(data);
-                break;
             case DEFAULT_PACKAGE_TAG:
                 createDefaultPackage(data);
                 break;
@@ -332,23 +327,9 @@ class ConfigHandler extends NamespaceAwareNestedTagHandler 
{
         }
     }
 
-    private void createTableType(String tableType) {
-        if (tableType.trim().length() == 0) {
-            return;
-        }
-
-        if (configuration != null) {
-            configuration.addTableType(tableType);
-        }
-    }
-
     private void createConfig() {
         configuration = new ReverseEngineering();
-        loaderContext.addDataMapListener(new DataMapLoaderListener() {
-            @Override
-            public void onDataMapLoaded(DataMap dataMap) {
-                ConfigHandler.this.metaData.add(dataMap, configuration);
-            }
-        });
+        loaderContext.addDataMapListener(dataMap ->
+                ConfigHandler.this.metaData.add(dataMap, configuration));
     }
 }
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/TableTypesHandler.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/TableTypesHandler.java
new file mode 100644
index 0000000..0d12d94
--- /dev/null
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/TableTypesHandler.java
@@ -0,0 +1,64 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+
+package org.apache.cayenne.dbsync.xml;
+
+import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class TableTypesHandler extends NamespaceAwareNestedTagHandler {
+
+    private static final String TABLE_TYPE_TAG = "tableType";
+
+    private ReverseEngineering reverseEngineering;
+
+    TableTypesHandler(NamespaceAwareNestedTagHandler parentHandler, 
ReverseEngineering reverseEngineering) {
+        super(parentHandler);
+        this.reverseEngineering = reverseEngineering;
+    }
+
+    @Override
+    protected boolean processElement(String namespaceURI, String localName, 
Attributes attributes) throws SAXException {
+        switch (localName) {
+            case TABLE_TYPE_TAG:
+                return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    protected void processCharData(String localName, String data) {
+        switch (localName) {
+            case TABLE_TYPE_TAG:
+                addTableType(data);
+                break;
+        }
+    }
+
+    private void addTableType(String data) {
+        if (data.trim().length() == 0) {
+            return;
+        }
+
+        reverseEngineering.addTableType(data);
+    }
+}
diff --git 
a/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/dbimport.xsd 
b/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/dbimport.xsd
index 23cd529..ea75409 100644
--- 
a/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/dbimport.xsd
+++ 
b/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/dbimport.xsd
@@ -30,7 +30,7 @@
                     <xs:sequence>
                         <xs:element name="catalog" minOccurs="0" 
maxOccurs="unbounded" type="dbi:catalog"/>
                         <xs:element name="schema" minOccurs="0" 
maxOccurs="unbounded" type="dbi:schema"/>
-                        <xs:element name="tableType" minOccurs="0" 
maxOccurs="unbounded" type="dbi:db-type"/>
+                        <xs:element name="tableTypes" minOccurs="0" 
type="dbi:tableTypes"/>
 
                         <xs:element name="defaultPackage" minOccurs="0" 
type="xs:string"/>
                         <xs:element name="forceDataMapCatalog" minOccurs="0" 
type="xs:boolean"/>
@@ -56,6 +56,12 @@
         </xs:restriction>
     </xs:simpleType>
 
+    <xs:complexType name="tableTypes">
+        <xs:sequence>
+            <xs:element name="tableType" type="dbi:db-type" 
maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
     <xs:complexType name="includeTable" mixed="true">
         <xs:sequence>
             <xs:element name="name" minOccurs="0" type="dbi:db-type"/>
diff --git 
a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
 
b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
index 1ab2cb5..24657a9 100644
--- 
a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
+++ 
b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
@@ -244,6 +244,11 @@ public class DbImporterMojoTest extends 
AbstractMojoTestCase {
         test("testConfigFromDataMap");
     }
 
+    @Test
+    public void testTableTypesFromDataMapConfig() throws Exception {
+        test("testTableTypesMap");
+    }
+
     /**
      * CREATE TABLE APP.A (
      * id INTEGER NOT NULL,
diff --git 
a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap-pom.xml
 
b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap-pom.xml
new file mode 100644
index 0000000..e225a82
--- /dev/null
+++ 
b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap-pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+       http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
+    <name>DbImporterMojo Test1</name>
+    <groupId>org.apache.maven.plugin-testing</groupId>
+    <artifactId>maven-plugin-testing</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <modelVersion>4.0.0</modelVersion>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>cayenne-maven-plugin</artifactId>
+                <configuration>
+                    
<map>target/test-classes/org/apache/cayenne/tools/dbimport/testTableTypesMap.map.xml</map>
+                    <dataSource>
+                        <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+                        
<url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+                    </dataSource>
+                    <project 
implementation="org.apache.cayenne.stubs.CayenneProjectStub"/>
+
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git 
a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.map.xml
 
b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.map.xml
new file mode 100644
index 0000000..f2fb6e1
--- /dev/null
+++ 
b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.map.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap";
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+          xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap 
http://cayenne.apache.org/schema/10/modelMap.xsd";
+          project-version="10">
+    <dbImport xmlns="http://cayenne.apache.org/schema/10/dbimport";>
+        <tableTypes>
+            <tableType>TABLE</tableType>
+        </tableTypes>
+        <forceDataMapCatalog>false</forceDataMapCatalog>
+        <forceDataMapSchema>false</forceDataMapSchema>
+        
<namingStrategy>org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator</namingStrategy>
+        <skipPrimaryKeyLoading>false</skipPrimaryKeyLoading>
+        <skipRelationshipsLoading>false</skipRelationshipsLoading>
+        <useJava7Types>false</useJava7Types>
+        <usePrimitives>true</usePrimitives>
+    </dbImport>
+</data-map>
diff --git 
a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.map.xml-result
 
b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.map.xml-result
new file mode 100644
index 0000000..188266f
--- /dev/null
+++ 
b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.map.xml-result
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap";
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+          xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap 
http://cayenne.apache.org/schema/10/modelMap.xsd";
+          project-version="10">
+    <db-entity name="PERSON" schema="APP">
+        <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true" length="10"/>
+    </db-entity>
+    <obj-entity name="Person" className="Person" dbEntityName="PERSON">
+    </obj-entity>
+    <dbImport xmlns="http://cayenne.apache.org/schema/10/dbimport";>
+           <tableTypes>
+               <tableType>TABLE</tableType>
+           </tableTypes>
+           <forceDataMapCatalog>false</forceDataMapCatalog>
+           <forceDataMapSchema>false</forceDataMapSchema>
+           
<namingStrategy>org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator</namingStrategy>
+           <skipPrimaryKeyLoading>false</skipPrimaryKeyLoading>
+           <skipRelationshipsLoading>false</skipRelationshipsLoading>
+           <useJava7Types>false</useJava7Types>
+           <usePrimitives>true</usePrimitives>
+    </dbImport>
+</data-map>
diff --git 
a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.sql
 
b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.sql
new file mode 100644
index 0000000..848da2a
--- /dev/null
+++ 
b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testTableTypesMap.sql
@@ -0,0 +1,25 @@
+--  Licensed to the Apache Software Foundation (ASF) under one
+--  or more contributor license agreements.  See the NOTICE file
+--  distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+--  to you under the Apache License, Version 2.0 (the
+--  "License"); you may not use this file except in compliance
+--  with the License.  You may obtain a copy of the License at
+--
+--    https://www.apache.org/licenses/LICENSE-2.0
+--
+--  Unless required by applicable law or agreed to in writing,
+--  software distributed under the License is distributed on an
+--  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+--  KIND, either express or implied.  See the License for the
+--  specific language governing permissions and limitations
+--  under the License.
+
+CREATE TABLE Person (
+  id INTEGER NOT NULL,
+
+  PRIMARY KEY (id)
+);
+
+CREATE VIEW girl (id) AS SELECT id FROM Person;
+CREATE VIEW v_vview (id) AS SELECT id FROM Person;
\ No newline at end of file
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
index ccc8ab8..6a2febf 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
@@ -19,6 +19,10 @@
 
 package org.apache.cayenne.modeler.dialog.db.load;
 
+import javax.swing.*;
+import java.io.File;
+import java.sql.Connection;
+
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.xml.DataChannelMetaData;
 import org.apache.cayenne.dbsync.naming.NameBuilder;
@@ -35,10 +39,6 @@ import org.apache.cayenne.util.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.swing.*;
-import java.io.File;
-import java.sql.Connection;
-
 /**
  * @since 4.0
  */
@@ -169,7 +169,12 @@ public class DbLoaderContext {
         
config.setForceDataMapSchema(reverseEngineering.isForceDataMapSchema());
         
config.setSkipRelationshipsLoading(reverseEngineering.getSkipRelationshipsLoading());
         
config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading());
-        config.setTableTypes(new String[] {"TABLE", "VIEW", "SYSTEM TABLE"});
+        String[] tableTypes = reverseEngineering.getTableTypes();
+        if(tableTypes.length != 0) {
+            config.setTableTypes(tableTypes);
+        } else {
+            config.setTableTypes(new String[]{"TABLE", "VIEW"});
+        }
     }
 
     private void prepareDataMap() {
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 953c4d3..a07da72 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
@@ -213,6 +213,13 @@ public class DbImportView extends JPanel {
             
draggableTreePanel.updateTree(projectController.getCurrentDataMap());
             draggableTreePanel.getMoveButton().setEnabled(false);
             draggableTreePanel.getMoveInvertButton().setEnabled(false);
+            String[] tableTypes = reverseEngineering.getTableTypes();
+            if(tableTypes.length != 0) {
+                configPanel.getTableTypes().setText(String.join(",", 
tableTypes));
+            } else {
+                configPanel.getTableTypes().setText("TABLE, VIEW");
+                configPanel.getTableTypes().updateModel();
+            }
         }
         initFromModel = false;
     }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringConfigPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringConfigPanel.java
index cc45118..e0fa225 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringConfigPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/ReverseEngineeringConfigPanel.java
@@ -36,6 +36,7 @@ import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.util.NameGeneratorPreferences;
 import org.apache.cayenne.modeler.util.TextAdapter;
 import org.apache.cayenne.modeler.util.combo.AutoCompletion;
+import org.apache.cayenne.validation.ValidationException;
 
 /**
  * @since 4.1
@@ -54,6 +55,8 @@ public class ReverseEngineeringConfigPanel extends JPanel {
     private JCheckBox usePrimitives;
     private JCheckBox useJava7Types;
 
+    private TextAdapter tableTypes;
+
     private ProjectController projectController;
 
     private DbImportView dbImportView;
@@ -80,6 +83,7 @@ public class ReverseEngineeringConfigPanel extends JPanel {
         panelBuilder.append("Use Java primitive types:", usePrimitives);
         panelBuilder.append("Use java.util.Date type:", useJava7Types);
         panelBuilder.append("Naming strategy:", strategyCombo);
+        panelBuilder.append("Table types:", tableTypes.getComponent());
 
         add(panelBuilder.getPanel());
     }
@@ -141,6 +145,35 @@ public class ReverseEngineeringConfigPanel extends JPanel {
             }
         };
 
+        JTextField tableTypesField = new JTextField();
+        tableTypesField.setToolTipText("<html>Default types to import is TABLE 
and VIEW.");
+        tableTypes = new TextAdapter(tableTypesField) {
+            @Override
+            protected void updateModel(String text) throws ValidationException 
{
+                ReverseEngineering reverseEngineering = 
getReverseEngineeringBySelectedMap();
+                if(text == null || text.isEmpty()) {
+                    String[] tableTypesFromReverseEngineering = 
reverseEngineering.getTableTypes();
+                    tableTypes.setText(String.join(",", 
tableTypesFromReverseEngineering));
+                    JOptionPane.showMessageDialog(
+                            Application.getFrame(),
+                            "Table types field can't be empty.",
+                            "Error setting table types",
+                            JOptionPane.ERROR_MESSAGE);
+                } else {
+                    reverseEngineering.getTableTypesCollection().clear();
+                    String[] types = text.split("\\s*,\\s*");
+                    for(String type : types) {
+                        if(!type.isEmpty()) {
+                            reverseEngineering.addTableType(type.trim());
+                        }
+                    }
+                    if(!dbImportView.isInitFromModel()) {
+                        projectController.setDirty(true);
+                    }
+                }
+            }
+        };
+
         skipRelationshipsLoading = new JCheckBox();
         skipRelationshipsLoading.setToolTipText("<html>Whether to load 
relationships.</html>");
         skipPrimaryKeyLoading = new JCheckBox();
@@ -256,4 +289,8 @@ public class ReverseEngineeringConfigPanel extends JPanel {
         return useJava7Types;
     }
 
+    TextAdapter getTableTypes() {
+        return tableTypes;
+    }
+
 }

Reply via email to