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(-)
----------------------------------------------------------------------