<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">If you want to restrict to a series of literals you might check if the "in" operator is faster:<br><br><div><font class="Apple-style-span" color="#990000">rule "Filter File 
Types"</font></div>

<div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">        </font></span><font class="Apple-style-span" color="#990000">salience 100 // priority</font></div><div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">        </font></span><font class="Apple-style-span" color="#990000">when</font></div>

<div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">                </font></span><font class="Apple-style-span" color="#990000">FileType( type in ("ico","gif</font><font class="Apple-style-span" color="#990000">","</font><font class="Apple-style-span" color="#990000">jpg</font><font class="Apple-style-span" color="#990000">","</font><font class="Apple-style-span" color="#990000">mov</font><font class="Apple-style-span" color="#990000">","</font><font class="Apple-style-span" color="#990000">wmv</font><font class="Apple-style-span" color="#990000">","</font><font class="Apple-style-span" color="#990000">jpeg</font><font class="Apple-style-span" color="#990000">","</font><font class="Apple-style-span" color="#990000">css</font><font class="Apple-style-span" color="#990000">","</font><font class="Apple-style-span" color="#990000">bmp</font><font class="Apple-style-span" color="#990000">","</font><font
 class="Apple-style-span" color="#990000">avi</font><font class="Apple-style-span" color="#990000">","</font><font class="Apple-style-span" color="#990000">swf</font><font class="Apple-style-span" color="#990000">","</font><font class="Apple-style-span" color="#990000">png") )</font></div>

<div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">        </font></span><font class="Apple-style-span" color="#990000">then</font></div><div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">                </font></span><font class="Apple-style-span" color="#990000">//TODO: change to actual action</font></div>

<div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">                </font></span><font class="Apple-style-span" color="#990000">System.out.println("ALLOW");</font></div><div>

<font class="Apple-style-span" color="#990000">end</font></div><br>I don't know if "in" is hashed behind the scenes, but if it is it probably would be much faster, especially because I think mvel recompiles the regex behind the scenes before each evaluation.&nbsp; (A dev please correct me if I'm wrong on that last point.)<br><br>--- On <b>Mon, 5/10/10, eyal edri <i>&lt;eyal.edri@gmail.com&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: eyal edri &lt;eyal.edri@gmail.com&gt;<br>Subject: Re: [rules-users] how to create a list obj for a rule using 'memberOf'<br>To: "Rules Users List" &lt;rules-users@lists.jboss.org&gt;<br>Date: Monday, May 10, 2010, 2:25 AM<br><br><div id="yiv675609119"><div dir="ltr">Thanks!<div><br></div><div>I've&nbsp;found another way by using 'matches'. though i don't know which one is&nbsp;preferable&nbsp;(performance
 speaking..).</div><div><br></div><div><div><font class="Apple-style-span" color="#990000">rule "Filter File Types"</font></div>

<div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">        </font></span><font class="Apple-style-span" color="#990000">salience 100 // priority</font></div><div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">        </font></span><font class="Apple-style-span" color="#990000">when</font></div>

<div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">                </font></span><font class="Apple-style-span" color="#990000">FileType( type matches "(ico|gif|jpg|mov|wmv|jpeg|css|bmp|avi|swf|png)" )</font></div>

<div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">        </font></span><font class="Apple-style-span" color="#990000">then</font></div><div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">                </font></span><font class="Apple-style-span" color="#990000">//TODO: change to actual action</font></div>

<div><span class="Apple-tab-span" style="white-space: pre;"><font class="Apple-style-span" color="#990000">                </font></span><font class="Apple-style-span" color="#990000">System.out.println("ALLOW");</font></div><div>

<font class="Apple-style-span" color="#990000">end</font></div><div><br></div><br><div class="gmail_quote">2010/5/10 Esteban Aliverti <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:esteban.aliverti@gmail.com" target="_blank" href="/mc/compose?to=esteban.aliverti@gmail.com">esteban.aliverti@gmail.com</a>&gt;</span><br>

<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Maybe you can define a global List so you would not need to add it as a Fact:<div><br></div><div><br></div><div><div class="im">

