I have modified the rules in this manner:
function boolean test(double n, double m) {
return (n < m);
}
rule "Regola 3"
agenda-group "b2";
salience 3;
no-loop true;
when
f2 : ForAllManager( id == "b2") &&
n1 : NumberWrapper(id=="n1") &&
eval(test(n1.getValue(),100.00))
then
System.out.println (n1.getValue());
retract(n1);
if(f2.getCursor().hasNextSelection()) f2.esegui();
else assert(new BooleanWrapper(f2.getId(),true));
end
rule "Regola 3.x"
agenda-group "b2";
salience 3;
no-loop true;
when
exists(f2: ForAllManager( id == "b2")) &&
n1 : NumberWrapper(id== "n1") &&
eval(!(test(n1.getValue(),100.00)))
then
System.out.println(n1.getValue());
retract(n1);
assert(new BooleanWrapper("b2",false));
retract(f2);
end
And now I get the following errors:
java.lang.ClassCastException: org.drools.reteoo.InitialFactImpl
at
it.polimi.forAllAnnidati.Rule_Regola_3_x_0ConsequenceInvoker.evaluate(Rule_Regola_3_x_0ConsequenceInvoker.java:18)
at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
at
it.polimi.forAllAnnidati.ForAllManager.esegui(ForAllManager.java:120)
at
it.polimi.forAllAnnidati.ForAllManager.esegui(ForAllManager.java :110)
at it.polimi.forAllAnnidati.Manager.esegui(Manager.java:126)
at it.polimi.forAllAnnidati.Gestore.inizializza(Gestore.java:61)
at it.polimi.forAllAnnidati.Gestore.<init>(Gestore.java:8)
at
it.polimi.forAllAnnidati.Dynamo_rules_test.main(Dynamo_rules_test.java:9)
Exception in thread "main" org.drools.spi.ConsequenceException:
java.lang.ClassCastException: org.drools.reteoo.InitialFactImpl
at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)
at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown
Source)
at
it.polimi.forAllAnnidati.ForAllManager.esegui(ForAllManager.java:120)
at
it.polimi.forAllAnnidati.ForAllManager.esegui(ForAllManager.java :110)
at it.polimi.forAllAnnidati.Manager.esegui(Manager.java:126)
at it.polimi.forAllAnnidati.Gestore.inizializza(Gestore.java:61)
at it.polimi.forAllAnnidati.Gestore.<init>(Gestore.java:8)
at
it.polimi.forAllAnnidati.Dynamo_rules_test.main(Dynamo_rules_test.java:9)
Caused by: java.lang.ClassCastException: org.drools.reteoo.InitialFactImpl
at
it.polimi.forAllAnnidati.Rule_Regola_3_x_0ConsequenceInvoker.evaluate
(Rule_Regola_3_x_0ConsequenceInvoker.java:18)
... 10 more
Any ideas?
Liliana
------------------------------------------------------------------------
package it.polimi.forAllAnnidati;
public class Dynamo_rules_test {
//private ForAllManager f1, f2, f3;
public static void main(String[] args){
Gestore g = new Gestore();
}
/* Manager m;
ArrayList<Variable> var1, var2;
Alias a1, a2, a3;
//creo i forall
m = new Manager();
f3 = new ForAllManager("b3",null);
f2 = new ForAllManager("b2",null);
f1 = new ForAllManager("b1",null);
//setto la working memory
f1.setWm(m.getWm());
f2.setWm(m.getWm());
f3.setWm(m.getWm());
//setto le variabili
var1 = new ArrayList<Variable>();
var2 = new ArrayList<Variable>();
Variable n1 = new Variable("$l/easting","Number","n1");
Variable n2 = new Variable("$l/northing", "Number","n2");
var1.add(n1);
var2.add(n2);
f3.setVariables(var2);
f2.setVariables(var1);
//setto gli Alias
a1 = new Alias("r","$this/getRouteIn/Restaurant");
a2 = new Alias("l","$r/location");
a3 = new Alias("l", "$r/location");
f1.setAlias(a1);
f2.setAlias(a2);
f3.setAlias(a3);
//setto i forAll interni ed esterni
f3.setExtForAll(f1);
f2.setExtForAll(f1);
ArrayList<ForAllManager> forAll = new
ArrayList<ForAllManager>();
forAll.add(f2);
forAll.add(f3);
f1.setForAllArray(forAll);
//setto gli array e le variabili del manager esterno
ArrayList<ForAllManager> forAll1 = new
ArrayList<ForAllManager>();
forAll1.add(f1);
m.setVariables(null);
m.setForAllArray(forAll1);
f1.setExtForAll(m);
m.esegui();
} */
}
------------------------------------------------------------------------
package it.polimi.forAllAnnidati;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
import org.drools.rule.Package;
public class Manager {
WorkingMemory wm;
private ArrayList<ForAllManager> forAllArray;
private ArrayList<Variable> variables;
private ForAllThread thread;
public ForAllThread getThread() {
return thread;
}
public void setThread(ForAllThread thread) {
this.thread = thread;
}
public ArrayList<ForAllManager> getForAllArray() {
return forAllArray;
}
public void setForAllArray(ArrayList<ForAllManager> forAllArray) {
if(forAllArray==null) forAllArray = new
ArrayList<ForAllManager>();
else this.forAllArray = forAllArray;
}
public ArrayList<Variable> getVariables() {
return variables;
}
public void setVariables(ArrayList<Variable> variables) {
if (variables==null) variables = new ArrayList<Variable>();
else this.variables = variables;
}
public Manager() {
super();
// TODO Auto-generated constructor stub
PackageBuilder pb = new PackageBuilder();
try {
InputStream ins = new
FileInputStream("D:\\Documenti\\Milano\\workspace\\EsempiForAllAnnidati\\src\\rules\\forAllAnnidati.drl");
InputStreamReader isr = new InputStreamReader(ins);
pb.addPackageFromDrl(isr);
} catch (DroolsParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Package pkg = pb.getPackage();
RuleBase rb = RuleBaseFactory.newRuleBase();
try {
rb.addPackage(pkg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
wm = rb.newWorkingMemory();
//thread = new ForAllThread(this);
}
public WorkingMemory getWm() {
return wm;
}
public void setWm(WorkingMemory wm) {
this.wm = wm;
}
public void esegui(){
//Inizializzo tutte le variabili presenti nell'array
if(variables!= null){
Iterator<Variable> itVariable = variables.iterator();
while(itVariable.hasNext()){
XmlCursor varCursor;
Variable var = itVariable.next();
XmlObject xml =
this.parseXml("D:\\Documenti\\Milano\\workspace\\XMLBeans\\monitorData.xml");
varCursor = xml.newCursor();
varCursor.selectPath(var.getXpath());
varCursor.toNextSelection();
if(var.getType().equals("Number"))
wm.assertObject(new NumberWrapper(Double.parseDouble(varCursor.getTextValue()),
var.getId().toString()));
if(var.getType().equals("String"))
wm.assertObject(new StringWrapper( var.getId().toString(), varCursor.getTextValue()));
}}
//Inizializzo tutti i forAll presenti nell'array
Iterator<ForAllManager> itForAll =
forAllArray.iterator();
while (itForAll.hasNext()){
ForAllManager forall = itForAll.next();
forall.setAliases(null);
forall.setCursor();
wm.assertObject(forall);
forall.esegui();
}
System.out.println("ora asserisco le regole");
wm.setFocus("1");
wm.fireAllRules();
}
public XmlObject parseXml(String xmlFilePath)
{
File xmlFile = new File(xmlFilePath);
XmlObject xml = null;
try
{
xml = XmlObject.Factory.parse(xmlFile);
} catch (XmlException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return xml;
}
}
------------------------------------------------------------------------
package it.polimi.forAllAnnidati;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import it.polimi.forAllAnnidati.BooleanWrapper;
public class ForAllManager extends Manager {
//id del forAll per essere asserito nella wm
// lo stesso id del booleano che ne sostituisce il valore
private String id;
// il forAll di livello pi alto
private Manager extForAll;
//sono tutti i forAll di livello pi basso
private ArrayList<ForAllManager> forAllArray;
private HashMap<String,XmlCursor> aliases;
private ArrayList<Variable> variables;
private Alias alias;
private XmlCursor cursor;
private boolean value;
private ForAllThread thread;
public boolean isValue() {
return value;
}
public void setValue(boolean value) {
this.value = value;
}
public Manager getExtForAll() {
return extForAll;
}
public void setExtForAll(Manager extForAll) {
this.extForAll = extForAll;
}
public ForAllManager(String id, ArrayList<ForAllManager> forAllArray) {
super();
this.id = id;
this.forAllArray = forAllArray;
thread = new ForAllThread(this);
}
public ForAllManager(ArrayList<it.polimi.forAllAnnidati.ForAllManager>
forAllArray) {
super();
this.forAllArray = forAllArray;
thread = new ForAllThread(this);
}
public void esegui(){
System.out.println("eseguo il forall "+ id);
//if (cursor == null) setCursor();
if(cursor.hasNextSelection()){
cursor.toNextSelection();
XmlCursor newCursor = cursor.newCursor();
if(aliases.get(alias.getVarName())!= null)
aliases.remove(alias.getVarName());
aliases.put(alias.getVarName(), newCursor);
//Inizializzo tutte le variabili presenti nell'array
if(variables!=null){
Iterator<Variable> itVariable = variables.iterator();
while(itVariable.hasNext()){
XmlCursor varCursor;
Variable var = itVariable.next();
String s = var.getXpath();
StringTokenizer st = new StringTokenizer(s,"/");
String varId = st.nextToken().substring(1);
if(aliases.get(varId)!= null){
varCursor =
aliases.get(varId).newCursor();
varCursor.selectPath("$this"+s.substring(s.indexOf("/")));
} else {
XmlObject xml =
this.parseXml("D:\\Documenti\\Milano\\workspace\\XMLBeans\\monitorData.xml");
varCursor = xml.newCursor();
varCursor.selectPath(var.getXpath());
}
varCursor.toNextSelection();
if(var.getType().equals("Number"))
wm.assertObject(new NumberWrapper(Double.parseDouble(varCursor.getTextValue()),
var.getId().toString()));
if(var.getType().equals("String"))
wm.assertObject(new StringWrapper( var.getId().toString(), varCursor.getTextValue()));
}}
if(forAllArray!= null ) {
//Inizializzo tutti i forAll presenti nell'array
Iterator<ForAllManager> itForAll =
forAllArray.iterator();
while (itForAll.hasNext()){
ForAllManager forall = itForAll.next();
forall.setAliases(aliases);
forall.setCursor();
wm.assertObject(forall);
forall.esegui();
}
/*itForAll = forAllArray.iterator();
while (itForAll.hasNext()){
ForAllManager forall = itForAll.next();
wm.assertObject(new
BooleanWrapper(forall.getId(),forall.isValue()));
}*/
}
wm.setFocus(id);
wm.fireAllRules();
}
//notifica();
}
public ArrayList<ForAllManager> getForAllArray() {
return forAllArray;
}
public void setForAllArray(ArrayList<ForAllManager> forAllArray) {
this.forAllArray = forAllArray;
}
public Alias getAlias() {
return alias;
}
public void setAlias(Alias alias) {
this.alias = alias;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setCursor(){
String s = alias.getXpath();
StringTokenizer st = new StringTokenizer(s,"/");
String varId = st.nextToken().substring(1);
if((aliases != null) && aliases.get(varId)!=null){
cursor = aliases.get(varId).newCursor();
cursor.selectPath("$this"+ s.substring(s.indexOf("/")));
}
else {
XmlObject xml =
this.parseXml("D:\\Documenti\\Milano\\workspace\\XMLBeans\\monitorData.xml");
cursor = xml.newCursor();
cursor.toFirstChild();
cursor.selectPath(alias.getXpath());
}
}
public XmlObject parseXml(String xmlFilePath)
{
File xmlFile = new File(xmlFilePath);
XmlObject xml = null;
try
{
xml = XmlObject.Factory.parse(xmlFile);
} catch (XmlException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return xml;
}
public HashMap<String, XmlCursor> getAliases() {
return aliases;
}
public void setAliases(HashMap<String, XmlCursor> a) {
if(a == null){
aliases = new HashMap<String, XmlCursor>();
}
else this.aliases = a;
}
public ArrayList<Variable> getVariables() {
return variables;
}
public void setVariables(ArrayList<Variable> variables) {
this.variables = variables;
}
public void notifica(){
ForAllThread t = extForAll.getThread();
synchronized(t){
t.notify();
}
}
public XmlCursor getCursor() {
return cursor;
}
public ForAllThread getThread() {
return thread;
}
public void setThread(ForAllThread thread) {
this.thread = thread;
}
}
------------------------------------------------------------------------
package it.polimi.forAllAnnidati;
public class BooleanWrapper {
private boolean value;
private String id;
public BooleanWrapper(String id, boolean value) {
super();
this.value = value;
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public boolean isValue() {
return value;
}
public void setValue(boolean value) {
this.value = value;
}
}
------------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email