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/11/23 14:21:54 UTC

[1/2] cayenne git commit: CAY-2497 Modeler: SQL Scripts tab isn't scrollable

Repository: cayenne
Updated Branches:
  refs/heads/STABLE-4.0 c75d4b9e9 -> 17c501887


CAY-2497 Modeler: SQL Scripts tab isn't scrollable


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

Branch: refs/heads/STABLE-4.0
Commit: 7203355242918ddae8c2fb333587679254f2ee2e
Parents: c75d4b9
Author: Arseni Bulatski <an...@gmail.com>
Authored: Fri Nov 23 12:32:56 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Fri Nov 23 12:32:56 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |   1 +
 .../modeler/editor/SQLTemplateScriptsTab.java   | 214 ++++++++-----------
 .../components/textpane/JCayenneTextPane.java   |  41 ++--
 3 files changed, 118 insertions(+), 138 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/72033552/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index cee4564..a0b47a3 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -35,6 +35,7 @@ CAY-2464 ClassCastException when returning PRUNED_NODE in expression transformer
 CAY-2470 Can't bind SQLExec parameters in a loop
 CAY-2472 Clear cached replacement query on mutation in all indirect queries
 CAY-2480 cayenne:cdbgen and cayenne:cgen have identical text in cayenne-maven-plugin
+CAY-2497 Modeler: SQL Scripts tab isn't scrollable
 
 ----------------------------------
 Release: 4.0

http://git-wip-us.apache.org/repos/asf/cayenne/blob/72033552/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java
----------------------------------------------------------------------
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/editor/SQLTemplateScriptsTab.java
index 2276fb1..7a18e2b 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/editor/SQLTemplateScriptsTab.java
@@ -23,18 +23,16 @@ import com.jgoodies.forms.builder.PanelBuilder;
 import com.jgoodies.forms.layout.CellConstraints;
 import com.jgoodies.forms.layout.FormLayout;
 import org.apache.cayenne.configuration.event.QueryEvent;
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.util.DbAdapterInfo;
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.map.SQLTemplateDescriptor;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.util.DbAdapterInfo;
+import org.apache.cayenne.modeler.util.JUndoableCayenneTextPane;
+import org.apache.cayenne.swing.components.textpane.JCayenneTextPane;
+import org.apache.cayenne.swing.components.textpane.syntax.SQLSyntaxConstants;
 import org.apache.cayenne.util.Util;
-import org.syntax.jedit.JEditTextArea;
-import org.syntax.jedit.KeywordMap;
-import org.syntax.jedit.tokenmarker.PLSQLTokenMarker;
-import org.syntax.jedit.tokenmarker.SQLTokenMarker;
-import org.syntax.jedit.tokenmarker.Token;
-import org.syntax.jedit.tokenmarker.TokenMarker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.DefaultListCellRenderer;
@@ -51,7 +49,6 @@ import javax.swing.text.Document;
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
-import java.awt.Font;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -62,51 +59,19 @@ import java.util.Map;
  * A panel for configuring SQL scripts of a SQL template.
  * 
  */
