[rules-users] confusing behaviour of enum comparison
Wolfgang Laun
wolfgang.laun at gmail.com
Wed Oct 26 16:24:43 EDT 2011
Given your enum, this .drl
declare Step
id: String
status: Status
end
rule insertion
salience ( 10 )
when
then
Step step = new Step();
step.setId( "One" );
step.setStatus( Status.PENDING );
insert( step );
end
rule testPending
when
$step: Step( status == Status.PENDING )
## $step: Step( status != Status.ACTIVE )
## $step: Step( status.active == false )
then
System.out.println( "testPending " + $step.getId() );
end
and Drools 5.2.0 Final, all three patterns result in a firing of rule
testPending.
-W
On 26 October 2011 19:38, lhorton <LHorton at abclegal.com> wrote:
> 5.2.0.Final
>
> I am seeing some confusing behaviour in enum comparisons in LHS rule
> conditions. I have an enum class, "Status" (full source below) that is an
> attribute on several of our domain objects. I'm comparing the enum in
> several ways, and the rule fires differently when I use syntax that AFAIK
> ought to have the same result.
>
> for example, say there is a Step with status of Status.PENDING. if I
> write:
>
> $step : Step(status.active == false) // rule DOES fire
>
> $step : Step(status != Status.ACTIVE) // rule does NOT fire, but should
>
> I am testing this with the same objects and same test each time. can
> anyone
> explain why the two comparisons do not get the same result?
>
> here is the definition of Status:
>
> public enum Status {
>
> PENDING("Pending"),
> ACTIVE("Active"),
> COMPLETE("Complete");
>
> private final String label;
>
> private Status(String label) {
> this.label = label;
> }
>
> public String getLabel() {
> return label;
> }
>
> public boolean isPending(){
> return label.equals("Pending");
> }
>
> public boolean isActive(){
> return label.equals("Active");
> }
>
> public boolean isComplete(){
> return label.equals("Complete");
> }
>
> public static boolean isPending(Status status) {
> return (status == null) ? false : status.isPending();
> }
>
> public static boolean isActive(Status status) {
> return (status == null) ? false : status.isActive();
> }
>
> public static boolean isComplete(Status status) {
> return (status == null) ? false : status.isComplete();
> }
>
> public static Status fromString(String name) {
> if (name != null) {
> Status types[] = Status.values();
> for(Status s : types) {
> if (name.equalsIgnoreCase(s.toString())) {
> return s;
> }
> }
> }
> return null;
> }
> }
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/confusing-behaviour-of-enum-comparison-tp3455245p3455245.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> 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/20111026/49f28680/attachment.html
More information about the rules-users
mailing list