http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringView.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringView.java
new file mode 100644
index 0000000..087ab26
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ReverseEngineeringView.java
@@ -0,0 +1,274 @@
+/*****************************************************************
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.modeler.dialog.db;
+
+import com.jgoodies.forms.builder.PanelBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.dbimport.ReverseEngineering;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.CayenneModelerController;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.db.model.DBModel;
+import org.apache.cayenne.modeler.dialog.pref.TreeEditor;
+import org.apache.cayenne.modeler.dialog.pref.XMLFileEditor;
+import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
+import org.apache.cayenne.modeler.event.DataMapDisplayListener;
+import org.apache.cayenne.modeler.util.ModelerUtil;
+
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.JSplitPane;
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ */
+public class ReverseEngineeringView extends JPanel {
+    protected ProjectController controller;
+    public ReverseEngineeringController reverseEngineeringController;
+    protected JPanel reverseEngineering;
+
+    protected JComboBox dataSources;
+    protected JButton configButton;
+    protected JButton syncButton;
+    protected JButton executeButton;
+
+    protected PanelBuilder builder;
+    protected JSeparator separator;
+    protected JSplitPane splitPane;
+    protected JLabel xmlLabel;
+    protected JLabel treeLabel;
+    protected Icon icon;
+
+    protected XMLFileEditor xmlFileEditor;
+    protected TreeEditor treeEditor;
+
+    protected DataMap tempDataMap;
+
+    protected Map<String, DataMapViewModel> reverseEngineeringViewMap;
+
+
+    private String template =
+            "<reverseEngineering>\n" +
+                    "    
<skipRelationshipsLoading>false</skipRelationshipsLoading>\n" +
+                    "    
<skipPrimaryKeyLoading>false</skipPrimaryKeyLoading>\n" +
+                    "\n" +
+                    "    <catalog>\n" +
+                    "        <schema>\n" +
+                    "            <includeTable>\n" +
+                    "            </includeTable>\n" +
+                    "        </schema>\n" +
+                    "    </catalog>\n" +
+                    "    <includeProcedure pattern=\".*\"/>\n" +
+                    "</reverseEngineering>";
+
+    public ReverseEngineeringView(ProjectController controller) {
+        this.controller = controller;
+
+        this.reverseEngineeringViewMap = new HashMap<>();
+        initView();
+        initController();
+    }
+
+    private void initView() {
+        this.reverseEngineering = new JPanel();
+        this.dataSources = new JComboBox();
+        this.splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
+        this.configButton = new JButton("...");
+        this.configButton.setToolTipText("configure local DataSource");
+        this.syncButton = new JButton();
+        this.icon = ModelerUtil.buildIcon("icon-refresh.png");
+        this.syncButton.setIcon(icon);
+        this.syncButton.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+        this.executeButton = new JButton("Execute");
+        this.treeLabel = new JLabel("Preview");
+        this.xmlLabel = new JLabel("Reverse Engineering XML Editor");
+        this.treeLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
+        this.xmlLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 10, 5));
+
+        this.treeEditor = new TreeEditor(controller);
+        this.xmlFileEditor = new XMLFileEditor(controller);
+
+        CellConstraints cc = new CellConstraints();
+        this.builder = new PanelBuilder(new FormLayout(
+                "210dlu:grow, pref, 0dlu, fill:max(172dlu;pref), 3dlu, 
fill:20dlu",
+                "p"));
+        builder.setDefaultDialogBorder();
+        builder.add(dataSources, cc.xy(4, 1));
+        builder.add(configButton, cc.xy(6, 1));
+
+        JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+        buttons.add(executeButton);
+
+        JPanel treeHeaderComponent = new JPanel(new 
FlowLayout(FlowLayout.LEFT));
+        treeHeaderComponent.add(treeLabel);
+        treeHeaderComponent.add(syncButton);
+
+        JPanel leftComponent = new JPanel();
+        leftComponent.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
+        leftComponent.setLayout(new BorderLayout());
+        leftComponent.add(xmlLabel, BorderLayout.NORTH);
+        leftComponent.add(xmlFileEditor.getView().getScrollPane(), 
BorderLayout.CENTER);
+
+        JPanel rightComponent = new JPanel();
+        rightComponent.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
+        rightComponent.setLayout(new BorderLayout());
+        rightComponent.add(treeHeaderComponent, BorderLayout.NORTH);
+        rightComponent.add(treeEditor.getView().getScrollPane(), 
BorderLayout.CENTER);
+
+        splitPane.setLeftComponent(leftComponent);
+        splitPane.setRightComponent(rightComponent);
+        splitPane.setResizeWeight(0.5);
+
+        JPanel splitWithErrorsPanel = new JPanel();
+        splitWithErrorsPanel.setLayout(new BorderLayout());
+        splitWithErrorsPanel.add(splitPane, BorderLayout.CENTER);
+        
xmlFileEditor.getView().getLabel().setBorder(BorderFactory.createEmptyBorder(0, 
10, 0, 0));
+        splitWithErrorsPanel.add(xmlFileEditor.getView().getLabel(), 
BorderLayout.SOUTH);
+
+        setLayout(new BorderLayout());
+        add(builder.getPanel(), BorderLayout.NORTH);
+        add(splitWithErrorsPanel, BorderLayout.CENTER);
+        add(buttons, BorderLayout.SOUTH);
+    }
+
+    public void initController() {
+        controller.addDataMapDisplayListener(new DataMapDisplayListener() {
+            public void currentDataMapChanged(DataMapDisplayEvent e) {
+                DataMap map = e.getDataMap();
+
+                if (tempDataMap != null) {
+                    String mapName = tempDataMap.getName();
+                    DataMapViewModel dataMapViewModel = new 
DataMapViewModel(mapName);
+                    String xmlText = 
xmlFileEditor.getView().getEditorPane().getText();
+                    dataMapViewModel.setReverseEngineeringText(xmlText);
+                    if (reverseEngineeringViewMap.containsKey(mapName)) {
+                        DataMapViewModel dataMapViewPrevious = 
reverseEngineeringViewMap.get(mapName);
+                        if (dataMapViewPrevious.getReverseEngineeringTree() != 
null) {
+                            
dataMapViewModel.setReverseEngineeringTree(dataMapViewPrevious.getReverseEngineeringTree());
+                        } else {
+                            dataMapViewModel.setReverseEngineeringTree(new 
DBModel(""));
+                        }
+                    } else {
+                        dataMapViewModel.setReverseEngineeringTree(new 
DBModel(""));
+                    }
+                    reverseEngineeringViewMap.put(mapName, dataMapViewModel);
+                }
+                tempDataMap = map;
+
+                if (map != null) {
+                    loadPreviousData();
+                    xmlFileEditor.removeAlertMessage();
+                }
+            }
+        });
+
+        this.reverseEngineeringController = new 
ReverseEngineeringController(controller, this);
+    }
+
+    public void loadPreviousData() {
+        DataMap dataMap = controller.getCurrentDataMap();
+        try {
+            if (dataMap != null) {
+                String reverseEngineeringText = null;
+                if (reverseEngineeringViewMap.containsKey(dataMap.getName())) {
+                    reverseEngineeringText = 
reverseEngineeringViewMap.get(dataMap.getName()).getReverseEngineeringText();
+                }
+                if (reverseEngineeringText != null) {
+                    
xmlFileEditor.getView().getEditorPane().setText(reverseEngineeringText);
+                } else {
+                    if (dataMap.getReverseEngineering() == null) {
+                        
getXmlFileEditor().getView().getEditorPane().setText(template);
+                    } else {
+                        ReverseEngineering reverseEngineering = 
dataMap.getReverseEngineering();
+                        if (reverseEngineering.getConfigurationSource() != 
null) {
+                            
xmlFileEditor.getView().getEditorPane().setPage(reverseEngineering.getConfigurationSource().getURL());
+                        }
+                    }
+                }
+
+                if (reverseEngineeringViewMap.containsKey(dataMap.getName())) {
+                    if 
(reverseEngineeringViewMap.get(dataMap.getName()).getReverseEngineeringTree() 
!= null) {
+                        DBModel loadedPreviousTree = 
reverseEngineeringViewMap.get(dataMap.getName()).getReverseEngineeringTree();
+                        
treeEditor.convertTreeViewIntoTreeNode(loadedPreviousTree);
+                    } else {
+                        treeEditor.setRoot("");
+                    }
+                } else {
+                    treeEditor.setRoot("");
+                }
+            }
+
+            if (((CayenneModelerController) controller.getParent())
+                    .getEditorView()
+                    .getDataMapView()
+                    .getSelectedIndex() == 1) {
+                ((CayenneModelerController) controller.getParent())
+                        .getEditorView()
+                        .getDataMapView()
+                        .setSelectedIndex(1);
+            }
+        } catch (IOException e) {
+            throw new CayenneRuntimeException("Invalid URL");
+        }
+    }
+
+    public JComboBox getDataSources() {
+        return dataSources;
+    }
+
+    public JButton getConfigButton() {
+        return configButton;
+    }
+
+    public JButton getSyncButton() {
+        return syncButton;
+    }
+
+    public TreeEditor getTreeEditor() {
+        return treeEditor;
+    }
+
+    public XMLFileEditor getXmlFileEditor() {
+        return xmlFileEditor;
+    }
+
+    public JButton getExecuteButton() {
+        return executeButton;
+    }
+
+    public Map<String, DataMapViewModel> getReverseEngineeringViewMap() {
+        return reverseEngineeringViewMap;
+    }
+
+    public void setTempDataMap(DataMap dataMap) {
+        tempDataMap = dataMap;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBCatalog.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBCatalog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBCatalog.java
new file mode 100644
index 0000000..c7e1416
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBCatalog.java
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+package org.apache.cayenne.modeler.dialog.db.model;
+
+/**
+ * @since 4.0
+ */
+public class DBCatalog extends DBElement{
+    public DBCatalog(String name) {
+        super(name);
+    }
+
+    public void addElement(DBElement dbElement){
+        dbElements.add(dbElement);
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBColumn.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBColumn.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBColumn.java
new file mode 100644
index 0000000..ed083c9
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBColumn.java
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+package org.apache.cayenne.modeler.dialog.db.model;
+
+/**
+ * @since 4.0
+ */
+public class DBColumn extends DBElement{
+
+    public DBColumn(String name) {
+        super(name);
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+
+    @Override
+    public void addElement(DBElement dbElement) {
+        throw new UnsupportedOperationException();
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBElement.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBElement.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBElement.java
new file mode 100644
index 0000000..b3a352f
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBElement.java
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+package org.apache.cayenne.modeler.dialog.db.model;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @since 4.0
+ */
+public abstract class DBElement {
+    protected String name;
+    protected List<DBElement> dbElements;
+
+    public DBElement(String name) {
+        this.name = name;
+        dbElements = new LinkedList<>();
+    }
+
+    public List<DBElement> getDbElements() {
+        return dbElements;
+    }
+
+    public abstract void addElement(DBElement dbElement);
+
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBEntity.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBEntity.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBEntity.java
new file mode 100644
index 0000000..069a398
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBEntity.java
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+package org.apache.cayenne.modeler.dialog.db.model;
+
+/**
+ * @since 4.0
+ */
+public class DBEntity extends DBElement{
+    public DBEntity(String name) {
+        super(name);
+    }
+
+    public void addElement(DBElement dbElement){
+        dbElements.add(dbElement);
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBModel.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBModel.java
new file mode 100644
index 0000000..449f436
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBModel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+package org.apache.cayenne.modeler.dialog.db.model;
+
+/**
+ * @since 4.0
+ */
+public class DBModel extends DBElement {
+    public DBModel(String name) {
+        super(name);
+    }
+
+    @Override
+    public void addElement(DBElement dbElement) {
+        dbElements.add(dbElement);
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBProcedure.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBProcedure.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBProcedure.java
new file mode 100644
index 0000000..268eaf4
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBProcedure.java
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+package org.apache.cayenne.modeler.dialog.db.model;
+
+/**
+ * @since 4.0
+ */
+public class DBProcedure extends DBElement{
+    public DBProcedure(String name) {
+        super(name);
+    }
+
+    @Override
+    public void addElement(DBElement dbElement) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBSchema.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBSchema.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBSchema.java
new file mode 100644
index 0000000..c6a7d34
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/model/DBSchema.java
@@ -0,0 +1,48 @@
+
+/*
+ * 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.
+ */
+package org.apache.cayenne.modeler.dialog.db.model;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @since 4.0
+ */
+public class DBSchema extends DBElement{
+    public List<DBElement> getDbElements() {
+        return dbElements;
+    }
+
+    protected List<DBElement> dbElements;
+
+    public DBSchema(String name) {
+        super(name);
+        dbElements = new LinkedList<>();
+    }
+
+    public void addElement(DBElement dbElement){
+        dbElements.add(dbElement);
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/FilteredTreeCellRenderer.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/FilteredTreeCellRenderer.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/FilteredTreeCellRenderer.java
new file mode 100644
index 0000000..c831f23
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/FilteredTreeCellRenderer.java
@@ -0,0 +1,85 @@
+/*****************************************************************
+ *   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.
+ ****************************************************************/
+package org.apache.cayenne.modeler.dialog.pref;
+
+import org.apache.cayenne.modeler.dialog.db.model.DBCatalog;
+import org.apache.cayenne.modeler.dialog.db.model.DBColumn;
+import org.apache.cayenne.modeler.dialog.db.model.DBEntity;
+import org.apache.cayenne.modeler.dialog.db.model.DBProcedure;
+import org.apache.cayenne.modeler.dialog.db.model.DBSchema;
+import org.apache.cayenne.modeler.util.CellRenderers;
+
+import javax.swing.ImageIcon;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import java.awt.Component;
+
+/**
+ * @since 4.0
+ */
+public class FilteredTreeCellRenderer extends DefaultTreeCellRenderer {
+
+    @Override
+    public Component getTreeCellRendererComponent(
+            JTree tree,
+            Object value,
+            boolean sel,
+            boolean expanded,
+            boolean leaf,
+            int row,
+            boolean hasFocus) {
+
+        super.getTreeCellRendererComponent(
+                tree, value, sel,
+                expanded, leaf, row,
+                hasFocus);
+        if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
+            Object userObject = ((DefaultMutableTreeNode) value)
+                    .getUserObject();
+            ImageIcon imageIcon = CellRenderers.iconForObject(userObject);
+
+            if (userObject instanceof DBCatalog) {
+                setText(((DBCatalog) userObject).getName());
+                setIcon(imageIcon);
+            }
+
+            if (userObject instanceof DBSchema) {
+                setText(((DBSchema) userObject).getName());
+                setIcon(imageIcon);
+            }
+
+            if (userObject instanceof DBEntity) {
+                setText(((DBEntity) userObject).getName());
+                setIcon(imageIcon);
+            }
+
+            if (userObject instanceof DBColumn) {
+                setText(((DBColumn) userObject).getName());
+                setIcon(imageIcon);
+            }
+
+            if (userObject instanceof DBProcedure) {
+                setText(((DBProcedure) userObject).getName());
+                setIcon(imageIcon);
+            }
+        }
+        return this;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TreeEditor.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TreeEditor.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TreeEditor.java
new file mode 100644
index 0000000..f3791f7
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TreeEditor.java
@@ -0,0 +1,101 @@
+/*****************************************************************
+ *   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.
+ ****************************************************************/
+package org.apache.cayenne.modeler.dialog.pref;
+
+import org.apache.cayenne.modeler.dialog.db.model.DBCatalog;
+import org.apache.cayenne.modeler.dialog.db.model.DBElement;
+import org.apache.cayenne.modeler.dialog.db.model.DBEntity;
+import org.apache.cayenne.modeler.dialog.db.model.DBModel;
+import org.apache.cayenne.modeler.dialog.db.model.DBSchema;
+import org.apache.cayenne.modeler.util.CayenneController;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+
+/**
+ * @since 4.0
+ */
+public class TreeEditor extends CayenneController {
+    protected TreeView treeView;
+    protected DefaultMutableTreeNode root;
+
+    public TreeEditor(CayenneController parent) {
+        super(parent);
+
+        this.treeView = new TreeView(root);
+    }
+
+    @Override
+    public TreeView getView() {
+        return treeView;
+    }
+
+    public void setRoot(String dataSource) {
+        root = new DefaultMutableTreeNode(dataSource);
+        DefaultTreeModel model = (DefaultTreeModel) 
treeView.getTree().getModel();
+        model.setRoot(root);
+    }
+
+    public void convertTreeViewIntoTreeNode(DBModel dbModel) {
+        DefaultMutableTreeNode modelNode = new DefaultMutableTreeNode(dbModel);
+        for (DBElement dbElement: dbModel.getDbElements()) {
+            DefaultMutableTreeNode elementNode = new 
DefaultMutableTreeNode(dbElement);
+            if (dbElement instanceof DBCatalog) {
+                parseCatalog(dbElement, elementNode);
+            }
+            if (dbElement instanceof DBSchema) {
+                parseSchema(dbElement, elementNode);
+            }
+            modelNode.add(elementNode);
+        }
+        root = modelNode;
+        DefaultTreeModel model = (DefaultTreeModel) 
treeView.getTree().getModel();
+        model.setRoot(root);
+    }
+
+    public void parseCatalog(DBElement catalog, DefaultMutableTreeNode 
elementNode) {
+        for (DBElement dbElement: catalog.getDbElements()) {
+            DefaultMutableTreeNode element = new 
DefaultMutableTreeNode(dbElement);
+            if (dbElement instanceof DBSchema) {
+                parseSchema(dbElement, element);
+            }
+            if (dbElement instanceof DBEntity){
+                parseEntity(dbElement, element);
+            }
+            elementNode.add(element);
+        }
+    }
+
+    public void parseSchema(DBElement schema, DefaultMutableTreeNode 
elementNode) {
+        for (DBElement element: schema.getDbElements()) {
+            DefaultMutableTreeNode entityNode = new 
DefaultMutableTreeNode(element);
+            if (element instanceof DBEntity) {
+                parseEntity(element, entityNode);
+            }
+            elementNode.add(entityNode);
+        }
+    }
+
+    private void parseEntity(DBElement entity, DefaultMutableTreeNode 
entityNode) {
+        for (DBElement column: entity.getDbElements()) {
+            DefaultMutableTreeNode columnNode = new 
DefaultMutableTreeNode(column);
+            entityNode.add(columnNode);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TreeView.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TreeView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TreeView.java
new file mode 100644
index 0000000..f464359
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TreeView.java
@@ -0,0 +1,56 @@
+/*****************************************************************
+ *   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.
+ ****************************************************************/
+package org.apache.cayenne.modeler.dialog.pref;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeCellRenderer;
+import java.awt.Dimension;
+
+/**
+ * @since 4.0
+ */
+public class TreeView extends JPanel {
+    protected JTree tree;
+    protected JScrollPane scrollPane;
+
+    public JTree getTree() {
+        return tree;
+    }
+
+    public void setTree(JTree tree) {
+        this.tree = tree;
+    }
+
+    public TreeView(DefaultMutableTreeNode root) {
+        this.tree = new JTree(root);
+
+        TreeCellRenderer renderer = new FilteredTreeCellRenderer();
+        tree.setCellRenderer(renderer);
+
+        scrollPane = new JScrollPane(tree);
+        scrollPane.setPreferredSize(new Dimension(210, 300));
+    }
+
+    public JScrollPane getScrollPane() {
+        return scrollPane;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/XMLFileEditor.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/XMLFileEditor.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/XMLFileEditor.java
new file mode 100644
index 0000000..920e2ad
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/XMLFileEditor.java
@@ -0,0 +1,82 @@
+/*****************************************************************
+ *   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.
+ ****************************************************************/
+package org.apache.cayenne.modeler.dialog.pref;
+
+import org.apache.cayenne.dbimport.DefaultReverseEngineeringLoader;
+import org.apache.cayenne.dbimport.DefaultReverseEngineeringWriter;
+import org.apache.cayenne.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbimport.ReverseEngineeringLoaderException;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * @since 4.0
+ */
+public class XMLFileEditor extends CayenneController {
+    private static final Log LOGGER = LogFactory.getLog(XMLFileEditor.class);
+
+    protected XMLView XMLview;
+
+
+    public XMLFileEditor(CayenneController parent) {
+        super(parent);
+
+        this.XMLview = new XMLView();
+    }
+
+    public ReverseEngineering convertTextIntoReverseEngineering() throws 
ReverseEngineeringLoaderException {
+        String text = XMLview.getEditorPane().getText();
+        try(InputStream inputStream = new 
ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8))) {
+            ReverseEngineering reverseEngineering = (new 
DefaultReverseEngineeringLoader()).load(inputStream);
+            return reverseEngineering;
+        } catch (IOException e) {
+            addAlertMessage(e.getMessage());
+        }
+        return null;
+    }
+
+    public void convertReverseEngineeringIntoText(ReverseEngineering 
reverseEngineering) {
+        StringWriter buffer = new StringWriter();
+        PrintWriter writer = new PrintWriter(buffer);
+        DefaultReverseEngineeringWriter reverseEngineeringWriter = new 
DefaultReverseEngineeringWriter();
+        reverseEngineeringWriter.write(reverseEngineering, writer);
+        XMLview.getEditorPane().setText(buffer.toString());
+    }
+
+    @Override
+    public XMLView getView() {
+        return XMLview;
+    }
+
+    public void addAlertMessage(String message) {
+        XMLview.addAlertMessage(message);
+    }
+
+    public void removeAlertMessage() {
+        XMLview.removeAlertMessage();
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/XMLView.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/XMLView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/XMLView.java
new file mode 100644
index 0000000..8dab6c5
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/XMLView.java
@@ -0,0 +1,72 @@
+/*****************************************************************
+ *   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.
+ ****************************************************************/
+package org.apache.cayenne.modeler.dialog.pref;
+
+
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import java.awt.Color;
+import java.awt.Dimension;
+
+/**
+ * @since 4.0
+ */
+public class XMLView extends JPanel {
+    protected JEditorPane editorPane;
+    protected JScrollPane scrollPane;
+    protected JLabel label;
+
+    public XMLView() {
+        this.editorPane = new JEditorPane();
+        this.scrollPane = new JScrollPane(editorPane);
+        this.label = new JLabel();
+        this.label.setVisible(false);
+
+        scrollPane = new JScrollPane(editorPane);
+        scrollPane.setPreferredSize(new Dimension(210, 300));
+    }
+
+    public JEditorPane getEditorPane() {
+        return editorPane;
+    }
+
+    public JScrollPane getScrollPane() {
+        return scrollPane;
+    }
+
+    public JLabel getLabel() {
+        return label;
+    }
+
+    public void setLabel(JLabel label) {
+        this.label = label;
+    }
+
+    public void addAlertMessage(String message) {
+        label.setText(message);
+        label.setForeground (Color.red);
+        label.setVisible(true);
+    }
+
+    public void removeAlertMessage() {
+        label.setVisible(false);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
index e33e319..76b842d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
@@ -20,19 +20,27 @@ package org.apache.cayenne.modeler.editor;
 
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.db.ReverseEngineeringScrollPane;
+import org.apache.cayenne.modeler.dialog.db.ReverseEngineeringView;
+
+import java.awt.event.ActionEvent;
 
 
 /**
  * Data map editing tabs container
  *
  */
-public class DataMapTabbedView extends JTabbedPane {
+public class DataMapTabbedView extends JTabbedPane implements ChangeListener {
     ProjectController mediator;
+    private ReverseEngineeringScrollPane reverseEngineeringScrollPane;
 
     /**
      * constructor
+     *
      * @param mediator mediator instance
      */
     public DataMapTabbedView(ProjectController mediator) {
@@ -53,6 +61,19 @@ public class DataMapTabbedView extends JTabbedPane {
         // must be wrapped in a scroll pane
         JScrollPane dataMapView = new JScrollPane(new DataMapView(mediator));
         addTab("DataMap", dataMapView);
+
+        ReverseEngineeringView reverseEngineeringView = new 
ReverseEngineeringView(mediator);
+        reverseEngineeringScrollPane = new 
ReverseEngineeringScrollPane(reverseEngineeringView);
+        addTab("Reverse Engineering", reverseEngineeringScrollPane);
+        addChangeListener(this);
+    }
+
+    @Override
+    public void stateChanged(ChangeEvent changeEvent) {
+        if (getSelectedComponent().equals(reverseEngineeringScrollPane)) {
+            ActionEvent actionEvent = new ActionEvent(this, 
ActionEvent.ACTION_PERFORMED, "");
+            actionEvent.setSource(reverseEngineeringScrollPane);
+        }
     }
 }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
index 7169694..fddf615 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
@@ -43,10 +43,11 @@ import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.MappingNamespace;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.Procedure;
+import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.map.QueryDescriptor;
+import org.apache.cayenne.modeler.dialog.db.model.*;
 import org.apache.cayenne.util.CayenneMapEntry;
 
 /**
@@ -67,6 +68,7 @@ public final class CellRenderers {
     protected static ImageIcon procedureIcon;
     protected static ImageIcon queryIcon;
     protected static ImageIcon embeddableIcon;
+    protected static ImageIcon catalogIcon;
 
     static {
         domainIcon = ModelerUtil.buildIcon("icon-dom.gif");
@@ -79,6 +81,7 @@ public final class CellRenderers {
         relationshipIcon = ModelerUtil.buildIcon("icon-relationship.gif");
         attributeIcon = ModelerUtil.buildIcon("icon-attribute.gif");
         embeddableIcon = ModelerUtil.buildIcon("icon-embeddable.gif");
+        catalogIcon = ModelerUtil.buildIcon("icon-open.gif");
     }
 
     public static ImageIcon iconForObject(Object object) {
@@ -119,7 +122,18 @@ public final class CellRenderers {
         else if (object instanceof Embeddable) {
             return embeddableIcon;
         }
-
+        else if (object instanceof DBColumn) {
+            return attributeIcon;
+        }
+        else if (object instanceof DBProcedure) {
+            return procedureIcon;
+        }
+        else if (object instanceof DBEntity) {
+            return dbEntityIcon;
+        }
+        else if (object instanceof DBCatalog) {
+            return catalogIcon;
+        }
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/dialog/db/templateXML.xml
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/dialog/db/templateXML.xml
 
b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/dialog/db/templateXML.xml
new file mode 100644
index 0000000..f911b05
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/dialog/db/templateXML.xml
@@ -0,0 +1,16 @@
+<reverseEngineering>
+    <skipRelationshipsLoading>false</skipRelationshipsLoading>
+    <skipPrimaryKeyLoading>false</skipPrimaryKeyLoading>
+    <catalog/>
+    <catalog name=""/>
+    <catalog name="">
+        <includeTable/>
+        <includeTable pattern=""/>
+        <includeTable pattern="">
+            <includeColumn pattern=""/>
+            <excludeColumn pattern=""/>
+        </includeTable>
+        <excludeTable/>
+        <excludeTable pattern=""/>
+    </catalog>
+</reverseEngineering>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/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 0d3376f..864c63f 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
@@ -30,10 +30,10 @@ 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.Catalog;
-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.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;
@@ -41,7 +41,6 @@ import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 
 import javax.sql.DataSource;
-import java.io.File;
 
 /**
  * Maven mojo to reverse engineer datamap from DB.

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
----------------------------------------------------------------------
diff --git 
a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
 
b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
index 4ca2190..7061916 100644
--- 
a/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
+++ 
b/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoConfigurationTest.java
@@ -18,18 +18,17 @@
  ****************************************************************/
 package org.apache.cayenne.tools;
 
-import static 
org.apache.cayenne.tools.dbimport.config.DefaultReverseEngineeringLoaderTest.*;
+import static 
org.apache.cayenne.dbimport.DefaultReverseEngineeringLoaderTest.*;
 
 import org.apache.cayenne.access.loader.filters.FiltersConfig;
 import org.apache.cayenne.access.loader.filters.IncludeTableFilter;
 import org.apache.cayenne.access.loader.filters.PatternFilter;
 import org.apache.cayenne.access.loader.filters.TableFilter;
 import org.apache.cayenne.tools.dbimport.DbImportConfiguration;
-import org.apache.cayenne.tools.dbimport.config.Schema;
+import org.apache.cayenne.dbimport.Schema;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.junit.Test;
 
-import java.util.Collections;
 import java.util.TreeSet;
 import java.util.regex.Pattern;
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/fe82b47e/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 858d75b..7365a6b 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
@@ -21,9 +21,9 @@ package org.apache.cayenne.tools;
 import org.apache.cayenne.test.jdbc.SQLReader;
 import org.apache.cayenne.test.resource.ResourceUtil;
 import org.apache.cayenne.tools.dbimport.DbImportConfiguration;
-import org.apache.cayenne.tools.dbimport.config.Catalog;
-import org.apache.cayenne.tools.dbimport.config.IncludeTable;
-import org.apache.cayenne.tools.dbimport.config.Schema;
+import org.apache.cayenne.dbimport.Catalog;
+import org.apache.cayenne.dbimport.IncludeTable;
+import org.apache.cayenne.dbimport.Schema;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.codehaus.plexus.util.FileUtils;

Reply via email to