It's generally not a good idea to use globals in rules.

I suggest that you use a simple
  class MaxSymptoms {


On 25 June 2010 12:43, Dobedani <dobedani@gmx.net> wrote:

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.
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users