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

Reply via email to