-------- Original Message --------

Dear Mark,

Thanks again for your tasty BOF at Javapolis07, it was a pleasure meeting you.

As you suggested me to post it, here is the feature request we talked about:

Our company often has to code time spans across working hours for ticketing systems (issue tracking/service calls) in accordance with ever-changing SLA (service level agreements). Those times calculi are PAINFUL in an imperative language.

Therefore I wish I could have a modification of the 'duration' principle that would allow the coding of such rules:

When
a customer ticket is opened for more than two hours during working_hours_2008
and state is urgent
then
send a reminder to the support team and the team leader
-
When
a customer ticket is opened for more than four hours during working_hours_2008
and state is urgent
and no action taken
then
escalate ticket

This might require:
* A scheduling mechanism such as quartz (sort of java combination of 'at' and 'cron' Unix commands with extension capabilities) to trigger the second assertion of the LHS at a specific time.
* New syntax tokens: during, "for"
* New nonterminal symbols after these tokens (composite date and time classes)

I have since then had a talk with Stephen Colebourne at Javapolis; he is the responsible of the JSR 310 Date and Time API (http://jsr-310.dev.java.net).

I have proposed him to extend the scope of the JSR to accept composites of DatesWithoutTime and TimeIntervals objects to enable the retrieval of a OffsetDateTime by calculating the span of a Duration trough a CompositeDateAndTimeInterval.

An example is much more clear:
CompositeTimeInterval working_hours = EnhancedTimeInterval(Mon tru fri 8:00 to 20:00)
TimeInterval lunchbreak = 12:00 to 12:45
CompositeDateWithoutTime belgiumBankHolidays2008 = 1 Jan 2008, 23 Mar 2008, 24 Mar 2008, 1 May 2008, 11 May 2008, 12 May 2008, 21 Jul 2008, 15 Aug 2008, 1 Nov 2008, 11 Nov 2008, 25 Dec 2008
CompositeDateWithoutTime specialOpeningDays = Sun 20 Feb (launch of our new super awaited product), Sun 21 Dec (shopping day before Xmas)
CompositeTimeInterval working_hours_2008 = new CompositeTimeInterval()
working_hours_2008.include(working_hours)
working_hours_2008.exclude(lunchbreak)
working_hours_2008.exclude(belgiumBankHolidays2008)
working_hours_2008.include(specialOpeningDays)

This composite is to be used after the 'during' token. The duration would require its own syntax token (the word 'for' is already overused in programming languages, it could lead to confusion)

These composites would have to be defined somewhere at sometime for the BRE to access them. Could they be directly defined in rule packages? Or accessed as

Thus, in order:
* assert LHS's CEs
* calculate the time span of the duration across the 'agenda' (also a confusing keyword, would it be good English to call it schedule?)
* set an event in the future for the matched object
* when it’s event time: callback the object LHS assertion
* and if still true, execute RHS

I would be very happy to contribute to the implementation of this feature, please let me know if you (and your team) are interested in such a feature.

Looking forward to hearing from you,

Stanislas Herman Rusinsky.