Craig,
I spent some time writing a test of my own in Groovy and I can confirm
there is a problem. It is not obvious to me where the problem is,
because the Temporal Expression code looks correct and it passes unit
tests. I will have time to explore this further during the weekend. If
you find a fix before then, feel free to upload a patch to Jira.
-Adrian
On 12/4/2011 6:22 PM, Craig Ambrose wrote:
Adrian, I really appreciate your help here. But I'm just not getting it to
work how I would expect. Here is my scenario. Given a date input by a user,
I want to find the next upcoming TE match. So, I would expect to be able to
do something like this (in pseudo-code)
Date input = UtilDateTime.toDate(parameters.inputDate);
cal.setTime(input);
return new Date(te.next(cal));
If I am using the INDEPENDENCE_DAY TE and I input the date "07/01/2011
00:00:00" I get "07/04/2012" as a result. I would expect "07/04/2011". If I
change the code to use te.first() instead of te.next() then I get unexpected
results when I input "07/10/2011". I get "07/04/2011" which in my opinion is
not the first date on or after 7/10/2011.
So, I can first run te.first() check to see if it is less than the input
date and then call te.next(). Is that the intended usage?
Furthermore, here is the XML definition of the TE I'm really trying to use.
<TemporalExpression tempExprId="2ND_SUNDAY_IN_MONTH"
tempExprTypeId="DAY_IN_MONTH" integer1="1" integer2="2" description="Second
Sunday of the month"/>
<TemporalExpression tempExprId="JAN_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="JAN_END"
toTempExprId="MONTH_RANGE_01"/>
<TemporalExpressionAssoc fromTempExprId="JAN_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="FEB_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="FEB_END"
toTempExprId="MONTH_RANGE_02"/>
<TemporalExpressionAssoc fromTempExprId="FEB_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="MAR_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="MAR_END"
toTempExprId="MONTH_RANGE_03"/>
<TemporalExpressionAssoc fromTempExprId="MAR_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="APR_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="APR_END"
toTempExprId="MONTH_RANGE_04"/>
<TemporalExpressionAssoc fromTempExprId="APR_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="MAY_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="MAY_END"
toTempExprId="MONTH_RANGE_05"/>
<TemporalExpressionAssoc fromTempExprId="MAY_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="JUN_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="JUN_END"
toTempExprId="MONTH_RANGE_06"/>
<TemporalExpressionAssoc fromTempExprId="JUN_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="JUL_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="JUL_END"
toTempExprId="MONTH_RANGE_07"/>
<TemporalExpressionAssoc fromTempExprId="JUL_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="AUG_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="AUG_END"
toTempExprId="MONTH_RANGE_08"/>
<TemporalExpressionAssoc fromTempExprId="AUG_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="SEP_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="SEP_END"
toTempExprId="MONTH_RANGE_09"/>
<TemporalExpressionAssoc fromTempExprId="SEP_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="OCT_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="OCT_END"
toTempExprId="MONTH_RANGE_10"/>
<TemporalExpressionAssoc fromTempExprId="OCT_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="NOV_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="NOV_END"
toTempExprId="MONTH_RANGE_11"/>
<TemporalExpressionAssoc fromTempExprId="NOV_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="DEC_END" tempExprTypeId="INTERSECTION"/>
<TemporalExpressionAssoc fromTempExprId="DEC_END"
toTempExprId="MONTH_RANGE_12"/>
<TemporalExpressionAssoc fromTempExprId="DEC_END"
toTempExprId="2ND_SUNDAY_IN_MONTH"/>
<TemporalExpression tempExprId="BI_MONTHLY_ONE" tempExprTypeId="UNION"
description="Second Sunday of every odd month"/>
<TemporalExpressionAssoc fromTempExprId="BI_MONTHLY_ONE"
toTempExprId="JAN_END"/>
<TemporalExpressionAssoc fromTempExprId="BI_MONTHLY_ONE"
toTempExprId="MAR_END"/>
<TemporalExpressionAssoc fromTempExprId="BI_MONTHLY_ONE"
toTempExprId="MAY_END"/>
<TemporalExpressionAssoc fromTempExprId="BI_MONTHLY_ONE"
toTempExprId="JUL_END"/>
<TemporalExpressionAssoc fromTempExprId="BI_MONTHLY_ONE"
toTempExprId="SEP_END"/>
<TemporalExpressionAssoc fromTempExprId="BI_MONTHLY_ONE"
toTempExprId="NOV_END"/>
I'm trying to model the second Sunday in every odd month (i.e. Jan, Mar,
May, etc.). The 2ND_SUNDAY_IN_MONTH TE works great until I use it in an
INTERSECTION or UNION.
The te.first() method gives me very strange results. Perhaps I am defining
the TE incorrectly, but it seems to give me any match in the union and not
the first occurrence after the provided date. For example, using my
BI_MONTHLY_ONE TemporalExpression I call the following pseudo code
function nextOcc(te, inputDate)
{
return te.next(inputDate);
}
And I get this
nextOcc(te, "06/01/2011") -> 11/13/2011
Where I would expect the next occurrence after 6/1/2011 would be 7/10/2011;
the second Sunday in July.
I'm sure I'm confusing something here. So, any guidance would be greatly
appreciated.
Thanks again
-craig
--
View this message in context:
http://ofbiz.135035.n4.nabble.com/Do-Intersection-TemporalExpressions-work-tp4155989p4157599.html
Sent from the OFBiz - User mailing list archive at Nabble.com.