You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2026/04/24 16:43:09 UTC

(cayenne) 09/10: Modeler refactoring - package per component

This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit b824edc4cf787502823cd9e3ab56bd1a60a87911
Author: Andrus Adamchik <an...@objectstyle.com>
AuthorDate: Fri Apr 24 12:38:20 2026 -0400

    Modeler refactoring - package per component
    
    * move query editors into ui/project/editor/query/ with flavor subpackages:
      - shared bases to ui/project/editor/query/: BaseQueryMainTab, PrefetchModel,
        ObjectQueryPropertiesPanel, RawQueryPropertiesPanel, SelectPropertiesPanel,
        ExistingSelectionProcessor, RootSelectionHandler
      - ui/project/editor/query/selectquery/: SelectQuery* (4 files)
      - ui/project/editor/query/sqltemplate/: SQLTemplate* (4 files)
      - ui/project/editor/query/ejbql/: Ejbql* (4 files)
    * widen visibility of query-base members crossing the old single-package
      boundary: BaseQueryMainTab and PrefetchModel classes made public;
      BaseQueryMainTab constructor, setQueryName, getQuery abstract made protected;
      PrefetchModel constructor and getPrefetchType made public;
      SelectQueryPrefetchTab semantics constants made public
    * add explicit imports where subpackaged subclasses now need to name
      cross-package peers (was implicit via same-package before)
---
 .../java/org/apache/cayenne/modeler/editor/ObjEntityTab.java  |  1 +
 .../apache/cayenne/modeler/editor/ObjEntityTabbedView.java    |  1 +
 .../org/apache/cayenne/modeler/ui/project/ProjectView.java    |  6 +++---
 .../modeler/ui/project/editor/dbentity/DbEntityTab.java       |  2 +-
 .../ui/project/editor/embeddable/EmbeddableAttributeTab.java  |  2 +-
 .../ui/project/editor/embeddable/EmbeddableTabbedView.java    |  2 +-
 .../ui/project/editor/procedure/ProcedureParameterTab.java    |  2 +-
 .../ui/project/editor/procedure/ProcedureQueryView.java       |  4 ++--
 .../modeler/ui/project/editor/procedure/ProcedureTab.java     |  2 +-
 .../ui/project/editor/procedure/ProcedureTabbedView.java      |  2 +-
 .../{editor => ui/project/editor/query}/BaseQueryMainTab.java | 10 +++++-----
 .../project/editor/query}/ExistingSelectionProcessor.java     |  2 +-
 .../project/editor/query}/ObjectQueryPropertiesPanel.java     |  2 +-
 .../{editor => ui/project/editor/query}/PrefetchModel.java    |  9 +++++----
 .../project/editor/query}/RawQueryPropertiesPanel.java        |  2 +-
 .../project/editor/query}/RootSelectionHandler.java           |  2 +-
 .../project/editor/query}/SelectPropertiesPanel.java          |  2 +-
 .../project/editor/query/ejbql}/EjbqlQueryMainTab.java        |  2 +-
 .../editor/query/ejbql}/EjbqlQueryPropertiesPanel.java        |  4 +++-
 .../project/editor/query/ejbql}/EjbqlQueryScriptsTab.java     |  2 +-
 .../project/editor/query/ejbql}/EjbqlTabbedView.java          |  2 +-
 .../project/editor/query/selectquery}/SelectQueryMainTab.java |  5 ++++-
 .../editor/query/selectquery}/SelectQueryOrderingTab.java     |  2 +-
 .../editor/query/selectquery}/SelectQueryPrefetchTab.java     | 11 ++++++-----
 .../editor/query/selectquery}/SelectQueryTabbedView.java      |  2 +-
 .../project/editor/query/sqltemplate}/SQLTemplateMainTab.java |  6 +++++-
 .../editor/query/sqltemplate}/SQLTemplatePrefetchTab.java     |  4 +++-
 .../editor/query/sqltemplate}/SQLTemplateScriptsTab.java      |  2 +-
 .../editor/query/sqltemplate}/SQLTemplateTabbedView.java      |  2 +-
 .../apache/cayenne/modeler/undo/AddPrefetchUndoableEdit.java  |  2 +-
 .../modeler/undo/AddPrefetchUndoableEditForSqlTemplate.java   |  4 ++--
 .../org/apache/cayenne/modeler/undo/TextCompoundEdit.java     |  2 +-
 32 files changed, 60 insertions(+), 45 deletions(-)

diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java
index 1a1a08a4a..029f63d5c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.modeler.editor;
 
+import org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTabbedView.java
index 3c82d64b1..bc4e33936 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTabbedView.java
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.modeler.editor;
 
+import org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.ObjAttribute;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/ProjectView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/ProjectView.java
index 15974d2e9..f2a60fe9e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/ProjectView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/ProjectView.java
@@ -27,13 +27,13 @@ import org.apache.cayenne.modeler.action.FilterAction;
 import org.apache.cayenne.modeler.ui.project.tree.filter.FilterController;
 import org.apache.cayenne.modeler.ui.project.editor.datadomain.DataDomainTabbedView;
 import org.apache.cayenne.modeler.ui.project.editor.datamap.DataMapTabbedView;
-import org.apache.cayenne.modeler.editor.EjbqlTabbedView;
+import org.apache.cayenne.modeler.ui.project.editor.query.ejbql.EjbqlTabbedView;
 import org.apache.cayenne.modeler.ui.project.editor.embeddable.EmbeddableTabbedView;
 import org.apache.cayenne.modeler.editor.ObjEntityTabbedView;
 import org.apache.cayenne.modeler.ui.project.editor.procedure.ProcedureQueryView;
 import org.apache.cayenne.modeler.ui.project.editor.procedure.ProcedureTabbedView;
-import org.apache.cayenne.modeler.editor.SQLTemplateTabbedView;
-import org.apache.cayenne.modeler.editor.SelectQueryTabbedView;
+import org.apache.cayenne.modeler.ui.project.editor.query.sqltemplate.SQLTemplateTabbedView;
+import org.apache.cayenne.modeler.ui.project.editor.query.selectquery.SelectQueryTabbedView;
 import org.apache.cayenne.modeler.ui.project.editor.datanode.DataNodeEditorController;
 import org.apache.cayenne.modeler.ui.project.editor.dbentity.DbEntityTabbedView;
 import org.apache.cayenne.modeler.event.display.QueryDisplayEvent;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/DbEntityTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/DbEntityTab.java
index 280fda656..ae2503a49 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/DbEntityTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/DbEntityTab.java
@@ -34,7 +34,7 @@ import org.apache.cayenne.modeler.action.CreateObjEntityFromDbAction;
 import org.apache.cayenne.modeler.action.CreateRelationshipAction;
 import org.apache.cayenne.modeler.action.DbEntityCounterpartAction;
 import org.apache.cayenne.modeler.action.DbEntitySyncAction;
-import org.apache.cayenne.modeler.editor.ExistingSelectionProcessor;
+import org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import org.apache.cayenne.modeler.event.display.DbEntityDisplayListener;
 import org.apache.cayenne.modeler.event.display.EntityDisplayEvent;
 import org.apache.cayenne.modeler.ui.project.editor.datadomain.graph.action.ShowGraphEntityAction;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/EmbeddableAttributeTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/EmbeddableAttributeTab.java
index 925fc13ec..13e53940b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/EmbeddableAttributeTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/EmbeddableAttributeTab.java
@@ -18,7 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.ui.project.editor.embeddable;
 
-import org.apache.cayenne.modeler.editor.ExistingSelectionProcessor;
+import org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Embeddable;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/EmbeddableTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/EmbeddableTabbedView.java
index bde9edc6f..32fe24086 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/EmbeddableTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/EmbeddableTabbedView.java
@@ -18,7 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.modeler.ui.project.editor.embeddable;
 
-import org.apache.cayenne.modeler.editor.ExistingSelectionProcessor;
+import org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.EmbeddableAttribute;
 import org.apache.cayenne.modeler.Application;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTab.java
index 1d9fd9485..c7b229391 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureParameterTab.java
@@ -19,7 +19,7 @@
 
 package org.apache.cayenne.modeler.ui.project.editor.procedure;
 
-import org.apache.cayenne.modeler.editor.ExistingSelectionProcessor;
+import org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.modeler.event.model.ProcedureEvent;
 import org.apache.cayenne.modeler.event.model.ProcedureParameterEvent;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
index 5e8bd1bfd..b10195712 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
@@ -19,8 +19,8 @@
 
 package org.apache.cayenne.modeler.ui.project.editor.procedure;
 
