[jboss-svn-commits] JBL Code SVN: r8198 - in labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide: . editors preferences
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Dec 10 19:58:17 EST 2006
Author: KrisVerlaenen
Date: 2006-12-10 19:58:14 -0500 (Sun, 10 Dec 2006)
New Revision: 8198
Added:
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsPairMatcher.java
Modified:
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLRuleEditor.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/preferences/DroolsPreferencePage.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/preferences/IDroolsConstants.java
Log:
JBRULES-581: Pair Matching in DRL editor
- showing matching pair of '(', ')', '[', ']', '{' and '}'
- made preference for caching of parsed rules
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java 2006-12-11 00:53:07 UTC (rev 8197)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java 2006-12-11 00:58:14 UTC (rev 8198)
@@ -45,6 +45,8 @@
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -69,6 +71,7 @@
private Map parsedRules = new HashMap();
private Map compiledRules = new HashMap();
private Map ruleInfoByClassNameMap = new HashMap();
+ private boolean useCachePreference;
/**
* The constructor.
@@ -83,6 +86,21 @@
*/
public void start(BundleContext context) throws Exception {
super.start(context);
+ IPreferenceStore preferenceStore = getPreferenceStore();
+ useCachePreference = preferenceStore.getBoolean(IDroolsConstants.CACHE_PARSED_RULES);
+ preferenceStore.addPropertyChangeListener(new IPropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ if (IDroolsConstants.CACHE_PARSED_RULES.equals(event.getProperty())) {
+ useCachePreference = ((Boolean) event.getNewValue()).booleanValue();
+ if (!useCachePreference) {
+ parsedRules.clear();
+ compiledRules.clear();
+ ruleInfoByClassNameMap.clear();
+ }
+ }
+ }
+ });
+
}
/**
@@ -188,6 +206,7 @@
protected void initializeDefaultPreferences(IPreferenceStore store) {
store.setDefault(IDroolsConstants.BUILD_ALL, false);
store.setDefault(IDroolsConstants.EDITOR_FOLDING, true);
+ store.setDefault(IDroolsConstants.CACHE_PARSED_RULES, true);
}
public DRLInfo parseResource(IResource resource, boolean compile) throws DroolsParserException {
@@ -252,6 +271,7 @@
}
private DRLInfo generateParsedResource(String content, IResource resource, boolean useCache, boolean compile) throws DroolsParserException {
+ useCache = useCache && useCachePreference;
DrlParser parser = new DrlParser();
try {
Reader dslReader = DSLAdapter.getDSLContent(content, resource);
@@ -303,13 +323,13 @@
if (useCache) {
if (compile && !parser.hasErrors()) {
parsedRules.remove(resource);
- compiledRules.put(resource, result);
+ compiledRules.put(resource, result);
RuleInfo[] ruleInfos = result.getRuleInfos();
for (int i = 0; i < ruleInfos.length; i++) {
ruleInfoByClassNameMap.put(ruleInfos[i].getClassName(), ruleInfos[i]);
}
} else {
- parsedRules.put(resource, result);
+ parsedRules.put(resource, result);
}
}
return result;
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLRuleEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLRuleEditor.java 2006-12-11 00:53:07 UTC (rev 8197)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLRuleEditor.java 2006-12-11 00:58:14 UTC (rev 8198)
@@ -13,6 +13,7 @@
import org.drools.ide.debug.core.IDroolsDebugConstants;
import org.drools.ide.editors.outline.RuleContentOutlinePage;
import org.drools.ide.editors.scanners.RuleEditorMessages;
+import org.drools.ide.preferences.IDroolsConstants;
import org.drools.lang.descr.FactTemplateDescr;
import org.drools.lang.descr.FunctionDescr;
import org.drools.lang.descr.PackageDescr;
@@ -27,6 +28,7 @@
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.source.Annotation;
@@ -36,12 +38,14 @@
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel;
import org.eclipse.jface.text.source.projection.ProjectionSupport;
import org.eclipse.jface.text.source.projection.ProjectionViewer;
+import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.editors.text.TextEditor;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
+import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
import org.eclipse.ui.texteditor.TextOperationAction;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
@@ -63,10 +67,13 @@
private Annotation[] oldAnnotations;
private ProjectionAnnotationModel annotationModel;
+ protected DroolsPairMatcher bracketMatcher = new DroolsPairMatcher();
public DRLRuleEditor() {
setSourceViewerConfiguration(new DRLSourceViewerConfig(this));
setDocumentProvider(new DRLDocumentProvider());
+ getPreferenceStore().setDefault(IDroolsConstants.DRL_EDITOR_MATCHING_BRACKETS, true);
+ PreferenceConverter.setDefault(getPreferenceStore(), IDroolsConstants.DRL_EDITOR_MATCHING_BRACKETS_COLOR, new RGB(192, 192, 192));
}
public void createPartControl(Composite parent) {
@@ -88,7 +95,15 @@
getSourceViewerDecorationSupport(viewer);
return viewer;
}
-
+
+ protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupport support) {
+ support.setCharacterPairMatcher(bracketMatcher);
+ support.setMatchingCharacterPainterPreferenceKeys(
+ IDroolsConstants.DRL_EDITOR_MATCHING_BRACKETS,
+ IDroolsConstants.DRL_EDITOR_MATCHING_BRACKETS_COLOR);
+ super.configureSourceViewerDecorationSupport(support);
+ }
+
public void updateFoldingStructure(List positions) {
Annotation[] annotations = new Annotation[positions.size()];
// this will hold the new annotations along
@@ -356,4 +371,12 @@
DroolsIDEPlugin.log(exc);
}
}
+
+ public void dispose() {
+ super.dispose();
+ if (bracketMatcher != null) {
+ bracketMatcher.dispose();
+ bracketMatcher = null;
+ }
+ }
}
Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsPairMatcher.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsPairMatcher.java 2006-12-11 00:53:07 UTC (rev 8197)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsPairMatcher.java 2006-12-11 00:58:14 UTC (rev 8198)
@@ -0,0 +1,91 @@
+package org.drools.ide.editors;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+
+import org.drools.ide.DroolsIDEPlugin;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.source.ICharacterPairMatcher;
+
+public final class DroolsPairMatcher implements ICharacterPairMatcher {
+
+ private int anchor;
+ private static final char[] leftChars = new char[] { '(', '{', '[' };
+ private static final char[] rightChars = new char[] { ')', '}', ']' };
+
+ public IRegion match(IDocument document, int offset) {
+ if (offset <= 0) {
+ return null;
+ }
+ try {
+ char c = document.getChar(offset - 1);
+ for (int i = 0; i < rightChars.length; i++) {
+ if (c == rightChars[i]) {
+ return searchLeft(document, offset, rightChars[i], leftChars[i]);
+ }
+ if (c == leftChars[i]) {
+ return searchRight(document, offset, rightChars[i], leftChars[i]);
+ }
+ }
+ } catch (BadLocationException e) {
+ DroolsIDEPlugin.log(e);
+ }
+ return null;
+ }
+
+ private IRegion searchRight(IDocument document, int offset, char rightChar, char leftChar) throws BadLocationException {
+ Stack stack = new Stack();
+ anchor = ICharacterPairMatcher.LEFT;
+ char[] chars = document.get(offset, document.getLength() - offset).toCharArray();
+ for (int i = 0; i < chars.length; i++) {
+ if (chars[i] == leftChar) {
+ stack.push(new Character(chars[i]));
+ continue;
+ }
+ if (chars[i] == rightChar) {
+ if (stack.isEmpty()) {
+ return new Region(offset - 1, i + 2);
+ } else {
+ stack.pop();
+ }
+ }
+ }
+ return null;
+ }
+
+ private IRegion searchLeft(IDocument document, int offset, char rightChar, char leftChar)
+ throws BadLocationException {
+ Stack stack = new Stack();
+ anchor = ICharacterPairMatcher.RIGHT;
+ char[] chars = document.get(0, offset - 1).toCharArray();
+ for (int i = chars.length - 1; i >= 0; i--) {
+ if (chars[i] == rightChar) {
+ stack.push(new Character(chars[i]));
+ continue;
+ }
+ if (chars[i] == leftChar) {
+ if (stack.isEmpty()) {
+ return new Region(i, offset - i);
+ } else {
+ stack.pop();
+ }
+ }
+ }
+ return null;
+ }
+
+ public int getAnchor() {
+ return anchor;
+ }
+
+ public void dispose() {
+ }
+
+ public void clear() {
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/preferences/DroolsPreferencePage.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/preferences/DroolsPreferencePage.java 2006-12-11 00:53:07 UTC (rev 8197)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/preferences/DroolsPreferencePage.java 2006-12-11 00:58:14 UTC (rev 8198)
@@ -15,12 +15,15 @@
private Button buildAllCheckBox;
private Button collapseEditorCheckBox;
+ private Button cacheParsedRulesCheckBox;
protected Control createContents(Composite parent) {
buildAllCheckBox = createCheckBox(parent,
"Automatically reparse all rules if a Java resource is changed.");
collapseEditorCheckBox = createCheckBox(parent,
"Use code folding in DRL editor.");
+ cacheParsedRulesCheckBox = createCheckBox(parent,
+ "When parsing rules, always cache the result for future use. Warning: when disabled, debugging of rules will not work.");
initializeValues();
@@ -43,12 +46,14 @@
IPreferenceStore store = getPreferenceStore();
buildAllCheckBox.setSelection(store.getDefaultBoolean(IDroolsConstants.BUILD_ALL));
collapseEditorCheckBox.setSelection(store.getDefaultBoolean(IDroolsConstants.EDITOR_FOLDING));
+ cacheParsedRulesCheckBox.setSelection(store.getDefaultBoolean(IDroolsConstants.CACHE_PARSED_RULES));
}
private void initializeValues() {
IPreferenceStore store = getPreferenceStore();
buildAllCheckBox.setSelection(store.getBoolean(IDroolsConstants.BUILD_ALL));
collapseEditorCheckBox.setSelection(store.getBoolean(IDroolsConstants.EDITOR_FOLDING));
+ cacheParsedRulesCheckBox.setSelection(store.getBoolean(IDroolsConstants.CACHE_PARSED_RULES));
}
protected void performDefaults() {
@@ -66,6 +71,7 @@
IPreferenceStore store = getPreferenceStore();
store.setValue(IDroolsConstants.BUILD_ALL, buildAllCheckBox.getSelection());
store.setValue(IDroolsConstants.EDITOR_FOLDING, collapseEditorCheckBox.getSelection());
+ store.setValue(IDroolsConstants.CACHE_PARSED_RULES, cacheParsedRulesCheckBox.getSelection());
}
public void init(IWorkbench workbench) {
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/preferences/IDroolsConstants.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/preferences/IDroolsConstants.java 2006-12-11 00:53:07 UTC (rev 8197)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/preferences/IDroolsConstants.java 2006-12-11 00:58:14 UTC (rev 8198)
@@ -4,5 +4,8 @@
String BUILD_ALL = "Drools.BuildAll";
String EDITOR_FOLDING = "Drools.EditorFolding";
+ String CACHE_PARSED_RULES = "Drools.CacheParsedRules";
+ String DRL_EDITOR_MATCHING_BRACKETS = "Drools.DRLMatchingBrackets";
+ String DRL_EDITOR_MATCHING_BRACKETS_COLOR = "Drools.DRLMatchingBracketsColor";
}
More information about the jboss-svn-commits
mailing list