@Override public String toString() { return "(" + DateFormat.getDateTimeInstance().format(getBeginCalendar().getTime()) + ".." + DateFormat.getDateTimeInstance().format(getEndCalendar().getTime()) + ")"; } }
public Span handle(Repeater<?> month, Tag<Integer> day, List<Token> timeTokens, Options options) { month.setStart((Calendar) options.getNow().clone()); Span span = month.thisSpan(options.getContext()); Calendar dayStart = Time.construct(span.getBeginCalendar().get(Calendar.YEAR), span.getBeginCalendar().get(Calendar.MONTH) + 1, day.getType().intValue()); return Handler.dayOrTime(dayStart, timeTokens, options); } }
@Override public Span getOffset(Span span, int amount, PointerType pointer) { setStart(span.getBeginCalendar()); Span portionSpan = nextSpan(pointer); int direction = (pointer == Pointer.PointerType.FUTURE) ? 1 : -1; portionSpan = portionSpan.add(direction * (amount - 1) * RepeaterDay.DAY_SECONDS); return portionSpan; }
@Override protected Span _thisSpan(PointerType pointer) { Span thisSpan; if (pointer == Pointer.PointerType.FUTURE || pointer == Pointer.PointerType.NONE) { RepeaterDayName saturdayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SATURDAY); saturdayRepeater.setStart((Calendar) getNow().clone()); Span thisSaturdaySpan = saturdayRepeater.nextSpan(Pointer.PointerType.FUTURE); thisSpan = new Span(thisSaturdaySpan.getBeginCalendar(), Time.cloneAndAdd(thisSaturdaySpan.getBeginCalendar(), Calendar.SECOND, RepeaterWeekend.WEEKEND_SECONDS)); } else if (pointer == Pointer.PointerType.PAST) { RepeaterDayName saturdayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SATURDAY); saturdayRepeater.setStart((Calendar) getNow().clone()); Span lastSaturdaySpan = saturdayRepeater.nextSpan(Pointer.PointerType.PAST); thisSpan = new Span(lastSaturdaySpan.getBeginCalendar(), Time.cloneAndAdd(lastSaturdaySpan.getBeginCalendar(), Calendar.SECOND, RepeaterWeekend.WEEKEND_SECONDS)); } else { throw new IllegalArgumentException("Unable to handle pointer " + pointer + "."); } return thisSpan; }
@Override public Span getOffset(Span span, int amount, PointerType pointer) { int direction = (pointer == Pointer.PointerType.FUTURE) ? 1 : -1; RepeaterWeekend weekend = new RepeaterWeekend(); weekend.setStart(span.getBeginCalendar()); Calendar start = Time.cloneAndAdd(weekend.nextSpan(pointer).getBeginCalendar(), Calendar.SECOND, (amount - 1) * direction * RepeaterWeek.WEEK_SECONDS); return new Span(start, Time.cloneAndAdd(start, Calendar.SECOND, span.getWidth())); }
/** * Recursively finds repeaters within other repeaters. * Returns a Span representing the innermost time span * or nil if no repeater union could be found */ public static Span findWithin(List<Repeater<?>> tags, Span span, Pointer.PointerType pointer, Options options) { if (options.isDebug()) { System.out.println("Chronic.findWithin: " + tags + " in " + span); } if (tags.isEmpty()) { return span; } Repeater<?> head = tags.get(0); List<Repeater<?>> rest = (tags.size() > 1) ? tags.subList(1, tags.size()) : new LinkedList<Repeater<?>>(); head.setStart((pointer == Pointer.PointerType.FUTURE) ? span.getBeginCalendar() : span.getEndCalendar()); Span h = head.thisSpan(PointerType.NONE); if (span.contains(h.getBegin()) || span.contains(h.getEnd())) { return findWithin(rest, h, pointer, options); } return null; }
@Override public Span getOffset(Span span, int amount, Pointer.PointerType pointer) { int direction = (pointer == Pointer.PointerType.FUTURE) ? 1 : -1; return new Span(Time.cloneAndAdd(span.getBeginCalendar(), Calendar.MONTH, amount * direction), Time.cloneAndAdd(span.getEndCalendar(), Calendar.MONTH, amount * direction)); }
@Override public Span getOffset(Span span, int amount, Pointer.PointerType pointer) { int direction = (pointer == Pointer.PointerType.FUTURE) ? 1 : -1; Calendar newBegin = Time.cloneAndAdd(span.getBeginCalendar(), Calendar.YEAR, amount * direction); Calendar newEnd = Time.cloneAndAdd(span.getEndCalendar(), Calendar.YEAR, amount * direction); return new Span(newBegin, newEnd); }
public Span handle(List<Token> tokens, Span outerSpan, Options options) { Repeater<?> repeater = tokens.get(1).getTag(Repeater.class); repeater.setStart(Time.cloneAndAdd(outerSpan.getBeginCalendar(), Calendar.SECOND, -1)); Integer ordinalValue = tokens.get(0).getTag(Ordinal.class).getType(); Span span = null; for (int i = 0; i < ordinalValue.intValue(); i++) { span = repeater.nextSpan(Pointer.PointerType.FUTURE); if (span.getBegin() > outerSpan.getEnd()) { span = null; break; } } return span; } }
@Override protected Span _nextSpan(PointerType pointer) { if (_currentWeekStart == null) { if (pointer == PointerType.FUTURE) { RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); sundayRepeater.setStart((Calendar) getNow().clone()); Span nextSundaySpan = sundayRepeater.nextSpan(Pointer.PointerType.FUTURE); _currentWeekStart = nextSundaySpan.getBeginCalendar(); } else if (pointer == PointerType.PAST) { RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); sundayRepeater.setStart(Time.cloneAndAdd(getNow(), Calendar.DAY_OF_MONTH, 1)); sundayRepeater.nextSpan(Pointer.PointerType.PAST); Span lastSundaySpan = sundayRepeater.nextSpan(Pointer.PointerType.PAST); _currentWeekStart = lastSundaySpan.getBeginCalendar(); } else { throw new IllegalArgumentException("Unable to handle pointer " + pointer + "."); } } else { int direction = (pointer == Pointer.PointerType.FUTURE) ? 1 : -1; _currentWeekStart.add(Calendar.DAY_OF_MONTH, RepeaterWeek.WEEK_DAYS * direction); } return new Span(_currentWeekStart, Calendar.DAY_OF_MONTH, RepeaterWeek.WEEK_DAYS); }
@Override public void process(JCas jCas) throws AnalysisEngineProcessException { Type t = jCas.getTypeSystem().getType(dateType); if (t != null) { AnnotationIndex<Annotation> annoIndex = jCas.getAnnotationIndex(); FSIterator<Annotation> iter = annoIndex.iterator(); while (iter.hasNext()) { Annotation anno = iter.next(); try { Span span = Chronic.parse(anno.getCoveredText()); if (span != null && span.getBeginCalendar() != null) { Date date = new Date(jCas); date.setBegin(anno.getBegin()); date.setEnd(anno.getEnd()); date.setDate(tlDateFormat.get().format( span.getBeginCalendar().getTime())); date.addToIndexes(); } } catch (Exception e) { if (log.isDebugEnabled()) log.debug( "chronic failed on: " + anno.getCoveredText(), e); } } } }
@Override public void process(JCas jCas) throws AnalysisEngineProcessException { Type t = jCas.getTypeSystem().getType(dateType); if (t != null) { AnnotationIndex<Annotation> annoIndex = jCas.getAnnotationIndex(); FSIterator<Annotation> iter = annoIndex.iterator(); while (iter.hasNext()) { Annotation anno = iter.next(); try { Span span = Chronic.parse(anno.getCoveredText()); if (span != null && span.getBeginCalendar() != null) { Date date = new Date(jCas); date.setBegin(anno.getBegin()); date.setEnd(anno.getEnd()); date.setDate(tlDateFormat.get().format( span.getBeginCalendar().getTime())); date.addToIndexes(); } } catch (Exception e) { if (log.isDebugEnabled()) log.debug( "chronic failed on: " + anno.getCoveredText(), e); } } } }
@Override protected Span _nextSpan(PointerType pointer) { if (_currentFortnightStart == null) { if (pointer == PointerType.FUTURE) { RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); sundayRepeater.setStart(getNow()); Span nextSundaySpan = sundayRepeater.nextSpan(PointerType.FUTURE); _currentFortnightStart = nextSundaySpan.getBeginCalendar(); } else if (pointer == PointerType.PAST) { RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); sundayRepeater.setStart(Time.cloneAndAdd(getNow(), Calendar.SECOND, RepeaterDay.DAY_SECONDS)); sundayRepeater.nextSpan(PointerType.PAST); sundayRepeater.nextSpan(PointerType.PAST); Span lastSundaySpan = sundayRepeater.nextSpan(PointerType.PAST); _currentFortnightStart = lastSundaySpan.getBeginCalendar(); } else { throw new IllegalArgumentException("Unable to handle pointer " + pointer + "."); } } else { int direction = (pointer == PointerType.FUTURE) ? 1 : -1; _currentFortnightStart.add(Calendar.SECOND, direction * RepeaterFortnight.FORTNIGHT_SECONDS); } return new Span(_currentFortnightStart, Calendar.SECOND, RepeaterFortnight.FORTNIGHT_SECONDS); }
options.setNow(outerSpan.getBeginCalendar()); Span time = getAnchor(dealiasAndDisambiguateTimes(timeTokens, options), options); return time;
@Override protected Span _nextSpan(PointerType pointer) { if (_currentWeekStart == null) { if (pointer == Pointer.PointerType.FUTURE) { RepeaterDayName saturdayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SATURDAY); saturdayRepeater.setStart((Calendar) getNow().clone()); Span nextSaturdaySpan = saturdayRepeater.nextSpan(Pointer.PointerType.FUTURE); _currentWeekStart = nextSaturdaySpan.getBeginCalendar(); } else if (pointer == Pointer.PointerType.PAST) { RepeaterDayName saturdayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SATURDAY); saturdayRepeater.setStart(Time.cloneAndAdd(getNow(), Calendar.SECOND, RepeaterDay.DAY_SECONDS)); Span lastSaturdaySpan = saturdayRepeater.nextSpan(Pointer.PointerType.PAST); _currentWeekStart = lastSaturdaySpan.getBeginCalendar(); } } else { int direction = (pointer == Pointer.PointerType.FUTURE) ? 1 : -1; _currentWeekStart = Time.cloneAndAdd(_currentWeekStart, Calendar.SECOND, direction * RepeaterWeek.WEEK_SECONDS); } return new Span(_currentWeekStart, Time.cloneAndAdd(_currentWeekStart, Calendar.SECOND, RepeaterWeekend.WEEKEND_SECONDS)); }
sundayRepeater.setStart((Calendar) getNow().clone()); Span thisSundaySpan = sundayRepeater.thisSpan(Pointer.PointerType.FUTURE); thisWeekEnd = thisSundaySpan.getBeginCalendar(); thisWeekSpan = new Span(thisWeekStart, thisWeekEnd); sundayRepeater.setStart((Calendar) getNow().clone()); Span lastSundaySpan = sundayRepeater.nextSpan(Pointer.PointerType.PAST); thisWeekStart = lastSundaySpan.getBeginCalendar(); thisWeekSpan = new Span(thisWeekStart, thisWeekEnd); sundayRepeater.setStart((Calendar) getNow().clone()); Span lastSundaySpan = sundayRepeater.nextSpan(Pointer.PointerType.PAST); thisWeekStart = lastSundaySpan.getBeginCalendar(); thisWeekEnd = Time.cloneAndAdd(thisWeekStart, Calendar.DAY_OF_MONTH, RepeaterWeek.WEEK_DAYS); thisWeekSpan = new Span(thisWeekStart, thisWeekEnd);
@Override protected Span _thisSpan(PointerType pointer) { if (pointer == null) { pointer = PointerType.FUTURE; } Span span; if (pointer == PointerType.FUTURE) { Calendar thisFortnightStart = Time.cloneAndAdd(Time.ymdh(getNow()), Calendar.SECOND, RepeaterHour.HOUR_SECONDS); RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); sundayRepeater.setStart(getNow()); sundayRepeater.thisSpan(PointerType.FUTURE); Span thisSundaySpan = sundayRepeater.thisSpan(PointerType.FUTURE); Calendar thisFortnightEnd = thisSundaySpan.getBeginCalendar(); span = new Span(thisFortnightStart, thisFortnightEnd); } else if (pointer == PointerType.PAST) { Calendar thisFortnightEnd = Time.ymdh(getNow()); RepeaterDayName sundayRepeater = new RepeaterDayName(RepeaterDayName.DayName.SUNDAY); sundayRepeater.setStart(getNow()); Span lastSundaySpan = sundayRepeater.nextSpan(PointerType.PAST); Calendar thisFortnightStart = lastSundaySpan.getBeginCalendar(); span = new Span(thisFortnightStart, thisFortnightEnd); } else { throw new IllegalArgumentException("Unable to handle pointer " + pointer + "."); } return span; }