|
From: <jbo...@li...> - 2006-06-28 23:46:28
|
Author: KrisVerlaenen
Date: 2006-06-28 19:46:22 -0400 (Wed, 28 Jun 2006)
New Revision: 4857
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/RuleCompletionProcessor.java
labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java
Log:
JBRULES-296: Code completion should suggest operators and arguments inside column constraints
- operators and arguments code completions now also take the type of the parameter
and possibly the operator itself (better) into account
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 2006-06-28 22:05:57 UTC (rev 4856)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java 2006-06-28 23:46:22 UTC (rev 4857)
@@ -22,9 +22,9 @@
static final Pattern COLUMN_PATTERN_START = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*[^\\s<>!=:]*", Pattern.DOTALL);
static final Pattern COLUMN_PATTERN_OPERATOR = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+", Pattern.DOTALL);
- static final Pattern COLUMN_PATTERN_CONTAINS_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+contains\\s+", Pattern.DOTALL);
- static final Pattern COLUMN_PATTERN_MATCHES_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+matches\\s+", Pattern.DOTALL);
- static final Pattern COLUMN_PATTERN_EXCLUDES_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+excludes\\s+", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN_CONTAINS_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+contains\\s+[^\\s<>!=:]*", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN_MATCHES_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+matches\\s+[^\\s<>!=:]*", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN_EXCLUDES_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+excludes\\s+[^\\s<>!=:]*", Pattern.DOTALL);
static final Pattern COLUMN_PATTERN_COMPARATOR_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s*([<>=!]+)\\s*[^\\s<>!=:]*", Pattern.DOTALL);
static final Pattern EXISTS_PATTERN = Pattern.compile(".*\\s+exists\\s*\\(?\\s*((\\S*)\\s*:)?\\s*\\S*", Pattern.DOTALL);
@@ -45,6 +45,7 @@
static final String LOCATION_PROPERTY_CLASS_NAME = "ClassName";
static final String LOCATION_PROPERTY_PROPERTY_NAME = "PropertyName";
+ static final String LOCATION_PROPERTY_OPERATOR = "Operator";
private LocationDeterminator() {
}
@@ -114,7 +115,7 @@
} else if (descr instanceof ColumnDescr) {
ColumnDescr columnDescr = (ColumnDescr) descr;
// TODO: this is not completely safe, there are rare occasions where this could fail
- Pattern pattern = Pattern.compile(".*(" + columnDescr.getObjectType() + ")\\s*\\((.*)");
+ Pattern pattern = Pattern.compile(".*(" + columnDescr.getObjectType() + ")\\s*\\((.*)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(backText);
String columnContents = null;
while (matcher.find()) {
@@ -127,6 +128,7 @@
if (matcher.matches()) {
Location location = new Location(LOCATION_INSIDE_CONDITION_OPERATOR);
location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
return location;
}
matcher = COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher(columnContents);
@@ -134,6 +136,7 @@
Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ location.setProperty(LOCATION_PROPERTY_OPERATOR, matcher.group(4));
return location;
}
matcher = COLUMN_PATTERN_CONTAINS_ARGUMENT.matcher(columnContents);
@@ -141,6 +144,7 @@
Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ location.setProperty(LOCATION_PROPERTY_OPERATOR, "contains");
return location;
}
matcher = COLUMN_PATTERN_EXCLUDES_ARGUMENT.matcher(columnContents);
@@ -148,6 +152,7 @@
Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ location.setProperty(LOCATION_PROPERTY_OPERATOR, "excludes");
return location;
}
matcher = COLUMN_PATTERN_MATCHES_ARGUMENT.matcher(columnContents);
@@ -155,6 +160,7 @@
Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ location.setProperty(LOCATION_PROPERTY_OPERATOR, "matches");
return location;
}
matcher = COLUMN_PATTERN_START.matcher(columnContents);
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 2006-06-28 22:05:57 UTC (rev 4856)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java 2006-06-28 23:46:22 UTC (rev 4857)
@@ -7,6 +7,7 @@
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
+import java.util.Map.Entry;
import java.util.regex.Pattern;
import org.drools.compiler.DrlParser;
@@ -16,8 +17,12 @@
import org.drools.ide.editors.DRLRuleEditor;
import org.drools.ide.editors.DSLAdapter;
import org.drools.ide.util.ProjectClassLoader;
+import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.PatternDescr;
import org.drools.lang.descr.RuleDescr;
@@ -195,49 +200,54 @@
}
break;
case LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR :
- 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));
+ 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(), "matches", "matches ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "contains", "contains ", droolsIcon));
- list.add( new RuleCompletionProposal(prefix.length(), "excludes", "excludes ", 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);
- String property = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME);
- String type = null;
- if (className != null) {
- 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(property);
- if (clazzz != null) {
- type = clazzz.getName();
- }
- }
- } catch (IOException exc) {
- // Do nothing
- } catch (ClassNotFoundException exc) {
- // Do nothing
- }
+ 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 (type == null || "boolean".equals(type)) {
+ if ("boolean".equals(type)) {
list.add( new RuleCompletionProposal(prefix.length(), "true", "true", droolsIcon));
list.add( new RuleCompletionProposal(prefix.length(), "false", "false", droolsIcon));
}
- if (type == null || "java.lang.String".equals(type)) {
+ if (isObject || "java.lang.String".equals(type)) {
list.add( new RuleCompletionProposal(prefix.length(), "\"\"", "\"\"", 1, droolsIcon));
}
- if (type == null || "java.util.Date".equals(type)) {
+ 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));
@@ -248,13 +258,17 @@
if (rules != null && rules.size() == 1) {
Map result = new HashMap();
getRuleParameters(result, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
- Iterator iterator2 = result.keySet().iterator();
+ Iterator iterator2 = result.entrySet().iterator();
while (iterator2.hasNext()) {
- String name = (String) iterator2.next();
- RuleCompletionProposal proposal = new RuleCompletionProposal(prefix.length(), name);
- proposal.setPriority(-1);
- proposal.setImage(methodIcon);
- list.add(proposal);
+ 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) {
@@ -286,6 +300,65 @@
}
}
+ private String getPropertyClass(String className, String propertyName) {
+ if (className != null) {
+ 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);
+ if (clazzz != null) {
+ return clazzz.getName();
+ }
+ }
+ } catch (IOException exc) {
+ // Do nothing
+ } catch (ClassNotFoundException exc) {
+ // Do nothing
+ }
+ }
+ return null;
+ }
+
+ private boolean isComparable(String type) {
+ if (type == null) {
+ return false;
+ }
+ if (type.equals("byte") || type.equals("short")
+ || type.equals("int") || type.equals("long")
+ || type.equals("float") || type.equals("double")
+ || type.equals("char")) {
+ return true;
+ }
+ if (isSubtypeOf(type, "java.lang.Comparable")) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns true if the first class is the same or a subtype of the second class.
+ * @param class1
+ * @param class2
+ * @return
+ */
+ private boolean isSubtypeOf(String class1, String class2) {
+ if (class1 == null || class2 == null) {
+ return false;
+ }
+ ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor().getImports(), ProjectClassLoader.getProjectClassLoader(getEditor()));
+ try {
+ Class clazz1 = resolver.resolveType(class1);
+ Class clazz2 = resolver.resolveType(class2);
+ if (clazz1 == null || clazz2 == null) {
+ return false;
+ }
+ return clazz2.isAssignableFrom(clazz1);
+ } catch (ClassNotFoundException exc) {
+ return false;
+ }
+ }
+
private boolean consequence(String backText) {
return isKeywordOnLine(backText, "then");
}
@@ -371,23 +444,47 @@
}
private void getRuleParameters(Map result, List descrs) {
+ if (descrs == null) {
+ return;
+ }
Iterator iterator = descrs.iterator();
while (iterator.hasNext()) {
PatternDescr descr = (PatternDescr) iterator.next();
- if (descr instanceof ColumnDescr) {
+ if (descr instanceof ColumnDescr) {
String name = ((ColumnDescr) descr).getIdentifier();
if (name != null) {
result.put(name, ((ColumnDescr) descr).getObjectType());
}
- getRuleParameters(result, ((ColumnDescr) descr).getDescrs());
- } else if (descr instanceof FieldBindingDescr) {
- String name = ((FieldBindingDescr) descr).getIdentifier();
+ getRuleSubParameters(result, ((ColumnDescr) descr).getDescrs(), ((ColumnDescr) descr).getObjectType());
+ } else if (descr instanceof AndDescr) {
+ getRuleParameters(result, ((AndDescr) descr).getDescrs());
+ } else if (descr instanceof OrDescr) {
+ getRuleParameters(result, ((OrDescr) descr).getDescrs());
+ } else if (descr instanceof ExistsDescr) {
+ getRuleParameters(result, ((ExistsDescr) descr).getDescrs());
+ } else if (descr instanceof NotDescr) {
+ getRuleParameters(result, ((NotDescr) descr).getDescrs());
+ }
+ }
+ }
+
+ private void getRuleSubParameters(Map result, List descrs, String clazz) {
+ if (descrs == null) {
+ return;
+ }
+ Iterator iterator = descrs.iterator();
+ while (iterator.hasNext()) {
+ PatternDescr descr = (PatternDescr) iterator.next();
+ if (descr instanceof FieldBindingDescr) {
+ FieldBindingDescr fieldDescr = (FieldBindingDescr) descr;
+ String name = fieldDescr.getIdentifier();
+ String field = fieldDescr.getFieldName();
+ String type = getPropertyClass(clazz, field);
if (name != null) {
- // TODO retrieve type
- result.put(name, null);
+ result.put(name, type);
}
}
- }
+ }
}
private List getRHSJavaCompletionProposals(final String consequenceStart, final String prefix) {
Modified: labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java 2006-06-28 22:05:57 UTC (rev 4856)
+++ labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java 2006-06-28 23:46:22 UTC (rev 4857)
@@ -197,6 +197,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -205,6 +206,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -213,6 +215,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -221,6 +224,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -229,6 +233,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -237,6 +242,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -245,6 +251,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -253,6 +260,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -262,6 +270,7 @@
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
/** Inside of condition: argument */
input =
@@ -272,6 +281,7 @@
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
input =
"rule MyRule \n" +
@@ -281,24 +291,27 @@
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
input =
"rule MyRule \n" +
" when \n" +
- " Class ( name : property == ";
+ " Class ( name : property <= ";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("<=", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
input =
"rule MyRule \n" +
" when \n" +
- " Class ( name:property == ";
+ " Class ( name:property != ";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("!=", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
input =
"rule MyRule \n" +
@@ -308,6 +321,7 @@
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property2", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
input =
"rule MyRule \n" +
@@ -317,6 +331,7 @@
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
input =
"rule MyRule \n" +
@@ -326,6 +341,7 @@
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
input =
"rule MyRule \n" +
@@ -335,7 +351,38 @@
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property contains ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("contains", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property excludes ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("excludes", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property matches \"prop";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+ assertEquals("matches", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+
/** EXISTS */
input =
"rule MyRule \n" +
@@ -552,6 +599,7 @@
" Class ( ) and Class ( name ";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("name", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
@@ -661,6 +709,7 @@
" Class ( ) or Class ( name ";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("name", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
input =
"rule MyRule \n" +
|