<div><font color="#990000"><b>package com.test.drools</b></font></div><div><font color="#990000"><b>&nbsp;</b></font></div>

<div><font color="#990000"><b>import com.test.drools.Facts.FileType;</b></font></div><div><font color="#990000"><b><br></b></font></div></div><div><font color="#990000"><b>global java.util.List allowedExtensions;</b></font></div>

<div class="im">

<div><font color="#990000"><b>&nbsp;</b></font></div><div><font color="#990000"><b>rule "Filter File Types"</b></font></div><div><span style="white-space: pre;"><font color="#990000"><b>        </b></font></span></div><div>

<span style="white-space: pre;"><font color="#990000"><b>        </b></font></span><font color="#990000"><b>when</b></font><span style="color: rgb(153, 0, 0);"><b>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="background-color: rgb(255, 255, 0);">&nbsp;</span></b></span></div>



</div><div><span style="white-space: pre;"><font color="#990000"><b>                </b></font></span><font color="#990000"><b>FileType( type memberOf&nbsp;<span style="font-weight: normal;"><b>allowedExtensions</b></span>&nbsp;)</b></font></div><div class="im">



<div><span style="white-space: pre;"><font color="#990000"><b>        </b></font></span><font color="#990000"><b>then</b></font></div><div><span style="white-space: pre;"><font color="#990000"><b>                </b></font></span><font color="#990000"><b>System.out.println("ALLOW");</b></font></div>



<div><font color="#990000"><b>end</b></font></div></div></div><div><br></div><div>You will need to set the global list before inserting any Fact: ksession.setGlobal("allowedExtensions",somePrePopulatedList);</div>

<div>

<br></div><div>Best,</div><div><br><br><div class="gmail_quote">2010/5/9 eyal edri <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:eyal.edri@gmail.com" target="_blank" href="/mc/compose?to=eyal.edri@gmail.com">eyal.edri@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div><div></div><div class="h5">

<div dir="ltr">Hi,<div><br></div><div>sorry for the newbi question, i'm just starting to find my way in Drools.</div><div><br></div><div>i want to &nbsp;write a rule that filters URLs with a certain suffix (e.g. jpg, gif, css, etc...).</div>





<div><br></div><div>i read about global vars and other variables and i'm not sure what to do.</div><div><br></div><div>i need to create a List with all the suffixes i want to filter, should i create it inside FileType?&nbsp;</div>





<div><br></div><div>can you help?</div><div><br></div><div>Eyal.</div><div>-------------------------------------------</div><div><br></div><div>here's why i had so far:</div><div><br></div><div><br></div><div>the .drl file:</div>





<div><br></div><div><div><font color="#990000"><b>package com.test.drools</b></font></div><div><font color="#990000"><b>&nbsp;</b></font></div><div><font color="#990000"><b>import com.test.drools.Facts.FileType;</b></font></div>





<div><font color="#990000"><b><br></b></font></div><div><font color="#990000"><b>&nbsp;</b></font></div><div><font color="#990000"><b>rule "Filter File Types"</b></font></div>

<div><span style="white-space: pre;"><font color="#990000"><b>        </b></font></span></div><div><span style="white-space: pre;"><font color="#990000"><b>        </b></font></span><font color="#990000"><b>when</b></font></div>

<div><font color="#990000"><b>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="background-color: rgb(255, 255, 0);">&nbsp;$fileTypes : ???&nbsp;</span></b></font></div><div><span style="white-space: pre;"><font color="#990000"><b>                </b></font></span><font color="#990000"><b>FileType( type memberOf $fileTypes )</b></font></div>





<div><span style="white-space: pre;"><font color="#990000"><b>        </b></font></span><font color="#990000"><b>then</b></font></div><div><span style="white-space: pre;"><font color="#990000"><b>                </b></font></span><font color="#990000"><b>System.out.println("ALLOW");</b></font></div>





<div><font color="#990000"><b>end</b></font></div><div><br></div><div>here's FileType:</div><div><br></div><div><div><span style="font-size: x-small;">package com.commtouch.drools;</span></div>

