[rules-users] Using field values of an ENUM in the decision table

erik at clairiot.com erik at clairiot.com
Wed Jul 8 13:25:32 EDT 2009


Are you sure you have to have a Memory object inserted as a fact ?

Don't this rule works (not tested and I'm so not a drools expert)

rule "memory"
 when
  $c : Computer(memory == MEM1 || memory == MEM2 || memory == MEM3)
 then
  modify($c) { setPrice(MEM1.getValue() };
 end



On Wed, 8 Jul 2009 09:50:16 -0700 (PDT), Visu Nageswaran
<visu.nageswaran at in.ibm.com> wrote:
> I was able to achieve this using a join-column in the decision table
> equivalent to the below rule:
> WHEN $m: Memory(value == "512") $c: Computer(memory == $m)
> THEN modify($c){ setPrice(100) };
> 
> However, a Memory instance needs to be inserted into the session. For
every
> discrete valued field, it would then be required for them to be inserted
> into the session to be considered in rule propogation. If there is a
better
> way / simpler way, I am very interested. Thanks in advance..
> 
> 
> Visu Nageswaran wrote:
>> 
>> Hello, I am posting a simpler version of the actual requirement: 
>> Class Computer has a field 'memory' of the enum type 'Memory' which is
>> defined over integer values 
>> - - - - - - - - - - 
>> public enum Memory{ 
>> MEM1(512), MEM2(1024), MEM3(2048); 
>> public int value; 
>> Memory(int i){this.value = i;} 
>> public int getValue(){return value;} 
>> } 
>> - - - - - - - - - - 
>> There is a requirement to model a decision table between memory and
price
>>
>> I am looking for the field constraint on the memory field to match to
the
>> values:
>>  
>> memory.???--> Price 
>> 512 --> 100 
>> 1024 --> 200 
>> 2048 --> 300 
>> 
>> I tried memory.name, memory.name(), memory.value, memory.getValue();
Does
>> this have to be done using template expressions say something like
memory
>> == Memory.reverseLookupEnum($param)
>> 
>> Any help, pointers in this regard would be appreciated. thanks. 
>> -Visu
>>



More information about the rules-users mailing list