As far as I can see there is nothing wrong with your first attempt.
I've attached a test file of your scenario. It works for me. Can you please
test my file and create a test case that fails?
Best,
On Thu, Dec 31, 2009 at 10:26 AM, orchid <[email protected]> wrote:
>
> Hi All,
> I'm using Drools 5.x. I have the following class:
> public class Machine{
> ...
> private List rules = new ArrayList();
> ...
> }
>
> The 'rules' list holds strings. I would like from my rule to check whether
> that list contains the string "rule2".
>
> I've tried doing this in the following ways, but get compilation error:
>
> rule "rule1"
> when
> /*1st attempt:*/ $m:Machine(rules contains "rule2")
> /*2nd attempt:*/ $m:Machine(rules.contains("rule2") )
> then
> ...
> What am I doing wrong?
>
> Thanks in advance !!!
>
> --
> View this message in context:
> http://n3.nabble.com/How-to-check-an-array-field-from-LHS-of-a-rule-tp104523p104523.html
> Sent from the Drools - User mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> [email protected]
> https://lists.jboss.org/mailman/listinfo/rules-users
>
--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Esteban Aliverti
package eaa.test.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.FactHandle;
import org.drools.util.FileManager;
import org.mortbay.jetty.Server;
public class TmpTest extends TestCase {
FileManager fileManager;
@Override
protected void setUp() throws Exception {
fileManager = new FileManager();
fileManager.setUp();
}
@Override
protected void tearDown() throws Exception {
fileManager.tearDown();
}
public class Machine {
private List rules = new ArrayList();
public List getRules() {
return rules;
}
public void setRules(List rules) {
this.rules = rules;
}
public boolean addRule(Object e) {
return rules.add(e);
}
public void clearRules() {
rules.clear();
}
}
public void testModifyFileUrlOverwriteIncremental() throws Exception {
String header1 = "";
header1 += "package org.drools.test\n";
header1 += "import eaa.test.test.TmpTest.Machine\n";
header1 += "global java.util.List list\n\n";
String rule1 = "";
rule1 += "rule rule1\n";
rule1 += "when\n";
rule1 += "\tMachine(rules contains \"Some Rule\")\n";
rule1 += "then\n";
rule1 += "list.add( drools.getRule().getName());\n";
rule1 += "end\n";
File f1 = fileManager.newFile("rule1.drl");
Writer output = new BufferedWriter(new FileWriter(f1));
output.write(header1);
output.write(rule1);
output.close();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newFileResource(f1), ResourceType.DRL);
if (kbuilder.hasErrors()) {
for (KnowledgeBuilderError error : kbuilder.getErrors()) {
System.err.println(error);
}
fail("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List<String> list = new ArrayList<String>();
ksession.setGlobal("list", list);
//insert a Machine with "Some String" in its rules
Machine m = new Machine();
m.addRule("Some Rule");
FactHandle fh = ksession.insert(m);
ksession.fireAllRules();
assertEquals(1, list.size());
assertTrue(list.contains("rule1"));
list.clear();
//clear Machine's rules
m.clearRules();
//updates the Machine in kbase
ksession.update(fh, m);
ksession.fireAllRules();
assertEquals(0, list.size());
ksession.dispose();
}
}
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users