[rules-users] looping in drools

Davide Sottara dsotty at gmail.com
Mon Mar 10 14:18:55 EDT 2014


The "accumulates" should not be in the "then" part of a rule (see my
previous email).
That rule gave you two lists, in the variables $plus and $mins, that you
can use in the consequence.

If you need to process each file separately, you may want to do
something like this:

rule "new file"
when
    FileData($old : fileOld, $new : fileNew, fileOld != fileNew)
   $newFile : String( this not memberOf $old ) from $new
then  
   // create new event for a new file : new Event(...)
   // add to list : Event.listOfEvents.add(...)
end

You'll need another rule for the files that have been removed.

Notice that your Event class has no way to distinguish "added" from
"removed" files, you may want to
add a boolean or something there.
Best
Davide

On 03/10/2014 07:04 PM, Sandhya Sree wrote:
> hi,
> im new to drools..im trying to create a project as follows. i have a
> class called Monitor  which monitors a folder and creates two lists
> called fileOld( which is the list of filenames in that folder at time
> t1)  and fileNew(which is the list of filenames in that folder at time
> t2). i have another class called FileData which contains two members
> fileOld and fileNew (list of strings) with getters,setters and
> constructor. fileOld and fileNew from Monitor Class are passed to
> FileData class.
>
> i also have another class called Event which is as follows:
> public class Event {
> public static String name;
> private  File source;
> private  Date timeStamp;
>         public  static  List<Event> listOfEvents = new ArrayList<Event>();
>  
> public Event(String name, File source, Date timeStamp) {
> this.name <http://this.name> = name;
> this.source = source;
> this.timeStamp = timeStamp;
> }
> public String getName() {
> return name;
> }
> public void setName(String name) {
> this.name <http://this.name> = name;
> }
> public File getSource() {
> return source;
> }
> public void setSource(File source) {
> this.source = source;
> }
> public Date getTimeStamp() {
> return timeStamp;
> }
> public void setTimeStamp(Date timeStamp) {
> this.timeStamp = timeStamp;
> }
>
> now i have to compare these two lists(fileOld and fileNew) in a rule
> file and if they are not equal i have to create an event object for
> every file added and deleted and put it in the List<Event> listOfEvents.
>
> here is my rule file:
>
> rrule "files are equal"
>     when 
>          FileData( fileOld == fileNew)
>     then
>        System.out.println("files are equal");
>     end
>
>
> rule "files not equal"
> when
>     FileData($old : fileOld, $new : fileNew, fileOld != fileNew)
>     
> then
>    accumulate( $s : String( this not memberOf $old ) from $new, $plus
> : collectList( $s ) ) 
>    accumulate( $t : String( this not memberOf $new ) from $old, $mins
> : collectList( $t ) ) 
>    System.out.println("files added:" + $plus ); 
>    System.out.println( "files deleted:" + $mins );
> end
>
>
>
> how can i loop through each of the file added or deleted and create an
> Event Class object for every file added and deleted  and finally add
> all the created objects to List<Event> listOfEvents..
>
>
> Thanks.
>
>
> _______________________________________________
> 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/20140310/80f9227d/attachment-0001.html 


More information about the rules-users mailing list