[rules-users] Looking up values in WHEN block

Dobedani dobedani at gmx.net
Fri Jun 25 06:43:42 EDT 2010


Dear All,

I'm trying to develop rules which will help to analyse incoming reports of
disease related symptoms. I have found a way to fill a HashMap with maximum
allowable values specific for various symptoms. I would like to lookup the
relevant value any time a symptom comes in. In the first place, I'm trying
to check whether (1) the HashMap's keySet contains the found symptom i.e. in
the WHEN block - but it does not work as expected. Let alone (2) that I can
lookup the maximum allowable value and check whether it has been exceeded!
It is strange to me that the result of both "actions" can however be printed
out in the THEN block. How to do this? Any help will be appreciated.

Kind regards, Dobedani


Here's some of my Java code:
public class Symptom {
    private String name;
    private String location;
    private int period;
    private int numCases;

    // getters and setters ...
}

And:
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
java.util.Map maxSymptoms = new java.util.HashMap<String, Integer>(); 			
ksession.setGlobal("maxSymptoms", maxSymptoms);

Now, some of the code from my DRL file:
import Symptom;
global java.util.Map maxSymptoms;

function void prepareMap(java.util.Map map) {
    if (map.size() == 0) {    
        map.put("fever", 20);
        map.put("diarrhoea", 30);
    }
}

rule "Initialisation"
    salience 100
    when
        eval(true);  // always!
    then
        prepareMap(maxSymptoms);
end

rule "Number of cases with particular symptom observed"
    dialect "mvel"

    when
        #conditions	
        Symptom( symptomName : name );		
        eval(maxSymptoms.keySet() contains symptomName); 
        #Symptom( numCases > maxSymptoms[symptomName] );
    then 
        #actions
        System.out.println(maxSymptoms.keySet() contains symptomName); 
        System.out.println( maxSymptoms[symptomName] );
        #System.out.println("Number of cases with " + symptomName + "
exceeds maximum ")
end


-- 
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/Looking-up-values-in-WHEN-block-tp921790p921790.html
Sent from the Drools - User mailing list archive at Nabble.com.



More information about the rules-users mailing list