<div><span style="font-size: x-small;"><br></span></div><div><span style="font-size: x-small;">import java.net.*;</span></div><div><span style="font-size: x-small;">import java.util.regex.Matcher;</span></div>

<div><span style="font-size: x-small;">import java.util.regex.Pattern;</span></div><div><span style="font-size: x-small;"><br></span></div><div><span style="font-size: x-small;">public class Facts {</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">// return a file type of a url</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">public static class FileType {</span></div>

<div><span style="font-size: x-small;"><br></span></div><div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">private String type = "html";</span></div>





<div><span style="font-size: x-small;"><br></span></div><div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">public FileType (URL url) {</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span><span style="font-size: x-small;">// get the path from the url</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span><span style="font-size: x-small;">//TODO: use parser to do it?</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span><span style="font-size: x-small;">String path = url.getPath();</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span><span style="font-size: x-small;">if (path != null) {</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                                </span></span><span style="font-size: x-small;">// define regex to extract file from path</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                                </span></span><span style="font-size: x-small;">Pattern fileRegex = Pattern.compile("([^/]+)$");</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                                </span></span><span style="font-size: x-small;">Matcher fileMatcher = fileRegex.matcher(path);</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">// get regex capure $1 (filename)</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                                </span></span><span style="font-size: x-small;">String file = null;</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">while (fileMatcher.find())&nbsp;</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> file = fileMatcher.group(1);</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">String suffix = null;</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">if (file != null)</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">{</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">//try to extract suffix from file</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">Pattern suffixRegex = Pattern.compile("\\.([^\\.]+)$");</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                                        </span></span><span style="font-size: x-small;">Matcher suffixMatcher = suffixRegex.matcher(file);</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                                        </span></span><span style="font-size: x-small;">while (suffixMatcher.find())&nbsp;</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> suffix = suffixMatcher.group(1);</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                                        </span></span><span style="font-size: x-small;">//verify that the suffix is a valid suffix&nbsp;</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                                        </span></span><span style="font-size: x-small;">if (suffix != null &amp;&amp; (suffix.length()&gt; 1 &amp;&amp; suffix.length() &lt; 6))</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                                                        </span></span><span style="font-size: x-small;">setType(suffix);</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;"> &nbsp; &nbsp;</span><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">}</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span><span style="font-size: x-small;">}</span></div><div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">}</span></div><div><span style="font-size: x-small;"><br>

</span></div><div><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span></div><div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">public void setType(String type) {</span></div>





<div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span><span style="font-size: x-small;">this.type = type;</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">}</span></div><div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">public String getType() {</span></div>

<div><span style="white-space: pre;"><span style="font-size: x-small;">                        </span></span><span style="font-size: x-small;">return type;</span></div><div>

<span style="white-space: pre;"><span style="font-size: x-small;">                </span></span><span style="font-size: x-small;">}</span></div><div><span style="white-space: pre;"><span style="font-size: x-small;">        </span></span><span style="font-size: x-small;">}</span></div>





<div><span style="font-size: x-small;">}</span></div></div><div><br></div><div><br>-- <br>Eyal Edri<br>
</div></div></div>
<br></div></div>_______________________________________________<br>
rules-users mailing list<br>
<a rel="nofollow" ymailto="mailto:rules-users@lists.jboss.org" target="_blank" href="/mc/compose?to=rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a rel="nofollow" target="_blank" href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br><br>Esteban Aliverti<br>
</div>
<br>_______________________________________________<br>
rules-users mailing list<br>
<a rel="nofollow" ymailto="mailto:rules-users@lists.jboss.org" target="_blank" href="/mc/compose?to=rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a rel="nofollow" target="_blank" href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Eyal Edri<br>
</div></div>
</div><br>-----Inline Attachment Follows-----<br><br><div class="plainMail">_______________________________________________<br>rules-users mailing list<br><a ymailto="mailto:rules-users@lists.jboss.org" href="/mc/compose?to=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><br></div></blockquote></td></tr></table><br>