[rules-users] problem with drools

Davide Sottara dsotty at gmail.com
Fri Feb 28 10:20:48 EST 2014


There are a few errors in the rules

1)
not FileData( fileOld == fileNew )
will fire either 1) when there is a FileData with different lists OR 2)
when there is no FileData at all in the workingMemory

2)
the rule should not compile, unless fileOld and fileNew are STATIC
fields of the class FileData. Is this the case? If so, why?
The problem is that the rule will fire also when there is no FileData in
the WM, so calling the function there is pointless

Your rule should be rewritten as : (notice that the != operator is
overloaded, so it correctly computes "not equals")

FileData( fileOld != fileNew )

3) To do what you want, you don't even need the function - if you prefer
to use functions and code, consider dropping Drools.
A possible rule-based approach to your problem is this:

rule "Deltas"
when
    FileData( $old : fileOld, $new : fileNew, fileOld != fileNew )
    accumulate( $s : String( this not memberOf $old ) from $new, $plus :
collectList( $s ) )
    accumulate( $t : String( this not memberOf $new ) from $old, $mins :
collectList( $t ) )
then
    System.out.println( $plus );
    System.out.println( $mins );
end

The other rule is fine.

Best
Davide


On 02/28/2014 09:54 AM, 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.
>
> now i have to compare these two lists in a rule file and if they are
> not equal i have to print the lists of files added/ deleted. how to do
> this in drools.
>
> here is my rule file:
>
> rule "files are equal"
>  
>     when 
>         FileData(fileOld == fileNew)        
>         
>     then
>        System.out.println("files are equal");
>        
>
> end
>
> rule "files not equal"
>
>   when
>         not FileData(fileOld == fileNew)
>     then
>        System.out.println("files are not equal");
>        difference(FileData.getFileOld(),FileData.getFileNew()); 
>
> end
>
>
> function void difference(List fileOld, List fileNew)
> {
>       
>
>   ArrayList<String> add = new ArrayList<String>(fileNew);
>   add.removeAll(fileOld);
>   System.out.println("files Added: " + add);
>
>   ArrayList<String> remove = new ArrayList<String>(fileOld);
>   remove.removeAll(fileNew);
>   System.out.println("files Removed: " + remove);
> }   
>        
>
> but this displays the following error...
>
> Rule Compilation error : [Rule name='files not equal']
> Cannot make a static reference to the non-static method getFileOld()
> from the type FileData
> Cannot make a static reference to the non-static method getFileNew()
> from the type FileData
>
>
>
> what can be done??
>
>
> _______________________________________________
> 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/20140228/a6461d98/attachment-0001.html 


More information about the rules-users mailing list