[rules-users] Comparing names
Wolfgang Laun
wolfgang.laun at gmail.com
Fri May 15 04:10:20 EDT 2009
Adding this rule attribute will fire the rule only once. Still, you won't be
able to tell from the two titles which one is the odd-man-out. Also, if
there are two or more violations, it won't show either.
rule "check-same"
activation-group "one-shot"
when
...
Otherwise, duplicate firings for a pair can be eliminated by adding a
constraint that reduces activations to a specific order of a pair; for this
you'll need an attribute in your Fact that can be compared with '<', to wit:
$p1 : Fact( $n1 : num, $t1 : title, $g1 : groupNames, $p1 : propNames )
$p2 : Fact( num > $n1, $t2 : title, ( groupNames != $g1 || propNames !=
$p1 ) )
As for your question ("comparing sets"), I suggest that you write a simple
wrapper class, say, class PropNameSet, with a single attribute Set<String>
names. Then you might write rules such as
rule "make set"
when
$f1 : Fact( $p1 : propNames )
not PropNameSet() // not Set()
then
insert( new PropNameSet( $p1 ) ); // insert( $p1 );
end
rule "check-names"
when
PropNameSet( $names : names ) // $names :
Set()
$f1 : Fact( $t1 : title, propNames != $names )
then
System.out.println( "mismatch " + $t1 );
end
You could also use the indicated alternative with the raw Set as a fact, but
there is a fairly obvious disadvantage: not Set() is a very general
condition.
Note that the PropNameSet will be derived from an arbitrary Fact; thus the
mismatch might occur repeatedly, and for the good ones.
-W
2009/5/15 Ian Spence <ianspence at gmail.com>
> Wolfgang and all,
>
> Your suggestion did work. Thank you for that. I am learning more as I go
> along.
>
> I am thinking of another approach now. To populate working memory with a
> Set of all names "allNames"; call fireAllRules; then in the DRL, for each
> Title compare Proprietor names (set) with "allNames".
>
> How can I compare 2 sets like this in a DRL ?
>
> Ian Spence
>
> 2009/5/14 Wolfgang Laun <wolfgang.laun at gmail.com>
>
>> Assuming that your facts are structured as the indentation suggests, I
>> would solve this using a technique you could call "virtual field". So, if a
>> fact object has fields
>> String title
>> List<PropGroup> pgList
>>
>> and a PropGroup has fields
>> String name
>> List<String> pList
>>
>> I would not try to get at the embedded data from the objects contained
>> within List<PropGroup>. Rather, I'd add a couple of getters to your Fact
>> class, each of which would return a Set<String> computed from the contained
>> List<PropGroup>. Then the rule simply becomes
>>
>> rule "check-same"
>> when
>> $p1 : Fact( $t1 : title, $g1 : groupNames, $p1 : propNames )
>> $p2 : Fact( this != $p1, $t2 : title, ( groupNames != $g1 ||
>> propNames != $p1 ) )
>> then
>> System.out.println( "mismatch " + $t1 + " and " + $t2 );
>> end
>>
>> Notice that this won't find the odd-man-out; it will fire twice for each
>> unequal pair.
>>
>> -W
>>
>>
>>
>> 2009/5/14 Ian Spence <ianspence at gmail.com>
>>
>>> Hello all,
>>>
>>> I am new to Drools…
>>>
>>>
>>>
>>> I have a scenario
>>>
>>>
>>>
>>> Each fact object will have the structure:
>>>
>>>
>>>
>>> Title
>>>
>>> Proprietor Group
>>>
>>> Proprietor Name
>>>
>>>
>>>
>>> E.g.
>>>
>>> 2100-100
>>>
>>> J2 ½ share
>>>
>>> SMITH, JOHN
>>>
>>> JONES, FRED
>>>
>>> T ½ share
>>>
>>> BROWN, CHARLIE
>>>
>>> 2100-101
>>>
>>> J2 ½ share
>>>
>>> BROWN, CHARLIE
>>>
>>> JONES, FRED
>>>
>>> T ½ share
>>>
>>> SMITH, JOHN
>>>
>>> 2100-102
>>>
>>> T ½ share
>>>
>>> BROWN, CHARLIE
>>>
>>> J2 ½ share
>>>
>>> JONES, FRED
>>>
>>> SMITH, JOHN
>>>
>>>
>>>
>>> The group names and the proprietor names must be the same across each
>>> Title. The scenario above is a valid case. A failed case would result for
>>> Title 2100-100 if we add an extra Proprietor name e.g. WHITE, MARY.
>>>
>>>
>>>
>>> I anticipate having one rule to cater for this. I am hedging towards the
>>> ‘collect’ operator but cannot get a clear picture on how to implement it.
>>>
>>>
>>> --
>>> Regards,
>>> Ian Spence
>>>
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> --
> Regards,
> Ian Spence
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090515/1065ffd4/attachment.html
More information about the rules-users
mailing list