Hi,
I haven't been able to figure out what Q#1 is asking.
As for #2: Yes, you can define your own operators, even with (literal)
parameters. See my home page,
http://members.inode.at/w.laun/,
Drools, Guides on Selected Topics.
Concerning #3: There is no need to avoid a logical disjunction of
two constraints within a single pattern. It's only a disjunction of
patterns that results in a rule split, which may cause surprising
results.
-W
On 14/12/2011, Mike Melton <mike.melton(a)gmail.com> wrote:
If you'll indulge me, I have a couple more questions on temporal
operators. I have specific requirements where the built-in operators
don't *quite* fit. I'm finding workarounds but I don't love them and
basically I'm looking for validation of my approach or better ideas.
1. I need an operator that means "includes with endpoints". In other
words, "A includeswithendpoints B" means A.start <= B.start < B.end
<=
A.end. Another way to look at it is: A "includes or coincides or
starts or finishedby" B.
I've been messing around with the parameters to includes. Ideally, I'd
represent this as "includes[0, duration]", where "duration" is
A's
duration. This would mean that the minimum distance between the start
and end timestamps is 0 and the maximum distance between the start and
end points is Event A's duration. However, I haven't been able to find
a way to pass a dynamic parameter to the operator.
My workaround in this case is "includes[0, 1000000d]", where 1000000d
is just an arbitrarily large number. My tests so far have borne this
out as working, but I don't like it because it's not very
self-explanatory; everywhere I use it, I will need to include a
comment. The beauty of the temporal operators is that they are
intuitive and I feel like this workaround is compromising that.
2. Given an interval-based event A and a point-in-time event B, I need
an operator which means A "finishedby or includes" B; i.e., A.start <
B.timestamp <= A.end.
Similarly, in this case, the workaround is "includes[1ms, 1000000d, 0,
1000000d]". This takes the ugliness and need for explanatory comments
to a new level.
A few questions:
1. Is there any technical reason why my workarounds won't work
(besides the obvious one where there is an event that lasts 1000001
days)?
2. Are there better solutions? (e.g., can I define my own operators?)
3. As a general rule, I avoid using "or" logic in my rules. However,
is this a case where I should consider it? To me, "EventA( this
includes $eventB || this finishedby $eventB )" is much cleaner than
"EventA( this includes[1ms, 1000000d, 0, 1000000d] $eventB )", but
that doesn't mean I like it.
Thanks in advance for any feedback.
Mike
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users