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 2009/03/13 16:07:36 UTC
svn commit: r753292 - in /cayenne/main/trunk/framework:
cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/
cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/
Author: aadamchik
Date: Fri Mar 13 15:07:35 2009
New Revision: 753292
URL: http://svn.apache.org/viewvc?rev=753292&view=rev
Log:
CAY-1164 Implement EJBQL query support in the Modeler
a patch by Olga to support line breaks and tabs
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/TextPaneView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/UnderlineHighlighterForText.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt?rev=753292&r1=753291&r2=753292&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt Fri Mar 13 15:07:35 2009
@@ -86,6 +86,7 @@
" "
| "\r"
| "\t"
+ | "\n"
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java?rev=753292&r1=753291&r2=753292&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/JCayenneTextPane.java Fri Mar 13 15:07:35 2009
@@ -7,6 +7,8 @@
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
@@ -67,7 +69,7 @@
y = (int) caretCoords.getY();
}
catch (BadLocationException ex) {
- logObj.warn("Error: " , ex);
+ logObj.warn("Error: ", ex);
}
int lineHeight = pane.getFontMetrics(pane.getFont()).getHeight();
@@ -131,10 +133,10 @@
if (pane.getText(evt.getOffset(), 1).toString().equals("/")
|| pane.getText(evt.getOffset(), 1).toString().equals("*")) {
pane.repaint();
- }
+ }
}
catch (Exception e) {
- logObj.warn("Error: " , e);
+ logObj.warn("Error: ", e);
}
}
@@ -155,17 +157,26 @@
}
public void setHighlightText(int line, int lastIndex, int size) {
-
- int position;
+ int k = 0;
+ try {
+ Matcher matcherTab = Pattern.compile("\t").matcher(
+ pane.getText(getPosition(line, 0), getPosition(line, lastIndex)));
+ while (matcherTab.find()) {
+ k += 7;
+ }
+ }
+ catch (BadLocationException e1) {
+ logObj.warn("Error: ", e1);
+ }
try {
- position = getPosition(line, lastIndex);
+ int position = getPosition(line, lastIndex-k);
int positionEnd = position + size;
Highlighter highlighter = pane.getHighlighter();
removeHighlightText(highlighter);
highlighter.addHighlight(position, positionEnd, painter);
}
catch (BadLocationException e) {
- logObj.warn("Error: " , e);
+ logObj.warn("Error: ", e);
}
}
@@ -214,16 +225,22 @@
}
}
catch (Exception e1) {
- logObj.warn("Error: " , e1);
+ logObj.warn("Error: ", e1);
}
for (int line = startline, y = starting_y; line <= endline; y += fontHeight, line++) {
Color color = g.getColor();
- g.setColor(Color.gray);
+
Font f2 = SQLSyntaxConstants.DEFAULT_FONT;
FontMetrics fm2 = getFontMetrics(f2);
g.setFont(f2);
+ if (line - 1 == doc.getDefaultRootElement().getElementIndex(
+ pane.getCaretPosition())) {
+ g.setColor(new Color(224, 224, 255));
+ g.fillRect(0, y - fontHeight + 3, 30, fontHeight + 1);
+ }
+ g.setColor(Color.gray);
g.drawString(Integer.toString(line), (30 - fm2.stringWidth(Integer
.toString(line))) / 2, y);
g.setColor(color);
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/TextPaneView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/TextPaneView.java?rev=753292&r1=753291&r2=753292&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/TextPaneView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/TextPaneView.java Fri Mar 13 15:07:35 2009
@@ -48,7 +48,7 @@
String[] keywords2 = syntaxConstants.getKEYWORDS2();
String[] operators = syntaxConstants.getOPERATORS();
String[] types = syntaxConstants.getTYPES();
-
+
for (int i = 0; i < keywords.length; i++) {
String patern = "(" + keywords[i] + ")";
patternSyntaxStyle.put(Pattern.compile(patern, Pattern.UNICODE_CASE
@@ -66,7 +66,7 @@
patternSyntaxStyle.put(Pattern.compile(patern, Pattern.UNICODE_CASE
| Pattern.CASE_INSENSITIVE), style.syntaxStyleMap
.get(TextPaneStyleTypes.KEYWORDS));
- }
+ }
for (int i = 0; i < types.length; i++) {
String patern = "(" + types[i] + ")";
patternSyntaxStyle.put(Pattern.compile(patern, Pattern.UNICODE_CASE
@@ -162,10 +162,14 @@
Matcher matcher = entry.getKey().matcher(text);
while (matcher.find()) {
- if ((text.length() == matcher.end()
+ if ((text.length() == matcher.end()
+ || text.charAt(matcher.end()) == '\t'
|| text.charAt(matcher.end()) == ' ' || text.charAt(matcher
.end()) == '\n')
- && (matcher.start() == 0 || text.charAt(matcher.start() - 1) == ' ')) {
+ && (matcher.start() == 0
+ || text.charAt(matcher.start() - 1) == '\t'
+ || text.charAt(matcher.start() - 1) == '\n'
+ || text.charAt(matcher.start() - 1) == ' ')) {
boolean inComment = false;
for (Map.Entry<Integer, Integer> entryCommentInLine : commentInLine
.entrySet()) {
@@ -175,7 +179,8 @@
}
}
if (!inComment) {
- startMap.put(matcher.start(), matcher.end());
+
+ startMap.put(matcher.start(1), matcher.end());
syntaxStyleMap.put(matcher.start(1), entry.getValue());
}
}
@@ -189,9 +194,11 @@
while (matcher.find()) {
if ((text.length() == matcher.end()
|| text.charAt(matcher.end()) == ' '
- || text.charAt(matcher.end()) == ')' || text.charAt(matcher
+ || text.charAt(matcher.end()) == ')'
+ || text.charAt(matcher.end()) == '\t' || text.charAt(matcher
.end()) == '\n')
&& (matcher.start() == 0
+ || text.charAt(matcher.start() - 1) == '\t'
|| text.charAt(matcher.start() - 1) == ' '
|| text.charAt(matcher.start() - 1) == '=' || text
.charAt(matcher.start() - 1) == '(')) {
@@ -210,7 +217,6 @@
}
}
}
-
}
// TODO: check the map for overlapping parts
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/UnderlineHighlighterForText.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/UnderlineHighlighterForText.java?rev=753292&r1=753291&r2=753292&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/UnderlineHighlighterForText.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/textpane/UnderlineHighlighterForText.java Fri Mar 13 15:07:35 2009
@@ -82,19 +82,15 @@
FontMetrics fm = c.getFontMetrics(c.getFont());
int baseline = alloc.y + alloc.height - fm.getDescent() + 1;
- int[] masY = {
- 0, 1, 1, 0, -1, -1
- };
-
- int[] x = new int[alloc.width];
- int[] y = new int[alloc.width];
-
- for (int i = 0; i < alloc.width; i++) {
- x[i] = alloc.x + i;
- y[i] = baseline + masY[i % 6];
+
+ int i = alloc.x;
+ int end = alloc.x + alloc.width - 1;
+ while (i < end) {
+ g.drawLine(i, baseline, i + 2, baseline);
+ g.drawLine(i, baseline + 1, i + 2, baseline + 1);
+ i += 4;
}
- g.drawPolyline(x, y, alloc.width);
return alloc;
}