You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/03/28 11:22:15 UTC
[09/14] cayenne git commit: CAY-2337 Code refactoring, bugs fixing
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/TreeManipulationAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/TreeManipulationAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/TreeManipulationAction.java
deleted file mode 100644
index 6b38f34..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/TreeManipulationAction.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*****************************************************************
- * 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.action;
-
-import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
-import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
-import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
-import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
-import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
-import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
-import org.apache.cayenne.modeler.editor.DbImportModel;
-import org.apache.cayenne.modeler.editor.DbImportTree;
-import org.apache.cayenne.modeler.util.CayenneAction;
-
-import javax.swing.JTree;
-import javax.swing.tree.TreePath;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @since 4.1
- */
-public abstract class TreeManipulationAction extends CayenneAction {
-
- static final String EMPTY_NAME = "";
-
- protected DbImportTree tree;
- protected DbImportTreeNode selectedElement;
- DbImportTreeNode parentElement;
- DbImportTreeNode foundNode;
- String insertableNodeName;
- Class insertableNodeClass;
- boolean isMultipleAction;
- private boolean movedFromDbSchema;
- private Map<Class, List<Class>> levels;
-
- public TreeManipulationAction(String name, Application application) {
- super(name, application);
- initLevels();
- }
-
- boolean reverseEngineeringIsEmpty() {
- ReverseEngineering reverseEngineering = tree.getReverseEngineering();
- return ((reverseEngineering.getCatalogs().size() == 0) && (reverseEngineering.getSchemas().size() == 0)
- && (reverseEngineering.getIncludeTables().size() == 0) && (reverseEngineering.getExcludeTables().size() == 0)
- && (reverseEngineering.getIncludeColumns().size() == 0) && (reverseEngineering.getExcludeColumns().size() == 0)
- && (reverseEngineering.getIncludeProcedures().size() == 0) && (reverseEngineering.getExcludeProcedures().size() == 0));
- }
-
- private void initLevels() {
- levels = new HashMap<>();
-
- List<Class> rootChilds = new ArrayList<>();
- rootChilds.add(Schema.class);
- rootChilds.add(IncludeTable.class);
- rootChilds.add(ExcludeTable.class);
- rootChilds.add(IncludeColumn.class);
- rootChilds.add(ExcludeColumn.class);
- rootChilds.add(IncludeProcedure.class);
- rootChilds.add(ExcludeProcedure.class);
- levels.put(ReverseEngineering.class, rootChilds);
-
- List<Class> catalogChilds = new ArrayList<>();
- catalogChilds.add(Schema.class);
- catalogChilds.add(IncludeTable.class);
- catalogChilds.add(ExcludeTable.class);
- catalogChilds.add(IncludeColumn.class);
- catalogChilds.add(ExcludeColumn.class);
- catalogChilds.add(IncludeProcedure.class);
- catalogChilds.add(ExcludeProcedure.class);
- levels.put(Catalog.class, catalogChilds);
-
- List<Class> schemaChilds = new ArrayList<>();
- schemaChilds.add(IncludeTable.class);
- schemaChilds.add(ExcludeTable.class);
- schemaChilds.add(IncludeColumn.class);
- schemaChilds.add(ExcludeColumn.class);
- schemaChilds.add(IncludeProcedure.class);
- schemaChilds.add(ExcludeProcedure.class);
- levels.put(Schema.class, schemaChilds);
-
- List<Class> includeTableChilds = new ArrayList<>();
- includeTableChilds.add(IncludeColumn.class);
- includeTableChilds.add(ExcludeColumn.class);
- levels.put(IncludeTable.class, includeTableChilds);
- levels.put(ExcludeTable.class, null);
- levels.put(IncludeColumn.class, null);
- levels.put(ExcludeColumn.class, null);
- levels.put(IncludeProcedure.class, null);
- levels.put(ExcludeProcedure.class, null);
- }
-
- public void setTree(DbImportTree tree) {
- this.tree = tree;
- }
-
- public JTree getTree() {
- return tree;
- }
-
- boolean canBeInserted(DbImportTreeNode node) {
- if (node == null) {
- return false;
- }
- Class selectedObjectClass = node.getUserObject().getClass();
- List<Class> childs = levels.get(selectedObjectClass);
- return childs != null && childs.contains(insertableNodeClass);
- }
-
- boolean canInsert() {
- if (selectedElement == null) {
- return true;
- }
- if (parentElement != null) {
- for (int i = 0; i < parentElement.getChildCount(); i++) {
- DbImportTreeNode child = (DbImportTreeNode) parentElement.getChildAt(i);
- if (child.getSimpleNodeName().equals(insertableNodeName)
- && (child.getUserObject().getClass() == insertableNodeClass)) {
- return false;
- }
- }
- }
- return true;
- }
-
- protected void updateModel(boolean updateSelected) {
- insertableNodeName = null;
- DbImportModel model = (DbImportModel) tree.getModel();
- getProjectController().setDirty(true);
- TreePath savedPath = null;
- if (!updateSelected) {
- savedPath = new TreePath(parentElement.getPath());
- }
- model.reload(updateSelected ? selectedElement : parentElement);
- if ((savedPath != null) && (parentElement.getUserObject().getClass() != ReverseEngineering.class)) {
- tree.setSelectionPath(savedPath);
- }
- }
-
- void updateAfterInsert(boolean updateSelected) {
- updateModel(updateSelected);
- if (!movedFromDbSchema) {
- if (updateSelected) {
- tree.startEditingAtPath(new TreePath(((DbImportTreeNode) selectedElement.getLastChild()).getPath()));
- } else {
- tree.startEditingAtPath(new TreePath(((DbImportTreeNode) parentElement.getLastChild()).getPath()));
- }
- }
- resetActionFlags();
- }
-
- public void resetActionFlags() {
- movedFromDbSchema = false;
- isMultipleAction = false;
- insertableNodeName = "";
- }
-
- void setInsertableNodeName(String nodeName) {
- this.insertableNodeName = nodeName;
- }
-
- void setMultipleAction(boolean multipleAction) {
- isMultipleAction = multipleAction;
- }
-
- void setMovedFromDbSchema(boolean movedFromDbSchema) {
- this.movedFromDbSchema = movedFromDbSchema;
- }
-
- void setFoundNode(DbImportTreeNode node) {
- this.foundNode = node;
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddCatalogAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddCatalogAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddCatalogAction.java
new file mode 100644
index 0000000..5ea7cc6
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddCatalogAction.java
@@ -0,0 +1,61 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
+
+import java.awt.event.ActionEvent;
+
+/**
+ * @since 4.1
+ */
+public class AddCatalogAction extends TreeManipulationAction {
+
+ private static final String ACTION_NAME = "Add Catalog";
+ private static final String ICON_NAME = "icon-dbi-catalog.png";
+
+ public AddCatalogAction(Application application) {
+ super(ACTION_NAME, application);
+ insertableNodeClass = Catalog.class;
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ ReverseEngineering reverseEngineeringOld = prepareElements();
+ Catalog newCatalog = new Catalog(name);
+ if (canBeInserted(selectedElement)) {
+ ((ReverseEngineering) selectedElement.getUserObject()).addCatalog(newCatalog);
+ selectedElement.add(new DbImportTreeNode(newCatalog));
+ updateSelected = true;
+ } else if (canInsert()) {
+ ((ReverseEngineering) parentElement.getUserObject()).addCatalog(newCatalog);
+ parentElement.add(new DbImportTreeNode(newCatalog));
+ updateSelected = false;
+ }
+ completeInserting(reverseEngineeringOld);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeColumnAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeColumnAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeColumnAction.java
new file mode 100644
index 0000000..ee1435d
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeColumnAction.java
@@ -0,0 +1,41 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
+import org.apache.cayenne.modeler.Application;
+
+/**
+ * @since 4.1
+ */
+public class AddExcludeColumnAction extends AddPatternParamAction {
+
+ private static final String ACTION_NAME = "Add Exclude Column";
+ private static final String ICON_NAME = "icon-dbi-excludeColumn.png";
+
+ public AddExcludeColumnAction(Application application) {
+ super(ACTION_NAME, application);
+ insertableNodeClass = ExcludeColumn.class;
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeProcedureAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeProcedureAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeProcedureAction.java
new file mode 100644
index 0000000..ef844ba
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeProcedureAction.java
@@ -0,0 +1,41 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
+import org.apache.cayenne.modeler.Application;
+
+/**
+ * @since 4.1
+ */
+public class AddExcludeProcedureAction extends AddPatternParamAction {
+
+ private static final String ACTION_NAME = "Add Exclude Procedure";
+ private static final String ICON_NAME = "icon-dbi-excludeProcedure.png";
+
+ public AddExcludeProcedureAction(Application application) {
+ super(ACTION_NAME, application);
+ insertableNodeClass = ExcludeProcedure.class;
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeTableAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeTableAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeTableAction.java
new file mode 100644
index 0000000..b8dbeb8
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddExcludeTableAction.java
@@ -0,0 +1,41 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
+import org.apache.cayenne.modeler.Application;
+
+/**
+ * @since 4.1
+ */
+public class AddExcludeTableAction extends AddPatternParamAction {
+
+ private static final String ACTION_NAME = "Add Exclude Table";
+ private static final String ICON_NAME = "icon-dbi-excludeTable.png";
+
+ public AddExcludeTableAction(Application application) {
+ super(ACTION_NAME, application);
+ insertableNodeClass = ExcludeTable.class;
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeColumnAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeColumnAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeColumnAction.java
new file mode 100644
index 0000000..ea5c5ef
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeColumnAction.java
@@ -0,0 +1,41 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
+import org.apache.cayenne.modeler.Application;
+
+/**
+ * @since 4.1
+ */
+public class AddIncludeColumnAction extends AddPatternParamAction {
+
+ private static final String ACTION_NAME = "Add Include Column";
+ private static final String ICON_NAME = "icon-dbi-includeColumn.png";
+
+ public AddIncludeColumnAction(Application application) {
+ super(ACTION_NAME, application);
+ insertableNodeClass = IncludeColumn.class;
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeProcedureAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeProcedureAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeProcedureAction.java
new file mode 100644
index 0000000..ca567b7
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeProcedureAction.java
@@ -0,0 +1,41 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
+import org.apache.cayenne.modeler.Application;
+
+/**
+ * @since 4.1
+ */
+public class AddIncludeProcedureAction extends AddPatternParamAction {
+
+ private static final String ACTION_NAME = "Add Include Procedure";
+ private static final String ICON_NAME = "icon-dbi-includeProcedure.png";
+
+ public AddIncludeProcedureAction(Application application) {
+ super(ACTION_NAME, application);
+ insertableNodeClass = IncludeProcedure.class;
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeTableAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeTableAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeTableAction.java
new file mode 100644
index 0000000..3d7c197
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddIncludeTableAction.java
@@ -0,0 +1,69 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
+
+import javax.swing.tree.TreePath;
+import java.awt.event.ActionEvent;
+
+/**
+ * @since 4.1
+ */
+public class AddIncludeTableAction extends TreeManipulationAction {
+
+ private static final String ACTION_NAME = "Add Include Table";
+ private static final String ICON_NAME = "icon-dbi-includeTable.png";
+
+ public AddIncludeTableAction(Application application) {
+ super(ACTION_NAME, application);
+ insertableNodeClass = IncludeTable.class;
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ ReverseEngineering reverseEngineeringOldCopy = prepareElements();
+ if (reverseEngineeringIsEmpty()) {
+ tree.getRootNode().removeAllChildren();
+ }
+ IncludeTable newTable = new IncludeTable(name);
+ if (canBeInserted(selectedElement)) {
+ ((FilterContainer) selectedElement.getUserObject()).addIncludeTable(newTable);
+ selectedElement.add(new DbImportTreeNode(newTable));
+ updateSelected = true;
+ } else {
+ if (parentElement == null) {
+ parentElement = tree.getRootNode();
+ }
+ ((FilterContainer) parentElement.getUserObject()).addIncludeTable(newTable);
+ parentElement.add(new DbImportTreeNode(newTable));
+ updateSelected = false;
+ }
+ completeInserting(reverseEngineeringOldCopy);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddPatternParamAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddPatternParamAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddPatternParamAction.java
new file mode 100644
index 0000000..640ffd8
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddPatternParamAction.java
@@ -0,0 +1,117 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
+
+import javax.swing.tree.TreePath;
+import java.awt.event.ActionEvent;
+
+/**
+ * @since 4.1
+ */
+public abstract class AddPatternParamAction extends TreeManipulationAction {
+
+ private Class paramClass;
+
+ AddPatternParamAction(String name, Application application) {
+ super(name, application);
+ }
+
+ private void addPatternParamToContainer(Class paramClass, Object selectedObject, String name, DbImportTreeNode node) {
+ FilterContainer container = (FilterContainer) selectedObject;
+ PatternParam element = null;
+ if (paramClass == ExcludeTable.class) {
+ element = new ExcludeTable(name);
+ container.addExcludeTable((ExcludeTable) element);
+ } else if (paramClass == IncludeColumn.class) {
+ element = new IncludeColumn(name);
+ container.addIncludeColumn((IncludeColumn) element);
+ } else if (paramClass == ExcludeColumn.class) {
+ element = new ExcludeColumn(name);
+ container.addExcludeColumn((ExcludeColumn) element);
+ } else if (paramClass == IncludeProcedure.class) {
+ element = new IncludeProcedure(name);
+ container.addIncludeProcedure((IncludeProcedure) element);
+ } else if (paramClass == ExcludeProcedure.class) {
+ element = new ExcludeProcedure(name);
+ container.addExcludeProcedure((ExcludeProcedure) element);
+ }
+ node.add(new DbImportTreeNode(element));
+ }
+
+ private void addPatternParamToIncludeTable(Class paramClass, Object selectedObject, String name, DbImportTreeNode node) {
+ IncludeTable includeTable = (IncludeTable) selectedObject;
+ PatternParam element = null;
+ if (paramClass == IncludeColumn.class) {
+ element = new IncludeColumn(name);
+ includeTable.addIncludeColumn((IncludeColumn) element);
+
+ } else if (paramClass == ExcludeColumn.class) {
+ element = new ExcludeColumn(name);
+ includeTable.addExcludeColumn((ExcludeColumn) element);
+ }
+ node.add(new DbImportTreeNode(element));
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ ReverseEngineering reverseEngineeringOldCopy = prepareElements();
+ Object selectedObject;
+ if (reverseEngineeringIsEmpty()) {
+ tree.getRootNode().removeAllChildren();
+ }
+ if (canBeInserted(selectedElement)) {
+ selectedObject = selectedElement.getUserObject();
+ if (selectedObject instanceof FilterContainer) {
+ addPatternParamToContainer(paramClass, selectedObject, name, selectedElement);
+ } else if (selectedObject instanceof IncludeTable) {
+ addPatternParamToIncludeTable(paramClass, selectedObject, name, selectedElement);
+ }
+ updateSelected = true;
+ } else {
+ if (parentElement == null) {
+ parentElement = tree.getRootNode();
+ }
+ selectedObject = parentElement.getUserObject();
+ if (selectedObject instanceof FilterContainer) {
+ addPatternParamToContainer(paramClass, selectedObject, name, parentElement);
+ } else if (selectedObject instanceof IncludeTable) {
+ addPatternParamToIncludeTable(paramClass, selectedObject, name, parentElement);
+ }
+ updateSelected = false;
+ }
+ completeInserting(reverseEngineeringOldCopy);
+ }
+
+ public void setParamClass(Class paramClass) {
+ this.paramClass = paramClass;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddSchemaAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddSchemaAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddSchemaAction.java
new file mode 100644
index 0000000..fa9562c
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/AddSchemaAction.java
@@ -0,0 +1,67 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
+import org.apache.cayenne.dbsync.reverse.dbimport.SchemaContainer;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
+
+import java.awt.event.ActionEvent;
+
+/**
+ * @since 4.1
+ */
+public class AddSchemaAction extends TreeManipulationAction {
+
+ private static final String ACTION_NAME = "Add Schema";
+ private static final String ICON_NAME = "icon-dbi-schema.png";
+
+ public AddSchemaAction(Application application) {
+ super(ACTION_NAME, application);
+ insertableNodeClass = Schema.class;
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ ReverseEngineering reverseEngineeringOldCopy = prepareElements();
+ Schema newSchema = new Schema(name);
+ if (canBeInserted(selectedElement)) {
+ ((SchemaContainer) selectedElement.getUserObject()).addSchema(newSchema);
+ selectedElement.add(new DbImportTreeNode(newSchema));
+ updateSelected = true;
+ } else if (canInsert()) {
+ if (parentElement.isReverseEngineering()) {
+ ((ReverseEngineering) parentElement.getUserObject()).addSchema(newSchema);
+ } else {
+ ((Catalog) parentElement.getUserObject()).addSchema(newSchema);
+ }
+ parentElement.add(new DbImportTreeNode(newSchema));
+ updateSelected = false;
+ }
+ completeInserting(reverseEngineeringOldCopy);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/DeleteNodeAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/DeleteNodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/DeleteNodeAction.java
new file mode 100644
index 0000000..94779d1
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/DeleteNodeAction.java
@@ -0,0 +1,170 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
+import org.apache.cayenne.modeler.editor.dbimport.DbImportModel;
+import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
+import org.apache.cayenne.modeler.editor.dbimport.DraggableTreePanel;
+
+import javax.swing.tree.TreePath;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+
+/**
+ * @since 4.1
+ */
+public class DeleteNodeAction extends TreeManipulationAction {
+
+ private static final String ACTION_NAME = "Delete";
+ private static final String ICON_NAME = "icon-trash.png";
+
+ private DraggableTreePanel panel;
+
+ public DeleteNodeAction(Application application) {
+ super(ACTION_NAME, application);
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+
+ private void removePatternParams(FilterContainer container, Object selectedObject) {
+ container.getExcludeTables().remove(selectedObject);
+ container.getIncludeColumns().remove(selectedObject);
+ container.getExcludeColumns().remove(selectedObject);
+ container.getIncludeProcedures().remove(selectedObject);
+ container.getExcludeProcedures().remove(selectedObject);
+ }
+
+ private void deleteChilds(Catalog catalog) {
+ Object selectedObject = this.selectedElement.getUserObject();
+ if (selectedObject instanceof Schema) {
+ catalog.getSchemas().remove(selectedObject);
+ } else if (selectedObject instanceof IncludeTable) {
+ catalog.getIncludeTables().remove(selectedObject);
+ } else if (selectedObject instanceof PatternParam) {
+ removePatternParams(catalog, selectedObject);
+ }
+ }
+
+ private void deleteChilds(Schema schema) {
+ Object selectedObject = this.selectedElement.getUserObject();
+ if (selectedObject instanceof IncludeTable) {
+ schema.getIncludeTables().remove(selectedObject);
+ } else if (selectedObject instanceof PatternParam) {
+ removePatternParams(schema, selectedObject);
+ }
+ }
+
+ private void deleteChilds(IncludeTable includeTable) {
+ Object selectedObject = this.selectedElement.getUserObject();
+ includeTable.getIncludeColumns().remove(selectedObject);
+ includeTable.getExcludeColumns().remove(selectedObject);
+ }
+
+ private void deleteChilds(ReverseEngineering reverseEngineering) {
+ Object selectedObject = this.selectedElement.getUserObject();
+ if (selectedObject instanceof Catalog) {
+ reverseEngineering.getCatalogs().remove(selectedObject);
+ } else if (selectedObject instanceof Schema) {
+ reverseEngineering.getSchemas().remove(selectedObject);
+ } else if (selectedObject instanceof IncludeTable) {
+ reverseEngineering.getIncludeTables().remove(selectedObject);
+ } else if (selectedObject instanceof ExcludeTable) {
+ reverseEngineering.getExcludeTables().remove(selectedObject);
+ } else if (selectedObject instanceof IncludeColumn) {
+ reverseEngineering.getIncludeColumns().remove(selectedObject);
+ } else if (selectedObject instanceof ExcludeColumn) {
+ reverseEngineering.getExcludeColumns().remove(selectedObject);
+ } else if (selectedObject instanceof IncludeProcedure) {
+ reverseEngineering.getIncludeProcedures().remove(selectedObject);
+ } else if (selectedObject instanceof ExcludeProcedure) {
+ reverseEngineering.getExcludeProcedures().remove(selectedObject);
+ }
+ }
+
+ private void updateParentChilds() {
+ DbImportModel model = (DbImportModel) tree.getModel();
+ model.removeNodeFromParent(selectedElement);
+ getProjectController().setDirty(true);
+ model.reload(parentElement);
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ tree.stopEditing();
+ final TreePath[] paths = tree.getSelectionPaths();
+ final DbImportView rootParent = ((DbImportView) panel.getParent().getParent());
+ rootParent.getLoadDbSchemaButton().setEnabled(false);
+ rootParent.getReverseEngineeringProgress().setVisible(true);
+ if (paths != null) {
+ ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(tree.getReverseEngineering());
+ rootParent.lockToolbarButtons();
+ for (TreePath path : paths) {
+ selectedElement = (DbImportTreeNode) path.getLastPathComponent();
+ parentElement = (DbImportTreeNode) selectedElement.getParent();
+ if (parentElement != null) {
+ Object parentUserObject = parentElement.getUserObject();
+ if (parentUserObject instanceof ReverseEngineering) {
+ ReverseEngineering reverseEngineering = (ReverseEngineering) parentUserObject;
+ deleteChilds(reverseEngineering);
+ } else if (parentUserObject instanceof Catalog) {
+ Catalog catalog = (Catalog) parentUserObject;
+ deleteChilds(catalog);
+ } else if (parentUserObject instanceof Schema) {
+ Schema schema = (Schema) parentUserObject;
+ deleteChilds(schema);
+ } else if (parentUserObject instanceof IncludeTable) {
+ IncludeTable includeTable = (IncludeTable) parentUserObject;
+ deleteChilds(includeTable);
+ }
+ }
+ }
+ if (paths.length > 1) {
+ getProjectController().setDirty(true);
+ ArrayList<DbImportTreeNode> expandList = tree.getTreeExpandList();
+ tree.translateReverseEngineeringToTree(tree.getReverseEngineering(), false);
+ tree.expandTree(expandList);
+ } else {
+ updateParentChilds();
+ }
+ putReverseEngineeringToUndoManager(reverseEngineeringOldCopy);
+ rootParent.getLoadDbSchemaButton().setEnabled(true);
+ rootParent.getReverseEngineeringProgress().setVisible(false);
+ }
+ }
+
+ public void setPanel(DraggableTreePanel panel) {
+ this.panel = panel;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/EditNodeAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/EditNodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/EditNodeAction.java
new file mode 100644
index 0000000..5ae0591
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/EditNodeAction.java
@@ -0,0 +1,88 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer;
+import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
+import org.apache.cayenne.util.Util;
+
+import java.awt.event.ActionEvent;
+
+/**
+ * @since 4.1
+ */
+public class EditNodeAction extends TreeManipulationAction {
+
+ private static final String ACTION_NAME = "Rename";
+ private static final String ICON_NAME = "icon-edit.png";
+
+ private String actionName;
+
+ public EditNodeAction(Application application) {
+ super(ACTION_NAME, application);
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ if (tree.isEditing()) {
+ return;
+ }
+ if (e != null) {
+ if (tree.getSelectionPath() != null) {
+ tree.startEditingAtPath(tree.getSelectionPath());
+ }
+ }
+ if (actionName == null) {
+ return;
+ }
+ if (tree.getSelectionPath() != null) {
+ selectedElement = tree.getSelectedNode();
+ parentElement = (DbImportTreeNode) selectedElement.getParent();
+ if (parentElement != null) {
+ Object selectedObject = selectedElement.getUserObject();
+ ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(tree.getReverseEngineering());
+ if (!Util.isEmptyString(actionName)) {
+ if (selectedObject instanceof FilterContainer) {
+ ((FilterContainer) selectedObject).setName(actionName);
+ } else if (selectedObject instanceof PatternParam) {
+ ((PatternParam) selectedObject).setPattern(actionName);
+ }
+ updateModel(true);
+ selectedElement = null;
+ }
+ if (!actionName.equals(EMPTY_NAME)) {
+ putReverseEngineeringToUndoManager(reverseEngineeringOldCopy);
+ }
+ }
+ }
+ }
+
+ public void setActionName(String name) {
+ this.actionName = name;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/MoveImportNodeAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/MoveImportNodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/MoveImportNodeAction.java
new file mode 100644
index 0000000..cf8f44e
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/MoveImportNodeAction.java
@@ -0,0 +1,238 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
+import org.apache.cayenne.modeler.editor.dbimport.DbImportTree;
+import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
+import org.apache.cayenne.modeler.editor.dbimport.DraggableTreePanel;
+import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit;
+import org.apache.cayenne.modeler.util.CayenneAction;
+
+import javax.swing.tree.TreePath;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+
+/**
+ * @since 4.1
+ */
+public class MoveImportNodeAction extends CayenneAction {
+
+ private static final String ICON_NAME = "icon-backward.png";
+ private static final String ACTION_NAME = "Include";
+ private static final String EMPTY_NAME = "";
+
+ private DbImportTree sourceTree;
+ private DbImportTree targetTree;
+ private DraggableTreePanel panel;
+ protected boolean moveInverted;
+ private Map<Class, Class> classMap;
+
+ public MoveImportNodeAction(Application application) {
+ super(ACTION_NAME, application);
+ }
+
+ MoveImportNodeAction(String actionName, Application application) {
+ super(actionName, application);
+ initMap();
+ }
+
+ private void initMap() {
+ classMap = new HashMap<>();
+ classMap.put(IncludeTable.class, ExcludeTable.class);
+ classMap.put(IncludeColumn.class, ExcludeColumn.class);
+ classMap.put(IncludeProcedure.class, ExcludeProcedure.class);
+ classMap.put(Schema.class, Schema.class);
+ classMap.put(Catalog.class, Catalog.class);
+ }
+
+ public String getIconName() {
+ return ICON_NAME;
+ }
+
+ private boolean canInsert(TreePath path, DbImportTreeNode foundNode) {
+ DbImportTreeNode sourceElement = (DbImportTreeNode) path.getLastPathComponent();
+ DbImportTreeNode selectedElement;
+ if (foundNode == null) {
+ if (targetTree.getSelectionPath() != null) {
+ DbImportTreeNode node = targetTree.getSelectedNode();
+ if ((node.getUserObject().getClass() == Catalog.class)
+ || (node.getUserObject().getClass() == Schema.class)
+ || (node.getUserObject().getClass() == ReverseEngineering.class)) {
+ selectedElement = targetTree.getSelectedNode();
+ } else {
+ selectedElement = (DbImportTreeNode) targetTree.getSelectionPath().
+ getParentPath().getLastPathComponent();
+ }
+ } else {
+ selectedElement = targetTree.getRootNode();
+ }
+ } else {
+ selectedElement = foundNode;
+ }
+ if ((nodeClassesIsSameTypes(sourceElement, selectedElement))
+ && (sourceElement.getSimpleNodeName().equals(selectedElement.getSimpleNodeName()))) {
+ return false;
+ }
+ int childCount = selectedElement.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ DbImportTreeNode child = (DbImportTreeNode) selectedElement.getChildAt(i);
+ if ((nodeClassesIsSameTypes(sourceElement, child))
+ && (sourceElement.getSimpleNodeName().equals(child.getSimpleNodeName()))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ TreePath[] paths = sourceTree.getSelectionPaths();
+ TreeManipulationAction action = null;
+ String insertableName = EMPTY_NAME;
+ DbImportView rootParent = (DbImportView) panel.getParent().getParent();
+ rootParent.getReverseEngineeringProgress().setVisible(true);
+ if (paths != null) {
+ boolean isChanged = false;
+ ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(targetTree.getReverseEngineering());
+ try {
+ for (TreePath path : paths) {
+ DbImportTreeNode selectedElement = (DbImportTreeNode) path.getLastPathComponent();
+ DbImportTreeNode previousNode;
+ DbImportTreeNode foundNode = targetTree.findNodeByParentsChain(
+ targetTree.getRootNode(), selectedElement, 0
+ );
+ // If parent nodes from db schema doesn't exist, create it
+ if (foundNode == null) {
+ for (int i = selectedElement.getParents().size() - 2; i >= 0; i--) {
+ DbImportTreeNode insertedNode = selectedElement.getParents().get(i);
+ previousNode = targetTree.findNodeByParentsChain(targetTree.getRootNode(), insertedNode, 0);
+ if (previousNode == null) {
+ previousNode = targetTree.getRootNode();
+ }
+ TreeManipulationAction manipulationAction = panel.getActionByNodeType(
+ insertedNode.getUserObject().getClass()
+ );
+ if (canInsert(new TreePath(insertedNode.getPath()), previousNode)) {
+ manipulationAction.setFoundNode(previousNode);
+ manipulationAction.setInsertableNodeName(insertedNode.getSimpleNodeName());
+ manipulationAction.setTree(targetTree);
+ manipulationAction.setMovedFromDbSchema(true);
+ manipulationAction.actionPerformed(e);
+ manipulationAction.setFoundNode(null);
+ manipulationAction.setMultipleAction(false);
+ }
+ }
+ }
+ // Again find node where we insert our node
+ foundNode = targetTree.findNodeByParentsChain(targetTree.getRootNode(), selectedElement, 0);
+ if (!moveInverted) {
+ action = panel.getActionByNodeType(selectedElement.getUserObject().getClass());
+ } else {
+ action = panel.getActionByNodeType(classMap.get(selectedElement.getUserObject().getClass()));
+ }
+ if (action != null) {
+ if (paths.length > 1) {
+ action.setMultipleAction(true);
+ } else {
+ action.setMultipleAction(false);
+ }
+ if (canInsert(path, foundNode)) {
+ insertableName = selectedElement.getSimpleNodeName();
+ action.setFoundNode(foundNode);
+ action.setInsertableNodeName(Matcher.quoteReplacement(insertableName));
+ action.setTree(targetTree);
+ action.setMovedFromDbSchema(true);
+ action.actionPerformed(e);
+ action.setFoundNode(null);
+ action.resetActionFlags();
+ isChanged = true;
+ sourceTree.setSelectionRow(-1);
+ panel.getMoveButton().setEnabled(false);
+ panel.getMoveInvertButton().setEnabled(false);
+ }
+ }
+ }
+ if ((paths.length > 1) && (targetTree.getSelectionPath() != null)) {
+ getProjectController().setDirty(true);
+ ArrayList<DbImportTreeNode> expandList = targetTree.getTreeExpandList();
+ targetTree.translateReverseEngineeringToTree(targetTree.getReverseEngineering(), false);
+ targetTree.expandTree(expandList);
+ }
+ if ((isChanged) && (!insertableName.equals(EMPTY_NAME))) {
+ ReverseEngineering reverseEngineeringNewCopy = new ReverseEngineering(targetTree.getReverseEngineering());
+ DbImportTreeUndoableEdit undoableEdit = new DbImportTreeUndoableEdit(
+ reverseEngineeringOldCopy, reverseEngineeringNewCopy, targetTree, getProjectController()
+ );
+ getProjectController().getApplication().getUndoManager().addEdit(undoableEdit);
+ }
+ } finally {
+ rootParent.getReverseEngineeringProgress().setVisible(false);
+ if (action != null) {
+ action.resetActionFlags();
+ }
+ }
+ }
+ }
+
+ private boolean nodeClassesIsSameTypes(DbImportTreeNode sourceElement, DbImportTreeNode selectedElement) {
+ if (sourceElement.getUserObject().getClass() == selectedElement.getUserObject().getClass()) {
+ return true;
+ }
+ if (sourceElement.getUserObject().getClass() == IncludeTable.class) {
+ if ((selectedElement.getUserObject().getClass() == IncludeTable.class)
+ || (selectedElement.getUserObject().getClass() == ExcludeTable.class)) {
+ return true;
+ }
+ }
+ if (sourceElement.getUserObject().getClass() == IncludeProcedure.class) {
+ if ((selectedElement.getUserObject().getClass() == IncludeProcedure.class)
+ || (selectedElement.getUserObject().getClass() == ExcludeProcedure.class)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void setSourceTree(DbImportTree sourceTree) {
+ this.sourceTree = sourceTree;
+ }
+
+ public void setTargetTree(DbImportTree targetTree) {
+ this.targetTree = targetTree;
+ }
+
+ public void setPanel(DraggableTreePanel panel) {
+ this.panel = panel;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/MoveInvertNodeAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/MoveInvertNodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/MoveInvertNodeAction.java
new file mode 100644
index 0000000..dd7da10
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/MoveInvertNodeAction.java
@@ -0,0 +1,35 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.modeler.Application;
+
+/**
+ * @since 4.1
+ */
+public class MoveInvertNodeAction extends MoveImportNodeAction {
+
+ private static final String ACTION_NAME = "Exclude";
+
+ public MoveInvertNodeAction(Application application) {
+ super(ACTION_NAME, application);
+ moveInverted = true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/TreeManipulationAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/TreeManipulationAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/TreeManipulationAction.java
new file mode 100644
index 0000000..23e6c65
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/dbimport/TreeManipulationAction.java
@@ -0,0 +1,243 @@
+/*****************************************************************
+ * 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.action.dbimport;
+
+import org.apache.cayenne.dbsync.reverse.dbimport.Catalog;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
+import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable;
+import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering;
+import org.apache.cayenne.dbsync.reverse.dbimport.Schema;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
+import org.apache.cayenne.modeler.editor.dbimport.DbImportModel;
+import org.apache.cayenne.modeler.editor.dbimport.DbImportTree;
+import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit;
+import org.apache.cayenne.modeler.util.CayenneAction;
+
+import javax.swing.JTree;
+import javax.swing.tree.TreePath;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @since 4.1
+ */
+public abstract class TreeManipulationAction extends CayenneAction {
+
+ static final String EMPTY_NAME = "";
+
+ protected DbImportTree tree;
+ protected DbImportTreeNode selectedElement;
+ DbImportTreeNode parentElement;
+ DbImportTreeNode foundNode;
+ String insertableNodeName;
+ Class insertableNodeClass;
+ boolean isMultipleAction;
+ private boolean movedFromDbSchema;
+ private Map<Class, List<Class>> levels;
+ protected String name;
+ protected boolean updateSelected;
+
+ public TreeManipulationAction(String name, Application application) {
+ super(name, application);
+ initLevels();
+ }
+
+ void completeInserting(ReverseEngineering reverseEngineeringOldCopy) {
+ if (!isMultipleAction) {
+ updateAfterInsert();
+ }
+ if ((!isMultipleAction) && (!insertableNodeName.equals(EMPTY_NAME))) {
+ putReverseEngineeringToUndoManager(reverseEngineeringOldCopy);
+ }
+ }
+
+ private String getNodeName() {
+ return insertableNodeName != null ? insertableNodeName : EMPTY_NAME;
+ }
+
+ protected ReverseEngineering prepareElements() {
+ name = getNodeName();
+ tree.stopEditing();
+ if (tree.getSelectionPath() == null) {
+ TreePath root = new TreePath(tree.getRootNode());
+ tree.setSelectionPath(root);
+ }
+ if (foundNode == null) {
+ selectedElement = tree.getSelectedNode();
+ } else {
+ selectedElement = foundNode;
+ }
+ parentElement = (DbImportTreeNode) selectedElement.getParent();
+ if (parentElement == null) {
+ parentElement = selectedElement;
+ }
+ if (reverseEngineeringIsEmpty()) {
+ tree.getRootNode().removeAllChildren();
+ }
+ return new ReverseEngineering(tree.getReverseEngineering());
+ }
+
+ protected void putReverseEngineeringToUndoManager(ReverseEngineering reverseEngineeringOldCopy) {
+ ReverseEngineering reverseEngineeringNewCopy = new ReverseEngineering(tree.getReverseEngineering());
+ DbImportTreeUndoableEdit undoableEdit = new DbImportTreeUndoableEdit(
+ reverseEngineeringOldCopy, reverseEngineeringNewCopy, tree, getProjectController()
+ );
+ getProjectController().getApplication().getUndoManager().addEdit(undoableEdit);
+ }
+
+ boolean reverseEngineeringIsEmpty() {
+ ReverseEngineering reverseEngineering = tree.getReverseEngineering();
+ return ((reverseEngineering.getCatalogs().size() == 0) && (reverseEngineering.getSchemas().size() == 0)
+ && (reverseEngineering.getIncludeTables().size() == 0) && (reverseEngineering.getExcludeTables().size() == 0)
+ && (reverseEngineering.getIncludeColumns().size() == 0) && (reverseEngineering.getExcludeColumns().size() == 0)
+ && (reverseEngineering.getIncludeProcedures().size() == 0) && (reverseEngineering.getExcludeProcedures().size() == 0));
+ }
+
+ private void initLevels() {
+ levels = new HashMap<>();
+
+ List<Class> rootChilds = new ArrayList<>();
+ rootChilds.add(Schema.class);
+ rootChilds.add(IncludeTable.class);
+ rootChilds.add(ExcludeTable.class);
+ rootChilds.add(IncludeColumn.class);
+ rootChilds.add(ExcludeColumn.class);
+ rootChilds.add(IncludeProcedure.class);
+ rootChilds.add(ExcludeProcedure.class);
+ levels.put(ReverseEngineering.class, rootChilds);
+
+ List<Class> catalogChilds = new ArrayList<>();
+ catalogChilds.add(Schema.class);
+ catalogChilds.add(IncludeTable.class);
+ catalogChilds.add(ExcludeTable.class);
+ catalogChilds.add(IncludeColumn.class);
+ catalogChilds.add(ExcludeColumn.class);
+ catalogChilds.add(IncludeProcedure.class);
+ catalogChilds.add(ExcludeProcedure.class);
+ levels.put(Catalog.class, catalogChilds);
+
+ List<Class> schemaChilds = new ArrayList<>();
+ schemaChilds.add(IncludeTable.class);
+ schemaChilds.add(ExcludeTable.class);
+ schemaChilds.add(IncludeColumn.class);
+ schemaChilds.add(ExcludeColumn.class);
+ schemaChilds.add(IncludeProcedure.class);
+ schemaChilds.add(ExcludeProcedure.class);
+ levels.put(Schema.class, schemaChilds);
+
+ List<Class> includeTableChilds = new ArrayList<>();
+ includeTableChilds.add(IncludeColumn.class);
+ includeTableChilds.add(ExcludeColumn.class);
+ levels.put(IncludeTable.class, includeTableChilds);
+ levels.put(ExcludeTable.class, null);
+ levels.put(IncludeColumn.class, null);
+ levels.put(ExcludeColumn.class, null);
+ levels.put(IncludeProcedure.class, null);
+ levels.put(ExcludeProcedure.class, null);
+ }
+
+ public void setTree(DbImportTree tree) {
+ this.tree = tree;
+ }
+
+ public JTree getTree() {
+ return tree;
+ }
+
+ boolean canBeInserted(DbImportTreeNode node) {
+ if (node == null) {
+ return false;
+ }
+ Class selectedObjectClass = node.getUserObject().getClass();
+ List<Class> childs = levels.get(selectedObjectClass);
+ return childs != null && childs.contains(insertableNodeClass);
+ }
+
+ boolean canInsert() {
+ if (selectedElement == null) {
+ return true;
+ }
+ if (parentElement != null) {
+ for (int i = 0; i < parentElement.getChildCount(); i++) {
+ DbImportTreeNode child = (DbImportTreeNode) parentElement.getChildAt(i);
+ if (child.getSimpleNodeName().equals(insertableNodeName)
+ && (child.getUserObject().getClass() == insertableNodeClass)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ protected void updateModel(boolean updateSelected) {
+ insertableNodeName = null;
+ DbImportModel model = (DbImportModel) tree.getModel();
+ getProjectController().setDirty(true);
+ TreePath savedPath = null;
+ if (!updateSelected) {
+ savedPath = new TreePath(parentElement.getPath());
+ }
+ model.reload(updateSelected ? selectedElement : parentElement);
+ if ((savedPath != null) && (parentElement.getUserObject().getClass() != ReverseEngineering.class)) {
+ tree.setSelectionPath(savedPath);
+ }
+ }
+
+ void updateAfterInsert() {
+ updateModel(updateSelected);
+ if (!movedFromDbSchema) {
+ if (updateSelected) {
+ tree.startEditingAtPath(new TreePath(((DbImportTreeNode) selectedElement.getLastChild()).getPath()));
+ } else {
+ tree.startEditingAtPath(new TreePath(((DbImportTreeNode) parentElement.getLastChild()).getPath()));
+ }
+ }
+ resetActionFlags();
+ }
+
+ public void resetActionFlags() {
+ movedFromDbSchema = false;
+ isMultipleAction = false;
+ insertableNodeName = "";
+ }
+
+ void setInsertableNodeName(String nodeName) {
+ this.insertableNodeName = nodeName;
+ }
+
+ void setMultipleAction(boolean multipleAction) {
+ isMultipleAction = multipleAction;
+ }
+
+ void setMovedFromDbSchema(boolean movedFromDbSchema) {
+ this.movedFromDbSchema = movedFromDbSchema;
+ }
+
+ void setFoundNode(DbImportTreeNode node) {
+ this.foundNode = node;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
index 9f499f7..4f22c77 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoaderContext.java
@@ -34,7 +34,7 @@ import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.editor.DbImportView;
+import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
import org.apache.cayenne.modeler.pref.DBConnectionInfo;
import org.apache.cayenne.util.Util;
import org.slf4j.Logger;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DefaultPopUpMenu.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DefaultPopUpMenu.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DefaultPopUpMenu.java
index 8fa7ae1..8603337 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DefaultPopUpMenu.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DefaultPopUpMenu.java
@@ -20,8 +20,8 @@
package org.apache.cayenne.modeler.dialog.db.load;
import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.action.DeleteNodeAction;
-import org.apache.cayenne.modeler.action.EditNodeAction;
+import org.apache.cayenne.modeler.action.dbimport.DeleteNodeAction;
+import org.apache.cayenne.modeler.action.dbimport.EditNodeAction;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
index 1109753..22924ac 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
@@ -26,11 +26,8 @@ import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
-import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
-import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.project.ProjectSaver;
import org.apache.cayenne.dbsync.reverse.dbimport.DbImportConfiguration;
import org.apache.cayenne.dbsync.reverse.dbimport.DefaultDbImportAction;
@@ -88,43 +85,25 @@ public class ModelerDbImportAction extends DefaultDbImportAction {
}
@Override
- protected boolean syncProcedures(DataMap targetDataMap, DataMap loadedDataMap, FiltersConfig filters) {
- Collection<Procedure> procedures = loadedDataMap.getProcedures();
-
- boolean hasChanges = false;
- for (Procedure procedure : procedures) {
- PatternFilter proceduresFilter = filters.proceduresFilter(procedure.getCatalog(), procedure.getSchema());
- if (proceduresFilter == null || !proceduresFilter.isIncluded(procedure.getName())) {
- continue;
- }
+ protected void addMessageToLogs(String message, List<String> messages) {
+ String formattedMessage = String.format(" %-20s", message);
+ messages.add(formattedMessage);
+ resultDialog.addRowToOutput(formattedMessage);
+ isNothingChanged = false;
+ }
- Procedure oldProcedure = targetDataMap.getProcedure(procedure.getName());
- // maybe we need to compare oldProcedure's and procedure's fully qualified names?
- if (oldProcedure != null) {
- targetDataMap.removeProcedure(procedure.getName());
- String logString = String.format(" %-20s %s", "Replace procedure ", procedure.getName());
- logger.info(logString);
- resultDialog.addRowToOutput(logString);
- } else {
- String logString = String.format(" %-20s %s", "Add new procedure ", procedure.getName());
- logger.info(logString);
- resultDialog.addRowToOutput(logString);
- }
- targetDataMap.addProcedure(procedure);
- if (!resultDialog.isVisible()) {
- resultDialog.setVisible(true);
- }
- isNothingChanged = false;
- hasChanges = true;
- }
- if ((isNothingChanged)) {
+ @Override
+ protected void logMessages(List<String> messages) {
+ super.logMessages(messages);
+ if (isNothingChanged) {
JOptionPane optionPane = new JOptionPane("Detected changes: No changes to import.", JOptionPane.PLAIN_MESSAGE);
JDialog dialog = optionPane.createDialog(DIALOG_TITLE);
dialog.setModal(false);
dialog.setAlwaysOnTop(true);
dialog.setVisible(true);
+ } else if (!resultDialog.isVisible()) {
+ resultDialog.setVisible(true);
}
- return hasChanges;
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/RootPopUpMenu.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/RootPopUpMenu.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/RootPopUpMenu.java
index 0e3ef1d..f32030b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/RootPopUpMenu.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/RootPopUpMenu.java
@@ -19,14 +19,14 @@
package org.apache.cayenne.modeler.dialog.db.load;
-import org.apache.cayenne.modeler.action.AddCatalogAction;
-import org.apache.cayenne.modeler.action.AddExcludeColumnAction;
-import org.apache.cayenne.modeler.action.AddExcludeProcedureAction;
-import org.apache.cayenne.modeler.action.AddExcludeTableAction;
-import org.apache.cayenne.modeler.action.AddIncludeColumnAction;
-import org.apache.cayenne.modeler.action.AddIncludeProcedureAction;
-import org.apache.cayenne.modeler.action.AddIncludeTableAction;
-import org.apache.cayenne.modeler.action.AddSchemaAction;
+import org.apache.cayenne.modeler.action.dbimport.AddCatalogAction;
+import org.apache.cayenne.modeler.action.dbimport.AddExcludeColumnAction;
+import org.apache.cayenne.modeler.action.dbimport.AddExcludeProcedureAction;
+import org.apache.cayenne.modeler.action.dbimport.AddExcludeTableAction;
+import org.apache.cayenne.modeler.action.dbimport.AddIncludeColumnAction;
+import org.apache.cayenne.modeler.action.dbimport.AddIncludeProcedureAction;
+import org.apache.cayenne.modeler.action.dbimport.AddIncludeTableAction;
+import org.apache.cayenne.modeler.action.dbimport.AddSchemaAction;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ColorTreeRenderer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ColorTreeRenderer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ColorTreeRenderer.java
deleted file mode 100644
index da0d474..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ColorTreeRenderer.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*****************************************************************
- * 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.editor;
-
-import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure;
-import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode;
-
-import javax.swing.JTree;
-import java.awt.Color;
-import java.awt.Component;
-
-import static org.apache.cayenne.modeler.editor.DbImportNodeHandler.LABEL_COLOR;
-import static org.apache.cayenne.modeler.editor.DbImportNodeHandler.NON_INCLUDE_COLOR;
-
-/**
- * @since 4.1
- */
-public class ColorTreeRenderer extends DbImportTreeCellRenderer {
-
- private DbImportNodeHandler handler;
- private DbImportTree reverseEngineeringTree;
-
-
- public ColorTreeRenderer() {
- super();
- handler = new DbImportNodeHandler();
- }
-
- @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);
- DbImportTree renderedTree = (DbImportTree) tree;
- handler.setDbSchemaNode(node);
- if (node.isLabel()) {
- setForeground(LABEL_COLOR);
- return this;
- }
- if (handler.isContainer(node) || (handler.isFirstNodeIsPrimitive(renderedTree))) {
- handler.setHasEntitiesInEmptyContainer(false);
- }
- if (selected) {
- setForeground(Color.BLACK);
- node.setColorized(node.isColorized());
- return this;
- }
- DbImportTreeNode root;
- handler.findFirstLevelIncludeTable();
- if (!handler.checkTreesLevels(renderedTree)) {
- setForeground(NON_INCLUDE_COLOR);
- node.setColorized(false);
- return this;
- }
- if (reverseEngineeringTree.getSelectionPath() != null) {
- root = reverseEngineeringTree.getSelectedNode();
- } else {
- root = reverseEngineeringTree.getRootNode();
- }
- renderedTree.getRootNode().setColorized(true);
-
- int bypassResult = handler.bypassTree(root);
- if (bypassResult > 0) {
- // Case on IncludeProcedure on zero level is selected
- if (root.getUserObject().getClass() == IncludeProcedure.class) {
- if (handler.nodesIsEqual(root)) {
- setForeground(handler.getColorByNodeType(root));
- node.setColorized(true);
- return this;
- } else {
- setForeground(NON_INCLUDE_COLOR);
- node.setColorized(false);
- return this;
- }
- }
- // If ReverseEngineering doesn't have catalogs or schemas on zero level
- if (!handler.isExistCatalogsOrSchemas()) {
- if ((root.isExcludeTable()) || (root.isExcludeProcedure())) {
- if (handler.nodesIsEqual(root)) {
- setForeground(handler.getColorByNodeType(root));
- node.setColorized(true);
- return this;
- }
- setForeground(NON_INCLUDE_COLOR);
- node.setColorized(false);
- return this;
- }
- if (root.equals(node)) {
- setForeground(handler.getColorByNodeType(root));
- node.setColorized(true);
- return this;
- }
- }
- // Recursion painting, if parent is colorized
- if (handler.isParentIncluded()) {
- setForeground(handler.getColorByNodeType(root));
- node.setColorized(true);
- return this;
- }
- } else {
- setForeground(NON_INCLUDE_COLOR);
- node.setColorized(false);
- return this;
- }
- if ((handler.isParentIncluded()) || (reverseEngineeringTree.getSelectionPath() != null)) {
- setForeground(handler.getColorByNodeType(root));
- node.setColorized(true);
- return this;
- } else {
- if (!handler.isExistCatalogsOrSchemas()) {
- setForeground(handler.getColorByNodeType(root));
- node.setColorized(true);
- return this;
- }
- setForeground(NON_INCLUDE_COLOR);
- node.setColorized(false);
- return this;
- }
-
- }
-
- public void setReverseEngineeringTree(DbImportTree reverseEngineeringTree) {
- this.reverseEngineeringTree = reverseEngineeringTree;
- handler.setReverseEngineeringTree(reverseEngineeringTree);
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51289d1c/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 5aa2544..ed1b6f1 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
@@ -22,6 +22,7 @@ import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
/**