[jboss-svn-commits] JBL Code SVN: r9306 - labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Feb 2 19:31:55 EST 2007
Author: KrisVerlaenen
Date: 2007-02-02 19:31:54 -0500 (Fri, 02 Feb 2007)
New Revision: 9306
Modified:
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/DSLTree.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java
Log:
- fixed some code completion and dsl bugs
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/DSLTree.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/DSLTree.java 2007-02-02 19:32:42 UTC (rev 9305)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/DSLTree.java 2007-02-03 00:31:54 UTC (rev 9306)
@@ -247,7 +247,7 @@
*/
public Node[] getChildren(String obj, String text) {
Node thenode = this.root.getChild(obj);
- if (text.length() > 0) {
+ if (thenode != null && text.length() > 0) {
StringTokenizer tokenz = new StringTokenizer(text);
this.last = this.current;
while (tokenz.hasMoreTokens()) {
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java 2007-02-02 19:32:42 UTC (rev 9305)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java 2007-02-03 00:31:54 UTC (rev 9306)
@@ -122,10 +122,6 @@
RuleDescr ruleDescr = (RuleDescr) descr;
List subDescrs = ruleDescr.getLhs().getDescrs();
if (subDescrs.size() == 0) {
- return new Location(LOCATION_BEGIN_OF_CONDITION);
- }
- BaseDescr subDescr = (BaseDescr) subDescrs.get(subDescrs.size() - 1);
- if (subDescr == null) {
Matcher matcher = EXISTS_PATTERN.matcher(backText);
if (matcher.matches()) {
return new Location(LOCATION_BEGIN_OF_CONDITION_EXISTS);
@@ -134,27 +130,64 @@
if (matcher.matches()) {
return new Location(LOCATION_BEGIN_OF_CONDITION_NOT);
}
- matcher = EVAL_PATTERN.matcher(backText);
+ matcher = FROM_PATTERN.matcher(backText);
if (matcher.matches()) {
- String content = matcher.group(1);
- Location location = new Location(LOCATION_INSIDE_EVAL);
- location.setProperty(LOCATION_EVAL_CONTENT, content);
+ Location location = new Location(LOCATION_FROM);
+ location.setProperty(LOCATION_FROM_CONTENT, "");
return location;
}
return new Location(LOCATION_BEGIN_OF_CONDITION);
}
+ BaseDescr subDescr = (BaseDescr) subDescrs.get(subDescrs.size() - 1);
+ if (subDescr == null) {
+ return new Location(LOCATION_BEGIN_OF_CONDITION);
+ }
if (endReached(subDescr)) {
- Matcher matcher = FROM_PATTERN.matcher(backText);
- if (matcher.matches()) {
- Location location = new Location(LOCATION_FROM);
- location.setProperty(LOCATION_FROM_CONTENT, "");
- return location;
- }
return new Location(LOCATION_BEGIN_OF_CONDITION);
}
return determineLocationForDescr(subDescr, backText);
} else if (descr instanceof ColumnDescr) {
ColumnDescr columnDescr = (ColumnDescr) descr;
+// int locationType;
+// String propertyName = null;
+// String evaluator = null;
+// boolean endOfConstraint = false;
+// List subDescrs = columnDescr.getDescrs();
+// if (subDescrs.size() > 0) {
+// BaseDescr lastDescr = (BaseDescr) subDescrs.get(subDescrs.size() - 1);
+// if (lastDescr.getEndCharacter() != -1) {
+// endOfConstraint = true;
+// }
+// if (lastDescr instanceof FieldConstraintDescr) {
+// FieldConstraintDescr lastFieldDescr = (FieldConstraintDescr) lastDescr;
+// propertyName = lastFieldDescr.getFieldName();
+// List restrictions = lastFieldDescr.getRestrictions();
+// if (restrictions.size() > 0) {
+// RestrictionDescr restriction = (RestrictionDescr) restrictions.get(restrictions.size() - 1);
+// if (restriction instanceof LiteralRestrictionDescr) {
+// LiteralRestrictionDescr literal = (LiteralRestrictionDescr) restriction;
+// evaluator = literal.getEvaluator();
+// } else if (restriction instanceof VariableRestrictionDescr) {
+// VariableRestrictionDescr variable = (VariableRestrictionDescr) restriction;
+// evaluator = variable.getEvaluator();
+// }
+// }
+// }
+// }
+// if (endOfConstraint) {
+// locationType = LOCATION_INSIDE_CONDITION_END;
+// } else if (evaluator != null) {
+// locationType = LOCATION_INSIDE_CONDITION_ARGUMENT;
+// } else if (propertyName != null) {
+// locationType = LOCATION_INSIDE_CONDITION_OPERATOR;
+// } else {
+// locationType = LOCATION_INSIDE_CONDITION_START;
+// }
+// Location location = new Location(locationType);
+// location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+// location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, propertyName);
+// location.setProperty(LOCATION_PROPERTY_OPERATOR, evaluator);
+// return location;
// TODO: this is not completely safe, there are rare occasions where this could fail
Pattern pattern = Pattern.compile(".*(" + columnDescr.getObjectType() + ")\\s*\\((.*)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(backText);
@@ -323,14 +356,25 @@
return getLocationForColumn(columnContents, className);
}
return new Location(LOCATION_FROM_COLLECT);
+ } else if (descr instanceof EvalDescr) {
+ Matcher matcher = EVAL_PATTERN.matcher(backText);
+ if (matcher.matches()) {
+ String content = matcher.group(1);
+ Location location = new Location(LOCATION_INSIDE_EVAL);
+ location.setProperty(LOCATION_EVAL_CONTENT, content);
+ return location;
+ }
}
return new Location(LOCATION_UNKNOWN);
}
private static boolean endReached(BaseDescr descr) {
+ if (descr == null) {
+ return false;
+ }
if (descr instanceof ColumnDescr) {
- return (descr.getEndLine() != 0 || descr.getEndColumn() != 0);
+ return descr.getEndCharacter() != -1;
} else if (descr instanceof ExistsDescr) {
List descrs = ((ExistsDescr) descr).getDescrs();
if (descrs.isEmpty()) {
@@ -343,6 +387,12 @@
return false;
}
return endReached((BaseDescr) descrs.get(0));
+ } else if (descr instanceof NotDescr) {
+ List descrs = ((NotDescr) descr).getDescrs();
+ if (descrs.isEmpty()) {
+ return false;
+ }
+ return endReached((BaseDescr) descrs.get(0));
} else if (descr instanceof AndDescr) {
List descrs = ((AndDescr) descr).getDescrs();
if (descrs.size() != 2) {
@@ -358,16 +408,15 @@
return endReached((BaseDescr) descrs.get(0))
&& endReached((BaseDescr) descrs.get(1));
} else if (descr instanceof EvalDescr) {
- // EvalDescr are only added once the end has been reached
- return true;
- } else if (descr instanceof FromDescr) {
- return ((FromDescr) descr).getDataSource() != null;
- } else if (descr instanceof AccumulateDescr) {
- return ((AccumulateDescr) descr).getResultCode() != null;
- } else if (descr instanceof CollectDescr) {
- return ((CollectDescr) descr).getSourceColumn() != null;
+ return ((EvalDescr) descr).getText() != null;
}
- return false;
+ return descr.getEndCharacter() != -1;
+// else if (descr instanceof AccumulateDescr) {
+// return ((AccumulateDescr) descr).getResultCode() != null;
+// } else if (descr instanceof CollectDescr) {
+// return ((CollectDescr) descr).getSourceColumn() != null;
+// }
+// return false;
}
private static Location getLocationForColumn(String columnContents, String className) {
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java 2007-02-02 19:32:42 UTC (rev 9305)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java 2007-02-03 00:31:54 UTC (rev 9306)
@@ -1,7 +1,8 @@
-package org.drools.ide.editors.completion;
+package org.drools.ide.editors.completion;
import java.io.BufferedReader;
import java.io.IOException;
+import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
@@ -41,319 +42,412 @@
import org.eclipse.ui.part.FileEditorInput;
/**
- * For handling within rules, including DSLs.
- * At present this provides a fixed list, plus what is available
- * in the DSL configuration.
+ * For handling within rules, including DSLs. At present this provides a fixed
+ * list, plus what is available in the DSL configuration.
*
- * TODO: This can be enhanced to look back for declarations, and introspect to get
- * field names. (More can be done as well, this would just be the first step).
+ * TODO: This can be enhanced to look back for declarations, and introspect to
+ * get field names. (More can be done as well, this would just be the first
+ * step).
*
* This also handles queries, as they are just a type of rule essentially.
*
* @author Michael Neale, Kris Verlanen
*/
public class RuleCompletionProcessor extends DefaultCompletionProcessor {
-
- private static final Pattern query = Pattern.compile(".*\\Wquery\\W.*", Pattern.DOTALL);
- private static final Image droolsIcon = DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
- private static final Image dslIcon = DroolsPluginImages.getImage( DroolsPluginImages.DSL_EXPRESSION );
- private static final Image classIcon = DroolsPluginImages.getImage(DroolsPluginImages.CLASS);
- private static final Pattern START_OF_CONSEQUENCE = Pattern.compile(".*then\\s*", Pattern.DOTALL);
-
- private DSLTree dslTree = new DSLTree();
-
- public RuleCompletionProcessor(DRLRuleEditor editor) {
- super(editor);
- }
-
- protected List getCompletionProposals(ITextViewer viewer, final int documentOffset) {
- try {
- final List list = new ArrayList();
- DSLAdapter adapter = getDSLAdapter(viewer);
-
- IDocument doc = viewer.getDocument();
- String backText = readBackwards(documentOffset, doc);
-
- final String prefix = CompletionUtil.stripLastWord(backText);
-
- if (backText.length() < 5) {
- return list;
- }
-
- if (consequence(backText)) {
- List dslConsequences = adapter.listConsequenceItems();
- addDSLProposals(list, prefix, dslConsequences);
- if (!adapter.hasConsequences()) {
- // only add functions and keywords if at the beginning of a new statement
- String backTextWithoutPrefix = backText.substring(0, backText.length() - prefix.length());
- if (START_OF_CONSEQUENCE.matcher(backTextWithoutPrefix).matches()
- || START_OF_NEW_JAVA_STATEMENT.matcher(backTextWithoutPrefix).matches()) {
- addRHSCompletionProposals(list, prefix);
- addRHSFunctionCompletionProposals(viewer, list, prefix);
- }
- addRHSJavaCompletionProposals(list, backText, prefix);
- }
- } else if (condition(backText) || query(backText)) {
- String lastobj = this.getLastNonDashLine(backText);
- String last = this.getLastLine(backText);
- // we have to check if the last line is when. if it is we set
- // the last line to zero length string
- if (last.equals("when")) {
- last = "";
- lastobj = "*";
- }
- // pass the last string in the backText to getProposals
- List dslConditions = this.getProposals(lastobj,last);
- // if we couldn't find any matches, we add the list from
- // the DSLAdapter so that there's something
- if (dslConditions.size() == 0) {
- dslConditions.addAll(adapter.listConditionItems());
- }
- addDSLProposals(list, prefix, dslConditions);
- addLHSCompletionProposals(viewer, list, adapter, prefix, backText);
- } else {
- //we are in rule header
- addRuleHeaderItems(list, prefix);
- }
-
- filterProposalsOnPrefix(prefix, list);
- return list;
- } catch (Throwable t) {
- DroolsIDEPlugin.log(t);
- }
- return null;
- }
- private void addLHSCompletionProposals(ITextViewer viewer, final List list, DSLAdapter adapter, final String prefix, String backText) throws CoreException, DroolsParserException {
+ private static final Pattern query = Pattern.compile(".*\\Wquery\\W.*",
+ Pattern.DOTALL);
+
+ private static final Image droolsIcon = DroolsPluginImages
+ .getImage(DroolsPluginImages.DROOLS);
+
+ private static final Image dslIcon = DroolsPluginImages
+ .getImage(DroolsPluginImages.DSL_EXPRESSION);
+
+ private static final Image classIcon = DroolsPluginImages
+ .getImage(DroolsPluginImages.CLASS);
+
+ private static final Pattern START_OF_CONSEQUENCE = Pattern.compile(
+ ".*then\\s*", Pattern.DOTALL);
+
+ private DSLTree dslTree = new DSLTree();
+
+ public RuleCompletionProcessor(DRLRuleEditor editor) {
+ super(editor);
+ }
+
+ protected List getCompletionProposals(ITextViewer viewer,
+ final int documentOffset) {
+ try {
+ final List list = new ArrayList();
+ DSLAdapter adapter = getDSLAdapter(viewer);
+
+ IDocument doc = viewer.getDocument();
+ String backText = readBackwards(documentOffset, doc);
+
+ final String prefix = CompletionUtil.stripLastWord(backText);
+
+ if (backText.length() < 5) {
+ return list;
+ }
+
+ if (consequence(backText)) {
+ List dslConsequences = adapter.listConsequenceItems();
+ addDSLProposals(list, prefix, dslConsequences);
+ if (!adapter.hasConsequences()) {
+ // only add functions and keywords if at the beginning of a
+ // new statement
+ String backTextWithoutPrefix = backText.substring(0,
+ backText.length() - prefix.length());
+ if (START_OF_CONSEQUENCE.matcher(backTextWithoutPrefix)
+ .matches()
+ || START_OF_NEW_JAVA_STATEMENT.matcher(
+ backTextWithoutPrefix).matches()) {
+ addRHSCompletionProposals(list, prefix);
+ addRHSFunctionCompletionProposals(viewer, list, prefix);
+ }
+ addRHSJavaCompletionProposals(list, backText, prefix);
+ }
+ } else if (condition(backText) || query(backText)) {
+ String lastobj = this.getLastNonDashLine(backText);
+ String last = this.getLastLine(backText);
+ // we have to check if the last line is when. if it is we set
+ // the last line to zero length string
+ if (last.equals("when")) {
+ last = "";
+ lastobj = "*";
+ }
+ // pass the last string in the backText to getProposals
+ List dslConditions = this.getProposals(lastobj, last);
+ // if we couldn't find any matches, we add the list from
+ // the DSLAdapter so that there's something
+ if (dslConditions.size() == 0) {
+ dslConditions.addAll(adapter.listConditionItems());
+ }
+ addDSLProposals(list, prefix, dslConditions);
+ addLHSCompletionProposals(viewer, list, adapter, prefix,
+ backText);
+ } else {
+ // we are in rule header
+ addRuleHeaderItems(list, prefix);
+ }
+
+ filterProposalsOnPrefix(prefix, list);
+ return list;
+ } catch (Throwable t) {
+ DroolsIDEPlugin.log(t);
+ }
+ return null;
+ }
+
+ private void addLHSCompletionProposals(ITextViewer viewer, final List list,
+ DSLAdapter adapter, final String prefix, String backText)
+ throws CoreException, DroolsParserException {
Iterator iterator;
if (!adapter.hasConditions()) {
// determine location in condition
- LocationDeterminator.Location location = LocationDeterminator.getLocationInCondition(backText);
-
+ LocationDeterminator.Location location = LocationDeterminator
+ .getLocationInCondition(backText);
+
switch (location.getType()) {
- case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION:
- // if we are at the beginning of a new condition
- // add drools keywords
- list.add( new RuleCompletionProposal(prefix.length(), "and", "and ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "or", "or ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "from", "from ", droolsIcon));
- RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), "eval", "eval( )", 6 );
- prop.setImage(droolsIcon);
- list.add(prop);
- prop = new RuleCompletionProposal(prefix.length(), "then", "then" + System.getProperty("line.separator") + "\t");
- prop.setImage(droolsIcon);
- list.add(prop);
- // we do not break but also add all elements that are needed for and/or
- case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION_AND_OR:
- list.add( new RuleCompletionProposal(prefix.length(), "not", "not ", droolsIcon));
- // we do not break but also add all elements that are needed for not
- case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION_NOT:
- list.add( new RuleCompletionProposal(prefix.length(), "exists", "exists ", droolsIcon));
- // we do not break but also add all elements that are needed for exists
- case LocationDeterminator.LOCATION_FROM_ACCUMULATE:
- case LocationDeterminator.LOCATION_FROM_COLLECT :
- case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION_EXISTS:
- // and add imported classes
- List imports = getDRLEditor().getImports();
- iterator = imports.iterator();
- while (iterator.hasNext()) {
- String name = (String) iterator.next();
- int index = name.lastIndexOf(".");
- if (index != -1) {
- String className = name.substring(index + 1);
- RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), className, className + "( )", className.length() + 2);
- p.setPriority(-1);
- p.setImage(classIcon);
- list.add(p);
- }
- }
- List classesInPackage = getDRLEditor().getClassesInPackage();
- iterator = classesInPackage.iterator();
- while (iterator.hasNext()) {
- String name = (String) iterator.next();
- int index = name.lastIndexOf(".");
- if (index != -1) {
- String className = name.substring(index + 1);
- RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), className, className + "( )", className.length() + 2);
- p.setPriority(-1);
- p.setImage(classIcon);
- list.add(p);
- }
- }
- Set templates = getDRLEditor().getTemplates();
- iterator = templates.iterator();
- while (iterator.hasNext()) {
- String name = (String) iterator.next();
- RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), name, name + "( )", name.length() + 2);
- p.setPriority(-1);
- p.setImage(classIcon);
- list.add(p);
- }
- break;
- case LocationDeterminator.LOCATION_INSIDE_CONDITION_START :
- String className = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
- if (className != null) {
- boolean isTemplate = addFactTemplatePropertyProposals(prefix, className, list);
- if (!isTemplate) {
- ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor().getImports(), ProjectClassLoader.getProjectClassLoader(getEditor()));
- try {
- Class clazz = resolver.resolveType(className);
- if (clazz != null) {
- Iterator iterator2 = new ClassFieldInspector(clazz).getFieldNames().keySet().iterator();
- while (iterator2.hasNext()) {
- String name = (String) iterator2.next();
- RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), name, name + " ");
- p.setImage(methodIcon);
- list.add(p);
- }
+ case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION:
+ // if we are at the beginning of a new condition
+ // add drools keywords
+ list.add(new RuleCompletionProposal(prefix.length(), "and",
+ "and ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "or",
+ "or ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "from",
+ "from ", droolsIcon));
+ RuleCompletionProposal prop = new RuleCompletionProposal(prefix
+ .length(), "eval", "eval( )", 6);
+ prop.setImage(droolsIcon);
+ list.add(prop);
+ prop = new RuleCompletionProposal(prefix.length(), "then",
+ "then" + System.getProperty("line.separator") + "\t");
+ prop.setImage(droolsIcon);
+ list.add(prop);
+ // we do not break but also add all elements that are needed for
+ // and/or
+ case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION_AND_OR:
+ list.add(new RuleCompletionProposal(prefix.length(), "not",
+ "not ", droolsIcon));
+ // we do not break but also add all elements that are needed for
+ // not
+ case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION_NOT:
+ list.add(new RuleCompletionProposal(prefix.length(), "exists",
+ "exists ", droolsIcon));
+ // we do not break but also add all elements that are needed for
+ // exists
+ case LocationDeterminator.LOCATION_FROM_ACCUMULATE:
+ case LocationDeterminator.LOCATION_FROM_COLLECT:
+ case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION_EXISTS:
+ // and add imported classes
+ List imports = getDRLEditor().getImports();
+ iterator = imports.iterator();
+ while (iterator.hasNext()) {
+ String name = (String) iterator.next();
+ int index = name.lastIndexOf(".");
+ if (index != -1) {
+ String className = name.substring(index + 1);
+ RuleCompletionProposal p = new RuleCompletionProposal(
+ prefix.length(), className, className + "( )",
+ className.length() + 2);
+ p.setPriority(-1);
+ p.setImage(classIcon);
+ list.add(p);
+ }
+ }
+ List classesInPackage = getDRLEditor().getClassesInPackage();
+ iterator = classesInPackage.iterator();
+ while (iterator.hasNext()) {
+ String name = (String) iterator.next();
+ int index = name.lastIndexOf(".");
+ if (index != -1) {
+ String className = name.substring(index + 1);
+ RuleCompletionProposal p = new RuleCompletionProposal(
+ prefix.length(), className, className + "( )",
+ className.length() + 2);
+ p.setPriority(-1);
+ p.setImage(classIcon);
+ list.add(p);
+ }
+ }
+ Set templates = getDRLEditor().getTemplates();
+ iterator = templates.iterator();
+ while (iterator.hasNext()) {
+ String name = (String) iterator.next();
+ RuleCompletionProposal p = new RuleCompletionProposal(
+ prefix.length(), name, name + "( )",
+ name.length() + 2);
+ p.setPriority(-1);
+ p.setImage(classIcon);
+ list.add(p);
+ }
+ break;
+ case LocationDeterminator.LOCATION_INSIDE_CONDITION_START:
+ String className = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
+ if (className != null) {
+ boolean isTemplate = addFactTemplatePropertyProposals(
+ prefix, className, list);
+ if (!isTemplate) {
+ ClassTypeResolver resolver = new ClassTypeResolver(
+ getDRLEditor().getImports(), ProjectClassLoader
+ .getProjectClassLoader(getEditor()));
+ try {
+ Class clazz = resolver.resolveType(className);
+ if (clazz != null) {
+ Iterator iterator2 = new ClassFieldInspector(
+ clazz).getFieldNames().keySet()
+ .iterator();
+ while (iterator2.hasNext()) {
+ String name = (String) iterator2.next();
+ RuleCompletionProposal p = new RuleCompletionProposal(
+ prefix.length(), name, name + " ");
+ p.setImage(methodIcon);
+ list.add(p);
}
- } catch (IOException exc) {
- // Do nothing
- } catch (ClassNotFoundException exc) {
- // Do nothing
}
+ } catch (IOException exc) {
+ // Do nothing
+ } catch (ClassNotFoundException exc) {
+ // Do nothing
}
}
- break;
- case LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR :
- className = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
- String property = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME);
- String type = getPropertyClass(className, property);
-
- list.add( new RuleCompletionProposal(prefix.length(), "==", "== ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "!=", "!= ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), ":", ": ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "->", "-> ( )", 5, droolsIcon));
-
- if (isComparable(type)) {
- list.add( new RuleCompletionProposal(prefix.length(), "<", "< ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "<=", "<= ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), ">", "> ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), ">=", ">= ", droolsIcon));
- }
- if (type.equals("java.lang.String")) {
- list.add( new RuleCompletionProposal(prefix.length(), "matches", "matches \"\"", 9, droolsIcon));
- }
- if (isSubtypeOf(type, "java.util.Collection")) {
- list.add( new RuleCompletionProposal(prefix.length(), "contains", "contains ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "excludes", "excludes ", droolsIcon));
- }
- break;
- case LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT :
- // determine type
- className = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
- property = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME);
- String operator = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR);
- type = getPropertyClass(className, property);
-
- if ("contains".equals(operator) || "excludes".equals(operator)) {
- type = "java.lang.Object";
- }
-
- boolean isObject = false;
- if ("java.lang.Object".equals(type)) {
- isObject = true;
- }
+ }
+ break;
+ case LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR:
+ className = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
+ String property = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME);
+ String type = getPropertyClass(className, property);
- list.add( new RuleCompletionProposal(prefix.length(), "null", "null ", droolsIcon));
- if ("boolean".equals(type)) {
- list.add( new RuleCompletionProposal(prefix.length(), "true", "true ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "false", "false ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "==",
+ "== ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "!=",
+ "!= ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), ":", ": ",
+ droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "->",
+ "-> ( )", 5, droolsIcon));
+
+ if (isComparable(type)) {
+ list.add(new RuleCompletionProposal(prefix.length(), "<",
+ "< ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "<=",
+ "<= ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), ">",
+ "> ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), ">=",
+ ">= ", droolsIcon));
+ }
+ if (type.equals("java.lang.String")) {
+ list.add(new RuleCompletionProposal(prefix.length(),
+ "matches", "matches \"\"", 9, droolsIcon));
+ }
+ if (isSubtypeOf(type, "java.util.Collection")) {
+ list.add(new RuleCompletionProposal(prefix.length(),
+ "contains", "contains ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(),
+ "excludes", "excludes ", droolsIcon));
+ }
+ break;
+ case LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT:
+ // determine type
+ className = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
+ property = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME);
+ String operator = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR);
+ type = getPropertyClass(className, property);
+
+ if ("contains".equals(operator) || "excludes".equals(operator)) {
+ type = "java.lang.Object";
+ }
+
+ boolean isObject = false;
+ if ("java.lang.Object".equals(type)) {
+ isObject = true;
+ }
+
+ list.add(new RuleCompletionProposal(prefix.length(), "null",
+ "null ", droolsIcon));
+ if ("boolean".equals(type)) {
+ list.add(new RuleCompletionProposal(prefix.length(),
+ "true", "true ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(),
+ "false", "false ", droolsIcon));
+ }
+ if (isObject || "java.lang.String".equals(type)) {
+ list.add(new RuleCompletionProposal(prefix.length(),
+ "\"\"", "\"\"", 1, droolsIcon));
+ }
+ if (isObject || "java.util.Date".equals(type)) {
+ list
+ .add(new RuleCompletionProposal(prefix.length(),
+ "\"dd-mmm-yyyy\"", "\"dd-mmm-yyyy\"", 1,
+ droolsIcon));
+ }
+ list.add(new RuleCompletionProposal(prefix.length(), "()",
+ "( )", 2, droolsIcon));
+ DrlParser parser = new DrlParser();
+ try {
+ PackageDescr descr = parser.parse(backText);
+ List rules = descr.getRules();
+ if (rules != null && rules.size() == 1) {
+ Map result = new HashMap();
+ getRuleParameters(result, ((RuleDescr) rules.get(0))
+ .getLhs().getDescrs());
+ Iterator iterator2 = result.entrySet().iterator();
+ while (iterator2.hasNext()) {
+ Map.Entry entry = (Map.Entry) iterator2.next();
+ String paramName = (String) entry.getKey();
+ String paramType = (String) entry.getValue();
+ if (isSubtypeOf(paramType, type)) {
+ RuleCompletionProposal proposal = new RuleCompletionProposal(
+ prefix.length(), paramName);
+ proposal.setPriority(-1);
+ proposal.setImage(methodIcon);
+ list.add(proposal);
+ }
+ }
}
- if (isObject || "java.lang.String".equals(type)) {
- list.add( new RuleCompletionProposal(prefix.length(), "\"\"", "\"\"", 1, droolsIcon));
- }
- if (isObject || "java.util.Date".equals(type)) {
- list.add( new RuleCompletionProposal(prefix.length(), "\"dd-mmm-yyyy\"", "\"dd-mmm-yyyy\"", 1, droolsIcon));
- }
- list.add( new RuleCompletionProposal(prefix.length(), "()", "( )", 2, droolsIcon));
- DrlParser parser = new DrlParser();
- try {
- PackageDescr descr = parser.parse(backText);
- List rules = descr.getRules();
- if (rules != null && rules.size() == 1) {
- Map result = new HashMap();
- getRuleParameters(result, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
- Iterator iterator2 = result.entrySet().iterator();
- while (iterator2.hasNext()) {
- Map.Entry entry = (Map.Entry) iterator2.next();
- String paramName = (String) entry.getKey();
- String paramType = (String) entry.getValue();
- if (isSubtypeOf(paramType, type)) {
- RuleCompletionProposal proposal = new RuleCompletionProposal(prefix.length(), paramName);
- proposal.setPriority(-1);
- proposal.setImage(methodIcon);
- list.add(proposal);
- }
- }
- }
- } catch (DroolsParserException exc) {
- // do nothing
- }
- break;
- case LocationDeterminator.LOCATION_INSIDE_EVAL :
- String content = (String) location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT);
- list.addAll(getJavaCompletionProposals(content, prefix, getRuleParameters(backText)));
- break;
- case LocationDeterminator.LOCATION_INSIDE_CONDITION_END :
- list.add( new RuleCompletionProposal(prefix.length(), "&", "& ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "|", "| ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), ",", ", ", droolsIcon));
- break;
- case LocationDeterminator.LOCATION_FROM :
- String fromText = (String) location.getProperty(LocationDeterminator.LOCATION_FROM_CONTENT);
- int index = fromText.indexOf('.');
- if (index == -1) {
- // add accumulate and collect keyword
- list.add( new RuleCompletionProposal(prefix.length(), "accumulate", "accumulate ( , init ( ), action ( ), result ( ) )", 13, droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "collect", "collect ( )", 10, droolsIcon));
- // add all functions
- if ("".equals(fromText)) {
- List functions = getDRLEditor().getFunctions();
- iterator = functions.iterator();
- while (iterator.hasNext()) {
- String name = (String) iterator.next() + "()";
- prop = new RuleCompletionProposal(prefix.length(), name, name, name.length() - 1);
- prop.setPriority(-1);
- prop.setImage(methodIcon);
- list.add(prop);
- }
+ } catch (DroolsParserException exc) {
+ // do nothing
+ }
+ break;
+ case LocationDeterminator.LOCATION_INSIDE_EVAL:
+ String content = (String) location
+ .getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT);
+ list.addAll(getJavaCompletionProposals(content, prefix,
+ getRuleParameters(backText)));
+ break;
+ case LocationDeterminator.LOCATION_INSIDE_CONDITION_END:
+ list.add(new RuleCompletionProposal(prefix.length(), "&", "& ",
+ droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "|", "| ",
+ droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), ",", ", ",
+ droolsIcon));
+ break;
+ case LocationDeterminator.LOCATION_FROM:
+ String fromText = (String) location
+ .getProperty(LocationDeterminator.LOCATION_FROM_CONTENT);
+ int index = fromText.indexOf('.');
+ if (index == -1) {
+ // add accumulate and collect keyword
+ list
+ .add(new RuleCompletionProposal(
+ prefix.length(),
+ "accumulate",
+ "accumulate ( , init ( ), action ( ), result ( ) )",
+ 13, droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(),
+ "collect", "collect ( )", 10, droolsIcon));
+ // add all functions
+ if ("".equals(fromText)) {
+ List functions = getDRLEditor().getFunctions();
+ iterator = functions.iterator();
+ while (iterator.hasNext()) {
+ String name = (String) iterator.next() + "()";
+ prop = new RuleCompletionProposal(prefix.length(),
+ name, name, name.length() - 1);
+ prop.setPriority(-1);
+ prop.setImage(methodIcon);
+ list.add(prop);
}
- list.addAll(getJavaCompletionProposals(fromText, prefix, getRuleParameters(backText)));
}
- break;
- case LocationDeterminator.LOCATION_FROM_ACCUMULATE_INIT_INSIDE :
- content = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
- list.addAll(getJavaCompletionProposals(content, prefix, getRuleParameters(backText)));
- break;
- case LocationDeterminator.LOCATION_FROM_ACCUMULATE_ACTION_INSIDE :
- content = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
- content += (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
- list.addAll(getJavaCompletionProposals(content, prefix, getRuleParameters(backText)));
- break;
- case LocationDeterminator.LOCATION_FROM_ACCUMULATE_RESULT_INSIDE :
- content = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
- content += (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
- content += (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT);
- list.addAll(getJavaCompletionProposals(content, prefix, getRuleParameters(backText)));
- break;
+ list.addAll(getJavaCompletionProposals(fromText, prefix,
+ getRuleParameters(backText)));
+ }
+ break;
+ case LocationDeterminator.LOCATION_FROM_ACCUMULATE_INIT_INSIDE:
+ content = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
+ list.addAll(getJavaCompletionProposals(content, prefix,
+ getRuleParameters(backText)));
+ break;
+ case LocationDeterminator.LOCATION_FROM_ACCUMULATE_ACTION_INSIDE:
+ content = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
+ content += (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
+ list.addAll(getJavaCompletionProposals(content, prefix,
+ getRuleParameters(backText)));
+ break;
+ case LocationDeterminator.LOCATION_FROM_ACCUMULATE_RESULT_INSIDE:
+ content = (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
+ content += (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
+ content += (String) location
+ .getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT);
+ list.addAll(getJavaCompletionProposals(content, prefix,
+ getRuleParameters(backText)));
+ break;
}
}
}
-
+
private String getPropertyClass(String className, String propertyName) {
if (className != null && propertyName != null) {
FactTemplateDescr template = getDRLEditor().getTemplate(className);
if (template != null) {
- Iterator iterator = template.getFields().iterator();
- while (iterator.hasNext()) {
- FieldTemplateDescr field = (FieldTemplateDescr) iterator.next();
- if (propertyName.equals(field.getName())) {
- String type = field.getClassType();
- if (isPrimitiveType(type)) {
- return type;
- }
- ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor().getImports(), ProjectClassLoader.getProjectClassLoader(getEditor()));
+ Iterator iterator = template.getFields().iterator();
+ while (iterator.hasNext()) {
+ FieldTemplateDescr field = (FieldTemplateDescr) iterator
+ .next();
+ if (propertyName.equals(field.getName())) {
+ String type = field.getClassType();
+ if (isPrimitiveType(type)) {
+ return type;
+ }
+ ClassTypeResolver resolver = new ClassTypeResolver(
+ getDRLEditor().getImports(), ProjectClassLoader
+ .getProjectClassLoader(getEditor()));
try {
Class clazz = resolver.resolveType(type);
if (clazz != null) {
@@ -363,15 +457,18 @@
exc.printStackTrace();
// Do nothing
}
- }
- }
- // if not found, return null
+ }
+ }
+ // if not found, return null
} else {
- ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor().getImports(), ProjectClassLoader.getProjectClassLoader(getEditor()));
+ ClassTypeResolver resolver = new ClassTypeResolver(
+ getDRLEditor().getImports(), ProjectClassLoader
+ .getProjectClassLoader(getEditor()));
try {
Class clazz = resolver.resolveType(className);
if (clazz != null) {
- Class clazzz = (Class) new ClassFieldInspector(clazz).getFieldTypes().get(propertyName);
+ Class clazzz = (Class) new ClassFieldInspector(clazz)
+ .getFieldTypes().get(propertyName);
if (clazzz != null) {
return clazzz.getName();
}
@@ -381,26 +478,27 @@
} catch (ClassNotFoundException exc) {
// Do nothing
}
- }
+ }
}
return null;
}
-
+
private Map getRuleParameters(String backText) {
Map result = new HashMap();
try {
- DrlParser parser = new DrlParser();
- PackageDescr descr = parser.parse(backText);
- List rules = descr.getRules();
- if (rules != null && rules.size() == 1) {
- getRuleParameters(result, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
- }
- } catch (DroolsParserException exc) {
- // do nothing
- }
- return result;
+ DrlParser parser = new DrlParser();
+ PackageDescr descr = parser.parse(backText);
+ List rules = descr.getRules();
+ if (rules != null && rules.size() == 1) {
+ getRuleParameters(result, ((RuleDescr) rules.get(0)).getLhs()
+ .getDescrs());
+ }
+ } catch (DroolsParserException exc) {
+ // do nothing
+ }
+ return result;
}
-
+
private boolean isComparable(String type) {
if (type == null) {
return false;
@@ -416,28 +514,31 @@
}
return false;
}
-
+
private boolean isPrimitiveType(String type) {
- return isPrimitiveNumericType(type)
- || type.equals("boolean");
+ return isPrimitiveNumericType(type) || type.equals("boolean");
}
-
+
private boolean isPrimitiveNumericType(String type) {
return type.equals("byte") || type.equals("short")
|| type.equals("int") || type.equals("long")
|| type.equals("float") || type.equals("double")
|| type.equals("char");
}
-
+
private boolean isObjectNumericType(String type) {
return type.equals("java.lang.Byte") || type.equals("java.lang.Short")
- || type.equals("java.lang.Integer") || type.equals("java.lang.Long")
- || type.equals("java.lang.Float") || type.equals("java.lang.Double")
+ || type.equals("java.lang.Integer")
+ || type.equals("java.lang.Long")
+ || type.equals("java.lang.Float")
+ || type.equals("java.lang.Double")
|| type.equals("java.lang.Char");
}
-
+
/**
- * Returns true if the first class is the same or a subtype of the second class.
+ * Returns true if the first class is the same or a subtype of the second
+ * class.
+ *
* @param class1
* @param class2
* @return
@@ -449,7 +550,9 @@
class1 = convertToNonPrimitiveClass(class1);
class2 = convertToNonPrimitiveClass(class2);
// TODO add code to take primitive types into account
- ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor().getImports(), ProjectClassLoader.getProjectClassLoader(getEditor()));
+ ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor()
+ .getImports(), ProjectClassLoader
+ .getProjectClassLoader(getEditor()));
try {
Class clazz1 = resolver.resolveType(class1);
Class clazz2 = resolver.resolveType(class2);
@@ -461,7 +564,7 @@
return false;
}
}
-
+
private String convertToNonPrimitiveClass(String clazz) {
if (!isPrimitiveType(clazz)) {
return clazz;
@@ -486,7 +589,7 @@
// should never occur
return null;
}
-
+
private boolean consequence(String backText) {
return isKeywordOnLine(backText, "then");
}
@@ -498,72 +601,77 @@
boolean query(String backText) {
return query.matcher(backText).matches();
}
-
+
/**
* Check to see if the keyword appears on a line by itself.
*/
private boolean isKeywordOnLine(String chunk, String keyword) {
StringTokenizer st = new StringTokenizer(chunk, "\n\t");
- while(st.hasMoreTokens()) {
- if (st.nextToken().trim().equals(keyword)) {
- return true;
- }
- }
- return false;
+ while (st.hasMoreTokens()) {
+ if (st.nextToken().trim().equals(keyword)) {
+ return true;
+ }
+ }
+ return false;
}
- private void addRHSFunctionCompletionProposals(ITextViewer viewer,
- final List list,
- final String prefix) throws CoreException,
- DroolsParserException {
- Iterator iterator;
- RuleCompletionProposal prop;
- List functions = getDRLEditor().getFunctions();
- iterator = functions.iterator();
- while (iterator.hasNext()) {
- String name = (String) iterator.next() + "()";
- prop = new RuleCompletionProposal(prefix.length(), name, name + ";", name.length() - 1);
- prop.setPriority(-1);
- prop.setImage(methodIcon);
- list.add(prop);
- }
- }
+ private void addRHSFunctionCompletionProposals(ITextViewer viewer,
+ final List list, final String prefix) throws CoreException,
+ DroolsParserException {
+ Iterator iterator;
+ RuleCompletionProposal prop;
+ List functions = getDRLEditor().getFunctions();
+ iterator = functions.iterator();
+ while (iterator.hasNext()) {
+ String name = (String) iterator.next() + "()";
+ prop = new RuleCompletionProposal(prefix.length(), name,
+ name + ";", name.length() - 1);
+ prop.setPriority(-1);
+ prop.setImage(methodIcon);
+ list.add(prop);
+ }
+ }
- private void addRHSCompletionProposals(final List list,
- final String prefix) {
- RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), "modify", "modify();", 7);
- prop.setImage(droolsIcon);
- list.add(prop);
- prop = new RuleCompletionProposal(prefix.length(), "retract", "retract();", 8);
- prop.setImage(droolsIcon);
- list.add(prop);
- prop = new RuleCompletionProposal(prefix.length(), "assert", "assert();", 7);
- prop.setImage(droolsIcon);
- list.add(prop);
- prop = new RuleCompletionProposal(prefix.length(), "assertLogical", "assertLogical();", 14);
- prop.setImage(droolsIcon);
- list.add(prop);
- }
-
- private void addRHSJavaCompletionProposals(List list, String backText, String prefix) {
- int thenPosition = backText.lastIndexOf("then");
- String conditions = backText.substring(0, thenPosition);
+ private void addRHSCompletionProposals(final List list, final String prefix) {
+ RuleCompletionProposal prop = new RuleCompletionProposal(prefix
+ .length(), "modify", "modify();", 7);
+ prop.setImage(droolsIcon);
+ list.add(prop);
+ prop = new RuleCompletionProposal(prefix.length(), "retract",
+ "retract();", 8);
+ prop.setImage(droolsIcon);
+ list.add(prop);
+ prop = new RuleCompletionProposal(prefix.length(), "assert",
+ "assert();", 7);
+ prop.setImage(droolsIcon);
+ list.add(prop);
+ prop = new RuleCompletionProposal(prefix.length(), "assertLogical",
+ "assertLogical();", 14);
+ prop.setImage(droolsIcon);
+ list.add(prop);
+ }
+
+ private void addRHSJavaCompletionProposals(List list, String backText,
+ String prefix) {
+ int thenPosition = backText.lastIndexOf("then");
+ String conditions = backText.substring(0, thenPosition);
String consequence = backText.substring(thenPosition + 4);
- list.addAll(getJavaCompletionProposals(consequence, prefix, getRuleParameters(conditions)));
- }
-
- private void getRuleParameters(Map result, List descrs) {
- if (descrs == null) {
- return;
- }
- Iterator iterator = descrs.iterator();
- while (iterator.hasNext()) {
- BaseDescr descr = (BaseDescr) iterator.next();
- getRuleParameters(result, descr);
+ list.addAll(getJavaCompletionProposals(consequence, prefix,
+ getRuleParameters(conditions)));
+ }
+
+ private void getRuleParameters(Map result, List descrs) {
+ if (descrs == null) {
+ return;
}
- }
-
- private void getRuleParameters(Map result, BaseDescr descr) {
+ Iterator iterator = descrs.iterator();
+ while (iterator.hasNext()) {
+ BaseDescr descr = (BaseDescr) iterator.next();
+ getRuleParameters(result, descr);
+ }
+ }
+
+ private void getRuleParameters(Map result, BaseDescr descr) {
if (descr == null) {
return;
}
@@ -572,7 +680,8 @@
if (name != null) {
result.put(name, ((ColumnDescr) descr).getObjectType());
}
- getRuleSubParameters(result, ((ColumnDescr) descr).getDescrs(), ((ColumnDescr) descr).getObjectType());
+ getRuleSubParameters(result, ((ColumnDescr) descr).getDescrs(),
+ ((ColumnDescr) descr).getObjectType());
} else if (descr instanceof AndDescr) {
getRuleParameters(result, ((AndDescr) descr).getDescrs());
} else if (descr instanceof OrDescr) {
@@ -591,16 +700,16 @@
}
}
- }
-
- private void getRuleSubParameters(Map result, List descrs, String clazz) {
- if (descrs == null) {
- return;
- }
- Iterator iterator = descrs.iterator();
- while (iterator.hasNext()) {
- BaseDescr descr = (BaseDescr) iterator.next();
- if (descr instanceof FieldBindingDescr) {
+ }
+
+ private void getRuleSubParameters(Map result, List descrs, String clazz) {
+ if (descrs == null) {
+ return;
+ }
+ Iterator iterator = descrs.iterator();
+ while (iterator.hasNext()) {
+ BaseDescr descr = (BaseDescr) iterator.next();
+ if (descr instanceof FieldBindingDescr) {
FieldBindingDescr fieldDescr = (FieldBindingDescr) descr;
String name = fieldDescr.getIdentifier();
String field = fieldDescr.getFieldName();
@@ -609,157 +718,185 @@
result.put(name, type);
}
}
- }
- }
+ }
+ }
- private void addRuleHeaderItems(final List list,
- final String prefix) {
- list.add(new RuleCompletionProposal(prefix.length(), "salience", "salience ", droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "no-loop", "no-loop ", droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "agenda-group", "agenda-group ", droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "duration", "duration ", droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "auto-focus", "auto-focus ", droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "when", "when" + System.getProperty("line.separator") + "\t ", droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "activation-group", "activation-group ", droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "date-effective", "date-effective \"dd-MMM-yyyy\"", 16, droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "date-expires", "date-expires \"dd-MMM-yyyy\"", 14, droolsIcon));
- list.add(new RuleCompletionProposal(prefix.length(), "enabled", "enabled false", droolsIcon));
- }
+ private void addRuleHeaderItems(final List list, final String prefix) {
+ list.add(new RuleCompletionProposal(prefix.length(), "salience",
+ "salience ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "no-loop",
+ "no-loop ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "agenda-group",
+ "agenda-group ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "duration",
+ "duration ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "auto-focus",
+ "auto-focus ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "when", "when"
+ + System.getProperty("line.separator") + "\t ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(),
+ "activation-group", "activation-group ", droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "date-effective",
+ "date-effective \"dd-MMM-yyyy\"", 16, droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "date-expires",
+ "date-expires \"dd-MMM-yyyy\"", 14, droolsIcon));
+ list.add(new RuleCompletionProposal(prefix.length(), "enabled",
+ "enabled false", droolsIcon));
+ }
- private void addDSLProposals(final List list,
- final String prefix,
- List dslItems) {
- Iterator iterator = dslItems.iterator();
- while (iterator.hasNext()) {
- String consequence = (String) iterator.next();
- RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), consequence);
- p.setImage( dslIcon );
- list.add(p);
- }
- }
+ private void addDSLProposals(final List list, final String prefix,
+ List dslItems) {
+ Iterator iterator = dslItems.iterator();
+ while (iterator.hasNext()) {
+ String consequence = (String) iterator.next();
+ RuleCompletionProposal p = new RuleCompletionProposal(prefix
+ .length(), consequence);
+ p.setImage(dslIcon);
+ list.add(p);
+ }
+ }
- /**
- * Lazily get the adapter for DSLs, and cache it with the editor for future reference.
- * If it is unable to load a DSL, it will try again next time.
- * But once it has found and loaded one, it will keep it until the editor is closed.
- *
- * This delegates to DSLAdapter to poke around the project to try and load the DSL.
- */
- private DSLAdapter getDSLAdapter(ITextViewer viewer) {
- // TODO: cache DSL adapter in plugin, and reset when dsl file saved
- // retrieve dsl name always (might have changed) and try retrieving
- // cached dsl from plugin first
-// return new DSLAdapter(viewer.getDocument().get(), ((FileEditorInput) getEditor().getEditorInput()).getFile());
- DSLAdapter adapter = getDRLEditor().getDSLAdapter();
- if (adapter == null) {
- String content = viewer.getDocument().get();
- adapter = new DSLAdapter(content, ((FileEditorInput) getEditor().getEditorInput()).getFile());
- if (adapter.isValid()) {
- getDRLEditor().setDSLAdapter(adapter);
- }
- }
- return adapter;
- }
-
- private boolean addFactTemplatePropertyProposals(String prefix, String templateName, List list) {
- FactTemplateDescr descr = getDRLEditor().getTemplate(templateName);
- if (descr == null) {
- return false;
- }
- Iterator iterator = descr.getFields().iterator();
- while (iterator.hasNext()) {
- FieldTemplateDescr field = (FieldTemplateDescr) iterator.next();
- String fieldName = field.getName();
- RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), fieldName, fieldName + " ");
- p.setImage(methodIcon);
- list.add(p);
- }
- return true;
- }
-
- /**
- * because of how the backText works, we need to get the last line, so
- * that we can pass it to the DSLUtility
- * @param backText
- * @return
- */
- public String getLastLine(String backText) {
- BufferedReader breader = new BufferedReader(new StringReader(backText));
- String last = "";
- String line = null;
- try {
- while ( (line = breader.readLine()) != null) {
- // only if the line has text do we set last to it
- if (line.length() > 0) {
- last = line;
- }
- }
- } catch (IOException e) {
- // TODO need to log this.
- // I'm leaving this for mic_hat, so he has something to do
- }
- // now that all the conditions for a single object are on the same line
- // we need to check for the left parenthesis
- if (last.indexOf("(") > -1) {
- last = last.substring(last.lastIndexOf("(") + 1);
- }
- // if the string has a comma "," we get the substring starting from
- // the index after the last comma
- if (last.indexOf(",") > -1) {
- last = last.substring(last.lastIndexOf(",") + 1);
- }
- // if the line ends with right parenthesis, we change it to zero length string
- if (last.endsWith(")")) {
- last = "";
- }
- return last;
- }
-
- /**
- * Returns the last line that doesn't start with a dash
- * @param backText
- * @return
- */
- public String getLastNonDashLine(String backText) {
- BufferedReader breader = new BufferedReader(new StringReader(backText));
- String last = "";
- String line = null;
- try {
- while ( (line = breader.readLine()) != null) {
- // there may be blank lines, so we trim first
- line = line.trim();
- // only if the line has text do we set last to it
- if (line.length() > 0 && !line.startsWith("-")) {
- last = line;
- }
- }
- } catch (IOException e) {
- // TODO need to log this.
- // I'm leaving this for mic_hat, so he has something to do
- }
- if (last.indexOf("(") > -1 && !last.endsWith(")")) {
- last = last.substring(0,last.indexOf("("));
- } else if (last.indexOf("(") > -1 && last.endsWith(")")) {
- last = "";
- }
- return last;
- }
-
- /**
- * The DSLTree is configurable. It can either return just the child
- * of the last token found, or it can traverse the tree and generate
- * all the combinations beneath the last matching node.
- * TODO
- * I don't know how to add configuration to the editor, so it needs
- * to be hooked up to the configuration for the editor later.
- *
- * @param last
- * @return
- */
- protected List getProposals(String obj,String last) {
- if (last.length() == 0) {
- last = " ";
- }
- return this.dslTree.getChildrenList(obj,last,false);
- }
+ /**
+ * Lazily get the adapter for DSLs, and cache it with the editor for future
+ * reference. If it is unable to load a DSL, it will try again next time.
+ * But once it has found and loaded one, it will keep it until the editor is
+ * closed.
+ *
+ * This delegates to DSLAdapter to poke around the project to try and load
+ * the DSL.
+ */
+ private DSLAdapter getDSLAdapter(ITextViewer viewer) {
+ // TODO: cache DSL adapter in plugin, and reset when dsl file saved
+ // retrieve dsl name always (might have changed) and try retrieving
+ // cached dsl from plugin first
+ // return new DSLAdapter(viewer.getDocument().get(), ((FileEditorInput)
+ // getEditor().getEditorInput()).getFile());
+ DSLAdapter adapter = getDRLEditor().getDSLAdapter();
+ if (adapter == null) {
+ String content = viewer.getDocument().get();
+ adapter = new DSLAdapter(content, ((FileEditorInput) getEditor()
+ .getEditorInput()).getFile());
+ if (adapter.isValid()) {
+ getDRLEditor().setDSLAdapter(adapter);
+ }
+ if (this.dslTree.isEmpty()) {
+ try {
+ Reader dslContents = DSLAdapter.getDSLContent(content,
+ ((FileEditorInput) getEditor().getEditorInput()).getFile());
+ if (dslContents != null) {
+ this.dslTree.buildTree(dslContents);
+ }
+ } catch (CoreException e) {
+ DroolsIDEPlugin.log(e);
+ }
+ }
+ }
+ return adapter;
+ }
+
+ private boolean addFactTemplatePropertyProposals(String prefix,
+ String templateName, List list) {
+ FactTemplateDescr descr = getDRLEditor().getTemplate(templateName);
+ if (descr == null) {
+ return false;
+ }
+ Iterator iterator = descr.getFields().iterator();
+ while (iterator.hasNext()) {
+ FieldTemplateDescr field = (FieldTemplateDescr) iterator.next();
+ String fieldName = field.getName();
+ RuleCompletionProposal p = new RuleCompletionProposal(prefix
+ .length(), fieldName, fieldName + " ");
+ p.setImage(methodIcon);
+ list.add(p);
+ }
+ return true;
+ }
+
+ /**
+ * because of how the backText works, we need to get the last line, so that
+ * we can pass it to the DSLUtility
+ *
+ * @param backText
+ * @return
+ */
+ public String getLastLine(String backText) {
+ BufferedReader breader = new BufferedReader(new StringReader(backText));
+ String last = "";
+ String line = null;
+ try {
+ while ((line = breader.readLine()) != null) {
+ // only if the line has text do we set last to it
+ if (line.length() > 0) {
+ last = line;
+ }
+ }
+ } catch (IOException e) {
+ // TODO need to log this.
+ // I'm leaving this for mic_hat, so he has something to do
+ }
+ // now that all the conditions for a single object are on the same line
+ // we need to check for the left parenthesis
+ if (last.indexOf("(") > -1) {
+ last = last.substring(last.lastIndexOf("(") + 1);
+ }
+ // if the string has a comma "," we get the substring starting from
+ // the index after the last comma
+ if (last.indexOf(",") > -1) {
+ last = last.substring(last.lastIndexOf(",") + 1);
+ }
+ // if the line ends with right parenthesis, we change it to zero length
+ // string
+ if (last.endsWith(")")) {
+ last = "";
+ }
+ return last;
+ }
+
+ /**
+ * Returns the last line that doesn't start with a dash
+ *
+ * @param backText
+ * @return
+ */
+ public String getLastNonDashLine(String backText) {
+ BufferedReader breader = new BufferedReader(new StringReader(backText));
+ String last = "";
+ String line = null;
+ try {
+ while ((line = breader.readLine()) != null) {
+ // there may be blank lines, so we trim first
+ line = line.trim();
+ // only if the line has text do we set last to it
+ if (line.length() > 0 && !line.startsWith("-")) {
+ last = line;
+ }
+ }
+ } catch (IOException e) {
+ // TODO need to log this.
+ // I'm leaving this for mic_hat, so he has something to do
+ }
+ if (last.indexOf("(") > -1 && !last.endsWith(")")) {
+ last = last.substring(0, last.indexOf("("));
+ } else if (last.indexOf("(") > -1 && last.endsWith(")")) {
+ last = "";
+ }
+ return last;
+ }
+
+ /**
+ * The DSLTree is configurable. It can either return just the child of the
+ * last token found, or it can traverse the tree and generate all the
+ * combinations beneath the last matching node. TODO I don't know how to add
+ * configuration to the editor, so it needs to be hooked up to the
+ * configuration for the editor later.
+ *
+ * @param last
+ * @return
+ */
+ protected List getProposals(String obj, String last) {
+ if (last.length() == 0) {
+ last = " ";
+ }
+ return this.dslTree.getChildrenList(obj, last, false);
+ }
}
More information about the jboss-svn-commits
mailing list