[jboss-svn-commits] JBL Code SVN: r7120 - in labs/jbossrules/trunk/drools-ide/src: main/java/org/drools/ide/editors/completion test/java/org/drools/ide/editors/completion
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Oct 25 18:24:28 EDT 2006
Author: KrisVerlaenen
Date: 2006-10-25 18:24:24 -0400 (Wed, 25 Oct 2006)
New Revision: 7120
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-478: eclipse plugin support for 'accumulate'
- drl editor now has full support for accumulate
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-10-25 22:13:34 UTC (rev 7119)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java 2006-10-25 22:24:24 UTC (rev 7120)
@@ -8,6 +8,7 @@
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsParserException;
+import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.EvalDescr;
@@ -34,10 +35,15 @@
static final Pattern COLUMN_PATTERN_EXCLUDES_END = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+excludes\\s+[^\\s<>!=:,]+\\s+", Pattern.DOTALL);
static final Pattern COLUMN_PATTERN_COMPARATOR_END = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s*([<>=!]+)\\s*[^\\s<>!=:,]+\\s+", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN = Pattern.compile("((\\S+)\\s*:\\s*)?(\\S+)\\s*(\\(.*)", Pattern.DOTALL);
static final Pattern EXISTS_PATTERN = Pattern.compile(".*\\s+exists\\s*\\(?\\s*((\\S*)\\s*:)?\\s*\\S*", Pattern.DOTALL);
static final Pattern NOT_PATTERN = Pattern.compile(".*\\s+not\\s*\\(?\\s*((\\S*)\\s*:)?\\s*\\S*", Pattern.DOTALL);
static final Pattern EVAL_PATTERN = Pattern.compile(".*\\s+eval\\s*\\(\\s*([(^\\))(\\([^\\)]*\\)?)]*)", Pattern.DOTALL);
static final Pattern FROM_PATTERN = Pattern.compile(".*\\)\\s+from\\s+", Pattern.DOTALL);
+ static final Pattern ACCUMULATE_PATTERN = Pattern.compile(".*\\)\\s+from\\s+accumulate\\s*\\(\\s*", Pattern.DOTALL);
+ static final Pattern ACCUMULATE_PATTERN_INIT = Pattern.compile(".*,\\s*init\\s*\\(\\s*(.*)", Pattern.DOTALL);
+ static final Pattern ACCUMULATE_PATTERN_ACTION = Pattern.compile(".*,\\s*init\\s*\\(\\s*(.*)\\)\\s*,\\s*action\\s*\\(\\s*(.*)", Pattern.DOTALL);
+ static final Pattern ACCUMULATE_PATTERN_RESULT = Pattern.compile(".*,\\s*init\\s*\\(\\s*(.*)\\)\\s*,\\s*action\\s*\\(\\s*(.*)\\)\\s*,\\s*result\\s*\\(\\s*(.*)", Pattern.DOTALL);
static final int LOCATION_UNKNOWN = 0;
static final int LOCATION_BEGIN_OF_CONDITION = 1;
@@ -53,12 +59,23 @@
static final int LOCATION_INSIDE_EVAL = 200;
static final int LOCATION_FROM = 300;
+ static final int LOCATION_FROM_COLLECT = 301;
+ static final int LOCATION_FROM_ACCUMULATE = 302;
+ static final int LOCATION_FROM_ACCUMULATE_INIT = 303;
+ static final int LOCATION_FROM_ACCUMULATE_INIT_INSIDE = 304;
+ static final int LOCATION_FROM_ACCUMULATE_ACTION = 305;
+ static final int LOCATION_FROM_ACCUMULATE_ACTION_INSIDE = 306;
+ static final int LOCATION_FROM_ACCUMULATE_RESULT = 307;
+ static final int LOCATION_FROM_ACCUMULATE_RESULT_INSIDE = 308;
static final String LOCATION_PROPERTY_CLASS_NAME = "ClassName";
static final String LOCATION_PROPERTY_PROPERTY_NAME = "PropertyName";
static final String LOCATION_PROPERTY_OPERATOR = "Operator";
static final String LOCATION_EVAL_CONTENT = "EvalContent";
static final String LOCATION_FROM_CONTENT = "FromContent";
+ static final String LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT = "FromAccumulateInitContent";
+ static final String LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT = "FromAccumulateActionContent";
+ static final String LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT = "FromAccumulateResultContent";
private LocationDeterminator() {
}
@@ -172,78 +189,7 @@
}
}
}
- matcher = COLUMN_PATTERN_OPERATOR.matcher(columnContents);
- 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);
- if (matcher.matches()) {
- 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);
- if (matcher.matches()) {
- 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);
- if (matcher.matches()) {
- 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);
- if (matcher.matches()) {
- 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_CONTAINS_END.matcher(columnContents);
- if (matcher.matches()) {
- Location location = new Location(LOCATION_INSIDE_CONDITION_END);
- location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
- return location;
- }
- matcher = COLUMN_PATTERN_MATCHES_END.matcher(columnContents);
- if (matcher.matches()) {
- Location location = new Location(LOCATION_INSIDE_CONDITION_END);
- location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
- return location;
- }
- matcher = COLUMN_PATTERN_EXCLUDES_END.matcher(columnContents);
- if (matcher.matches()) {
- Location location = new Location(LOCATION_INSIDE_CONDITION_END);
- location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
- return location;
- }
- matcher = COLUMN_PATTERN_COMPARATOR_END.matcher(columnContents);
- if (matcher.matches()) {
- Location location = new Location(LOCATION_INSIDE_CONDITION_END);
- location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
- return location;
- }
- matcher = COLUMN_PATTERN_START.matcher(columnContents);
- if (matcher.matches()) {
- Location location = new Location(LOCATION_INSIDE_CONDITION_START);
- location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
- return location;
- }
- Location location = new Location(LOCATION_INSIDE_CONDITION_START);
- location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
- return location;
+ return getLocationForColumn(columnContents, columnDescr.getObjectType());
} else if (descr instanceof ExistsDescr) {
List subDescrs = ((ExistsDescr) descr).getDescrs();
if (subDescrs.size() == 0) {
@@ -326,6 +272,41 @@
String content = CompletionUtil.stripWhiteSpace(backText);
location.setProperty(LOCATION_FROM_CONTENT, content);
return location;
+ } else if (descr instanceof AccumulateDescr) {
+ Matcher matcher = ACCUMULATE_PATTERN.matcher(backText);
+ int end = -1;
+ while (matcher.find()) {
+ end = matcher.end();
+ }
+ String accumulateText = backText.substring(end);
+ matcher = ACCUMULATE_PATTERN_RESULT.matcher(accumulateText);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_FROM_ACCUMULATE_RESULT_INSIDE);
+ location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
+ location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, matcher.group(2));
+ location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT, matcher.group(3));
+ return location;
+ }
+ matcher = ACCUMULATE_PATTERN_ACTION.matcher(accumulateText);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_FROM_ACCUMULATE_ACTION_INSIDE);
+ location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
+ location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, matcher.group(2));
+ return location;
+ }
+ matcher = ACCUMULATE_PATTERN_INIT.matcher(accumulateText);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_FROM_ACCUMULATE_INIT_INSIDE);
+ location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
+ return location;
+ }
+ matcher = COLUMN_PATTERN.matcher(accumulateText);
+ if (matcher.matches()) {
+ String className = matcher.group(3);
+ String columnContents = matcher.group(4);
+ return getLocationForColumn(columnContents, className);
+ }
+ return new Location(LOCATION_FROM_ACCUMULATE);
}
return new Location(LOCATION_UNKNOWN);
@@ -365,7 +346,84 @@
return true;
} else if (descr instanceof FromDescr) {
return ((FromDescr) descr).getDataSource() != null;
+ } else if (descr instanceof AccumulateDescr) {
+ return ((AccumulateDescr) descr).getResultCode() != null;
}
return false;
}
+
+ private static Location getLocationForColumn(String columnContents, String className) {
+ Matcher matcher = COLUMN_PATTERN_OPERATOR.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_OPERATOR);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ return location;
+ }
+ matcher = COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ 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);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ location.setProperty(LOCATION_PROPERTY_OPERATOR, "contains");
+ return location;
+ }
+ matcher = COLUMN_PATTERN_EXCLUDES_ARGUMENT.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ location.setProperty(LOCATION_PROPERTY_OPERATOR, "excludes");
+ return location;
+ }
+ matcher = COLUMN_PATTERN_MATCHES_ARGUMENT.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ location.setProperty(LOCATION_PROPERTY_OPERATOR, "matches");
+ return location;
+ }
+ matcher = COLUMN_PATTERN_CONTAINS_END.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_END);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ return location;
+ }
+ matcher = COLUMN_PATTERN_MATCHES_END.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_END);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ return location;
+ }
+ matcher = COLUMN_PATTERN_EXCLUDES_END.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_END);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ return location;
+ }
+ matcher = COLUMN_PATTERN_COMPARATOR_END.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_END);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ return location;
+ }
+ matcher = COLUMN_PATTERN_START.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_START);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ return location;
+ }
+ Location location = new Location(LOCATION_INSIDE_CONDITION_START);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
+ return location;
+ }
}
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-10-25 22:13:34 UTC (rev 7119)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java 2006-10-25 22:24:24 UTC (rev 7120)
@@ -17,6 +17,7 @@
import org.drools.ide.editors.DRLRuleEditor;
import org.drools.ide.editors.DSLAdapter;
import org.drools.ide.util.ProjectClassLoader;
+import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.ExistsDescr;
@@ -131,6 +132,7 @@
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_BEGIN_OF_CONDITION_EXISTS:
// and add imported classes
List imports = getDRLEditor().getImports();
@@ -272,28 +274,7 @@
break;
case LocationDeterminator.LOCATION_INSIDE_EVAL :
String content = (String) location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT);
- Map params = new HashMap();
- try {
- parser = new DrlParser();
- PackageDescr descr = parser.parse(backText);
- List rules = descr.getRules();
- if (rules != null && rules.size() == 1) {
- getRuleParameters(params, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
- // rule params are already added by JavaCompletionProposals
- //
- // Iterator iterator2 = params.keySet().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);
- // }
- }
- } catch (DroolsParserException exc) {
- // do nothing
- }
- list.addAll(getJavaCompletionProposals(content, prefix, params));
+ list.addAll(getJavaCompletionProposals(content, prefix, getRuleParameters(backText)));
break;
case LocationDeterminator.LOCATION_INSIDE_CONDITION_END :
list.add( new RuleCompletionProposal(prefix.length(), "&", "& ", droolsIcon));
@@ -319,21 +300,24 @@
list.add(prop);
}
}
-
- params = new HashMap();
- try {
- parser = new DrlParser();
- PackageDescr descr = parser.parse(backText);
- List rules = descr.getRules();
- if (rules != null && rules.size() == 1) {
- getRuleParameters(params, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
- }
- } catch (DroolsParserException exc) {
- // do nothing
- }
- list.addAll(getJavaCompletionProposals(fromText, prefix, params));
+ 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;
}
}
}
@@ -383,6 +367,21 @@
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;
+ }
+
private boolean isComparable(String type) {
if (type == null) {
return false;
@@ -530,29 +529,8 @@
private void addRHSJavaCompletionProposals(List list, String backText, String prefix) {
int thenPosition = backText.lastIndexOf("then");
String conditions = backText.substring(0, thenPosition);
- Map params = new HashMap();
- DrlParser parser = new DrlParser();
- try {
- PackageDescr descr = parser.parse(conditions);
- List rules = descr.getRules();
- if (rules != null && rules.size() == 1) {
- getRuleParameters(params, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
- // rule params are already added by JavaCompletionProposals
- //
- // Iterator iterator = params.keySet().iterator();
- // while (iterator.hasNext()) {
- // String name = (String) iterator.next();
- // RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), name, name + ".");
- // prop.setPriority(-1);
- // prop.setImage(methodIcon);
- // list.add(prop);
- // }
- }
- } catch (DroolsParserException exc) {
- // do nothing
- }
- String consequence = backText.substring(thenPosition + 4);
- list.addAll(getJavaCompletionProposals(consequence, prefix, params));
+ String consequence = backText.substring(thenPosition + 4);
+ list.addAll(getJavaCompletionProposals(consequence, prefix, getRuleParameters(conditions)));
}
private void getRuleParameters(Map result, List descrs) {
@@ -586,6 +564,12 @@
getRuleParameters(result, ((NotDescr) descr).getDescrs());
} else if (descr instanceof FromDescr) {
getRuleParameters(result, ((FromDescr) descr).getReturnedColumn());
+ } else if (descr instanceof AccumulateDescr) {
+ AccumulateDescr accumulateDescr = (AccumulateDescr) descr;
+ getRuleParameters(result, accumulateDescr.getResultColumn());
+ if (accumulateDescr.getSourceColumn() != null) {
+ getRuleParameters(result, accumulateDescr.getSourceColumn());
+ }
}
}
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-10-25 22:13:34 UTC (rev 7119)
+++ labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java 2006-10-25 22:24:24 UTC (rev 7120)
@@ -1016,6 +1016,135 @@
" ";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
+
+ /** FROM ACCUMULATE */
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate ( ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_ACCUMULATE, location.getType());
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate(";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_ACCUMULATE, location.getType());
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type == $likes ), \n" +
+ " init( int total = 0; ), \n" +
+ " action( total += $cheese.getPrice(); ), \n" +
+ " result( new Integer( total ) ) \n" +
+ " ) \n" +
+ " ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type == $likes ), \n" +
+ " init( ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_ACCUMULATE_INIT_INSIDE, location.getType());
+ assertEquals("", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type == $likes ), \n" +
+ " init( int total = 0; ), \n" +
+ " action( ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
+ assertEquals("int total = 0; ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+ assertEquals("", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type == $likes ), \n" +
+ " init( int total = 0; ), \n" +
+ " action( total += $cheese.getPrice(); ), \n" +
+ " result( ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
+ assertEquals("int total = 0; ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+ assertEquals("total += $cheese.getPrice(); ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+ assertEquals("", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type == $likes ), \n" +
+ " init( int total =";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_ACCUMULATE_INIT_INSIDE, location.getType());
+ assertEquals("int total =", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type == $likes ), \n" +
+ " init( int total = 0; ), \n" +
+ " action( total += $ch";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
+ assertEquals("int total = 0; ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+ assertEquals("total += $ch", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type == $likes ), \n" +
+ " init( int total = 0; ), \n" +
+ " action( total += $cheese.getPrice(); ), \n" +
+ " result( new Integer( tot";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
+ assertEquals("int total = 0; ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+ assertEquals("total += $cheese.getPrice(); ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+ assertEquals("new Integer( tot", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
+ assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("type", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from accumulate( \n" +
+ " $cheese : Cheese( type == ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("type", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
}
}
More information about the jboss-svn-commits
mailing list