<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks for the reply, I think I was a bit vague with my question (my apologies on this) I will try to elaborate further<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I have several set of rules that filter, each filters a different set of conditions (e.g. User, Date, Country…). <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I would like to construct rules that based on conditions in the ConditionMatrix (in my example) I would like to set a specific rule set.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>A wishful thinking approach would be something like:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Following are 2 filter rules<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>Rule “filter user”<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>When<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> $cm: ConditionMatrix(),<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'><o:p> </o:p></span></p><p class=MsoNormal style='text-indent:.5in'><span style='color:#558ED5'>$document: ArrayList() from collect ( Document (user.isPrivateName == $cm.user.isPrivateName) )<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>Then<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>End<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>Rule “filter date”<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>When<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> $cm: ConditionMatrix(),<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'><o:p> </o:p></span></p><p class=MsoNormal style='text-indent:.5in'><span style='color:#558ED5'>$document: ArrayList() from collect ( Document (date.isLegal == $cm.date.isLegal) )<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>Then<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> //do something<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>End<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The actual rule that utilized them would like :<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>Rule “I am happy” extends “filter date”</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>When<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> $cm: ConditionMatrix(),<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>Then<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> //Do something<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>End<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>And a second rule can look like: (note that even if I can extend two rules then there is a conflict on $</span><span style='color:#558ED5'> </span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>document</span><span style='color:#558ED5'>)<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>Rule “I am sad” extends “filter date”, “filter user”</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>When<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> $cm: ConditionMatrix(),<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>Then<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'> //Do something<o:p></o:p></span></p><p class=MsoNormal><span style='color:#558ED5'>End<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hope this clearer now.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hezi<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> rules-users-bounces@lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] <b>On Behalf Of </b>Wolfgang Laun<br><b>Sent:</b> Wednesday, May 25, 2011 6:18 PM<br><b>To:</b> Rules Users List<br><b>Subject:</b> Re: [rules-users] Concatenating rule conditions<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'>Just for the heck of it, here's two more ways for "comibining" those two rules. (Gee, what a vague specification!)<br><span style='color:#558ED5'><br># straightforwardly doing both in one<br>rule comb1<br>when<br> $cm: ConditionMatrix()<br> $docs1: ArrayList() from collect( Document( ... ) )<br> $docs2: ArrayList() from collect( Document( ... ) )<br>then ... end<br><br># abstraction<br>rule comb2<br>when<br> $cm: ConditionMatrix()<br> $filter: Filter()<br> $docs: ArrayList() from collect( $d: Document() eval( $filter.pass( $cm, $d ) ) )<br>then ... end<br><br>-W<br><br><br></span><o:p></o:p></p><div><p class=MsoNormal>2011/5/25 Vincent Legendre <<a href="mailto:vincent.legendre@eurodecision.com">vincent.legendre@eurodecision.com</a>><o:p></o:p></p><div><p class=MsoNormal>Not sure of what you exactly ...<br><br>If you want to combine tests, you can write this : <o:p></o:p></p><div><div><p class=MsoNormal><span style='color:#558ED5'>Rule “test filter”</span><br><span style='color:#558ED5'>When</span><br><span style='color:#558ED5'> $cm: ConditionMatrix()</span><o:p></o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:#558ED5'> $document: ArrayList() from collect ( Document (user.isPrivateName == $cm.isPrivateName, Payment.isLegal == $cm.isLegal) ) </span><br><span style='color:#558ED5'>Then</span><br><span style='color:#558ED5'> //do something</span><br><span style='color:#558ED5'>End</span><o:p></o:p></p></div><p class=MsoNormal>If you want to make the filter more dynamic and write only one "collect" rule, I don't see any out-of-the-box method.<br>You can add a method in ConditionMatrix that accepts a Document and write this rule :<o:p></o:p></p><div><p class=MsoNormal><br><span style='color:#558ED5'>Rule “test filter”</span><br><span style='color:#558ED5'>When</span><br><span style='color:#558ED5'> $cm: ConditionMatrix()</span><o:p></o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:#558ED5'> $document: ArrayList() from collect ( Document (eval($cm.accept(this)) ) ) </span><br><span style='color:#558ED5'>Then</span><br><span style='color:#558ED5'> //do something</span><br><span style='color:#558ED5'>End</span><br><br>Of course you have to implement the "accept" method in Java (and you can then do several sub-classes for you filters)<o:p></o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'><br>_______________________________________________<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p></div></body></html>