Subversion Repository Public Repository

litesoft

Diff Revisions 852 vs 853 for /trunk/Java/core/Anywhere/src/org/litesoft/core/simpletypes/temporal/nonpublic/TemporalParser.java

Diff revisions: vs.
  @@ -18,17 +18,22 @@
18 18 mFieldOrder = pFieldOrder;
19 19 }
20 20
21 - public SimpleDate parseDate( String pDateFormat, String pText, UtilDateAdaptor pInadequatePartsSource )
21 + public String getFieldOrder()
22 + {
23 + return mFieldOrder;
24 + }
25 +
26 + public SimpleDate parseDate( String pText, DateRes pDateRes, UtilDateAdaptor pInadequatePartsSource ) throws IllegalArgumentException
22 27 {
23 28 String zWhat = "Date";
24 29 List<PartCollector> zParts = LLparseToParts( pText, true );
25 30 LLpadPartsForDate( zParts, pInadequatePartsSource );
26 31 AbstractRealPC[] realPCs = LLinitialPartsValidate( pText, zParts, zWhat, 3 );
27 32 LLpartsValidateForDate( realPCs, zWhat );
28 - return LLparseDate( pDateFormat, realPCs, zWhat );
33 + return LLparseDate( realPCs, pDateRes, zWhat );
29 34 }
30 35
31 - public SimpleTimestamp parseTimestamp( String pText, int pTimeFields, UtilDateAdaptor pInadequatePartsSource )
36 + public SimpleTimestamp parseTimestamp( String pText, int pTimeFields, UtilDateAdaptor pInadequatePartsSource ) throws IllegalArgumentException
32 37 {
33 38 String zWhat = "Timestamp";
34 39 List<PartCollector> zParts = LLparseToParts( pText, true );
  @@ -36,12 +41,12 @@
36 41 AbstractRealPC[] realPCs = LLinitialPartsValidate( pText, zParts, zWhat, 3 + pTimeFields );
37 42 LLpartsValidateForDate( realPCs, zWhat );
38 43 LLpartsValidateForTime( pText, realPCs, 3, pTimeFields );
39 - SimpleDate date = LLparseDate( "yyyy-MM-dd", realPCs, zWhat );
44 + SimpleDate date = LLparseDate( realPCs, DateRes.ToDAY, zWhat );
40 45 SimpleTime time = LLparseTime( realPCs, 3, pTimeFields );
41 46 return new SimpleTimestamp( date, time );
42 47 }
43 48
44 - public SimpleTime parseTime( String pText, int pTimeFields, UtilDateAdaptor pInadequatePartsSource )
49 + public SimpleTime parseTime( String pText, int pTimeFields, UtilDateAdaptor pInadequatePartsSource ) throws IllegalArgumentException
45 50 {
46 51 String zWhat = "Time";
47 52 List<PartCollector> zParts = LLparseToParts( pText, false );
  @@ -103,7 +108,7 @@
103 108 {
104 109 case 1: // assume Day only, add month
105 110 pInadequatePartsSource = ensurePartsSource( pInadequatePartsSource );
106 - pParts.add( new MonthAsTextPC( Month.nameFromMonthNumber(pInadequatePartsSource.getMonth()) ) );
111 + pParts.add( new MonthAsTextPC( Month.nameFromMonthNumber( pInadequatePartsSource.getMonth() ) ) );
107 112 case 2: // assume Month & Day, add Year
108 113 pInadequatePartsSource = ensurePartsSource( pInadequatePartsSource );
109 114 pParts.add( new NumericPC( "" + pInadequatePartsSource.getYear() ) );
  @@ -245,7 +250,7 @@
245 250 }
246 251 }
247 252
248 - private SimpleDate LLparseDate( String pDateFormat, AbstractRealPC[] pParts, String pWhat )
253 + private SimpleDate LLparseDate( AbstractRealPC[] pParts, DateRes pDateRes, String pWhat )
249 254 {
250 255 int zSwitchValue = 0;
251 256 int bucketFactor = 1;
  @@ -269,54 +274,54 @@
269 274 {
270 275 case B0_IS_MONTH + B1_OPT_YEAR + B2_OPT_YEARorMONTHorDAY:
271 276 case B0_IS_MONTH + B1_OPT_YEAR + B2_OPT_YEARorDAY:
272 - return toDate( pDateFormat, pParts, 1, 0, 2 );
277 + return toDate( pDateRes, pParts, 1, 0, 2 );
273 278
274 279 case B0_IS_MONTH + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEAR:
275 280 case B0_IS_MONTH + B1_OPT_YEARorDAY + B2_OPT_YEAR:
276 - return toDate( pDateFormat, pParts, 2, 0, 1 );
281 + return toDate( pDateRes, pParts, 2, 0, 1 );
277 282
278 283 case B0_IS_MONTH + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEARorDAY:
279 284 case B0_IS_MONTH + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEARorMONTHorDAY:
280 285 case B0_IS_MONTH + B1_OPT_YEARorDAY + B2_OPT_YEARorMONTHorDAY:
281 286 case B0_IS_MONTH + B1_OPT_YEARorDAY + B2_OPT_YEARorDAY:
282 287 default:
283 - return isYearBeforeDay() ? toDate( pDateFormat, pParts, 1, 0, 2 ) : toDate( pDateFormat, pParts, 2, 0, 1 );
288 + return isYearBeforeDay() ? toDate( pDateRes, pParts, 1, 0, 2 ) : toDate( pDateRes, pParts, 2, 0, 1 );
284 289 }
285 290 case 1:
286 291 switch ( zSwitchValue )
287 292 {
288 293 case B0_OPT_YEAR + B1_IS_MONTH + B2_OPT_YEARorMONTHorDAY:
289 294 case B0_OPT_YEAR + B1_IS_MONTH + B2_OPT_YEARorDAY:
290 - return toDate( pDateFormat, pParts, 0, 1, 2 );
295 + return toDate( pDateRes, pParts, 0, 1, 2 );
291 296
292 297 case B0_OPT_YEARorMONTHorDAY + B1_IS_MONTH + B2_OPT_YEAR:
293 298 case B0_OPT_YEARorDAY + B1_IS_MONTH + B2_OPT_YEAR:
294 - return toDate( pDateFormat, pParts, 2, 1, 0 );
299 + return toDate( pDateRes, pParts, 2, 1, 0 );
295 300
296 301 case B0_OPT_YEARorMONTHorDAY + B1_IS_MONTH + B2_OPT_YEARorDAY:
297 302 case B0_OPT_YEARorMONTHorDAY + B1_IS_MONTH + B2_OPT_YEARorMONTHorDAY:
298 303 case B0_OPT_YEARorDAY + B1_IS_MONTH + B2_OPT_YEARorMONTHorDAY:
299 304 case B0_OPT_YEARorDAY + B1_IS_MONTH + B2_OPT_YEARorDAY:
300 305 default:
301 - return isYearBeforeMonth() ? toDate( pDateFormat, pParts, 0, 1, 2 ) : toDate( pDateFormat, pParts, 2, 1, 0 );
306 + return isYearBeforeMonth() ? toDate( pDateRes, pParts, 0, 1, 2 ) : toDate( pDateRes, pParts, 2, 1, 0 );
302 307 }
303 308 case 2:
304 309 switch ( zSwitchValue )
305 310 {
306 311 case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEAR + B2_IS_MONTH:
307 312 case B0_OPT_YEARorDAY + B1_OPT_YEAR + B2_IS_MONTH:
308 - return toDate( pDateFormat, pParts, 1, 2, 0 );
313 + return toDate( pDateRes, pParts, 1, 2, 0 );
309 314
310 315 case B0_OPT_YEAR + B1_OPT_YEARorMONTHorDAY + B2_IS_MONTH:
311 316 case B0_OPT_YEAR + B1_OPT_YEARorDAY + B2_IS_MONTH:
312 - return toDate( pDateFormat, pParts, 0, 2, 1 );
317 + return toDate( pDateRes, pParts, 0, 2, 1 );
313 318
314 319 case B0_OPT_YEARorDAY + B1_OPT_YEARorMONTHorDAY + B2_IS_MONTH:
315 320 case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEARorMONTHorDAY + B2_IS_MONTH:
316 321 case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEARorDAY + B2_IS_MONTH:
317 322 case B0_OPT_YEARorDAY + B1_OPT_YEARorDAY + B2_IS_MONTH:
318 323 default:
319 - return isYearBeforeDay() ? toDate( pDateFormat, pParts, 0, 2, 1 ) : toDate( pDateFormat, pParts, 1, 0, 2 );
324 + return isYearBeforeDay() ? toDate( pDateRes, pParts, 0, 2, 1 ) : toDate( pDateRes, pParts, 1, 0, 2 );
320 325 }
321 326 default:
322 327 switch ( zSwitchValue )
  @@ -324,29 +329,29 @@
324 329 case B0_OPT_YEAR + B1_OPT_YEARorDAY + B2_OPT_YEARorDAY:
325 330 break;
326 331 case B0_OPT_YEAR + B1_OPT_YEARorDAY + B2_OPT_YEARorMONTHorDAY:
327 - return toDate( pDateFormat, pParts, 0, 2, 1 );
332 + return toDate( pDateRes, pParts, 0, 2, 1 );
328 333 case B0_OPT_YEAR + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEARorDAY:
329 - return toDate( pDateFormat, pParts, 0, 1, 2 );
334 + return toDate( pDateRes, pParts, 0, 1, 2 );
330 335 case B0_OPT_YEAR + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEARorMONTHorDAY:
331 - return isDayBeforeMonth() ? toDate( pDateFormat, pParts, 0, 2, 1 ) : toDate( pDateFormat, pParts, 0, 1, 2 );
336 + return isDayBeforeMonth() ? toDate( pDateRes, pParts, 0, 2, 1 ) : toDate( pDateRes, pParts, 0, 1, 2 );
332 337
333 338 case B0_OPT_YEARorDAY + B1_OPT_YEAR + B2_OPT_YEARorDAY:
334 339 break;
335 340 case B0_OPT_YEARorDAY + B1_OPT_YEAR + B2_OPT_YEARorMONTHorDAY:
336 - return toDate( pDateFormat, pParts, 1, 2, 0 );
341 + return toDate( pDateRes, pParts, 1, 2, 0 );
337 342 case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEAR + B2_OPT_YEARorDAY:
338 - return toDate( pDateFormat, pParts, 1, 0, 2 );
343 + return toDate( pDateRes, pParts, 1, 0, 2 );
339 344 case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEAR + B2_OPT_YEARorMONTHorDAY:
340 - return isDayBeforeMonth() ? toDate( pDateFormat, pParts, 1, 2, 0 ) : toDate( pDateFormat, pParts, 1, 0, 2 );
345 + return isDayBeforeMonth() ? toDate( pDateRes, pParts, 1, 2, 0 ) : toDate( pDateRes, pParts, 1, 0, 2 );
341 346
342 347 case B0_OPT_YEARorDAY + B1_OPT_YEARorDAY + B2_OPT_YEAR:
343 348 break;
344 349 case B0_OPT_YEARorDAY + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEAR:
345 - return toDate( pDateFormat, pParts, 2, 1, 0 );
350 + return toDate( pDateRes, pParts, 2, 1, 0 );
346 351 case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEARorDAY + B2_OPT_YEAR:
347 - return toDate( pDateFormat, pParts, 2, 0, 1 );
352 + return toDate( pDateRes, pParts, 2, 0, 1 );
348 353 case B0_OPT_YEARorMONTHorDAY + B1_OPT_YEARorMONTHorDAY + B2_OPT_YEAR:
349 - return isDayBeforeMonth() ? toDate( pDateFormat, pParts, 2, 1, 0 ) : toDate( pDateFormat, pParts, 2, 0, 1 );
354 + return isDayBeforeMonth() ? toDate( pDateRes, pParts, 2, 1, 0 ) : toDate( pDateRes, pParts, 2, 0, 1 );
350 355 default:
351 356 break;
352 357 }
  @@ -364,11 +369,21 @@
364 369 return new IllegalArgumentException( zWhy );
365 370 }
366 371
367 - private SimpleDate toDate( String pDateFormat, //
372 + private SimpleDate toDate( DateRes pDateRes, //
368 373 AbstractRealPC[] pParts, int pYearNdx, int pMonthNdx, int pDayNdx )
369 374 {
370 - return new SimpleDate( null, // TODO: XXX pDateFormat,
371 - pParts[pYearNdx].getYear(), pParts[pMonthNdx].getMonth(), pParts[pDayNdx].getDay() );
375 + int zYear = pParts[pYearNdx].getYear();
376 + int zMonth = pParts[pMonthNdx].getMonth();
377 + int zDay = pParts[pDayNdx].getDay();
378 + if ( pDateRes.isValidToDay() )
379 + {
380 + return new SimpleDate( zYear, zMonth, zDay );
381 + }
382 + if ( pDateRes.isValidToMonth() )
383 + {
384 + return new SimpleDate( zYear, zMonth );
385 + }
386 + return new SimpleDate( zYear );
372 387 }
373 388
374 389 private transient LateBooleanFieldOrder mYearBeforeMonth = new LateBooleanFieldOrder();