[rules-users] some pointers for solution

Greg Barton greg_barton at yahoo.com
Sun Nov 8 20:45:50 EST 2009


Because I keep forgetting the convenience functions exist. :P

--- On Sun, 11/8/09, Edson Tirelli <ed.tirelli at gmail.com> wrote:

> From: Edson Tirelli <ed.tirelli at gmail.com>
> Subject: Re: [rules-users] some pointers for solution
> To: "Rules Users List" <rules-users at lists.jboss.org>
> Date: Sunday, November 8, 2009, 4:41 PM
> 
>    Why not use count() accumulate function? ;)
> 
> from accumulate( Criteria( this memberOf d, this memberOf q
> ),
>                           
> count(1) )
> 
>    Edson
> 
> 2009/11/8 Greg Barton <greg_barton at yahoo.com>
> 
> In this case the accumulate clause
> is maintaining a counter (total) that's incremented
> whenever a Criteria is detected that is contained in both
> the Data and Query object matched in the rule.  So:
> 
> 
> 
> 
> # Find Criteria that are contained in both the Data and
> Query
> 
> from accumulate( Criteria( this memberOf d,
> this memberOf q ),
> 
> # Initialize the counter to 0
> 
>   init( int total = 0; ),
> 
> # Increment when the above condition is  matched
> 
>   action( total ++; ),
> 
> # Decrement if a matched Criteria now fails to match
> 
>   reverse( total --; ),
> 
> # return the total when all known Criteria are matched
> 
>   result( total ) )
> 
> 
> 
> --- On Sun, 11/8/09, Wishing Carebear <wishing.carebear at gmail.com>
> wrote:
> 
> 
> 
> > From: Wishing Carebear <wishing.carebear at gmail.com>
> 
> > Subject: Re: [rules-users] some pointers for
> solution
> 
> > To: "Rules Users List" <rules-users at lists.jboss.org>
> 
> > Date: Sunday, November 8, 2009, 11:39 AM
> 
> > Hi Greg:
> 
> > I'm trying to understand your first
> 
> > solution.
> 
> >  
> 
> > Ran the project and it works fine. If possible could
> 
> > you explain me little bit on :
> 
> >
> 
> > from accumulate( Criteria( this memberOf d,
> 
> > this memberOf q ),
> 
> > init( int total = 0; ),
> 
> > action( total ++; ),
> 
> > reverse( total --; ),
> 
> > result( total ) )
> 
> >  
> 
> >  
> 
> > Thanks,
> 
> > cabear
> 
> >
> 
> >
> 
> > 2009/11/8 Greg Barton <greg_barton at yahoo.com>
> 
> >
> 
> > There are a couple of
> 
> > ways to do this.  I'm sure there's a bit more
> clean
> 
> > way than the example I'm providing, but this
> should get
> 
> > you in the right direction.  It's not 100%
> rules,
> 
> > because it involves a bit of java collections
> trickery. (See
> 
> > attached project,
> collection_DroolsCriteriaMatch.tar.gz)
> 
> >
> 
> >
> 
> > The heart of it is a single rule:
> 
> >
> 
> > rule "Match"
> 
> >  when
> 
> >    d : Data()
> 
> >    q : Query( size <= d.size )
> 
> >    Number( intValue == q.size )
> 
> >    from accumulate(
> 
> >      Criteria( this memberOf d, this memberOf q ),
> 
> >
> 
> >      init( int total = 0; ),
> 
> >      action( total ++; ),
> 
> >      reverse( total --; ),
> 
> >      result( total )
> 
> >    )
> 
> >  then
> 
> >    System.out.println("Match: " + d +
> "
> 
> > and " + q) ;
> 
> > end
> 
> >
> 
> > The Data object holds data to be queried, Query
> objects are
> 
> > asserted to match the Data, and Criteria objects can
> be
> 
> > contained in either. (With the aforementioned
> collections
> 
> > trickery that if a Criteria is contained in a Query it
> can
> 
> > be found in a Data object, but the reverse isn't
> true.
> 
> >  See the Query.contains(Object) method for how
> that's
> 
> > implemented.)
> 
> >
> 
> >
> 
> > So the rule above basically says "There's a
> Data
> 
> > object, and all of the Query objects Criteria are
> contained
> 
> > in the Data object."
> 
> >
> 
> > There's an alternate way of doing this using eval
> and a
> 
> > bit more java fu.  See the
> eval_DroolsCriteriaMatch.tar.gz
> 
> > project attached.  This one's probably not
> optimal,
> 
> > though, as it's basically a brute force check of
> all
> 
> > Data objects against the asserted Query.
> 
> >
> 
> >
> 
> > I tried for a while to get a solution working with
> 
> > different criteria types from both Data and Query
> objects
> 
> > being asserted into working memory, but I couldn't
> get
> 
> > the accumulate syntax right.  Anyone know of a way to
> do
> 
> > that? (I figure that would get a "pure
> rules"
> 
> > solution.)
> 
> >
> 
> >
> 
> > --- On Sat, 11/7/09, Wishing Carebear <wishing.carebear at gmail.com>
> 
> > wrote:
> 
> >
> 
> > > From: Wishing Carebear <wishing.carebear at gmail.com>
> 
> >
> 
> > > Subject: [rules-users] some pointers for
> solution
> 
> > > To: rules-users at lists.jboss.org
> 
> > > Date: Saturday, November 7, 2009, 10:19 PM
> 
> >
> 
> >
> 
> >
> 
> > > Hello:
> 
> > > There are n selection criteria from s1 .. sn for
> each
> 
> > > item i1.. in. Each item can have a subset of
> criteria
> 
> > which
> 
> > > applies to them.
> 
> > >  
> 
> > > The end user, can choose a subset of criteria
> like c1
> 
> >
> 
> > > and c5 and only the item that has c1 and c5
> valid
> 
> > should be
> 
> > > returned. For example: if item i1 and i2 have
> 
> > criterias
> 
> > > valid for c1, c2, c5, c6, c8 since the request is
> only
> 
> > for
> 
> > > criteria c1 and c5, i1 and i2 must be returned.
> 
> >
> 
> > >
> 
> > >  
> 
> > > Is it possible to write a rule using drools for
> this
> 
> > > requirement.
> 
> > >  
> 
> > > Thanks for your help and time,
> 
> > > cabear
> 
> > >
> 
> > > -----Inline Attachment Follows-----
> 
> >
> 
> > >
> 
> > > _______________________________________________
> 
> > > rules-users mailing list
> 
> > > rules-users at lists.jboss.org
> 
> > > https://lists.jboss.org/mailman/listinfo/rules-users
> 
> >
> 
> > >
> 
> >
> 
> >
> 
> >      
> 
> > _______________________________________________
> 
> > rules-users mailing list
> 
> > rules-users at lists.jboss.org
> 
> > https://lists.jboss.org/mailman/listinfo/rules-users
> 
> >
> 
> >
> 
> >
> 
> >
> 
> >
> 
> > -----Inline Attachment Follows-----
> 
> >
> 
> > _______________________________________________
> 
> > rules-users mailing list
> 
> > rules-users at lists.jboss.org
> 
> > https://lists.jboss.org/mailman/listinfo/rules-users
> 
> >
> 
> 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> 
> rules-users mailing list
> 
> rules-users at lists.jboss.org
> 
> https://lists.jboss.org/mailman/listinfo/rules-users
> 
> 
> 
> 
> -- 
>   Edson Tirelli
>   JBoss Drools Core Development
>   JBoss by Red Hat @ www.jboss.com
> 
> 
> -----Inline Attachment Follows-----
> 
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
> 


      




More information about the rules-users mailing list