Maybe you can define a global List so you would not need to add it as a Fact:


package com.test.drools
 
import com.test.drools.Facts.FileType;

global java.util.List allowedExtensions;
 
rule "Filter File Types"
when                
FileType( type memberOf allowedExtensions )
then
System.out.println("ALLOW");
end

You will need to set the global list before inserting any Fact: ksession.setGlobal("allowedExtensions",somePrePopulatedList);

Best,


2010/5/9 eyal edri <eyal.edri@gmail.com>
Hi,

sorry for the newbi question, i'm just starting to find my way in Drools.

i want to  write a rule that filters URLs with a certain suffix (e.g. jpg, gif, css, etc...).

i read about global vars and other variables and i'm not sure what to do.

i need to create a List with all the suffixes i want to filter, should i create it inside FileType? 

can you help?

Eyal.
-------------------------------------------

here's why i had so far:


the .drl file:

package com.test.drools
 
import com.test.drools.Facts.FileType;

 
rule "Filter File Types"
when
                $fileTypes : ??? 
FileType( type memberOf $fileTypes )
then
System.out.println("ALLOW");
end

here's FileType:

package com.commtouch.drools;

import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Facts {
// return a file type of a url
public static class FileType {

private String type = "html";

public FileType (URL url) {
// get the path from the url
//TODO: use parser to do it?
String path = url.getPath();
if (path != null) {
// define regex to extract file from path
Pattern fileRegex = Pattern.compile("([^/]+)$");
Matcher fileMatcher = fileRegex.matcher(path);
    // get regex capure $1 (filename)
String file = null;
    while (fileMatcher.find()) 
    file = fileMatcher.group(1);
   
    String suffix = null;
    if (file != null)
    {
    //try to extract suffix from file
    Pattern suffixRegex = Pattern.compile("\\.([^\\.]+)$");
Matcher suffixMatcher = suffixRegex.matcher(file);
while (suffixMatcher.find()) 
    suffix = suffixMatcher.group(1);
//verify that the suffix is a valid suffix 
if (suffix != null && (suffix.length()> 1 && suffix.length() < 6))
setType(suffix);
    }
}
}

public void setType(String type) {
this.type = type;
}
public String getType() {
return type;
}
}
}


--
Eyal Edri

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




--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Esteban Aliverti