[jboss-svn-commits] JBL Code SVN: r7122 - 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 19:10:12 EDT 2006
Author: KrisVerlaenen
Date: 2006-10-25 19:10:08 -0400 (Wed, 25 Oct 2006)
New Revision: 7122
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-487: Add eclipse plugin support for "collect" conditional element
- the DRL editor now fully supports collect
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 23:02:12 UTC (rev 7121)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java 2006-10-25 23:10:08 UTC (rev 7122)
@@ -10,6 +10,8 @@
import org.drools.compiler.DroolsParserException;
import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.CollectDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.EvalDescr;
import org.drools.lang.descr.ExistsDescr;
@@ -18,7 +20,6 @@
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.RestrictionConnectiveDescr;
import org.drools.lang.descr.RuleDescr;
@@ -44,6 +45,7 @@
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 Pattern COLLECT_PATTERN = Pattern.compile(".*\\)\\s+from\\s+collect\\s*\\(\\s*", Pattern.DOTALL);
static final int LOCATION_UNKNOWN = 0;
static final int LOCATION_BEGIN_OF_CONDITION = 1;
@@ -115,14 +117,14 @@
return new Location(LOCATION_UNKNOWN);
}
- public static Location determineLocationForDescr(PatternDescr descr, String backText) {
+ public static Location determineLocationForDescr(BaseDescr descr, String backText) {
if (descr instanceof RuleDescr) {
RuleDescr ruleDescr = (RuleDescr) descr;
List subDescrs = ruleDescr.getLhs().getDescrs();
if (subDescrs.size() == 0) {
return new Location(LOCATION_BEGIN_OF_CONDITION);
}
- PatternDescr subDescr = (PatternDescr) subDescrs.get(subDescrs.size() - 1);
+ BaseDescr subDescr = (BaseDescr) subDescrs.get(subDescrs.size() - 1);
if (subDescr == null) {
Matcher matcher = EXISTS_PATTERN.matcher(backText);
if (matcher.matches()) {
@@ -196,7 +198,7 @@
return new Location(LOCATION_BEGIN_OF_CONDITION_EXISTS);
}
if (subDescrs.size() == 1) {
- PatternDescr subDescr = (PatternDescr) subDescrs.get(0);
+ BaseDescr subDescr = (BaseDescr) subDescrs.get(0);
if (subDescr == null) {
return new Location(LOCATION_BEGIN_OF_CONDITION_EXISTS);
}
@@ -209,7 +211,7 @@
return new Location(LOCATION_BEGIN_OF_CONDITION_NOT);
}
if (subDescrs.size() == 1) {
- PatternDescr subDescr = (PatternDescr) subDescrs.get(0);
+ BaseDescr subDescr = (BaseDescr) subDescrs.get(0);
if (subDescr == null) {
return new Location(LOCATION_BEGIN_OF_CONDITION_NOT);
}
@@ -224,7 +226,7 @@
List subDescrs = ((AndDescr) descr).getDescrs();
int size = subDescrs.size();
if (size == 2) {
- PatternDescr subDescr = (PatternDescr) subDescrs.get(1);
+ BaseDescr subDescr = (BaseDescr) subDescrs.get(1);
if (subDescr == null) {
Matcher matcher = EXISTS_PATTERN.matcher(backText);
if (matcher.matches()) {
@@ -248,7 +250,7 @@
List subDescrs = ((OrDescr) descr).getDescrs();
int size = subDescrs.size();
if (size == 2) {
- PatternDescr subDescr = (PatternDescr) subDescrs.get(1);
+ BaseDescr subDescr = (BaseDescr) subDescrs.get(1);
if (subDescr == null) {
Matcher matcher = EXISTS_PATTERN.matcher(backText);
if (matcher.matches()) {
@@ -307,12 +309,26 @@
return getLocationForColumn(columnContents, className);
}
return new Location(LOCATION_FROM_ACCUMULATE);
+ } else if (descr instanceof CollectDescr) {
+ Matcher matcher = COLLECT_PATTERN.matcher(backText);
+ int end = -1;
+ while (matcher.find()) {
+ end = matcher.end();
+ }
+ String collectText = backText.substring(end);
+ matcher = COLUMN_PATTERN.matcher(collectText);
+ if (matcher.matches()) {
+ String className = matcher.group(3);
+ String columnContents = matcher.group(4);
+ return getLocationForColumn(columnContents, className);
+ }
+ return new Location(LOCATION_FROM_COLLECT);
}
return new Location(LOCATION_UNKNOWN);
}
- private static boolean endReached(PatternDescr descr) {
+ private static boolean endReached(BaseDescr descr) {
if (descr instanceof ColumnDescr) {
return (descr.getEndLine() != 0 || descr.getEndColumn() != 0);
} else if (descr instanceof ExistsDescr) {
@@ -320,27 +336,27 @@
if (descrs.isEmpty()) {
return false;
}
- return endReached((PatternDescr) descrs.get(0));
+ return endReached((BaseDescr) descrs.get(0));
} else if (descr instanceof NotDescr) {
List descrs = ((NotDescr) descr).getDescrs();
if (descrs.isEmpty()) {
return false;
}
- return endReached((PatternDescr) descrs.get(0));
+ return endReached((BaseDescr) descrs.get(0));
} else if (descr instanceof AndDescr) {
List descrs = ((AndDescr) descr).getDescrs();
if (descrs.size() != 2) {
return false;
}
- return endReached((PatternDescr) descrs.get(0))
- && endReached((PatternDescr) descrs.get(1));
+ return endReached((BaseDescr) descrs.get(0))
+ && endReached((BaseDescr) descrs.get(1));
} else if (descr instanceof OrDescr) {
List descrs = ((OrDescr) descr).getDescrs();
if (descrs.size() != 2) {
return false;
}
- return endReached((PatternDescr) descrs.get(0))
- && endReached((PatternDescr) descrs.get(1));
+ 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;
@@ -348,6 +364,8 @@
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 false;
}
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 23:02:12 UTC (rev 7121)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java 2006-10-25 23:10:08 UTC (rev 7122)
@@ -19,6 +19,7 @@
import org.drools.ide.util.ProjectClassLoader;
import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FactTemplateDescr;
@@ -28,7 +29,6 @@
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;
import org.drools.semantics.java.ClassTypeResolver;
import org.drools.util.asm.ClassFieldInspector;
@@ -132,7 +132,8 @@
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_ACCUMULATE:
+ case LocationDeterminator.LOCATION_FROM_COLLECT :
case LocationDeterminator.LOCATION_BEGIN_OF_CONDITION_EXISTS:
// and add imported classes
List imports = getDRLEditor().getImports();
@@ -539,12 +540,12 @@
}
Iterator iterator = descrs.iterator();
while (iterator.hasNext()) {
- PatternDescr descr = (PatternDescr) iterator.next();
+ BaseDescr descr = (BaseDescr) iterator.next();
getRuleParameters(result, descr);
}
}
- private void getRuleParameters(Map result, PatternDescr descr) {
+ private void getRuleParameters(Map result, BaseDescr descr) {
if (descr == null) {
return;
}
@@ -580,7 +581,7 @@
}
Iterator iterator = descrs.iterator();
while (iterator.hasNext()) {
- PatternDescr descr = (PatternDescr) iterator.next();
+ BaseDescr descr = (BaseDescr) iterator.next();
if (descr instanceof FieldBindingDescr) {
FieldBindingDescr fieldDescr = (FieldBindingDescr) descr;
String name = fieldDescr.getIdentifier();
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 23:02:12 UTC (rev 7121)
+++ labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java 2006-10-25 23:10:08 UTC (rev 7122)
@@ -6,12 +6,6 @@
* Test to check the location determination when doing code completion inside
* rule condtions.
*
- * Possible locations:
- * LOCATION_BEGIN_OF_CONDITION
- * -> all drools condition keywords + imported classes
- * LOCATION_INSIDE_CONDITION_START
- * -> all properties of specified class
- *
* @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
*
*/
@@ -479,7 +473,7 @@
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-// TODO
+ // TODO
// input =
// "rule MyRule \n" +
// " when \n" +
@@ -487,7 +481,7 @@
// location = LocationDeterminator.getLocationInCondition(input);
// assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
// assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-//
+
// input =
// "rule MyRule \n" +
// " when \n" +
@@ -1145,6 +1139,60 @@
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));
+
+ /** FROM COLLECT */
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from collect ( ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_COLLECT, location.getType());
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from collect(";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_FROM_COLLECT, location.getType());
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from collect ( \n" +
+ " Cheese( type == $likes )" +
+ " ) \n" +
+ " ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property > 0 ) from collect ( \n" +
+ " 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 collect ( \n" +
+ " 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 collect ( \n" +
+ " 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