Consider the following files : 1)Dynamo_rules_test.java 2)Manager.java 3) ForAllManager.java 4)BooleanWrapper.java 5)StringWrapper.java 6)NumberWrapper.java ----------------------------------------------------- and consider two simple rules:
rule "Regola 3" agenda-group "b2"; salience 3; no-loop true; when f2 : ForAllManager( id == "b2") && n1 : NumberWrapper(id=="n1") && eval(n1.getValue() < 100) then System.out.println(n1.getValue()); retract(n1); if (f2.getCursor().hasNextSelection() == true) f2.esegui(); else { assert (new BooleanWrapper(f2.getId(),true); retract(f2);} end rule "Regola 3.x" agenda-group "b2"; salience 3; no-loop true; when f2: ForAllManager( id == "b2") && n1 : NumberWrapper(id== "n1") && eval(!(n1.getValue() < 100)) then assert(new BooleanWrapper(f2.getId(),false)); retract(n1); retract(f2); end When the system has to assert the object BooleanWrapper in the WorkingMemory, I get the following errors: java.lang.NullPointerException at org.drools.rule.BoundVariableConstraint.isAllowed(Unknown Source) at org.drools.common.BetaNodeBinder.isAllowed(Unknown Source) at org.drools.reteoo.LeftInputAdapterNode.assertObject(Unknown Source) at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown Source) at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source) at org.drools.reteoo.Rete.assertObject(Unknown Source) at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source) at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown Source) at org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source) at org.drools.base.DefaultKnowledgeHelper.assertObject(Unknown Source) at org.drools.base.DefaultKnowledgeHelper.assertObject(Unknown Source) at it.polimi.forAllAnnidati.Rule_Regola_3_x_0.consequence(Rule_Regola_3_x_0.java:12) at it.polimi.forAllAnnidati.Rule_Regola_3_x_0ConsequenceInvoker.evaluate(Rule_Regola_3_x_0ConsequenceInvoker.java:24) 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:118) at it.polimi.forAllAnnidati.ForAllManager.esegui(ForAllManager.java:107) at it.polimi.forAllAnnidati.Manager.esegui(Manager.java:126) at it.polimi.forAllAnnidati.Dynamo_rules_test.main(Dynamo_rules_test.java:56) Exception in thread "main" org.drools.spi.ConsequenceException: java.lang.NullPointerException 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:118) at it.polimi.forAllAnnidati.ForAllManager.esegui(ForAllManager.java:107) at it.polimi.forAllAnnidati.Manager.esegui(Manager.java:126) at it.polimi.forAllAnnidati.Dynamo_rules_test.main(Dynamo_rules_test.java:56) Caused by: java.lang.NullPointerException at org.drools.rule.BoundVariableConstraint.isAllowed(Unknown Source) at org.drools.common.BetaNodeBinder.isAllowed(Unknown Source) at org.drools.reteoo.LeftInputAdapterNode.assertObject(Unknown Source) at org.drools.reteoo.ObjectSource.propagateAssertObject(Unknown Source) at org.drools.reteoo.ObjectTypeNode.assertObject(Unknown Source) at org.drools.reteoo.Rete.assertObject(Unknown Source) at org.drools.reteoo.ReteooRuleBase.assertObject(Unknown Source) at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(Unknown Source) at org.drools.common.AbstractWorkingMemory.assertObject(Unknown Source) at org.drools.base.DefaultKnowledgeHelper.assertObject(Unknown Source) at org.drools.base.DefaultKnowledgeHelper.assertObject(Unknown Source) at it.polimi.forAllAnnidati.Rule_Regola_3_x_0.consequence(Rule_Regola_3_x_0.java:12) at it.polimi.forAllAnnidati.Rule_Regola_3_x_0ConsequenceInvoker.evaluate(Rule_Regola_3_x_0ConsequenceInvoker.java:24) ... 8 more Any ideas??? Liliana
package it.polimi.forAllAnnidati; import java.util.ArrayList; public class Dynamo_rules_test { public static void main(String[] args){ Manager m; ForAllManager f1, f2, f3; 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("/media/hda4/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("/media/hda4/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; 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; } public ForAllManager(ArrayList<it.polimi.forAllAnnidati.ForAllManager> forAllArray) { super(); this.forAllArray = forAllArray; } 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("/media/hda4/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(); } else { wm.assertObject(new BooleanWrapper(getId(),true)); } //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("/media/hda4/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; } }
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; } }
package it.polimi.forAllAnnidati; public class NumberWrapper { private double value; private String id; public NumberWrapper(double value, String id) { super(); this.value = value; this.id = id; } public String getId() { return id; } public void setId(String id) { this.id = id; } public double getValue() { return value; } public void setValue(double value) { this.value = value; } }
package it.polimi.forAllAnnidati; public class StringWrapper { private String id; private String value; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public StringWrapper(String id, String value) { super(); this.id = id; this.value = value; } }
--------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email