-import org.apache.cayenne.modeler.editor.RawQueryPropertiesPanel;
-import org.apache.cayenne.modeler.editor.SelectPropertiesPanel;
+import org.apache.cayenne.modeler.ui.project.editor.query.RawQueryPropertiesPanel;
+import org.apache.cayenne.modeler.ui.project.editor.query.SelectPropertiesPanel;
 import com.jgoodies.forms.builder.PanelBuilder;
 import com.jgoodies.forms.layout.CellConstraints;
 import com.jgoodies.forms.layout.FormLayout;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
index 49a1b6e57..26505bd4e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
@@ -19,7 +19,7 @@
 
 package org.apache.cayenne.modeler.ui.project.editor.procedure;
 
-import org.apache.cayenne.modeler.editor.ExistingSelectionProcessor;
+import org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTabbedView.java
index 8026c1524..77fbf80ff 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTabbedView.java
@@ -19,7 +19,7 @@
 
 package org.apache.cayenne.modeler.ui.project.editor.procedure;
 
-import org.apache.cayenne.modeler.editor.ExistingSelectionProcessor;
+import org.apache.cayenne.modeler.ui.project.editor.query.ExistingSelectionProcessor;
 import org.apache.cayenne.map.ProcedureParameter;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ui.project.ProjectController;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/BaseQueryMainTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/BaseQueryMainTab.java
similarity index 93%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/BaseQueryMainTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/BaseQueryMainTab.java
index 0af460924..bd9e2b9ca 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/BaseQueryMainTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/BaseQueryMainTab.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query;
 
 import org.apache.cayenne.modeler.event.model.QueryEvent;
 import org.apache.cayenne.map.DataMap;
@@ -35,12 +35,12 @@ import org.apache.cayenne.validation.ValidationException;
 
 import javax.swing.*;
 
