You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ko...@apache.org on 2015/04/24 00:13:01 UTC

[16/17] cayenne git commit: Merge remote-tracking branch 'apache/master'

Merge remote-tracking branch 'apache/master'

Conflicts:
	cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
	cayenne-server/src/main/java/org/apache/cayenne/access/loader/BooleanNameFilter.java
	cayenne-server/src/main/java/org/apache/cayenne/access/loader/filters/DbPath.java
	cayenne-server/src/main/java/org/apache/cayenne/access/loader/filters/EntityFilters.java
	cayenne-server/src/main/java/org/apache/cayenne/access/loader/filters/FilterFactory.java
	cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
	cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/DbPathTest.java
	cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/FiltersFactory.java
	cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
	cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Catalog.java
	cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FilterContainer.java
	cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
	cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
	cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Schema.java
	modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
	modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
	plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
	pom.xml


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

Branch: refs/heads/master
Commit: cd4e9eed2a8dd99a4a63716424708d5657fee5a1
Parents: f438729 2782e8d
Author: Alex Kolonitsky <Al...@gmail.com>
Authored: Fri Apr 24 01:08:17 2015 +0300
Committer: Alex Kolonitsky <Al...@gmail.com>
Committed: Fri Apr 24 01:08:17 2015 +0300

