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; + } + }