-abstract class BaseQueryMainTab extends JPanel {
+public abstract class BaseQueryMainTab extends JPanel {
     protected ProjectController mediator;
     protected TextAdapter name;
     protected JComboBox<ObjEntity> queryRoot;
 
-    BaseQueryMainTab(ProjectController mediator) {
+    protected BaseQueryMainTab(ProjectController mediator) {
         this.mediator = mediator;
     }
 
@@ -71,7 +71,7 @@ abstract class BaseQueryMainTab extends JPanel {
     /**
      * Initializes Query name from string.
      */
-    void setQueryName(String newName) {
+    protected void setQueryName(String newName) {
         if (newName != null && newName.trim().length() == 0) {
             newName = null;
         }
@@ -114,5 +114,5 @@ abstract class BaseQueryMainTab extends JPanel {
         }
     }
 
-    abstract QueryDescriptor getQuery();
+    protected abstract QueryDescriptor getQuery();
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ExistingSelectionProcessor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ExistingSelectionProcessor.java
similarity index 96%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ExistingSelectionProcessor.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ExistingSelectionProcessor.java
index 134671d1d..84c39da73 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ExistingSelectionProcessor.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ExistingSelectionProcessor.java
@@ -18,7 +18,7 @@
  ****************************************************************/
 
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query;
 
 import java.util.EventObject;
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjectQueryPropertiesPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ObjectQueryPropertiesPanel.java
similarity index 98%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjectQueryPropertiesPanel.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ObjectQueryPropertiesPanel.java
index 4f8137dd1..fe13d885b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjectQueryPropertiesPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ObjectQueryPropertiesPanel.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query;
 
 import java.awt.BorderLayout;
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/PrefetchModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/PrefetchModel.java
similarity index 92%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/PrefetchModel.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/PrefetchModel.java
index 103a200e0..f0e4411bb 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/PrefetchModel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/PrefetchModel.java
@@ -17,8 +17,9 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query;
 
+import org.apache.cayenne.modeler.ui.project.editor.query.selectquery.SelectQueryPrefetchTab;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionException;
 import org.apache.cayenne.exp.ExpressionFactory;
@@ -30,7 +31,7 @@ import java.util.Map;
 /**
  * A table model for the Prefetch table.
  */
-class PrefetchModel extends AbstractTableModel {
+public class PrefetchModel extends AbstractTableModel {
 
     private final Map<String, Integer> prefetchMap;
 
@@ -38,7 +39,7 @@ class PrefetchModel extends AbstractTableModel {
 
     private final String[] prefetches;
 
-    PrefetchModel(Map<String, Integer> prefetchMap, Object root) {
+    public PrefetchModel(Map<String, Integer> prefetchMap, Object root) {
         this.prefetchMap = prefetchMap;
         this.prefetches = prefetchMap.keySet().toArray(new String[0]);
         this.root = root;
@@ -110,7 +111,7 @@ class PrefetchModel extends AbstractTableModel {
         }
     }
 
-    static int getPrefetchType(String semantics) {
+    public static int getPrefetchType(String semantics) {
 
         //case 2: disjoint isn't use for SQLTemplate prefetch
         switch (semantics){
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/RawQueryPropertiesPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RawQueryPropertiesPanel.java
similarity index 99%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/RawQueryPropertiesPanel.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RawQueryPropertiesPanel.java
index 2d22850cf..1e2b227c5 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/RawQueryPropertiesPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RawQueryPropertiesPanel.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query;
 
 import java.awt.BorderLayout;
 import java.util.ArrayList;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/RootSelectionHandler.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RootSelectionHandler.java
similarity index 98%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/RootSelectionHandler.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RootSelectionHandler.java
index 517598c7d..a158e8444 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/RootSelectionHandler.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RootSelectionHandler.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query;
 
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Entity;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectPropertiesPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/SelectPropertiesPanel.java
similarity index 99%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectPropertiesPanel.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/SelectPropertiesPanel.java
index 9c51eb962..4af802300 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectPropertiesPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/SelectPropertiesPanel.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query;
 
 import java.awt.Component;
 import java.awt.Container;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryMainTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
similarity index 98%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryMainTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
index 960d29abe..eb4712cf1 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryMainTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.ejbql;
 
 import java.awt.BorderLayout;
 import javax.swing.JPanel;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryPropertiesPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryPropertiesPanel.java
similarity index 94%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryPropertiesPanel.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryPropertiesPanel.java
index f7ea8fde6..94279c4b8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryPropertiesPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryPropertiesPanel.java
@@ -16,7 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.ejbql;
+
+import org.apache.cayenne.modeler.ui.project.editor.query.SelectPropertiesPanel;
 
 import java.awt.BorderLayout;
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryScriptsTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryScriptsTab.java
similarity index 99%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryScriptsTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryScriptsTab.java
index 9cba17170..f9a25d795 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryScriptsTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryScriptsTab.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.ejbql;
 
 import java.awt.BorderLayout;
 import java.awt.event.FocusEvent;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlTabbedView.java
similarity index 97%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlTabbedView.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlTabbedView.java
index 45ab566c6..ecfa70582 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlTabbedView.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.ejbql;
 
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.modeler.ui.project.ProjectController;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryMainTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
similarity index 97%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryMainTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
index 77feb2123..ebf37c12d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryMainTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
@@ -17,7 +17,10 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.selectquery;
+
+import org.apache.cayenne.modeler.ui.project.editor.query.BaseQueryMainTab;
+import org.apache.cayenne.modeler.ui.project.editor.query.ObjectQueryPropertiesPanel;
 
 import java.awt.BorderLayout;
 import java.util.Arrays;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryOrderingTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryOrderingTab.java
similarity index 99%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryOrderingTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryOrderingTab.java
index fbf61d266..7356a2306 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryOrderingTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryOrderingTab.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.selectquery;
 
 import org.apache.cayenne.modeler.event.model.QueryEvent;
 import org.apache.cayenne.map.Entity;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryPrefetchTab.java
similarity index 93%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryPrefetchTab.java
index 76d608f15..fc73da4d7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryPrefetchTab.java
@@ -17,8 +17,9 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.selectquery;
 
+import org.apache.cayenne.modeler.ui.project.editor.query.PrefetchModel;
 import org.apache.cayenne.modeler.event.model.QueryEvent;
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.Entity;
@@ -50,10 +51,10 @@ import javax.swing.tree.TreeModel;
  */
 public class SelectQueryPrefetchTab extends SelectQueryOrderingTab {
 
-    static final String JOINT_PREFETCH_SEMANTICS = "Joint";
-    static final String DISJOINT_PREFETCH_SEMANTICS = "Disjoint";
-    static final String DISJOINT_BY_ID_PREFETCH_SEMANTICS = "Disjoint by id";
-    static final String UNDEFINED_SEMANTICS = "Undefined semantics";
+    public static final String JOINT_PREFETCH_SEMANTICS = "Joint";
+    public static final String DISJOINT_PREFETCH_SEMANTICS = "Disjoint";
+    public static final String DISJOINT_BY_ID_PREFETCH_SEMANTICS = "Disjoint by id";
+    public static final String UNDEFINED_SEMANTICS = "Undefined semantics";
 
     public SelectQueryPrefetchTab(ProjectController mediator) {
         super(mediator);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryTabbedView.java
similarity index 97%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryTabbedView.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryTabbedView.java
index 813d03737..f9303b033 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryTabbedView.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.selectquery;
 
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateMainTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateMainTab.java
similarity index 96%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateMainTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateMainTab.java
index aaab23531..9823bd6ce 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateMainTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateMainTab.java
@@ -17,7 +17,11 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.sqltemplate;
+
+import org.apache.cayenne.modeler.ui.project.editor.query.BaseQueryMainTab;
+import org.apache.cayenne.modeler.ui.project.editor.query.RawQueryPropertiesPanel;
+import org.apache.cayenne.modeler.ui.project.editor.query.SelectPropertiesPanel;
 
 import com.jgoodies.forms.builder.PanelBuilder;
 import com.jgoodies.forms.layout.CellConstraints;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplatePrefetchTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplatePrefetchTab.java
similarity index 98%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplatePrefetchTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplatePrefetchTab.java
index 08f9b0884..98fc5c166 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplatePrefetchTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplatePrefetchTab.java
@@ -17,8 +17,10 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.sqltemplate;
 
+import org.apache.cayenne.modeler.ui.project.editor.query.PrefetchModel;
+import org.apache.cayenne.modeler.ui.project.editor.query.selectquery.SelectQueryPrefetchTab;
 import org.apache.cayenne.modeler.event.model.QueryEvent;
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.Entity;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
similarity index 99%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
index 5854ba3a7..ab378b100 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.sqltemplate;
 
 import com.jgoodies.forms.builder.PanelBuilder;
 import com.jgoodies.forms.layout.CellConstraints;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateTabbedView.java
similarity index 97%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateTabbedView.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateTabbedView.java
index 00047f9f9..2c860233f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateTabbedView.java
@@ -17,7 +17,7 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.modeler.editor;
+package org.apache.cayenne.modeler.ui.project.editor.query.sqltemplate;
 
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.modeler.ui.project.ProjectController;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/AddPrefetchUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/AddPrefetchUndoableEdit.java
index fdc486902..61dbade2a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/AddPrefetchUndoableEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/AddPrefetchUndoableEdit.java
@@ -22,7 +22,7 @@ import javax.swing.undo.AbstractUndoableEdit;
 import javax.swing.undo.CannotRedoException;
 import javax.swing.undo.CannotUndoException;
 
-import org.apache.cayenne.modeler.editor.SelectQueryPrefetchTab;
+import org.apache.cayenne.modeler.ui.project.editor.query.selectquery.SelectQueryPrefetchTab;
 
 public class AddPrefetchUndoableEdit extends AbstractUndoableEdit {
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/AddPrefetchUndoableEditForSqlTemplate.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/AddPrefetchUndoableEditForSqlTemplate.java
index 864b94332..2b77d5cc8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/AddPrefetchUndoableEditForSqlTemplate.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/AddPrefetchUndoableEditForSqlTemplate.java
@@ -19,8 +19,8 @@
 
 package org.apache.cayenne.modeler.undo;
 
-import org.apache.cayenne.modeler.editor.SQLTemplatePrefetchTab;
-import org.apache.cayenne.modeler.editor.SelectQueryPrefetchTab;
+import org.apache.cayenne.modeler.ui.project.editor.query.sqltemplate.SQLTemplatePrefetchTab;
+import org.apache.cayenne.modeler.ui.project.editor.query.selectquery.SelectQueryPrefetchTab;
 
 import javax.swing.undo.AbstractUndoableEdit;
 import javax.swing.undo.CannotRedoException;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java
index bce16d3ec..f98d9ab03 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java
@@ -37,7 +37,7 @@ import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ui.CayenneModelerFrame;
 import org.apache.cayenne.modeler.ui.project.ProjectView;
-import org.apache.cayenne.modeler.editor.SQLTemplateTabbedView;
+import org.apache.cayenne.modeler.ui.project.editor.query.sqltemplate.SQLTemplateTabbedView;
 import org.apache.cayenne.modeler.util.TextAdapter;
 import org.apache.cayenne.query.EJBQLQuery;
 import org.apache.cayenne.query.SQLTemplate;