----------------------------------------------------------------------
 assembly/pom.xml                                |    5 +-
 .../main/resources/assemblies/assembly-src.xml  |    5 +
 build-tools/cayenne-checkers/pom.xml            |    2 +-
 build-tools/cayenne-coverage/pom.xml            |    2 +-
 build-tools/cayenne-legal/pom.xml               |    2 +-
 build-tools/cayenne-test-utilities/pom.xml      |    2 +-
 build-tools/pom.xml                             |    5 +-
 cayenne-client/pom.xml                          |   40 +-
 cayenne-crypto/pom.xml                          |   39 +-
 .../value/DefaultValueTransformerFactory.java   |   22 +-
 cayenne-di/pom.xml                              |   39 +-
 cayenne-lifecycle/pom.xml                       |   35 +-
 cayenne-project/pom.xml                         |   36 +-
 .../validation/DbAttributeValidator.java        |    5 +-
 .../validation/ProcedureParameterValidator.java |    5 +-
 cayenne-server/pom.xml                          |   90 +-
 .../java/org/apache/cayenne/BaseContext.java    |   29 +-
 .../java/org/apache/cayenne/ObjectContext.java  |   43 +-
 .../org/apache/cayenne/ResultBatchIterator.java |   79 ++
 .../java/org/apache/cayenne/ResultIterator.java |    7 +-
 .../org/apache/cayenne/access/DataPort.java     |  533 ++++---
 .../org/apache/cayenne/access/DbLoader.java     |  621 ++++----
 .../apache/cayenne/access/DbLoaderDelegate.java |   27 +-
 .../access/HierarchicalObjectResolver.java      |    3 +-
 .../cayenne/access/OperationObserver.java       |    4 +-
 .../cayenne/access/PrefetchProcessorNode.java   |   35 +-
 .../org/apache/cayenne/access/QueryResult.java  |  267 ----
 .../access/loader/DbLoaderConfiguration.java    |   42 +-
 .../access/loader/DefaultDbLoaderDelegate.java  |   15 +-
 .../access/loader/LoggingDbLoaderDelegate.java  |   76 +
 .../loader/ManyToManyCandidateEntity.java       |   19 +-
 .../cayenne/access/loader/NameFilter.java       |    2 +-
 .../mapper/DefaultJdbc2JavaTypeMapper.java      |    7 +-
 .../loader/mapper/Jdbc2JavaTypeMapper.java      |    2 +-
 .../ejbql/EJBQLOrderByTranslator.java           |    6 +
 .../translator/select/QualifierTranslator.java  |   52 +-
 .../translator/select/SelectTranslator.java     |   91 +-
 .../apache/cayenne/access/types/CharType.java   |   70 +-
 .../access/util/DoNothingOperationObserver.java |   80 ++
 .../server/DataContextFactory.java              |    1 +
 .../server/SyntheticNodeDataDomainProvider.java |    6 +
 .../org/apache/cayenne/dba/AutoAdapter.java     |   13 +-
 .../java/org/apache/cayenne/dba/DbAdapter.java  |   18 +-
 .../org/apache/cayenne/dba/JdbcAdapter.java     |   38 +-
 .../org/apache/cayenne/dba/TypesHandler.java    |    2 +-
 .../org/apache/cayenne/dba/TypesMapping.java    |  393 +++---
 .../apache/cayenne/dba/derby/DerbyAdapter.java  |   64 +-
 .../cayenne/dba/firebird/FirebirdAdapter.java   |   33 +-
 .../dba/frontbase/FrontBasePkGenerator.java     |  191 +--
 .../apache/cayenne/dba/mysql/MySQLAdapter.java  |   19 +
 .../dba/oracle/Oracle8LOBBatchQueryWrapper.java |    2 +-
 .../cayenne/dba/oracle/OracleAdapter.java       |   40 +-
 .../cayenne/dba/postgres/PostgresAdapter.java   |  115 +-
 .../dba/postgres/PostgresSelectTranslator.java  |   76 +-
 .../cayenne/dba/sqlite/SQLiteAdapter.java       |   20 +
 .../java/org/apache/cayenne/exp/Expression.java |   91 +-
 .../cayenne/exp/LikeExpressionHelper.java       |    1 -
 .../apache/cayenne/exp/parser/Evaluator.java    |  143 ++
 .../java/org/apache/cayenne/map/DataMap.java    |   40 +-
 .../org/apache/cayenne/map/DbAttribute.java     |   25 +
 .../org/apache/cayenne/map/DbRelationship.java  |   19 +
 .../org/apache/cayenne/map/ObjAttribute.java    |    6 +
 .../org/apache/cayenne/map/ObjRelationship.java |    2 +
 .../org/apache/cayenne/map/Relationship.java    |   13 +-
 .../apache/cayenne/map/naming/ExportedKey.java  |  173 ++-
 .../cayenne/merge/AddRelationshipToDb.java      |    8 +-
 .../cayenne/merge/AddRelationshipToModel.java   |   38 +-
 .../java/org/apache/cayenne/merge/DbMerger.java |  152 +-
 .../apache/cayenne/merge/DbMergerConfig.java    |   63 +
 .../cayenne/merge/DropRelationshipToDb.java     |    2 +-
 .../cayenne/merge/DropRelationshipToModel.java  |    4 +-
 .../cayenne/merge/ProxyModelMergeDelegate.java  |  108 ++
 .../org/apache/cayenne/query/ObjectSelect.java  |   69 +-
 .../org/apache/cayenne/query/SQLSelect.java     |  114 +-
 .../org/apache/cayenne/query/SQLTemplate.java   |   22 +-
 .../cayenne/query/SQLTemplateMetadata.java      |  117 +-
 .../java/org/apache/cayenne/query/Select.java   |   82 ++
 .../org/apache/cayenne/query/SelectById.java    |  149 +-
 .../org/apache/cayenne/query/SelectQuery.java   |   49 +-
 .../apache/cayenne/reflect/BeanAccessor.java    |  182 +--
 .../org/apache/cayenne/reflect/MapAccessor.java |   52 +
 .../apache/cayenne/reflect/PropertyUtils.java   |  582 +++-----
 .../cayenne/remote/IncrementalSelectQuery.java  |   42 +-
 .../apache/cayenne/util/EntityMergeSupport.java |   54 +-
 .../apache/cayenne/velocity/BindDirective.java  |    9 +-
 .../apache/cayenne/velocity/ChainDirective.java |    2 +-
 .../cayenne/velocity/VelocityParamSequence.java |   68 -
 .../velocity/VelocitySQLTemplateProcessor.java  |   20 +-
 .../org/apache/cayenne/ejbql/EJBQLParser.jjt    |    5 +-
 .../org/apache/cayenne/dba/db2/types.xml        |   12 +
 .../org/apache/cayenne/dba/derby/types.xml      |   12 +
 .../org/apache/cayenne/dba/firebird/types.xml   |    6 +
 .../org/apache/cayenne/dba/h2/types.xml         |   15 +
 .../org/apache/cayenne/dba/hsqldb/types.xml     |   12 +
 .../org/apache/cayenne/dba/mysql/types.xml      |   15 +
 .../org/apache/cayenne/dba/oracle/types.xml     |   18 +
 .../org/apache/cayenne/dba/postgres/types.xml   |   15 +
 .../org/apache/cayenne/dba/sqlite/types.xml     |   12 +
 .../org/apache/cayenne/dba/sqlserver/types.xml  |   14 +
 .../org/apache/cayenne/dba/sybase/types.xml     |   15 +
 .../resources/org/apache/cayenne/dba/types.xml  |   18 +
 .../org/apache/cayenne/CayenneDataObjectIT.java |  260 ++--
 .../org/apache/cayenne/MockBaseContext.java     |   11 +-
 .../cayenne/access/DataContextBlobIT.java       |    4 +-
 .../apache/cayenne/access/DataContextIT.java    |   28 +
 .../org/apache/cayenne/access/DbLoaderIT.java   |  227 +--
 .../cayenne/access/DbLoaderPartialIT.java       |    8 +-
 .../cayenne/access/NestedDataContextReadIT.java |   14 +
 .../cayenne/access/ReturnTypesMappingIT.java    |   88 ++
 ...ectActionWithUnsupportedDistinctTypesIT.java |  163 +++
 .../cayenne/access/types/CharTypeTest.java      |   17 +-
 .../server/ServerRuntimeBuilderIT.java          |   38 +
 .../datafactory/CombinedValueProvider.java      |   25 +
 .../apache/cayenne/datafactory/DataFactory.java |  407 ++++++
 .../datafactory/DictionaryValueProvider.java    |  104 ++
 .../cayenne/datafactory/ValueProvider.java      |  707 ++++++++++
 .../cayenne/exp/Expression_ParamsTest.java      |    6 +-
 .../cayenne/exp/LikeExpressionHelperTest.java   |   83 ++
 .../org/apache/cayenne/exp/PropertyTest.java    |   36 +-
 .../cayenne/exp/parser/EvaluatorTest.java       |  133 ++
 .../org/apache/cayenne/map/DataMapTest.java     |    6 +-
 .../java/org/apache/cayenne/map/DbEntityIT.java |    4 +-
 .../apache/cayenne/map/DbRelationshipIT.java    |    4 +-
 .../apache/cayenne/map/ObjRelationshipIT.java   |   14 +-
 .../apache/cayenne/map/RelationshipTest.java    |    2 +-
 .../map/naming/LegacyNameGeneratorTest.java     |    4 +-
 .../org/apache/cayenne/merge/DbMergerTest.java  |   25 +-
 .../cayenne/merge/DropColumnToModelIT.java      |    8 +-
 .../merge/DropRelationshipToModelIT.java        |   43 +-
 .../org/apache/cayenne/merge/MergeCase.java     |   25 +-
 .../apache/cayenne/merge/MergerFactoryIT.java   |   58 +-
 .../merge/builders/DbAttributeBuilder.java      |   15 +-
 .../cayenne/merge/builders/DefaultBuilder.java  |    2 +-
 .../org/apache/cayenne/query/EJBQLQueryIT.java  |   43 +
 .../cayenne/query/ObjectSelect_RunIT.java       |   85 +-
 .../org/apache/cayenne/query/SQLSelectIT.java   |  284 +++-
 .../org/apache/cayenne/query/SQLSelectTest.java |   56 +-
 .../org/apache/cayenne/query/SQLTemplateIT.java |   27 +-
 .../cayenne/query/SelectQueryBasicsTest.java    |  159 ---
 .../org/apache/cayenne/query/SelectQueryIT.java | 1335 ++++++++++--------
 .../apache/cayenne/query/SelectQueryTest.java   |  190 +++
 .../cayenne/reflect/PropertyUtilsTest.java      |  649 +++++----
 .../cayenne/testdo/lob/NClobTestEntity.java     |   28 +
 .../testdo/lob/auto/_NClobTestEntity.java       |   55 +
 .../return_types/auto/_ReturnTypesMap1.java     |   21 +
 .../return_types/auto/_ReturnTypesMapLobs1.java |    8 +
 .../unsupported_distinct_types/Customer.java    |   27 +
 .../unsupported_distinct_types/Product.java     |   27 +
 .../UnsupportedDistinctTypes.java               |   36 +
 .../auto/_Customer.java                         |   48 +
 .../auto/_Product.java                          |   79 ++
 .../auto/_UnsupportedDistinctTypes.java         |   12 +
 .../cayenne/unit/di/server/CayenneProjects.java |    1 +
 .../cayenne/unit/di/server/SchemaBuilder.java   |    2 +-
 .../cayenne/util/EntityMergeSupportIT.java      |    4 +-
 .../cayenne-unsupported-distinct-types.xml      |    4 +
 cayenne-server/src/test/resources/lob.map.xml   |    7 +
 .../src/test/resources/return-types.map.xml     |    8 +
 .../src/test/resources/things.map.xml           |    8 +-
 .../unsupported-distinct-types.map.xml          |   57 +
 cayenne-tools/pom.xml                           |   45 +-
 .../java/org/apache/cayenne/gen/Artifact.java   |    1 +
 .../cayenne/gen/ClassGenerationAction.java      |   32 +-
 .../cayenne/tools/CayenneGeneratorTask.java     |   25 +-
 .../apache/cayenne/tools/DbImporterTask.java    |   54 +-
 .../org/apache/cayenne/tools/ExcludeTable.java  |    2 +-
 .../cayenne/tools/dbimport/DbImportAction.java  |  123 +-
 .../tools/dbimport/DbImportConfiguration.java   |   40 +-
 .../dbimport/DbImportDbLoaderDelegate.java      |   15 +-
 .../tools/dbimport/config/AntNestedElement.java |    6 +-
 .../cayenne/tools/dbimport/config/Catalog.java  |    2 +-
 .../config/DefaultReverseEngineeringLoader.java |   20 +-
 .../config/DefaultTypeMapperBuilder.java        |    2 +-
 .../tools/dbimport/config/ExcludeColumn.java    |    2 +-
 .../tools/dbimport/config/ExcludeProcedure.java |    2 +-
 .../tools/dbimport/config/FilterContainer.java  |    4 +-
 .../dbimport/config/FiltersConfigBuilder.java   |    2 +-
 .../tools/dbimport/config/IncludeColumn.java    |    2 +-
 .../tools/dbimport/config/IncludeProcedure.java |    2 +-
 .../tools/dbimport/config/IncludeTable.java     |    2 +-
 .../tools/dbimport/config/PatternParam.java     |    2 +-
 .../dbimport/config/ReverseEngineering.java     |   58 +-
 .../config/ReverseEngineeringLoader.java        |    2 +-
 .../cayenne/tools/dbimport/config/Schema.java   |    2 +-
 .../cayenne/tools/dbimport/config/Type.java     |    2 +-
 .../tools/dbimport/config/TypeMapper.java       |    2 +-
 .../src/main/resources/reverseEngineering.xsd   |  139 ++
 .../templates/v1_2/client-superclass.vm         |    6 +-
 .../templates/v1_2/embeddable-singleclass.vm    |    5 +-
 .../templates/v1_2/embeddable-superclass.vm     |    5 +-
 .../resources/templates/v1_2/singleclass.vm     |    6 +-
 .../main/resources/templates/v1_2/superclass.vm |    6 +-
 .../map/naming/DefaultNameGeneratorTest.java    |    6 +-
 .../cayenne/tools/DbImporterTaskTest.java       |   28 +-
 .../tools/dbimport/DbImportActionTest.java      |   30 +
 .../dbimport/DbImportDbLoaderDelegateTest.java  |    7 -
 .../DefaultReverseEngineeringLoaderTest.java    |   38 +
 .../tools/build-skip-primary-key-loading.xml    |   37 +
 .../tools/build-skip-relationships-loading.xml  |   37 +
 .../apache/cayenne/tools/build-table-types.xml  |   40 +
 ...reverseEngineering-skipPrimaryKeyLoading.xml |   23 +
 ...erseEngineering-skipRelationshipsLoading.xml |   23 +
 .../config/reverseEngineering-tableTypes.xml    |   29 +
 docs/doc/pom.xml                                |    2 +-
 docs/doc/src/main/resources/KEYS                |   39 +
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |   31 +-
 docs/doc/src/main/resources/UPGRADE.txt         |    9 +
 docs/docbook/cayenne-guide/pom.xml              |    2 +-
 .../src/docbkx/including-cayenne-in-project.xml |    6 +
 .../src/docbkx/performance-tuning.xml           |   10 +-
 docs/docbook/docbook-stylesheets/pom.xml        |    2 +-
 docs/docbook/getting-started-rop/pom.xml        |    2 +-
 docs/docbook/getting-started/pom.xml            |    2 +-
 docs/docbook/pom.xml                            |    4 +-
 docs/docbook/upgrade-guide/pom.xml              |    2 +-
 .../upgrade-guide/src/docbkx/new-features.xml   |  298 ++--
 docs/pom.xml                                    |    2 +-
 itests/cayenne-tools-itest/pom.xml              |    2 +-
 itests/pom.xml                                  |    2 +-
 modeler/cayenne-modeler-generic-ext/pom.xml     |   41 +-
 modeler/cayenne-modeler-generic/pom.xml         |   41 +-
 modeler/cayenne-modeler-mac-ext/pom.xml         |   40 +-
 modeler/cayenne-modeler-mac-legacy/pom.xml      |   40 +-
 modeler/cayenne-modeler-mac/pom.xml             |   38 +-
 modeler/cayenne-modeler-win/pom.xml             |   23 +-
 modeler/cayenne-modeler/pom.xml                 |   44 +-
 .../modeler/CayenneModelerController.java       |   11 +-
 .../cayenne/modeler/ProjectController.java      |   24 +-
 .../apache/cayenne/modeler/ProjectTreeView.java |   59 +-
 .../cayenne/modeler/dialog/FindDialog.java      |  104 +-
 .../cayenne/modeler/dialog/LogConsole.java      |   23 +-
 .../cayenne/modeler/dialog/LogConsoleView.java  |   69 +-
 .../dialog/ResolveDbRelationshipDialog.java     |    2 +-
 .../InferRelationshipsController.java           |    2 +-
 .../InferRelationshipsControllerBase.java       |    2 +-
 .../dialog/codegen/CustomModeController.java    |    6 +
 .../modeler/dialog/codegen/CustomModePanel.java |   10 +-
 .../codegen/CustomPreferencesUpdater.java       |   17 +-
 .../dialog/codegen/StandardModeController.java  |    4 +-
 .../dialog/codegen/StandardModePanel.java       |    9 +
 .../modeler/dialog/db/DbLoaderHelper.java       |  127 +-
 .../modeler/dialog/db/DbLoaderMergeDialog.java  |  131 --
 .../dialog/db/DbLoaderOptionsDialog.java        |   72 +-
 .../modeler/dialog/db/MergerOptions.java        |   46 +-
 .../dialog/objentity/ObjRelationshipInfo.java   |   12 +-
 .../ObjEntityAttributeRelationshipTab.java      |   14 +
 .../editor/ObjRelationshipTableModel.java       |    2 +-
 .../modeler/editor/ProcedureTabbedView.java     |   14 +-
 .../modeler/editor/SQLTemplateScriptsTab.java   |   54 +-
 .../DbEntityAttributeRelationshipTab.java       |   14 +
 .../dbentity/DbRelationshipTableModel.java      |    2 +-
 .../modeler/pref/ProjectStatePreferences.java   |  323 +++++
 .../util/state/AttributeDisplayEventType.java   |  107 ++
 .../util/state/DataMapDisplayEventType.java     |   58 +
 .../util/state/DataNodeDisplayEventType.java    |   55 +
 .../modeler/util/state/DisplayEventType.java    |   76 +
 .../modeler/util/state/DisplayEventTypes.java   |  198 +++
 .../util/state/DomainDisplayEventType.java      |   49 +
 .../EmbeddableAttributeDisplayEventType.java    |   98 ++
 .../util/state/EmbeddableDisplayEventType.java  |   62 +
 .../util/state/EntityDisplayEventType.java      |   84 ++
 .../state/MultipleObjectsDisplayEventType.java  |  166 +++
 .../util/state/ProcedureDisplayEventType.java   |   63 +
 .../ProcedureParameterDisplayEventType.java     |   93 ++
 .../modeler/util/state/ProjectStateUtil.java    |   72 +
 .../util/state/QueryDisplayEventType.java       |   62 +
 .../state/RelationshipDisplayEventType.java     |  107 ++
 .../apache/cayenne/modeler/images/popupmenu.gif |  Bin 0 -> 285 bytes
 modeler/cayenne-wocompat/pom.xml                |   39 +-
 .../cayenne/wocompat/EOModelProcessor.java      |    4 +-
 modeler/pom.xml                                 |    2 +-
 plugins/maven-cayenne-modeler-plugin/pom.xml    |   40 +-
 plugins/maven-cayenne-plugin/pom.xml            |   40 +-
 .../cayenne/tools/CayenneGeneratorMojo.java     |   60 +-
 .../apache/cayenne/tools/DbGeneratorMojo.java   |   22 +-
 .../apache/cayenne/tools/DbImporterMojo.java    |   80 +-
 .../tools/DbImporterMojoConfigurationTest.java  |   38 +-
 .../cayenne/tools/DbImporterMojoTest.java       |  263 ++--
 .../org/apache/cayenne/tools/DerbyManager.java  |   63 +
 .../cayenne/tools/config/pom-schema-2.xml       |   41 +
 .../config/pom-skip-primary-key-loading.xml     |   39 +
 .../config/pom-skip-relationships-loading.xml   |   39 +
 .../cayenne/tools/config/pom-table-types.xml    |   41 +
 .../cayenne/tools/dbimport/testOneToOne-pom.xml |   39 +
 .../tools/dbimport/testOneToOne.map.xml-result  |   58 +
 .../cayenne/tools/dbimport/testOneToOne.sql     |   41 +
 .../dbimport/testPreserveRelationships-pom.xml  |   44 +
 .../dbimport/testPreserveRelationships.map.xml  |   44 +
 .../testPreserveRelationships.map.xml-result    |   34 +
 .../dbimport/testPreserveRelationships.sql      |   28 +
 .../dbimport/testSkipPrimaryKeyLoading-pom.xml  |   43 +
 .../dbimport/testSkipPrimaryKeyLoading.map.xml  |   35 +
 .../testSkipPrimaryKeyLoading.map.xml-result    |   41 +
 .../dbimport/testSkipPrimaryKeyLoading.sql      |   30 +
 .../testSkipRelationshipsLoading-pom.xml        |   43 +
 .../testSkipRelationshipsLoading.map.xml        |   55 +
 .../testSkipRelationshipsLoading.map.xml-result |   55 +
 .../dbimport/testSkipRelationshipsLoading.sql   |   36 +
 ...SupportsCatalogsOnReverseEngineering-pom.xml |   41 +
 ...SupportsCatalogsOnReverseEngineering.map.xml |   25 +
 .../tools/dbimport/testTableTypes-pom.xml       |   43 +
 .../dbimport/testTableTypes.map.xml-result      |   29 +
 .../cayenne/tools/dbimport/testTableTypes.sql   |   25 +
 .../dbimport/testUnFlattensManyToMany-pom.xml   |   40 +
 .../dbimport/testUnFlattensManyToMany.map.xml   |   55 +
 .../testUnFlattensManyToMany.map.xml-result     |   88 ++
 .../tools/dbimport/testUnFlattensManyToMany.sql |   64 +
 plugins/pom.xml                                 |   61 +-
 pom.xml                                         |  378 +++--
 tutorials/pom.xml                               |    2 +-
 tutorials/tutorial-rop-client/pom.xml           |    2 +-
 tutorials/tutorial-rop-server/pom.xml           |    2 +-
 tutorials/tutorial/pom.xml                      |    2 +-
 313 files changed, 13081 insertions(+), 5288 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
