Repository: cayenne
Updated Branches:
  refs/heads/master 2f104817e -> fdfeb3ac4


CAY-2051 Improvement of cdbimport behavior in maven and ant


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

Branch: refs/heads/master
Commit: b5bfbd5fede8c0919c7657a0cf137475b17524e0
Parents: fe82b47
Author: ollybondareva <ollybondar...@gmail.com>
Authored: Tue Feb 2 19:47:59 2016 +0100
Committer: Dzmitry Kazimirchyk <dkazimirc...@gmail.com>
Committed: Fri Feb 26 11:38:57 2016 +0300

----------------------------------------------------------------------
 .../DefaultReverseEngineeringWriterTest.java    |  63 +++++-----
 .../cayenne/dbimport/reverseEngineering.xml     |  21 +++-
 .../apache/cayenne/tools/DbImporterTask.java    | 117 ++++++++++++++-----
 .../apache/cayenne/tools/DbImporterMojo.java    | 109 ++++++++++++++---
 .../cayenne/tools/DbImporterMojoTest.java       |   1 +
 5 files changed, 229 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/b5bfbd5f/cayenne-server/src/test/java/org/apache/cayenne/dbimport/DefaultReverseEngineeringWriterTest.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/dbimport/DefaultReverseEngineeringWriterTest.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/dbimport/DefaultReverseEngineeringWriterTest.java
index e028431..68a214d 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/dbimport/DefaultReverseEngineeringWriterTest.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/dbimport/DefaultReverseEngineeringWriterTest.java
@@ -1,56 +1,42 @@
-/*
- * 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
+/*****************************************************************
+ *   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
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *    http://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.
- */
+ *  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.dbimport;
 
-import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.resource.Resource;
 import org.apache.cayenne.resource.URLResource;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.custommonkey.xmlunit.DetailedDiff;
 import org.custommonkey.xmlunit.Diff;
-import org.custommonkey.xmlunit.Difference;
 import org.junit.Test;
-import org.xml.sax.SAXException;
-import sun.security.util.Resources;
-
-import javax.xml.bind.JAXBException;
 import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.List;
+import java.net.URLDecoder;
 
 import static org.junit.Assert.assertTrue;
 
