[rules-users] Accessing maps (hashmaps) keys and values in rules

shaz shauii at yahoo.com
Thu Nov 1 22:31:52 EDT 2007


Hi, 

I am placing objects in the Hashmap that were retrieved from the database. There are currently a hundred objects that I'm storing in the HashMap. I just made a simple example earlier :) . What works for me now is putting the getting of the values in the eval(). However, I don't know how to assign the values that I've taken from the Map.

eval( ( (MyClass)mapOfObj.get("keyOfObj")).getId() > 30);

How do I assign (MyClass)mapOfObj.get("keyOfObj") to a variable?


tnx,

shaz


----- Original Message ----
From: "Anstis, Michael (M.)" <manstis1 at ford.com>
To: Rules Users List <rules-users at lists.jboss.org>
Sent: Friday, November 2, 2007 12:17:51 AM
Subject: RE: [rules-users] Accessing maps (hashmaps) keys and values in rules



 

By way of example (if you misunderstand how the rule engine 
should be used):-

 

rule 
chkobj
when
    $o : 
MyClass( id == "1", name == "name" 
)

then

    //Do 
something else

    
$o.doSomething();

end



  
  
  From: rules-users-bounces at lists.jboss.org 
  [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Edson 
  Tirelli
Sent: 01 November 2007 15:48
To: Rules Users 
  List
Subject: Re: [rules-users] Accessing maps (hashmaps) keys and 
  values in rules



  

   Shaz,

   We strongly advise you 
  to move to 4.0.3, but this is not related to your problem. 
   I 
  think you are misunderstanding something. Why are you using the global map to 
  store your fact? Simply insert it into the working memory and it will work 
  fine. 

   []s
   Edson



  2007/11/1, Shaz Tumulak <shauii at yahoo.com>:
  
Hi,

I 
    can't seem to make this syntax work in Drools 4.0.2. Pls. see my 
    sample
code below.
________________________________________
class 
    MyClass {
        String 
    id;
        String 
    name;

        MyClass(String 
    id, String 
    name){
                this.id = 
    id;
                this.name = 
    name;
        }
        :
        getter, 
    setter methods 
    
        :
}

MyClass 
    obj = new MyClass("1"", "name");

TreeMap<String, MyClass> 
    mapOfObj = new TreeMap<String, MyClass>();
mapOfObj.put("keyOfObj", 
    obj); 
________________________________________

DRL 
    file
-------

global java.util.TreeMap mapOfObj;

rule 
    chkobj
when
        obj : 
    MyClass(mapOfObj["keyOfObj"].id == 
    "1");
        eval(obj.getName() 
    == "name");
________________________________________

I'm getting 
    this error: 
    org.drools.RuntimeDroolsException:
java.lang.NullPointerException
                            at 
    
org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:76)

Is 
    my syntax correct and has someone used this in 4.0.2 or should I move 
    on
to Drools 4.0.3? Thanks in 
    advance.

Regards,

shaz


Edson Tirelli-3 
    wrote:
>
>    Denis,
>
>    If 
    you are using latest build from trunk (I'm not sure it already works
> 
    in MR3), you can use a simplified MVEL syntax:
>
> when 
    
>     Person( address["business"].phone == 
    "99999999" )
> then
>     ...
> 
    end
>
>    Although, the above will be 
    converted into an inline-eval. Not as bad
> as 
> a top level 
    eval, but still more costly then using regular 
    fields.
>
>    []s
>    Edson
>
> 
    2007/7/19, Ryan, Dennis (Dennis) <dennisryan at avaya.com 
    >:
>>
>>  We are using Maps (HashMaps) in 
    our rules and the only way we have found
>> to access keys and 
    values in the Map in the "when" clauses is thru use on
>> eval() 
    which I know is a big no-no by rules purists. Is there a better 
>> 
    way,
>> maybe some shorthand I'm not familiar with to deal with 
    Maps in the when
>> 
    clause?
>>
>>
>>
>> 
    Thanks,
>>
>> Dennis
>> 
>> 
    _______________________________________________
>> rules-users 
    mailing list
>> rules-users at lists.jboss.org
>> 
    https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> 
    --
>   Edson Tirelli
>   Software Engineer - 
    JBoss Rules Core Developer
>   Office: +55 11 3529-6000 
    
>   Mobile: +55 11 9287-5646
>   JBoss, a 
    division of Red Hat @ www.jboss.com
>
> 
    _______________________________________________
> rules-users mailing 
    list 
> rules-users at lists.jboss.org
> 
    https://lists.jboss.org/mailman/listinfo/rules-users
> 
    
>
shauii at yahoo.com
--
View this 
    message in context: http://www.nabble.com/Accessing-maps-%28hashmaps%29-keys-and-values-in-rules-tf4112197.html#a13524477 
    
Sent from the drools - user mailing list archive at Nabble.com.

_______________________________________________
rules-users 
    mailing list
rules-users at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users




-- 
  Edson Tirelli 
  Software 
  Engineer - JBoss Rules Core Developer
  Office: +55 11 
  3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a 
  division of Red Hat @ www.jboss.com 






      ____________________________________________________ 
Organic foods - just how healthy is health food?
Be a better foodie
Find out at Yahoo! Answers - http://ph.answers.yahoo.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20071101/f5850908/attachment.html 


More information about the rules-users mailing list