----------------------------------------------------------------------
diff --cc cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
index 8e2d82f,27007e8..c1622b8
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DbLoader.java
@@@ -18,28 -18,13 +18,25 @@@
   ****************************************************************/
  package org.apache.cayenne.access;
  
- import java.sql.Connection;
- import java.sql.DatabaseMetaData;
- import java.sql.ResultSet;
- import java.sql.SQLException;
++import java.sql.*;
 +import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.Collection;
 +import java.util.HashMap;
 +import java.util.HashSet;
 +import java.util.LinkedList;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Map.Entry;
 +import java.util.Set;
 +
- import org.apache.cayenne.CayenneException;
  import org.apache.cayenne.access.loader.DbLoaderConfiguration;
+ import org.apache.cayenne.access.loader.DefaultDbLoaderDelegate;
  import org.apache.cayenne.access.loader.ManyToManyCandidateEntity;
 -import org.apache.cayenne.access.loader.filters.DbPath;
 -import org.apache.cayenne.access.loader.filters.EntityFilters;
 -import org.apache.cayenne.access.loader.filters.Filter;
 -import org.apache.cayenne.access.loader.filters.FiltersConfig;
 +import org.apache.cayenne.access.loader.filters.*;
 +import org.apache.cayenne.access.loader.filters.CatalogFilter;
 +import org.apache.cayenne.access.loader.filters.SchemaFilter;
 +import org.apache.cayenne.access.loader.filters.TableFilter;
  import org.apache.cayenne.dba.DbAdapter;
  import org.apache.cayenne.dba.TypesMapping;
  import org.apache.cayenne.map.DataMap;
