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 2022/09/29 14:35:55 UTC

[cayenne] 03/03: CAY-2761 Modeler: Editor for the cgen templates - minor code cleanup

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

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

commit feb1b89f9d3578950310d400746c26980d2056aa
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Thu Sep 29 17:35:28 2022 +0300

    CAY-2761 Modeler: Editor for the cgen templates
     - minor code cleanup
---
 .../modeler/dialog/pref/TemplatePreferences.java   | 19 +++-----
 .../PreviewClassGenerationFactory.java             |  2 +-
 .../templateeditor/TemplateEditorController.java   | 57 ++++++++++------------
 .../dialog/templateeditor/TemplateEditorView.java  |  4 +-
 4 files changed, 38 insertions(+), 44 deletions(-)

diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java
index 520a5cf59..f18886ebe 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java
@@ -72,7 +72,7 @@ public class TemplatePreferences extends CayenneController {
         initBindings();
     }
 
-    public Component getView() {
+    public TemplatePreferencesView getView() {
         return view;
     }
 
@@ -127,7 +127,10 @@ public class TemplatePreferences extends CayenneController {
 
     @SuppressWarnings("unused")
     public void templateEditorAction() {
-         new TemplateEditorController(this).startupAction();
+        int selectedRow = view.getTable().getSelectedRow();
+        if(selectedRow != -1) {
+            new TemplateEditorController(this).startupAction();
+        }
     }
 
     @SuppressWarnings("unused")
@@ -161,9 +164,7 @@ public class TemplatePreferences extends CayenneController {
         if (path != null) {
             int len = templateEntries.size();
             templateEntries.add(path);
-            ((AbstractTableModel) view.getTable().getModel()).fireTableRowsInserted(
-                    len,
-                    len);
+            ((AbstractTableModel) view.getTable().getModel()).fireTableRowsInserted(len, len);
         }
     }
 
@@ -174,16 +175,12 @@ public class TemplatePreferences extends CayenneController {
             return;
         }
 
-        Object key = ((AbstractTableModel) view.getTable().getModel()).getValueAt(
-                selected,
-                0);
+        Object key = view.getTable().getModel().getValueAt(selected, 0);
 
         editor.getRemovedNode().add(getTemplatePreferences().node((String) key));
         templateEntries.remove(selected);
 
-        ((AbstractTableModel) view.getTable().getModel()).fireTableRowsDeleted(
-                selected,
-                selected);
+        ((AbstractTableModel) view.getTable().getModel()).fireTableRowsDeleted(selected, selected);
 
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/PreviewClassGenerationFactory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/PreviewClassGenerationFactory.java
index f8bba275b..e9d4c5631 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/PreviewClassGenerationFactory.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/PreviewClassGenerationFactory.java
@@ -40,7 +40,7 @@ public class PreviewClassGenerationFactory implements ClassGenerationActionFacto
     @Inject
     private MetadataUtils metadataUtils;
 
-    @Inject
+    @Inject(TemplateEditorController.TEMPLATE_EDITOR_WRITER)
     private StringWriter writer;
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/TemplateEditorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/TemplateEditorController.java
index 8c20aac4b..ade5f1340 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/TemplateEditorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/TemplateEditorController.java
@@ -21,6 +21,7 @@ package org.apache.cayenne.modeler.dialog.templateeditor;
 
 import org.apache.cayenne.configuration.xml.DataChannelMetaData;
 import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.di.Key;
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.gen.ClassGenerationActionFactory;
@@ -40,31 +41,34 @@ import javax.swing.text.BadLocationException;
 import java.awt.Component;
 import java.io.File;
 import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * since 4.3
  */
 public class TemplateEditorController extends CayenneController {
 
+    public static final String TEMPLATE_EDITOR_REPO = "templateEditorRepo";
+    public static final String TEMPLATE_EDITOR_WRITER = "tplEditorWriter";
+    private static final String EDITED_TEMPLATE = "editedTemplate";
+    private static final Key<StringWriter> TPL_EDITOR_WRITER = Key.get(StringWriter.class, TEMPLATE_EDITOR_WRITER);
+
+    private final Map<String, String> customTemplates;
+    private final DataMap currentDataMap;
+
     protected TemplatePreferencesView preferencesView;
     protected TemplateEditorView view;
     protected boolean canceled;
-    private final Map<String, String> customTemplates;
-    private static final String EDITED_TEMPLATE = "editedTemplate";
-    public static final String TEMPLATE_EDITOR_REPO = "templateEditorRepo";
-    private final DataMap currentDataMap;
 
     public TemplateEditorController(TemplatePreferences preferences) {
         super(preferences);
-        this.preferencesView = (TemplatePreferencesView) preferences.getView();
+        this.preferencesView = preferences.getView();
         this.customTemplates = application.getCodeTemplateManager().getCustomTemplates();
         this.currentDataMap = application.getFrameController().getProjectController().getCurrentDataMap();
-        this.view = new TemplateEditorView( getEntityNames());
+        this.view = new TemplateEditorView(getEntityNames());
         initBindings();
     }
 
@@ -117,18 +121,18 @@ public class TemplateEditorController extends CayenneController {
     public void generateAction() throws Exception {
         putTemplateTextInRepository();
         Injector injector = getInjector();
-        ClassGenerationAction action =  injector
+        ClassGenerationAction action = injector
                 .getInstance(ClassGenerationActionFactory.class)
                 .createAction(getCgenConfiguration());
-        StringWriter writer = injector.getInstance(StringWriter.class);
-    action.addEntities(Collections.singleton(getSelectedEntity()));
+        StringWriter writer = injector.getInstance(TPL_EDITOR_WRITER);
+        action.addEntities(Collections.singleton(getSelectedEntity()));
         int caretPosition = view.getEditingTemplatePane().getCaretPosition();
         try {
             action.execute();
+        } catch (ParseErrorException pe) {
+            caretPosition = getErrorCaretPosition(pe);
+            writer.write(pe.getMessage());
         } catch (Exception e) {
-            if (e instanceof ParseErrorException) {
-                caretPosition = getErrorCaretPosition((ParseErrorException) e);
-            }
             writer.write(e.getMessage());
         }
         view.getEditingTemplatePane().setCaretPosition(caretPosition);
@@ -147,7 +151,7 @@ public class TemplateEditorController extends CayenneController {
         return new ToolsInjectorBuilder()
                 .addModule(binder -> binder.bind(DataChannelMetaData.class).toInstance(metaData))
                 .addModule(binder -> binder.bind(ClassGenerationActionFactory.class).to(PreviewClassGenerationFactory.class))
-                .addModule(binder -> binder.bind(StringWriter.class).to(StringWriter.class))
+                .addModule(binder -> binder.bind(TPL_EDITOR_WRITER).to(StringWriter.class))
                 .create();
     }
 
@@ -176,26 +180,19 @@ public class TemplateEditorController extends CayenneController {
 
     private ObjEntity getSelectedEntity() {
         String selectedEntityName = view.getSelectedEntityName();
-        ObjEntity selectedObject = null;
-        Collection<ObjEntity> objEntities = currentDataMap.getObjEntities();
-        for (ObjEntity object : objEntities) {
-            if (selectedEntityName.equals(object.getName())) {
-                selectedObject = object;
-            }
+        if(currentDataMap == null) {
+            return null;
         }
-        return selectedObject;
+        return currentDataMap.getObjEntity(selectedEntityName);
     }
 
     private List<String> getEntityNames() {
-        ArrayList<String> names = new ArrayList<>();
-        if (currentDataMap != null) {
-            Object[] objEntities = currentDataMap.getObjEntities().toArray();
-            for (Object objEntity : objEntities) {
-                ObjEntity s = (ObjEntity) objEntity;
-                names.add(s.getName());
-            }
+        if(currentDataMap == null) {
+            return Collections.emptyList();
         }
-        return names;
+        return currentDataMap.getObjEntities().stream()
+                .map(ObjEntity::getName)
+                .collect(Collectors.toList());
     }
 
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/TemplateEditorView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/TemplateEditorView.java
index 4580dbd34..a167cfd8f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/TemplateEditorView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/templateeditor/TemplateEditorView.java
@@ -54,7 +54,7 @@ public class TemplateEditorView extends JDialog {
     protected JButton saveButton;
     protected JButton findButton;
     protected JButton findAndReplaceButton;
-    protected JComboBox<Object> entityComboBox;
+    protected JComboBox<String> entityComboBox;
     private JSplitPane split;
     private JToolBar toolBar;
     private JPanel topPanel;
@@ -80,7 +80,7 @@ public class TemplateEditorView extends JDialog {
         this.findAndReplaceButton.setToolTipText("Find and replace");
         this.previewButton = new JButton(ModelerUtil.buildIcon("icon-edit.png"));
         this.previewButton.setToolTipText("Generate preview");
-        this.entityComboBox = new JComboBox<>(entityNames.toArray());
+        this.entityComboBox = new JComboBox<>(entityNames.toArray(new String[0]));
         this.entityComboBox.setToolTipText("Select an entity for the test");
     }