-/*
- * @since 4.0
- */
-
 public class DefaultReverseEngineeringWriterTest {
 
     @Test
     public void testWriteReverseEngineering() throws Exception {
         ReverseEngineeringWriter engineering = new 
DefaultReverseEngineeringWriter();
         ReverseEngineering reverseEngineering = new ReverseEngineering();
-        Resource resource = getResource("reverseEngineering.xml");
-        reverseEngineering.setConfigurationSource(resource);
 
         Catalog catalog1 = new Catalog("catalog1");
         Catalog catalog2 = new Catalog("catalog2");
@@ -80,10 +66,13 @@ public class DefaultReverseEngineeringWriterTest {
 
         reverseEngineering.addSchema(new Schema("schema3"));
 
-        File file = new File(resource.getURL().getPath());
-        PrintWriter printWriter = new PrintWriter(new FileWriter(file));
+        URL url = getClass().getResource("reverseEngineering.xml");
+        String decodedURL = URLDecoder.decode(url.getPath(), "UTF-8");
+        Writer printWriter = new PrintWriter(decodedURL);
 
-        assertReverseEngineering(engineering.write(reverseEngineering, 
printWriter));
+        reverseEngineering.setConfigurationSource(new URLResource(url));
+        Resource reverseEngineeringResource = 
engineering.write(reverseEngineering, printWriter);
+        assertReverseEngineering(reverseEngineeringResource);
     }
 
     public void assertReverseEngineering(Resource resource) throws Exception {
@@ -92,8 +81,8 @@ public class DefaultReverseEngineeringWriterTest {
 
         FileReader writedXML;
         FileReader expectedXML;
-        writedXML = new FileReader(url1.getPath());
-        expectedXML = new FileReader(url2.getPath());
+        writedXML = new FileReader(URLDecoder.decode(url1.getPath(), "UTF-8"));
+        expectedXML = new FileReader(URLDecoder.decode(url2.getPath(), 
"UTF-8"));
         Diff diff = new Diff(writedXML, expectedXML);
         assertTrue(diff.identical());
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b5bfbd5f/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
 
b/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
index d653564..28a73d0 100644
--- 
a/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
+++ 
b/cayenne-server/src/test/resources/org/apache/cayenne/dbimport/reverseEngineering.xml
@@ -1,3 +1,22 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?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
+  ~
+  ~      http://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.
+  -->
+
 <reverseEngineering>
 </reverseEngineering>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b5bfbd5f/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
----------------------------------------------------------------------
diff --git 
a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java 
b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
index 36fe7f1..ddc44ae 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
@@ -19,27 +19,24 @@
 package org.apache.cayenne.tools;
 
 import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 
 import org.apache.cayenne.access.loader.filters.OldFilterConfigBridge;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
+import org.apache.cayenne.configuration.XMLDataMapLoader;
 import org.apache.cayenne.configuration.server.DataSourceFactory;
 import org.apache.cayenne.configuration.server.DbAdapterFactory;
 import org.apache.cayenne.conn.DataSourceInfo;
 import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dbimport.AntNestedElement;
-import org.apache.cayenne.dbimport.Catalog;
-import org.apache.cayenne.dbimport.ExcludeColumn;
-import org.apache.cayenne.dbimport.ExcludeProcedure;
-import org.apache.cayenne.dbimport.ExcludeTable;
-import org.apache.cayenne.dbimport.FiltersConfigBuilder;
-import org.apache.cayenne.dbimport.IncludeColumn;
-import org.apache.cayenne.dbimport.IncludeProcedure;
-import org.apache.cayenne.dbimport.IncludeTable;
-import org.apache.cayenne.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbimport.Schema;
+import org.apache.cayenne.dbimport.*;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.naming.DefaultNameGenerator;
+import org.apache.cayenne.resource.Resource;
+import org.apache.cayenne.resource.URLResource;
 import org.apache.cayenne.tools.configuration.ToolsModule;
 import org.apache.cayenne.tools.dbimport.DbImportAction;
 import org.apache.cayenne.tools.dbimport.DbImportConfiguration;
@@ -57,6 +54,7 @@ public class DbImporterTask extends Task {
     private final DbImportConfiguration config;
 
     private final ReverseEngineering reverseEngineering = new 
ReverseEngineering();
+    private boolean isReverseEngineeringDefined = false;
 
     private final OldFilterConfigBridge filterBuilder = new 
OldFilterConfigBridge();
 
@@ -69,7 +67,7 @@ public class DbImporterTask extends Task {
 
     @Override
     public void execute() {
-
+        File dataMapFile = config.getDataMapFile();
         config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering)
                 .add(filterBuilder)
                 .filtersConfig());
@@ -82,26 +80,78 @@ public class DbImporterTask extends Task {
         
config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading());
         config.setTableTypes(reverseEngineering.getTableTypes());
 
-        Injector injector = DIBootstrap.createInjector(new 
ToolsModule(logger), new DbImportModule());
+        if (isReverseEngineeringDefined) {
+            Injector injector = DIBootstrap.createInjector(new 
ToolsModule(logger), new DbImportModule());
 
-        validateDbImportConfiguration(config, injector);
+            validateDbImportConfiguration(config, injector);
 
-        try {
-            injector.getInstance(DbImportAction.class).execute(config);
-        } catch (Exception ex) {
-            Throwable th = Util.unwindException(ex);
+            try {
+                injector.getInstance(DbImportAction.class).execute(config);
+            } catch (Exception ex) {
+                Throwable th = Util.unwindException(ex);
 
-            String message = "Error importing database schema";
+                String message = "Error importing database schema";
 
-            if (th.getLocalizedMessage() != null) {
-                message += ": " + th.getLocalizedMessage();
-            }
+                if (th.getLocalizedMessage() != null) {
+                    message += ": " + th.getLocalizedMessage();
+                }
 
-            log(message, Project.MSG_ERR);
-            throw new BuildException(message, th);
+                log(message, Project.MSG_ERR);
+                throw new BuildException(message, th);
+            }
+            finally {
+                injector.shutdown();
+            }
         }
-        finally {
-            injector.shutdown();
+        else {
+            if (dataMapFile.exists()) {
+                try {
+                    URL url = dataMapFile.toURI().toURL();
+                    URLResource resource = new URLResource(url);
+
+                    XMLDataMapLoader xmlDataMapLoader = new XMLDataMapLoader();
+                    DataMap dataMap = xmlDataMapLoader.load(resource);
+                    if (dataMap.getReverseEngineering() != null) {
+                        Resource reverseEngineeringResource = new 
URLResource(dataMapFile.toURL()).getRelativeResource(dataMap.getReverseEngineering().getName()
 + ".reverseEngineering.xml");
+
+                        DefaultReverseEngineeringLoader 
reverseEngineeringLoader = new DefaultReverseEngineeringLoader();
+                        ReverseEngineering reverseEngineering = 
reverseEngineeringLoader.load(reverseEngineeringResource.getURL().openStream());
+                        
reverseEngineering.setName(dataMap.getReverseEngineering().getName());
+                        
reverseEngineering.setConfigurationSource(reverseEngineeringResource);
+                        dataMap.setReverseEngineering(reverseEngineering);
+
+                        FiltersConfigBuilder filtersConfigBuilder = new 
FiltersConfigBuilder(dataMap.getReverseEngineering());
+                        
config.getDbLoaderConfig().setFiltersConfig(filtersConfigBuilder.filtersConfig());
+                        Injector injector = DIBootstrap.createInjector(new 
ToolsModule(logger), new DbImportModule());
+
+                        validateDbImportConfiguration(config, injector);
+
+                        try {
+                            
injector.getInstance(DbImportAction.class).execute(config);
+                        } catch (Exception ex) {
+                            Throwable th = Util.unwindException(ex);
+
+                            String message = "Error importing database schema";
+
+                            if (th.getLocalizedMessage() != null) {
+                                message += ": " + th.getLocalizedMessage();
+                            }
+
+                            log(message, Project.MSG_ERR);
+                            throw new BuildException(message, th);
+                        }
+                        finally {
+                            injector.shutdown();
+                        }
+                    }
+                } catch (MalformedURLException e) {
+                    log(e.getMessage(), Project.MSG_ERR);
+                    throw new BuildException(e.getMessage(), e);
+                } catch (IOException e) {
+                    log(e.getMessage(), Project.MSG_ERR);
+                    throw new BuildException(e.getMessage(), e);
+                }
+            }
         }
     }
 
@@ -163,6 +213,7 @@ public class DbImporterTask extends Task {
      */
     @Deprecated
     public void setSchemaName(String schemaName) {
+        isReverseEngineeringDefined = true;
         this.setSchema(schemaName);
     }
 
@@ -170,6 +221,7 @@ public class DbImporterTask extends Task {
      * @since 4.0
      */
     public void setSchema(String schema) {
+        isReverseEngineeringDefined = true;
         filterBuilder.schema(schema);
     }
 
@@ -181,14 +233,17 @@ public class DbImporterTask extends Task {
     }
 
     public void setTablePattern(String tablePattern) {
+        isReverseEngineeringDefined = true;
         filterBuilder.includeTables(tablePattern);
     }
 
     public void setImportProcedures(boolean importProcedures) {
+        isReverseEngineeringDefined = true;
         filterBuilder.setProceduresFilters(importProcedures);
     }
 
     public void setProcedurePattern(String procedurePattern) {
+        isReverseEngineeringDefined = true;
         filterBuilder.includeProcedures(procedurePattern);
     }
 
@@ -242,6 +297,7 @@ public class DbImporterTask extends Task {
      * @since 4.0
      */
     public void setIncludeTables(String includeTables) {
+        isReverseEngineeringDefined = true;
         filterBuilder.includeTables(includeTables);
     }
 
@@ -249,6 +305,7 @@ public class DbImporterTask extends Task {
      * @since 4.0
      */
     public void setExcludeTables(String excludeTables) {
+        isReverseEngineeringDefined = true;
         filterBuilder.excludeTables(excludeTables);
     }
 
@@ -264,26 +321,32 @@ public class DbImporterTask extends Task {
     }
 
     public void addConfiguredIncludeColumn(IncludeColumn includeColumn) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addIncludeColumn(includeColumn);
     }
 
     public void addConfiguredExcludeColumn(ExcludeColumn excludeColumn) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addExcludeColumn(excludeColumn);
     }
 
     public void addConfiguredIncludeTable(IncludeTable includeTable) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addIncludeTable(includeTable);
     }
 
     public void addConfiguredExcludeTable(ExcludeTable excludeTable) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addExcludeTable(excludeTable);
     }
 
     public void addConfiguredIncludeProcedure(IncludeProcedure 
includeProcedure) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addIncludeProcedure(includeProcedure);
     }
 
     public void addConfiguredExcludeProcedure(ExcludeProcedure 
excludeProcedure) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addExcludeProcedure(excludeProcedure);
     }
 
@@ -292,10 +355,12 @@ public class DbImporterTask extends Task {
     }
 
     public void addConfiguredCatalog(Catalog catalog) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addCatalog(catalog);
     }
 
     public void addConfiguredTableType(AntNestedElement type) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addTableType(type.getName());
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b5bfbd5f/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
----------------------------------------------------------------------
diff --git 
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
index 864c63f..f3dfdc7 100644
--- 
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,22 +18,27 @@
  ****************************************************************/
 package org.apache.cayenne.tools;
 
-import org.apache.cayenne.access.loader.filters.OldFilterConfigBridge;
+import org.apache.cayenne.access.loader.filters.*;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
+import org.apache.cayenne.configuration.XMLDataMapLoader;
 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 java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.cayenne.dbimport.*;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.resource.Resource;
+import org.apache.cayenne.resource.URLResource;
 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.dbimport.Catalog;
-import org.apache.cayenne.dbimport.FiltersConfigBuilder;
-import org.apache.cayenne.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbimport.Schema;
 import org.apache.cayenne.util.Util;
 import org.apache.commons.logging.Log;
 import org.apache.maven.plugin.AbstractMojo;
@@ -51,7 +56,6 @@ import javax.sql.DataSource;
  * @goal cdbimport
  */
 public class DbImporterMojo extends AbstractMojo {
-
     /**
      * DataMap XML file to use as a base for DB importing.
      * 
@@ -153,6 +157,12 @@ public class DbImporterMojo extends AbstractMojo {
      */
     private ReverseEngineering reverseEngineering = new ReverseEngineering();
 
+    private boolean isReverseEngineeringDefined = false;
+
+    public void setIsReverseEngineeringDefined(boolean 
isReverseEngineeringDefined) {
+        this.isReverseEngineeringDefined = isReverseEngineeringDefined;
+    }
+
     /**
      * DB schema to use for DB importing.
      *
@@ -163,6 +173,7 @@ public class DbImporterMojo extends AbstractMojo {
     private DbImportConfiguration config;
 
     private void setSchemaName(String schemaName) {
+        isReverseEngineeringDefined = true;
         getLog().warn("'schemaName' property is deprecated. Use 'schema' 
instead");
 
         filterBuilder.schema(schemaName);
@@ -177,6 +188,7 @@ public class DbImporterMojo extends AbstractMojo {
     private Schema schema;
 
     public void setSchema(Schema schema) {
+        isReverseEngineeringDefined = true;
         if (schema.isEmptyContainer()) {
             filterBuilder.schema(schema.getName());
         } else {
@@ -194,6 +206,7 @@ public class DbImporterMojo extends AbstractMojo {
     private String tablePattern;
 
     public void setTablePattern(String tablePattern) {
+        isReverseEngineeringDefined = true;
         filterBuilder.includeTables(tablePattern);
     }
 
@@ -222,6 +235,7 @@ public class DbImporterMojo extends AbstractMojo {
     private String procedurePattern;
 
     public void setProcedurePattern(String procedurePattern) {
+        isReverseEngineeringDefined = true;
         filterBuilder.includeProcedures(procedurePattern);
     }
 
@@ -248,23 +262,74 @@ public class DbImporterMojo extends AbstractMojo {
 
         DbImportConfiguration config = toParameters();
         config.setLogger(logger);
-        Injector injector = DIBootstrap.createInjector(new 
ToolsModule(logger), new DbImportModule());
+        File dataMapFile = config.getDataMapFile();
 
-        validateDbImportConfiguration(config, injector);
+        if (isReverseEngineeringDefined) {
+            Injector injector = DIBootstrap.createInjector(new 
ToolsModule(logger), new DbImportModule());
 
-        try {
-            injector.getInstance(DbImportAction.class).execute(config);
-        } catch (Exception ex) {
-            Throwable th = Util.unwindException(ex);
+            validateDbImportConfiguration(config, injector);
 
-            String message = "Error importing database schema";
+            try {
+                injector.getInstance(DbImportAction.class).execute(config);
+            } catch (Exception ex) {
+                Throwable th = Util.unwindException(ex);
 
-            if (th.getLocalizedMessage() != null) {
-                message += ": " + th.getLocalizedMessage();
-            }
+                String message = "Error importing database schema";
 
-            getLog().error(message);
-            throw new MojoExecutionException(message, th);
+                if (th.getLocalizedMessage() != null) {
+                    message += ": " + th.getLocalizedMessage();
+                }
+
+                getLog().error(message);
+                throw new MojoExecutionException(message, th);
+            }
+        }
+        else {
+            if (dataMapFile.exists()) {
+                try {
+                    URL url = dataMapFile.toURI().toURL();
+                    URLResource resource = new URLResource(url);
+
+                    XMLDataMapLoader xmlDataMapLoader = new XMLDataMapLoader();
+                    DataMap dataMap = xmlDataMapLoader.load(resource);
+                    if (dataMap.getReverseEngineering() != null) {
+                        Resource reverseEngineeringResource = new 
URLResource(dataMapFile.toURI().toURL()).getRelativeResource(dataMap.getReverseEngineering().getName()
 + ".reverseEngineering.xml");
+
+                        DefaultReverseEngineeringLoader 
reverseEngineeringLoader = new DefaultReverseEngineeringLoader();
+                        ReverseEngineering reverseEngineering = 
reverseEngineeringLoader.load(reverseEngineeringResource.getURL().openStream());
+                        
reverseEngineering.setName(dataMap.getReverseEngineering().getName());
+                        
reverseEngineering.setConfigurationSource(reverseEngineeringResource);
+                        dataMap.setReverseEngineering(reverseEngineering);
+
+                        FiltersConfigBuilder filtersConfigBuilder = new 
FiltersConfigBuilder(dataMap.getReverseEngineering());
+                        
config.getDbLoaderConfig().setFiltersConfig(filtersConfigBuilder.filtersConfig());
+                        Injector injector = DIBootstrap.createInjector(new 
ToolsModule(logger), new DbImportModule());
+
+                        validateDbImportConfiguration(config, injector);
+
+                        try {
+                            
injector.getInstance(DbImportAction.class).execute(config);
+                        } catch (Exception ex) {
+                            Throwable th = Util.unwindException(ex);
+
+                            String message = "Error importing database schema";
+
+                            if (th.getLocalizedMessage() != null) {
+                                message += ": " + th.getLocalizedMessage();
+                            }
+
+                            getLog().error(message);
+                            throw new MojoExecutionException(message, th);
+                        }
+                    }
+                } catch (MalformedURLException e) {
+                    getLog().error(e);
+                    throw new MojoExecutionException(e.getMessage(), e);
+                } catch (IOException e) {
+                    getLog().error(e);
+                    throw new MojoExecutionException(e.getMessage(), e);
+                }
+            }
         }
     }
 
@@ -349,6 +414,7 @@ public class DbImporterMojo extends AbstractMojo {
     private String includeTables;
 
     public void setIncludeTables(String includeTables) {
+        isReverseEngineeringDefined = true;
         filterBuilder.includeTables(includeTables);
     }
 
@@ -361,10 +427,12 @@ public class DbImporterMojo extends AbstractMojo {
     private String excludeTables;
 
     public void setExcludeTables(String excludeTables) {
+        isReverseEngineeringDefined = true;
         filterBuilder.excludeTables(excludeTables);
     }
 
     public void addSchema(Schema schema) {
+        isReverseEngineeringDefined = true;
         reverseEngineering.addSchema(schema);
     }
 
@@ -377,6 +445,8 @@ public class DbImporterMojo extends AbstractMojo {
     private Catalog catalog[];
 
     public void addCatalog(Catalog catalog) {
+        isReverseEngineeringDefined = true;
+
         if (catalog != null) {
             if (catalog.isEmptyContainer()) {
                 filterBuilder.catalog(catalog.getName());
@@ -391,6 +461,9 @@ public class DbImporterMojo extends AbstractMojo {
     }
 
     public void setReverseEngineering(ReverseEngineering reverseEngineering) {
+        isReverseEngineeringDefined = true;
         this.reverseEngineering = reverseEngineering;
     }
 }
+
+

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b5bfbd5f/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
----------------------------------------------------------------------
diff --git 
a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
 
b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
index 7365a6b..7f60aa1 100644
--- 
a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
+++ 
b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
@@ -296,6 +296,7 @@ public class DbImporterMojoTest extends 
AbstractMojoTestCase {
         DbImportConfiguration parameters = cdbImport.toParameters();
         prepareDatabase(name, parameters);
 
+               cdbImport.setIsReverseEngineeringDefined(true);
                try {
                        cdbImport.execute();
                        verifyResult(mapFile, mapFileCopy);

Reply via email to