@@@ -213,24 -213,22 +205,24 @@@ public class DbLoader 
      /**
       * Returns all tables for given combination of the criteria. Tables returned
       * as DbEntities without any attributes or relationships.
-      * 
       *
       * @param config
-      *
-      * @param types
-      *            The types of table names to retrieve, null returns all types.
+      * @param types  The types of table names to retrieve, null returns all types.
       * @return
-      * @since 3.2
+      * @since 4.0
       */
 -    public Map<DbPath, Map<String, DbEntity>> getTables(DbLoaderConfiguration config, String[] types)
 +    public Map<DbEntity, PatternFilter> getTables(DbLoaderConfiguration config, String[] types)
              throws SQLException {
+         if (types == null || types.length == 0) {
+             types = getDefaultTableTypes();
+         }
  
 -        Map<DbPath, Map<String, DbEntity>> tables = new HashMap<DbPath, Map<String, DbEntity>>();
 +        Map<DbEntity, PatternFilter> tables = new HashMap<DbEntity, PatternFilter>();
          FiltersConfig filters = config.getFiltersConfig();
 -        for (DbPath path : filters.pathsForQueries()) {
 -            tables.put(path, getDbEntities(filters, path, types));
 +        for (CatalogFilter o : filters.catalogs) {
 +            for (SchemaFilter schema : o.schemas) {
 +                tables.putAll(getDbEntities(filters, o.name, schema.name, types));
 +            }
          }
  
          return tables;
@@@ -278,84 -282,60 +270,59 @@@
  
      /**
       * Loads dbEntities for the specified tables.
-      * @param map
-      *            DataMap to be populated with DbEntities.
-      * @param tables
+      *
+      * @param map    DataMap to be populated with DbEntities.
       * @param config
+      * @param tables The list of org.apache.cayenne.ashwood.dbutil.Table objects
+      *               for which DbEntities must be created.  @return false if loading must be immediately aborted.
       */
 -    public List<DbEntity> loadDbEntities(DataMap map, DbLoaderConfiguration config, Map<DbPath, Map<String, DbEntity>> tables) throws SQLException {
 +    public List<DbEntity> loadDbEntities(DataMap map, Map<DbEntity, PatternFilter> tables, DbLoaderConfiguration config) throws SQLException {
          /** List of db entities to process. */
 -
          List<DbEntity> dbEntityList = new ArrayList<DbEntity>();
 -        for (Map.Entry<DbPath, Map<String, DbEntity>> tablesMap : tables.entrySet()) {
 -            for (DbEntity dbEntity : tablesMap.getValue().values()) {
 +        for (Entry<DbEntity, PatternFilter> entry : tables.entrySet()) {
 +            DbEntity dbEntity = entry.getKey();
 +            PatternFilter tableFilter = entry.getValue();
  
-             // Check if there already is a DbEntity under such name
-             // if so, consult the delegate what to do
-             DbEntity oldEnt = map.getDbEntity(dbEntity.getName());
-             if (oldEnt != null) {
-                 if (delegate == null) {
-                     break; // no delegate, don't know what to do, cancel import
-                     // TODO continue?
-                 }
- 
-                 try {
-                     if (delegate.overwriteDbEntity(oldEnt)) {
-                         LOGGER.debug("Overwrite: " + oldEnt.getName());
-                         map.removeDbEntity(oldEnt.getName(), true);
-                         delegate.dbEntityRemoved(oldEnt);
-                     } else {
-                         LOGGER.debug("Keep old: " + oldEnt.getName());
- 
-                         // cay-479 - need to track entities that were not loaded for
-                         // relationships exported to entities that were
-                         skippedEntities.add(oldEnt);
-                         continue;
+                 // Check if there already is a DbEntity under such name
+                 // if so, consult the delegate what to do
+                 DbEntity oldEnt = map.getDbEntity(dbEntity.getName());
+                 if (oldEnt != null) {
+                     Collection<ObjEntity> oldObjEnt = map.getMappedEntities(oldEnt);
+                     if (!oldObjEnt.isEmpty()) {
+                         for (ObjEntity objEntity : oldObjEnt) {
+                             LOGGER.debug("Delete ObjEntity: " + objEntity.getName());
+                             map.removeObjEntity(objEntity.getName(), true);
+                             delegate.objEntityRemoved(objEntity);
+                         }
                      }
-                 } catch (CayenneException ex) {
-                     LOGGER.debug("Load canceled.");
  
-                     return null; // cancel immediately
+                     LOGGER.debug("Overwrite DbEntity: " + oldEnt.getName());
+                     map.removeDbEntity(oldEnt.getName(), true);
+                     delegate.dbEntityRemoved(oldEnt);
                  }
-             }
- 
- 
  
-             map.addDbEntity(dbEntity);
+                 map.addDbEntity(dbEntity);
  
-             // notify delegate
-             if (delegate != null) {
                  delegate.dbEntityAdded(dbEntity);
-             }
-             loadDbAttributes(dbEntity, tableFilter);
  
-             // delegate might have thrown this entity out... so check if it is still
-             // around before continuing processing
-             if (map.getDbEntity(dbEntity.getName()) == dbEntity) {
-                 dbEntityList.add(dbEntity);
+                 // delegate might have thrown this entity out... so check if it is still
+                 // around before continuing processing
+                 if (map.getDbEntity(dbEntity.getName()) == dbEntity) {
+                     dbEntityList.add(dbEntity);
+                 }
              }
-         }
  
-         // get primary keys for each table and store it in dbEntity
-         getPrimaryKeysForEachTableAndStoreItInDbEntity(map, tables);
+             loadDbAttributes(config.getFiltersConfig(), tablesMap.getKey(), tablesMap.getValue());
  
-         // cay-479 - iterate skipped DbEntities to populate exported keys
-         for (DbEntity skippedEntity : skippedEntities) {
-             loadDbRelationships(map, skippedEntity, config);
-         }
+             if (!config.isSkipPrimaryKeyLoading()) {
+                 getPrimaryKeyForTable(tablesMap.getValue());
+             }
 -        }
  
          return dbEntityList;
- 
      }
  
-     private void getPrimaryKeysForEachTableAndStoreItInDbEntity(DataMap map, Map<DbEntity, PatternFilter> tables)
-             throws SQLException {
- 
-         for (DbEntity dbEntity : map.getDbEntities()) {
-             if (tables.get(dbEntity) == null) { // TODO is it ok? equals is not overridden
-                 continue;
-             }
- 
+     private void getPrimaryKeyForTable(Map<String, DbEntity> tables) throws SQLException {
+         for (DbEntity dbEntity : tables.values()) {
              ResultSet rs = getMetaData().getPrimaryKeys(dbEntity.getCatalog(), dbEntity.getSchema(), dbEntity.getName());
              try {
                  while (rs.next()) {
@@@ -382,10 -363,12 +349,12 @@@
          }
      }
  
 -    private void loadDbAttributes(FiltersConfig filters, DbPath path, Map<String, DbEntity> entities) throws SQLException {
 -        ResultSet rs = getMetaData().getColumns(path.catalog, path.schema, WILDCARD, WILDCARD);
 +    private void loadDbAttributes(DbEntity dbEntity, PatternFilter columnFilter) throws SQLException {
 +        ResultSet rs = getMetaData().getColumns(dbEntity.getCatalog(), dbEntity.getSchema(), dbEntity.getName(), "%");
  
          try {
+             Set<String> columns = new HashSet<String>();
+ 
              while (rs.next()) {
                  // for a reason not quiet apparent to me, Oracle sometimes
                  // returns duplicate record sets for the same table, messing up table
@@@ -398,14 -383,13 +369,14 @@@
                      continue;
                  }
  
-                 DbAttribute attr = loadDbAttribute(rs);
+                 DbAttribute attr = loadDbAttribute(columns, rs);
                  attr.setEntity(dbEntity);
 -                Filter<DbAttribute> filter = filters.filter(new DbPath(dbEntity.getCatalog(), dbEntity.getSchema(), dbEntity.getName())).columnFilter();
 -                if (!filter.isInclude(attr)) {
 +
 +                if (!columnFilter.isInclude(attr.getName())) {
                      if (LOGGER.isDebugEnabled()) {
 -                        LOGGER.debug("Skip column for '" + attr.getEntity().getName() + "." + attr.getName()
 -                                + "' (Path: " + path + "; Filter: " + filter + ")");
 +                        LOGGER.debug("Importing: attribute '" + attr.getEntity().getName() + "." + attr.getName()
 +                                + "' is skipped (Path: " + dbEntity.getCatalog() + "/" + dbEntity.getSchema() + "/"
 +                                + dbEntity.getName() + "; Filter: " + columnFilter + ")");
                      }
                      continue;
                  }
@@@ -699,9 -737,11 +724,9 @@@
       * Performs database reverse engineering and generates DataMap that contains
       * default mapping of the tables and views. By default will include regular
       * tables and views.
-      * 
+      *
       * @since 1.0.7
       * @deprecated since 4.0 use
 -     * {@link #load(org.apache.cayenne.map.DataMap, DbLoaderConfiguration)}
 -     * method that supports catalogs.
       */
      @Deprecated
      public DataMap loadDataMapFromDB(String schemaPattern, String tablePattern, DataMap dataMap) throws SQLException {
@@@ -718,8 -758,10 +743,10 @@@
       * Performs database reverse engineering and generates DataMap object that
       * contains default mapping of the tables and views. Allows to limit types
       * of tables to read.
-      * 
+      *
       * @deprecated since 4.0 use
 -     * {@link #load(org.apache.cayenne.map.DataMap, DbLoaderConfiguration)}
 -     * method that supports catalogs.
++     *             {@link #load(org.apache.cayenne.map.DataMap, DbLoaderConfiguration, String...)}
++     *             method that supports catalogs.
       */
      @Deprecated
      public DataMap loadDataMapFromDB(String schemaPattern, String tablePattern, String[] tableTypes, DataMap dataMap)
@@@ -727,36 -769,65 +754,55 @@@
          dataMap.clear();
  
          DbLoaderConfiguration config = new DbLoaderConfiguration();
 -        config.setFiltersConfig(new FiltersConfig(new EntityFilters(
 -                new DbPath(null, schemaPattern), transformPatternToFilter(tablePattern), TRUE, NULL)));
 +        config.setFiltersConfig(FiltersConfig.create(null, schemaPattern,
 +                TableFilter.include(tablePattern), PatternFilter.INCLUDE_NOTHING));
          config.setTableTypes(tableTypes);
-         
+ 
          load(dataMap, config);
          return dataMap;
      }
  
 -    private Filter<String> transformPatternToFilter(String tablePattern) {
 -        Filter<String> table;
 -        if (tablePattern == null) {
 -            table = NULL;
 -        } else {
 -            table = include(tablePattern.replaceAll("%", ".*"));
 -        }
 -        return table;
 -    }
 -
      /**
-      * Performs database reverse engineering based on the specified config 
+      * Performs database reverse engineering based on the specified config
       * and fills the specified
       * DataMap object with DB and object mapping info.
       *
       * @since 4.0
       */
- 	public void load(DataMap dataMap, DbLoaderConfiguration config) throws SQLException {
+     public void load(DataMap dataMap, DbLoaderConfiguration config) throws SQLException {
+         LOGGER.info("Schema loading...");
  
 -        Map<DbPath, Map<String, DbEntity>> tables = getTables(config, config.getTableTypes());
 -        List<DbEntity> entities = loadDbEntities(dataMap, config, tables);
 +		String[] tableTypes = config.getTableTypes() == null ? this.getDefaultTableTypes() : config.getTableTypes();
 +		List<DbEntity> entities = loadDbEntities(dataMap, getTables(config, tableTypes), config);
  
- 		if (entities != null) {
- 			loadDbRelationships(dataMap, config, entities);
- 			loadObjEntities(dataMap, config, entities);
+         if (entities != null) {
+             loadDbRelationships(config, tables);
+ 
+             prepareObjLayer(dataMap, config, entities);
+         }
+     }
+ 
+     public void prepareObjLayer(DataMap dataMap, DbLoaderConfiguration config, Collection<DbEntity> entities) {
+         Collection<ObjEntity> loadedObjEntities = loadObjEntities(dataMap, config, entities);
+         flattenManyToManyRelationships(dataMap, loadedObjEntities, getNameGenerator());
+         fireObjEntitiesAddedEvents(loadedObjEntities);
+     }
+ 
+     /**
+      * Performs database reverse engineering to match the specified catalog,
+      * schema, table name and table type patterns and fills the specified
+      * DataMap object with DB and object mapping info.
+      *
+      * @since 4.0
+      */
+     public DataMap load(DbLoaderConfiguration config) throws SQLException {
  
- 			flattenManyToManyRelationships(dataMap);
- 			fireObjEntitiesAddedEvents(dataMap);
- 		}
+         DataMap dataMap = new DataMap();
+         load(dataMap, config);
+         loadProcedures(dataMap, config);
  
- 		loadProcedures(dataMap, config);
- 	}
+         return dataMap;
+     }
  
      /**
       * Loads database stored procedures into the DataMap.

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-server/src/main/java/org/apache/cayenne/access/loader/DbLoaderConfiguration.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
----------------------------------------------------------------------
diff --cc cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
index a9f4e5b,a9fccc4..7355740
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
@@@ -421,187 -407,187 +443,4 @@@ public class DbLoaderIT extends ServerC
      private static String attrMismatch(String attrName, String msg) {
          return "[Error loading attribute '" + attrName + "': " + msg + "]";
      }
--
--/*
--    TODO
--
--    @Test
--    public void testCreateLoader() throws Exception {
--
--        DbLoader loader = parameters.createLoader(mock(DbAdapter.class), connection,
--                mock(DbLoaderDelegate.class));
--        assertNotNull(loader);
--        assertSame(connection, loader.getConnection());
--
--        assertTrue(loader.includeTableName("dummy"));
--    }
--
--    @Test
--    public void testCreateLoader_IncludeExclude() throws Exception {
--        DbImportConfiguration parameters = new DbImportConfiguration();
--        parameters.setIncludeTables("a,b,c*");
--
--        DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class),
--                mock(DbLoaderDelegate.class));
--
--        assertFalse(loader1.includeTableName("dummy"));
--        assertFalse(loader1.includeTableName("ab"));
--        assertTrue(loader1.includeTableName("a"));
--        assertTrue(loader1.includeTableName("b"));
--        assertTrue(loader1.includeTableName("cd"));
--
--        parameters.setExcludeTables("cd");
--
--        DbLoader loader2 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class),
--                mock(DbLoaderDelegate.class));
--
--        assertFalse(loader2.includeTableName("dummy"));
--        assertFalse(loader2.includeTableName("ab"));
--        assertTrue(loader2.includeTableName("a"));
--        assertTrue(loader2.includeTableName("b"));
--        assertFalse(loader2.includeTableName("cd"));
--        assertTrue(loader2.includeTableName("cx"));
--    }
--
--
--    @Test
--    public void testCreateLoader_MeaningfulPk_Default() throws Exception {
--        DbImportConfiguration parameters = new DbImportConfiguration();
--        assertNull(parameters.getMeaningfulPkTables());
--
--        DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class),
--                mock(DbLoaderDelegate.class));
--
--        DataMap map = new DataMap();
--
--        DbEntity e1 = new DbEntity("e1");
--        DbAttribute pk = new DbAttribute("pk", Types.INTEGER, e1);
--        pk.setPrimaryKey(true);
--        e1.addAttribute(pk);
--        DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1);
--        e1.addAttribute(nonPk);
--
--        map.addDbEntity(e1);
--
--        // DbLoader is so ugly and hard to test..
--        Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList");
--        dbEntityList.setAccessible(true);
--        List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1);
--        entities.add(e1);
--
--        loader1.loadObjEntities(map, entities);
--
--        ObjEntity oe1 = map.getObjEntity("E1");
--        assertEquals(1, oe1.getAttributes().size());
--        assertNotNull(oe1.getAttribute("nonPk"));
--    }
--
--    @Test
--    public void testCreateLoader_MeaningfulPk_Specified() throws Exception {
--        DbImportConfiguration parameters = new DbImportConfiguration();
--        parameters.setMeaningfulPkTables("a*");
--
--        DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class),
--                mock(DbLoaderDelegate.class));
--
--        // DbLoader is so ugly and hard to test..
--        Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList");
--        dbEntityList.setAccessible(true);
--        Collection<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1);
--
--        DataMap map = new DataMap();
--
--        DbEntity e1 = new DbEntity("e1");
--        DbAttribute pk = new DbAttribute("pk", Types.INTEGER, e1);
--        pk.setPrimaryKey(true);
--        e1.addAttribute(pk);
--        DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1);
--        e1.addAttribute(nonPk);
--
--        map.addDbEntity(e1);
--        entities.add(e1);
--
--        DbEntity a1 = new DbEntity("a1");
--        DbAttribute apk = new DbAttribute("pk", Types.INTEGER, a1);
--        apk.setPrimaryKey(true);
--        a1.addAttribute(apk);
--        DbAttribute anonPk = new DbAttribute("nonPk", Types.INTEGER, a1);
--        a1.addAttribute(anonPk);
--
--        map.addDbEntity(a1);
--        entities.add(a1);
--
--        loader1.loadObjEntities(map, entities);
--
--        ObjEntity oe1 = map.getObjEntity("E1");
--        assertEquals(1, oe1.getAttributes().size());
--        assertNotNull(oe1.getAttribute("nonPk"));
--
--        ObjEntity oe2 = map.getObjEntity("A1");
--        assertEquals(2, oe2.getAttributes().size());
--        assertNotNull(oe2.getAttribute("nonPk"));
--        assertNotNull(oe2.getAttribute("pk"));
--    }
--
--    @Test
--    public void testCreateLoader_UsePrimitives_False() throws Exception {
--        DbImportConfiguration parameters = new DbImportConfiguration();
--        parameters.setUsePrimitives(false);
--
--        DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class),
--                mock(DbLoaderDelegate.class));
--
--        DataMap map = new DataMap();
--
--        DbEntity e1 = new DbEntity("e1");
--        DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1);
--        e1.addAttribute(nonPk);
--
--        map.addDbEntity(e1);
--
--        // DbLoader is so ugly and hard to test..
--        Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList");
--        dbEntityList.setAccessible(true);
--        List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1);
--        entities.add(e1);
--
--        loader1.loadObjEntities(map, entities);
--
--        ObjEntity oe1 = map.getObjEntity("E1");
--
--        ObjAttribute oa1 = oe1.getAttribute("nonPk");
--        assertEquals("java.lang.Integer", oa1.getType());
--    }
--
--    @Test
--    public void testCreateLoader_UsePrimitives_True() throws Exception {
--        DbImportConfiguration parameters = new DbImportConfiguration();
--        parameters.setUsePrimitives(true);
--
--        DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class),
--                mock(DbLoaderDelegate.class));
--
--        DataMap map = new DataMap();
--
--        DbEntity e1 = new DbEntity("e1");
--        DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1);
--        e1.addAttribute(nonPk);
--
--        map.addDbEntity(e1);
--
--        // DbLoader is so ugly and hard to test..
--        Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList");
--        dbEntityList.setAccessible(true);
--        List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1);
--        entities.add(e1);
--
--        loader1.loadObjEntities(map, entities);
--
--        ObjEntity oe1 = map.getObjEntity("E1");
--
--        ObjAttribute oa1 = oe1.getAttribute("nonPk");
--        assertEquals("int", oa1.getType());
--    }
--*/
--
  }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
----------------------------------------------------------------------
diff --cc cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
index 07eebc7,de60b65..7ff45ea
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
@@@ -18,10 -18,21 +18,19 @@@
   ****************************************************************/
  package org.apache.cayenne.tools;
  
 -import org.apache.cayenne.access.loader.filters.EntityFilters;
 -import org.apache.cayenne.access.loader.filters.FilterFactory;
 -import org.apache.cayenne.configuration.DataNodeDescriptor;
 -import org.apache.cayenne.configuration.server.DataSourceFactory;
 -import org.apache.cayenne.configuration.server.DbAdapterFactory;
 +import java.io.File;
 +
 +import org.apache.cayenne.access.loader.filters.OldFilterConfigBridge;
  import org.apache.cayenne.conn.DataSourceInfo;
+ import org.apache.cayenne.dba.DbAdapter;
+ import org.apache.cayenne.di.DIBootstrap;
+ import org.apache.cayenne.di.Injector;
+ import org.apache.cayenne.map.naming.DefaultNameGenerator;
+ import org.apache.cayenne.tools.configuration.ToolsModule;
+ import org.apache.cayenne.tools.dbimport.DbImportAction;
+ import org.apache.cayenne.tools.dbimport.DbImportConfiguration;
+ import org.apache.cayenne.tools.dbimport.DbImportModule;
+ import org.apache.cayenne.tools.dbimport.config.AntNestedElement;
  import org.apache.cayenne.tools.dbimport.config.Catalog;
  import org.apache.cayenne.tools.dbimport.config.ExcludeColumn;
  import org.apache.cayenne.tools.dbimport.config.ExcludeProcedure;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
----------------------------------------------------------------------
diff --cc cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
index ee39060,594e99a..0914fb5
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
@@@ -23,8 -23,9 +23,9 @@@ import org.apache.cayenne.access.DbLoad
  import org.apache.cayenne.access.loader.DbLoaderConfiguration;
  import org.apache.cayenne.access.DbLoaderDelegate;
  import org.apache.cayenne.access.loader.DefaultDbLoaderDelegate;
+ import org.apache.cayenne.access.loader.LoggingDbLoaderDelegate;
  import org.apache.cayenne.access.loader.NameFilter;
 -import org.apache.cayenne.access.loader.filters.DbPath;
 +import org.apache.cayenne.access.loader.filters.CatalogFilter;
  import org.apache.cayenne.access.loader.filters.FiltersConfig;
  import org.apache.cayenne.configuration.DataNodeDescriptor;
  import org.apache.cayenne.conn.DataSourceInfo;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Catalog.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FilterContainer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
----------------------------------------------------------------------
diff --cc cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
index 272db1b,d553a6e..ac16fb3
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java
@@@ -18,24 -18,23 +18,24 @@@
   ****************************************************************/
  package org.apache.cayenne.tools.dbimport.config;
  
 -import static org.apache.cayenne.access.loader.filters.FilterFactory.NULL;
 -import static org.apache.cayenne.access.loader.filters.FilterFactory.TRUE;
 +import org.apache.cayenne.access.loader.filters.OldFilterConfigBridge;
 +import org.apache.cayenne.access.loader.filters.CatalogFilter;
 +import org.apache.cayenne.access.loader.filters.IncludeTableFilter;
 +import org.apache.cayenne.access.loader.filters.SchemaFilter;
 +import org.apache.cayenne.access.loader.filters.TableFilter;
 +import org.apache.cayenne.access.loader.filters.FiltersConfig;
 +import org.apache.cayenne.access.loader.filters.PatternFilter;
 +import org.apache.cayenne.tools.ExcludeTable;
  
 -import java.lang.reflect.Method;
  import java.util.Collection;
 -import java.util.LinkedList;
 -import java.util.List;
 +import java.util.SortedSet;
 +import java.util.TreeSet;
 +import java.util.regex.Pattern;
  
 -import org.apache.cayenne.access.loader.filters.DbPath;
 -import org.apache.cayenne.access.loader.filters.EntityFilters;
 -import org.apache.cayenne.access.loader.filters.Filter;
 -import org.apache.cayenne.access.loader.filters.FilterFactory;
 -import org.apache.cayenne.access.loader.filters.FiltersConfig;
 -import org.apache.cayenne.access.loader.filters.ListFilter;
 +import static org.apache.commons.lang.StringUtils.isBlank;
  
  /**
- * @since 3.2.
+ * @since 4.0.
  */
  public final class FiltersConfigBuilder {
  

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
----------------------------------------------------------------------
diff --cc cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
index 2aabf71,ad42297..07f1795
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java
@@@ -59,21 -108,22 +108,28 @@@ public class ReverseEngineering extend
  
      @Override
      public String toString() {
 -        StringBuilder res = new StringBuilder("    ReverseEngineering: ");
 -        for (Catalog catalog : catalogs) {
 -            res.append("\n").append(catalog.toString("        "));
 +        StringBuilder res = new StringBuilder();
 +        res.append("ReverseEngineering: ").append("\n");
 +
 +        if (!isBlank(catalogs)) {
 +            for (Catalog catalog : catalogs) {
 +                catalog.toString(res, "  ");
 +            }
          }
 -        for (Schema schema : schemas) {
 -            res.append("\n").append(schema.toString("        "));
 +
 +        if (!isBlank(schemas)) {
 +            for (Schema schema : schemas) {
 +                schema.toString(res, "  ");
 +            }
          }
  
+         if (skipRelationshipsLoading != null && skipRelationshipsLoading) {
+             res.append("\n").append("        Skip Relationships Loading");
+         }
+         if (skipPrimaryKeyLoading != null && skipPrimaryKeyLoading) {
+             res.append("\n").append("        Skip PrimaryKey Loading");
+         }
 -        res.append(super.toString("    "));
+ 
 -        return res.toString();
 +        return super.toString(res, "  ").toString();
      }
  }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Schema.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
----------------------------------------------------------------------
diff --cc modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
index feb4a49,15b49cc..caf0e4d
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
@@@ -19,12 -19,13 +19,13 @@@
  
  package org.apache.cayenne.modeler.dialog.db;
  
 +import org.apache.cayenne.CayenneException;
  import org.apache.cayenne.CayenneRuntimeException;
  import org.apache.cayenne.access.DbLoader;
- import org.apache.cayenne.access.DbLoaderDelegate;
  import org.apache.cayenne.access.loader.DbLoaderConfiguration;
+ import org.apache.cayenne.access.loader.DefaultDbLoaderDelegate;
 -import org.apache.cayenne.access.loader.filters.EntityFilters;
 -import org.apache.cayenne.access.loader.filters.FilterFactory;
+ import org.apache.cayenne.access.loader.filters.FiltersConfig;
 +import org.apache.cayenne.access.loader.filters.OldFilterConfigBridge;
  import org.apache.cayenne.configuration.DataChannelDescriptor;
  import org.apache.cayenne.configuration.event.DataMapEvent;
  import org.apache.cayenne.dba.DbAdapter;
@@@ -47,13 -49,17 +48,23 @@@ import org.apache.cayenne.util.Util
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
+ import javax.swing.JFrame;
+ import javax.swing.JOptionPane;
+ import javax.swing.SwingUtilities;
+ import java.sql.Connection;
+ import java.sql.SQLException;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collection;
+ import java.util.List;
+ 
 -import static org.apache.cayenne.access.loader.filters.FilterFactory.NULL;
 +import javax.swing.*;
 +import java.sql.Connection;
 +import java.sql.SQLException;
 +import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.Collection;
 +import java.util.List;
  
  /**
   * Stateful helper class that encapsulates access to DbLoader.
@@@ -81,8 -84,10 +89,10 @@@ public class DbLoaderHelper 
      protected DataMap dataMap;
      protected boolean meaningfulPk;
      protected List<String> schemas;
+     protected List<String> catalogs;
+     protected DbAdapter adapter;
  
 -    private final EntityFilters.Builder filterBuilder = new EntityFilters.Builder();
 +    private final OldFilterConfigBridge filterBuilder = new OldFilterConfigBridge();
  
      protected String loadStatusNote;
  
@@@ -167,9 -163,10 +168,10 @@@
              return;
          }
  
+         this.filterBuilder.catalog(dialog.getSelectedCatalog());
          this.filterBuilder.schema(dialog.getSelectedSchema());
          this.filterBuilder.includeTables(dialog.getTableNamePattern());
 -        this.filterBuilder.setProceduresFilters(dialog.isLoadingProcedures() ? FilterFactory.TRUE : FilterFactory.NULL);
 +        this.filterBuilder.setProceduresFilters(dialog.isLoadingProcedures());
          this.filterBuilder.includeProcedures(dialog.getProcedureNamePattern());
  
          this.meaningfulPk = dialog.isMeaningfulPk();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
----------------------------------------------------------------------
diff --cc modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
index decc675,8684f28..bd2cf69
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
@@@ -19,10 -19,7 +19,25 @@@
  
  package org.apache.cayenne.modeler.dialog.db;
  
++import java.awt.Component;
++import java.io.File;
++import java.io.FileWriter;
++import java.io.IOException;
++import java.io.PrintWriter;
++import java.util.Iterator;
++import java.util.List;
++
++import javax.sql.DataSource;
++import javax.swing.JFileChooser;
++import javax.swing.JOptionPane;
++import javax.swing.WindowConstants;
++import javax.swing.event.ChangeEvent;
++import javax.swing.event.ChangeListener;
++
  import org.apache.cayenne.access.loader.DbLoaderConfiguration;
 +import org.apache.cayenne.access.loader.filters.TableFilter;
 +import org.apache.cayenne.access.loader.filters.FiltersConfig;
 +import org.apache.cayenne.access.loader.filters.PatternFilter;
  import org.apache.cayenne.configuration.DataChannelDescriptor;
  import org.apache.cayenne.configuration.DataNodeDescriptor;
  import org.apache.cayenne.dba.JdbcAdapter;
@@@ -41,20 -50,25 +68,11 @@@ import org.apache.cayenne.project.Proje
  import org.apache.cayenne.resource.Resource;
  import org.apache.cayenne.swing.BindingBuilder;
  import org.apache.cayenne.swing.ObjectBinding;
+ import org.apache.cayenne.tools.dbimport.config.FiltersConfigBuilder;
+ import org.apache.cayenne.tools.dbimport.config.ReverseEngineering;
+ import org.apache.cayenne.tools.dbimport.config.Schema;
  import org.apache.cayenne.validation.ValidationResult;
  
--import javax.sql.DataSource;
- import javax.swing.*;
 -import javax.swing.JFileChooser;
 -import javax.swing.JOptionPane;
 -import javax.swing.WindowConstants;
--import javax.swing.event.ChangeEvent;
--import javax.swing.event.ChangeListener;
- import java.awt.*;
 -import java.awt.Component;
--import java.io.File;
--import java.io.FileWriter;
--import java.io.IOException;
--import java.io.PrintWriter;
--import java.util.Iterator;
--import java.util.List;
--
  public class MergerOptions extends CayenneController {
  
      protected MergerOptionsView view;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
----------------------------------------------------------------------
diff --cc plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
index c86fae8,0073268..0d3376f
--- a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
+++ b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
@@@ -18,9 -18,12 +18,12 @@@
   ****************************************************************/
  package org.apache.cayenne.tools;
  
- import java.io.File;
- 
 -import org.apache.cayenne.access.loader.filters.EntityFilters;
 -import org.apache.cayenne.access.loader.filters.FilterFactory;
 +import org.apache.cayenne.access.loader.filters.OldFilterConfigBridge;
+ import org.apache.cayenne.configuration.DataNodeDescriptor;
+ import org.apache.cayenne.configuration.server.DataSourceFactory;
+ import org.apache.cayenne.configuration.server.DbAdapterFactory;
+ import org.apache.cayenne.dba.DbAdapter;
++import java.io.File;
  import org.apache.cayenne.di.DIBootstrap;
  import org.apache.cayenne.di.Injector;
  import org.apache.cayenne.tools.configuration.ToolsModule;
@@@ -260,12 -268,29 +269,33 @@@ public class DbImporterMojo extends Abs
          }
      }
  
+     private void validateDbImportConfiguration(DbImportConfiguration config, Injector injector) throws MojoExecutionException {
+         DataNodeDescriptor dataNodeDescriptor = config.createDataNodeDescriptor();
+         DataSource dataSource = null;
+         DbAdapter adapter = null;
+ 
+         try {
+             dataSource = injector.getInstance(DataSourceFactory.class).getDataSource(dataNodeDescriptor);
+             adapter = injector.getInstance(DbAdapterFactory.class).createAdapter(dataNodeDescriptor, dataSource);
+ 
+             if (!adapter.supportsCatalogsOnReverseEngineering() &&
+                     reverseEngineering.getCatalogs() != null && !reverseEngineering.getCatalogs().isEmpty()) {
+                 String message = "Your database does not support catalogs on reverse engineering. " +
+                         "It allows to connect to only one at the moment. Please don't note catalogs as param.";
+                 throw new MojoExecutionException(message);
+             }
+         } catch (Exception e) {
+             throw new MojoExecutionException("Error creating DataSource ("
+                     + dataSource + ") or DbAdapter (" + adapter + ") for DataNodeDescriptor (" + dataNodeDescriptor + ")", e);
+         }
+     }
+ 
      DbImportConfiguration toParameters() {
 -        DbImportConfiguration config = new DbImportConfiguration();
 +        if (config != null) {
 +            return config;
 +        }
 +
 +        config = new DbImportConfiguration();
          config.setAdapter(adapter);
          config.setDefaultPackage(defaultPackage);
          config.setDriver(driver);
@@@ -278,7 -303,10 +308,11 @@@
          config.setUsername(username);
          config.setUsePrimitives(usePrimitives);
          config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering)
 -                .add(filterBuilder.build()).filtersConfig());
 +                .add(filterBuilder).filtersConfig());
+         config.setSkipRelationshipsLoading(reverseEngineering.getSkipRelationshipsLoading());
+         config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading());
+         config.setTableTypes(reverseEngineering.getTableTypes());
++
          return config;
      }
  

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cd4e9eed/pom.xml
----------------------------------------------------------------------