-public class SQLTemplateScriptsTab extends JPanel implements DocumentListener {
+public class SQLTemplateScriptsTab extends JPanel {
 
     private static final String DEFAULT_LABEL = "Default";
-    
-    /**
-     * JEdit marker for SQL Template
-     */
-    static final TokenMarker SQL_TEMPLATE_MARKER;
-    static {
-        KeywordMap map = PLSQLTokenMarker.getKeywordMap();
-        
-        //adding more keywords
-        map.add("FIRST", Token.KEYWORD1);
-        map.add("LIMIT", Token.KEYWORD1);
-        map.add("OFFSET", Token.KEYWORD1);
-        map.add("TOP", Token.KEYWORD1);
-        
-        //adding velocity template highlighing
-        map.add("#bind", Token.KEYWORD2);
-        map.add("#bindEqual", Token.KEYWORD2);
-        map.add("#bindNotEqual", Token.KEYWORD2);
-        map.add("#bindObjectEqual", Token.KEYWORD2);
-        map.add("#bindObjectNotEqual", Token.KEYWORD2);
-        map.add("#chain", Token.KEYWORD2);
-        map.add("#chunk", Token.KEYWORD2);
-        map.add("#end", Token.KEYWORD2);
-        map.add("#result", Token.KEYWORD2);
-        
-        SQL_TEMPLATE_MARKER = new SQLTokenMarker(map);
-    }
+    private static final Logger logger = LoggerFactory.getLogger(SQLTemplateScriptsTab.class);
 
     protected ProjectController mediator;
 
-    protected JList scripts;
-    
-    /**
-     * JEdit text component for highlighing SQL syntax (see CAY-892)
-     */
-    protected JEditTextArea scriptArea;
-    
-    /**
-     * Indication that no update should be fired
-     */
-    private boolean updateDisabled;
-    
+    protected JList<String> scripts;
+    protected List<String> keys;
+    protected PanelBuilder builder;
+    protected CellConstraints cc;
+    protected JCayenneTextPane textPane;
+    protected List<JCayenneTextPane> panes;
     protected ListSelectionListener scriptRefreshHandler;
 
     public SQLTemplateScriptsTab(ProjectController mediator) {
@@ -115,6 +80,16 @@ public class SQLTemplateScriptsTab extends JPanel implements DocumentListener {
         initView();
     }
 
+    private void prepareScriptAreas() {
+        for(String key : DbAdapterInfo.getStandardAdapters()) {
+            JCayenneTextPane currPane = new JUndoableCayenneTextPane(new SQLSyntaxConstants());
+            currPane.setName(key);
+            currPane.getDocument().addDocumentListener(new CustomListener(currPane.getName()));
+            builder.add(currPane.getScrollPane(), cc.xy(3, 2));
+            panes.add(currPane);
+        }
+    }
+
     protected void initView() {
         // create widgets, etc.
 
@@ -122,43 +97,46 @@ public class SQLTemplateScriptsTab extends JPanel implements DocumentListener {
 
             public void valueChanged(ListSelectionEvent e) {
                 if (!e.getValueIsAdjusting()) {
-                    displayScript();                    
+                    displayScript();
                 }
             }
         };
 
-        scripts = new JList();
+        scripts = new JList<>();
         scripts.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        scripts.setCellRenderer(new DbAdapterListRenderer(DbAdapterInfo
-                .getStandardAdapterLabels()));
+        scripts.setCellRenderer(new DbAdapterListRenderer(DbAdapterInfo.getStandardAdapterLabels()));
 
-        List keys = new ArrayList(DbAdapterInfo.getStandardAdapters().length + 1);
+        keys = new ArrayList<>(DbAdapterInfo.getStandardAdapters().length + 1);
         keys.addAll(Arrays.asList(DbAdapterInfo.getStandardAdapters()));
         Collections.sort(keys);
         keys.add(0, DEFAULT_LABEL);
-        scripts.setModel(new DefaultComboBoxModel(keys.toArray()));
-        
-        scriptArea = Application.getWidgetFactory().createJEditTextArea();
-
-        scriptArea.setTokenMarker(SQL_TEMPLATE_MARKER);
-        scriptArea.getDocument().addDocumentListener(this);
-        scriptArea.getPainter().setFont(new Font("Verdana", Font.PLAIN, 12));
+        scripts.setModel(new DefaultComboBoxModel<>(keys.toArray(new String[0])));
 
         // assemble
-        CellConstraints cc = new CellConstraints();
-        PanelBuilder builder = new PanelBuilder(new FormLayout(
+        cc = new CellConstraints();
+
+        textPane = new JUndoableCayenneTextPane(new SQLSyntaxConstants());
+        textPane.setName(DEFAULT_LABEL);
+        textPane.getDocument().addDocumentListener(new CustomListener(textPane.getName()));
+
+        panes = new ArrayList<>();
+        panes.add(textPane);
+
+        builder = new PanelBuilder(new FormLayout(
                 "fill:100dlu, 3dlu, fill:100dlu:grow",
-                "3dlu, fill:p:grow"));
+                "3dlu, fill:100dlu:grow"));
 
         // orderings table must grow as the panel is resized
         builder.add(new JScrollPane(
                 scripts,
                 JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                 JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), cc.xy(1, 2));
-        builder.add(scriptArea, cc.xy(3, 2));
+        builder.add(textPane.getScrollPane(), cc.xy(3, 2));
 
         setLayout(new BorderLayout());
         add(builder.getPanel(), BorderLayout.CENTER);
+
+        prepareScriptAreas();
     }
 
     void initFromModel() {
@@ -174,8 +152,7 @@ public class SQLTemplateScriptsTab extends JPanel implements DocumentListener {
         scripts.setSelectedIndex(0);
         displayScript();
         scripts.addListSelectionListener(scriptRefreshHandler);
-        
-        scriptArea.setEnabled(true);
+
         setVisible(true);
     }
 
@@ -209,63 +186,45 @@ public class SQLTemplateScriptsTab extends JPanel implements DocumentListener {
 
         SQLTemplateDescriptor query = getQuery();
         if (query == null) {
-            disableEditor();
             return;
         }
 
-        String key = (String) scripts.getSelectedValue();
+        String key = scripts.getSelectedValue();
         if (key == null) {
-            disableEditor();
             return;
         }
 
-        enableEditor();
-
-        String text = (key.equals(DEFAULT_LABEL)) ? query.getSql() : query
+        final String text = (key.equals(DEFAULT_LABEL)) ? query.getSql() : query
                 .getAdapterSql().get(key);
 
-        updateDisabled = true;
-        scriptArea.setText(text);
-        updateDisabled = false;
-    }
-
-    void disableEditor() {
-        scriptArea.setText(null);
-        scriptArea.setEnabled(false);
-        scriptArea.setEditable(false);
-        scriptArea.setBackground(getBackground());
-    }
-
-    void enableEditor() {
-        scriptArea.setEnabled(true);
-        scriptArea.setEditable(true);
-        scriptArea.setBackground(Color.WHITE);
+        for (final JCayenneTextPane textPane : panes) {
+            if (key.equals(textPane.getName())) {
+                textPane.setDocumentTextDirect(text);
+                textPane.getScrollPane().setVisible(true);
+                textPane.getPane().requestFocusInWindow();
+            } else {
+                textPane.getScrollPane().setVisible(false);
+            }
+        }
     }
 
-    void setSQL(DocumentEvent e) {
-        Document doc = e.getDocument();
-
-        try {
-            setSQL(doc.getText(0, doc.getLength()));
-        }
-        catch (BadLocationException e1) {
-            e1.printStackTrace();
+    void setSQL(DocumentEvent e, String key) {
+        if (key == null) {
+            return;
         }
 
-    }
-
-    /**
-     * Sets the value of SQL template for the currently selected script.
-     */
-    void setSQL(String text) {
         SQLTemplateDescriptor query = getQuery();
         if (query == null) {
             return;
         }
 
-        String key = (String) scripts.getSelectedValue();
-        if (key == null) {
-            return;
+        Document doc = e.getDocument();
+        String text = null;
+
+        try {
+            text = doc.getText(0, doc.getLength());
+        } catch (BadLocationException ex) {
+            logger.warn("Error reading document", ex);
         }
 
         if (text != null) {
@@ -275,33 +234,42 @@ public class SQLTemplateScriptsTab extends JPanel implements DocumentListener {
             }
         }
 
-        // Compare the value before modifying the query - text area
+        // Compare the value before modifying the query - text pane
         // will call "verify" even if no changes have occured....
         if (key.equals(DEFAULT_LABEL)) {
             if (!Util.nullSafeEquals(text, query.getSql())) {
                 query.setSql(text);
                 mediator.fireQueryEvent(new QueryEvent(this, query));
             }
-        }
-        else {
+        } else {
             if (!Util.nullSafeEquals(text, query.getAdapterSql().get(key))) {
                 query.getAdapterSql().put(key, text);
                 mediator.fireQueryEvent(new QueryEvent(this, query));
             }
         }
     }
-    
-    public void insertUpdate(DocumentEvent e) {
-        changedUpdate(e);
-    }
 
-    public void removeUpdate(DocumentEvent e) {
-        changedUpdate(e);
-    }
-    
-    public void changedUpdate(DocumentEvent e) {
-        if (!updateDisabled) {
-            setSQL(e);
+    final class CustomListener implements DocumentListener{
+
+        private String key;
+
+        public CustomListener(String key) {
+            this.key = key;
+        }
+
+        @Override
+        public void insertUpdate(DocumentEvent e) {
+            changedUpdate(e);
+        }
+
+        @Override
+        public void removeUpdate(DocumentEvent e) {
+            changedUpdate(e);
+        }
+
+        @Override
+        public void changedUpdate(DocumentEvent e) {
+            setSQL(e, key);
         }
     }
 
@@ -346,11 +314,11 @@ public class SQLTemplateScriptsTab extends JPanel implements DocumentListener {
             return c;
         }
     }
-    
+
     public int getSelectedIndex() {
         return scripts.getSelectedIndex();
     }
-    
+
     public void setSelectedIndex(int index) {
         scripts.setSelectedIndex(index);
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/72033552/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java
index 9c9b44b..6aadff7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java
@@ -18,14 +18,12 @@
  ****************************************************************/
 package org.apache.cayenne.swing.components.textpane;
 
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.event.MouseEvent;
+import org.apache.cayenne.modeler.Main;
+import org.apache.cayenne.modeler.util.ModelerUtil;
+import org.apache.cayenne.swing.components.textpane.syntax.SQLSyntaxConstants;
+import org.apache.cayenne.swing.components.textpane.syntax.SyntaxConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.swing.BorderFactory;
 import javax.swing.JPanel;
@@ -38,13 +36,14 @@ import javax.swing.text.BadLocationException;
 import javax.swing.text.Document;
 import javax.swing.text.Highlighter;
 import javax.swing.text.JTextComponent;
-
-import org.apache.cayenne.modeler.Main;
-import org.apache.cayenne.modeler.util.ModelerUtil;
-import org.apache.cayenne.swing.components.textpane.syntax.SQLSyntaxConstants;
-import org.apache.cayenne.swing.components.textpane.syntax.SyntaxConstant;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
 
 public class JCayenneTextPane extends JPanel {
 
@@ -190,6 +189,18 @@ public class JCayenneTextPane extends JPanel {
 
     }
 
+    public void setDocumentTextDirect(String text) {
+        Document document = getDocument();
+        try {
+            if(!document.getText(0, document.getLength()).equals(text)) {
+                document.remove(0, document.getLength());
+                document.insertString(0, text, null);
+            }
+        } catch (BadLocationException ex) {
+            logObj.warn("Error reading document", ex);
+        }
+    }
+
     public void setHighlightText(int lastIndex, int endIndex) throws BadLocationException {
         Highlighter highlighter = pane.getHighlighter();
         removeHighlightText(highlighter);


[2/2] cayenne git commit: Merge PR #354

Posted by nt...@apache.org.
Merge PR #354


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

Branch: refs/heads/STABLE-4.0
Commit: 17c501887ca8063692dd33bb64da27563c4d3138
Parents: c75d4b9 7203355
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Nov 23 17:21:31 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Nov 23 17:21:31 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |   1 +
 .../modeler/editor/SQLTemplateScriptsTab.java   | 214 ++++++++-----------
 .../components/textpane/JCayenneTextPane.java   |  41 ++--
 3 files changed, 118 insertions(+), 138 deletions(-)
----------------------------------------------------------------------