List of usage examples for org.joda.time Interval getEnd
public DateTime getEnd()
From source file:org.filteredpush.qc.date.DateUtils.java
License:Apache License
/** * Extract a date from a verbatim date, returning ranges specified to day. * //from ww w .j av a 2 s . com * @param verbatimEventDate a string containing a verbatim event date. * @param yearsBeforeSuspect the value for a year before which parsed years should be considered suspect. * @return a map with result and resultState as keys * * @deprecated * @see DateUtils#extractDateToDayFromVerbatimER(String, int) replacement method */ public static Map<String, String> extractDateToDayFromVerbatim(String verbatimEventDate, int yearsBeforeSuspect) { Map<String, String> result = extractDateFromVerbatim(verbatimEventDate, yearsBeforeSuspect); if (result.size() > 0 && result.get("resultState").equals("range")) { String dateRange = result.get("result"); try { Interval parseDate = extractDateInterval(dateRange); logger.debug(parseDate); String resultDate = parseDate.getStart().toString("yyyy-MM-dd") + "/" + parseDate.getEnd().toString("yyyy-MM-dd"); result.put("result", resultDate); } catch (Exception e) { logger.debug(e.getMessage()); } } return result; }
From source file:org.filteredpush.qc.date.DateUtils.java
License:Apache License
/** * Identify whether an event date is consistent with its atomic parts. * /*from w w w. j ava 2s. co m*/ * @param eventDate dwc:eventDate string to compare with atomic parts. * @param startDayOfYear dwc:startDayOfYear for comparison with eventDate * @param endDayOfYear dwc:endDayOfYear for comparison with eventDate * @param year dwc:year for comparison with eventDate * @param month dwc:month for comparison with eventDate * @param day dwc:day for comparison with eventDate * * @return true if consistent, or if eventDate is empty, or if all * atomic parts are empty, otherwise false. */ public static boolean isConsistent(String eventDate, String startDayOfYear, String endDayOfYear, String year, String month, String day) { if (isEmpty(eventDate) || (isEmpty(startDayOfYear) && isEmpty(endDayOfYear) && isEmpty(year) && isEmpty(month) && isEmpty(day))) { return true; } // TODO: Add support for eventTime boolean result = false; result = isConsistent(eventDate, year, month, day); logger.debug(result); if ((result || (!isEmpty(eventDate) && isEmpty(year) && isEmpty(month) && isEmpty(day))) && (!isEmpty(startDayOfYear) || !isEmpty(endDayOfYear))) { if (endDayOfYear == null || endDayOfYear.trim().length() == 0 || startDayOfYear.trim().equals(endDayOfYear.trim())) { int startDayInt = -1; try { startDayInt = Integer.parseInt(startDayOfYear); } catch (NumberFormatException e) { logger.debug(e.getMessage()); logger.debug(startDayOfYear + " is not an integer."); result = false; } if (DateUtils.extractDate(eventDate) != null && DateUtils.extractDate(eventDate).getDayOfYear() == startDayInt) { result = true; } else { result = false; } } else { int startDayInt = -1; int endDayInt = -1; try { startDayInt = Integer.parseInt(startDayOfYear); endDayInt = Integer.parseInt(endDayOfYear); } catch (NumberFormatException e) { logger.debug(e.getMessage()); result = false; } Interval eventDateInterval = DateUtils.extractDateInterval(eventDate); logger.debug(eventDateInterval); int endDayOfInterval = eventDateInterval.getEnd().getDayOfYear(); // midnight on the next day, so subtract 1 to get the same integer day. if (eventDateInterval.getStart().getDayOfYear() == startDayInt && endDayOfInterval == endDayInt) { result = true; } else { result = false; } } } return result; }
From source file:org.filteredpush.qc.date.DateUtils.java
License:Apache License
/** * Test if an event date specifies a duration of one day or less. * //from w ww. j a v a 2s. co m * @param eventDate to test. * @return true if duration is one day or less. */ public static boolean specificToDay(String eventDate) { boolean result = false; if (!isEmpty(eventDate)) { Interval eventDateInterval = extractInterval(eventDate); logger.debug(eventDateInterval); logger.debug(eventDateInterval.toDuration()); if (eventDateInterval.toDuration().getStandardDays() < 1l) { result = true; } else if (eventDateInterval.toDuration().getStandardDays() == 1l && eventDateInterval.getStart().getDayOfYear() == eventDateInterval.getEnd().getDayOfYear()) { result = true; } } return result; }
From source file:org.filteredpush.qc.date.DateUtils.java
License:Apache License
/** * Given an event date (which may represent a date range), check to see if the * eventDate contains a leap day. Returns false if provided a null or invalid * eventDate value.//from www.j a v a2 s .c o m * * @param eventDate to check for a leap day * @return true if a leap day is present in the eventDate range, otherwise false. */ public static boolean includesLeapDay(String eventDate) { boolean result = false; if (!DateUtils.isEmpty(eventDate) && DateUtils.eventDateValid(eventDate)) { Interval interval = extractInterval(eventDate); Integer sYear = interval.getStart().getYear(); Integer eYear = interval.getEnd().getYear(); String startYear = Integer.toString(sYear).trim(); String endYear = Integer.toString(eYear).trim(); String leapDay = startYear + "-02-29"; logger.debug(leapDay); if (DateUtils.eventDateValid(leapDay)) { if (interval.contains(DateUtils.extractInterval(leapDay))) { result = true; } } // Range spanning more than one year, check last year if (!endYear.equals(startYear)) { leapDay = endYear + "-02-29"; logger.debug(leapDay); if (DateUtils.eventDateValid(leapDay)) { if (interval.contains(DateUtils.extractInterval(leapDay))) { result = true; } } } // Ranges of more than two years, check intermediate years if (eYear > sYear + 1) { for (int testYear = sYear + 1; testYear < eYear; testYear++) { leapDay = Integer.toString(testYear).trim() + "-02-29"; logger.debug(leapDay); if (DateUtils.eventDateValid(leapDay)) { if (interval.contains(DateUtils.extractInterval(leapDay))) { result = true; } } } } } return result; }
From source file:org.filteredpush.qc.date.DateUtils.java
License:Apache License
/** * Count the number of leap days present in an event date * // www . j a v a2s . c om * @param eventDate to check for leap days * @return number of leap days present in eventDate, 0 if no leap days are present or * if eventDate does not contain a date. */ public static int countLeapDays(String eventDate) { int result = 0; if (!DateUtils.isEmpty(eventDate) && DateUtils.eventDateValid(eventDate)) { Interval interval = extractInterval(eventDate); Integer sYear = interval.getStart().getYear(); Integer eYear = interval.getEnd().getYear(); String startYear = Integer.toString(sYear).trim(); String endYear = Integer.toString(eYear).trim(); String leapDay = startYear + "-02-29"; logger.debug(leapDay); if (DateUtils.eventDateValid(leapDay)) { if (interval.contains(DateUtils.extractInterval(leapDay))) { result = 1; } } // Range spanning more than one year, check last year if (!endYear.equals(startYear)) { leapDay = endYear + "-02-29"; logger.debug(leapDay); if (DateUtils.eventDateValid(leapDay)) { if (interval.contains(DateUtils.extractInterval(leapDay))) { result++; } } } // Ranges of more than two years, check intermediate years if (eYear > sYear + 1) { for (int testYear = sYear + 1; testYear < eYear; testYear++) { leapDay = Integer.toString(testYear).trim() + "-02-29"; logger.debug(leapDay); if (DateUtils.eventDateValid(leapDay)) { if (interval.contains(DateUtils.extractInterval(leapDay))) { result++; } } } } } return result; }
From source file:org.filteredpush.qc.date.DwCEventDQ.java
License:Apache License
/** * Given a set of event terms, examine the content of eventDate, and if it is correctly formatted and * can be interpreted, fill in any empty of the following terms (year, month, day, startDayOfYear, endDayOfYear) * with appropriate values./*from www . j a va 2 s. c o m*/ * *TG2-AMENDMENT_EVENT_FROM_EVENTDATE 710fe118-17e1-440f-b428-88ba3f547d6d * * @param eventDate to examine * @param year to check for emptyness * @param month to check for emptyness * @param day to check for emptyness * @param startDayOfYear to check for emptyness * @param endDayOfYear to check for emptyness * @return an EventDQAmmendment which may contain a proposed amendment for key dwc:day. */ @Provides(value = "urn:uuid:710fe118-17e1-440f-b428-88ba3f547d6d") @Amendment(label = "AMENDMENT_EVENT_FROM_EVENTDATE", description = "One or more empty component terms of the dwc:Event class (dwc:year, dwc:month, dwc:day, dwc:startDayOfYear, dwc:endDayOfYear) have been filled in from a valid value in the term dwc:eventDate.") @Specification(value = "One or more empty component terms of the dwc:Event class (dwc:year, dwc:month, dwc:day, dwc:startDayOfYear, dwc:endDayOfYear) have been filled in from a valid value in the term dwc:eventDate. The field dwc:eventDate is not EMPTY and contains a valid ISO 8601:2004(E). Run this amendment after any other amendment which may affect dwc:eventDate.") public static DQResponse<AmendmentValue> fillInEventFromEventDate( @Consulted(value = "dwc:eventDate") String eventDate, @ActedUpon(value = "dwc:year") String year, @ActedUpon(value = "dwc:month") String month, @ActedUpon(value = "dwc:day") String day, @ActedUpon(value = "dwc:startDayOfYear") String startDayOfYear, @ActedUpon(value = "dwc:endDayOfYear") String endDayOfYear) { DQResponse<AmendmentValue> result = new DQResponse<AmendmentValue>(); if (DateUtils.isEmpty(eventDate)) { result.setResultState(ResultState.INTERNAL_PREREQUISITES_NOT_MET); result.addComment("No value for dwc:eventDate was provided, no data to fill in from."); } else { if (!DateUtils.eventDateValid(eventDate)) { result.setResultState(ResultState.INTERNAL_PREREQUISITES_NOT_MET); result.addComment("Provided value for dwc:eventDate [" + eventDate + "] could not be interpreted."); } else { boolean isRange = false; if (DateUtils.isRange(eventDate)) { isRange = true; } Interval interval = DateUtils.extractInterval(eventDate); if (interval == null) { result.setResultState(ResultState.INTERNAL_PREREQUISITES_NOT_MET); result.addComment("Provided value for dwc:eventDate [" + eventDate + "] appears to be correctly formatted, but could not be interpreted as a valid date."); } else { Map<String, String> values = new HashMap<>(); if (DateUtils.isEmpty(day)) { String newDay = Integer.toString(interval.getStart().getDayOfMonth()); values.put("dwc:day", newDay); result.setResultState(ResultState.FILLED_IN); if (isRange) { result.addComment( "Added day [" + newDay + "] from start day of range [" + eventDate + "]."); } else { result.addComment("Added day [" + newDay + "] from eventDate [" + eventDate + "]."); } } if (DateUtils.isEmpty(month)) { String newMonth = Integer.toString(interval.getStart().getMonthOfYear()); values.put("dwc:month", newMonth); result.setResultState(ResultState.FILLED_IN); if (isRange) { result.addComment("Added month [" + newMonth + "] from start month of eventDate [" + eventDate + "]."); } else { result.addComment("Added month [" + newMonth + "] from eventDate [" + eventDate + "]."); } } if (DateUtils.isEmpty(month)) { String newMonth = Integer.toString(interval.getStart().getMonthOfYear()); values.put("dwc:month", newMonth); result.setResultState(ResultState.FILLED_IN); if (isRange) { result.addComment("Added month [" + newMonth + "] from start month of eventDate [" + eventDate + "]."); } else { result.addComment("Added month [" + newMonth + "] from eventDate [" + eventDate + "]."); } } if (DateUtils.isEmpty(year)) { String newYear = Integer.toString(interval.getStart().getYear()); values.put("dwc:year", newYear); result.setResultState(ResultState.FILLED_IN); if (isRange) { result.addComment("Added year [" + newYear + "] from start month of eventDate [" + eventDate + "]."); } else { result.addComment("Added year [" + newYear + "] from eventDate [" + eventDate + "]."); } } if (DateUtils.isEmpty(startDayOfYear)) { String newDay = Integer.toString(interval.getStart().getDayOfYear()); values.put("dwc:startDayOfYear", newDay); result.setResultState(ResultState.FILLED_IN); if (isRange) { result.addComment("Added startDayOfYear [" + newDay + "] from start day of eventDate [" + eventDate + "]."); } else { result.addComment( "Added startDayOfYear [" + newDay + "] from eventDate [" + eventDate + "]."); } } if (DateUtils.isEmpty(endDayOfYear)) { String newDay = Integer.toString(interval.getEnd().getDayOfYear()); values.put("dwc:endDayOfYear", newDay); result.setResultState(ResultState.FILLED_IN); if (isRange) { result.addComment("Added endDayOfYear [" + newDay + "] from end day of eventDate [" + eventDate + "]."); } else { result.addComment( "Added endDayOfYear [" + newDay + "] from eventDate [" + eventDate + "]."); } } result.setValue(new AmendmentValue(values)); // Time could also be populated, but we probably don't want to. Here is a minimal implementation, // which illustrates some issues in implementation (using zulu time or not, dealing with time in ranges...) //if (DateUtils.isEmpty(eventTime)) { // if (DateUtils.containsTime(eventDate)) { // String newTime = DateUtils.extractZuluTime(eventDate); // result.addResult("dwc:endDayOfYear", newTime ); // result.setResultState(ResultState.FILLED_IN); // result.addComment("Added eventTime ["+ newTime +"] from eventDate ["+eventDate+"]."); // } //} if (!result.getResultState().equals(ResultState.FILLED_IN)) { result.setResultState(ResultState.NO_CHANGE); result.addComment("No changes proposed, all candidate fields to fill in contain values."); } } // end interval extraction } // end format validity check } return result; }
From source file:org.filteredpush.qc.date.DwCEventDQ.java
License:Apache License
/** * Given an eventDate check to see if that event date falls entirely outside a range from a * specified lower bound (1700-01-01 by default) and the present. * //from w w w . ja va 2 s . c o m * TODO: This may or may not be consistent with the standard test, current implementation here fails * only if the eventDate has no overlap with the lowerBound to the present, not if the eventDate has * any overlap outside the lowerBound to the present. * TG2-VALIDATION_EVENTDATE_OUTOFRANGE ? probably not * * * @param eventDate to check * @param lowerBound integer representing the year to use as the lower boundary, if null, then uses 1700 * @param useLowerBound if false, no lower limit, otherwise uses supplied lower bound. * @return an DQValidationResponse object describing whether the provided value is in range. */ @Provides(value = "urn:uuid:bc8d1ffb-d074-4b4b-919c-f0c8fbe1a618") // new guid, probably not the test as specified @Validation(label = "VALIDATION_EVENTDATE_WHOLLYOUTOFRANGE", description = "The range of dwc:eventDate does not fall entirely into the future and optionally does not fall entirely before a date designated when the test is run") @Specification(value = "The range of dwc:eventDate is not entirely the future and optionally does not entirely fall before a date designated when the test is run The field dwc:eventDate is not EMPTY.") public static DQResponse<ComplianceValue> isEventDateInRange( @ActedUpon(value = "dwc:eventDate") String eventDate, @Parameter(name = "whollyOutOfRangeLowerBound") Integer lowerBound, @Parameter(name = "whollyOutOfRangeUseLowerBound") Boolean useLowerBound) { DQResponse<ComplianceValue> result = new DQResponse<ComplianceValue>(); // TODO: Implementation may be too tightly bound to year, may need to extract first/last day for finer granularity test if (lowerBound == null) { lowerBound = 1700; } if (useLowerBound == null) { useLowerBound = true; } Integer upperBound = LocalDateTime.now().getYear(); if (DateUtils.isEmpty(eventDate)) { result.addComment("No value provided for dwc:eventDate."); result.setResultState(ResultState.INTERNAL_PREREQUISITES_NOT_MET); } else { if (!DateUtils.eventDateValid(eventDate)) { result.addComment( "Value provided for dwc:eventDate [" + eventDate + "] not recognized as a valid date."); result.setResultState(ResultState.INTERNAL_PREREQUISITES_NOT_MET); } else { int startYear = 0; Interval interval = DateUtils.extractInterval(eventDate); if (DateUtils.isRange(eventDate)) { int endYear = interval.getEnd().getYear(); startYear = interval.getStart().getYear(); if (useLowerBound) { if (endYear < lowerBound || startYear > upperBound) { result.setValue(ComplianceValue.NOT_COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is not a range spanning part of the range " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } else { result.setValue(ComplianceValue.COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is a range spanning at least part of " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } } else { if (startYear > upperBound) { result.setValue(ComplianceValue.NOT_COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is not a range spanning part of the range " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } else { result.setValue(ComplianceValue.COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is a range spanning at least part of " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } } } else { startYear = interval.getStart().getYear(); if (useLowerBound) { if (startYear < lowerBound || startYear > upperBound) { result.setValue(ComplianceValue.NOT_COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' does not have a year in the range " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } else { result.setValue(ComplianceValue.COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' does not have a year in the range " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } } else { if (startYear > upperBound) { result.setValue(ComplianceValue.NOT_COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is not after " + upperBound.toString() + " (current year)."); } else { result.setValue(ComplianceValue.COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is after " + upperBound.toString() + " (current year)."); } } } result.setResultState(ResultState.RUN_HAS_RESULT); } } return result; }
From source file:org.filteredpush.qc.date.DwCEventDQ.java
License:Apache License
/** * Given an eventDate check to see if that event date crosses outside a range from a * specified lower bound (1700-01-01 by default) and the present. * /*w ww .j av a 2 s. co m*/ * TODO: This may or may not be consistent with the standard test * TG2-VALIDATION_EVENTDATE_OUTOFRANGE * * * @param eventDate to check * @param lowerBound integer representing the year to use as the lower boundary, if null, then uses 1700 * @param useLowerBound if false, no lower limit, otherwise uses supplied lower bound. * @return an DQValidationResponse object describing whether the provided value is in range. */ @Provides(value = "urn:uuid:3cff4dc4-72e9-4abe-9bf3-8a30f1618432") @Validation(label = "VALIDATION_EVENTDATE_EXTENDSOUTOFRANGE", description = "The range of dwc:eventDate does not extend into the future and optionally does not extend before a date designated when the test is run") @Specification(value = "The range of dwc:eventDate does not extend into the future and optionally does not extend before a date designated when the test is run The field dwc:eventDate is not EMPTY.") public static DQResponse<ComplianceValue> isEventDateAtAllInRange( @ActedUpon(value = "dwc:eventDate") String eventDate, @Parameter(name = "extendsOutOfRangeLowerBound") Integer lowerBound, @Parameter(name = "extendsOutOfRangeUseLowerBound") Boolean useLowerBound) { DQResponse<ComplianceValue> result = new DQResponse<ComplianceValue>(); // TODO: Implementation may be too tightly bound to year, may need to extract first/last day for finer granularity test if (lowerBound == null) { lowerBound = 1700; } if (useLowerBound == null) { useLowerBound = true; } Integer upperBound = LocalDateTime.now().getYear(); if (DateUtils.isEmpty(eventDate)) { result.addComment("No value provided for dwc:eventDate."); result.setResultState(ResultState.INTERNAL_PREREQUISITES_NOT_MET); } else { if (!DateUtils.eventDateValid(eventDate)) { result.addComment( "Value provided for dwc:eventDate [" + eventDate + "] not recognized as a valid date."); result.setResultState(ResultState.INTERNAL_PREREQUISITES_NOT_MET); } else { int startYear = 0; Interval interval = DateUtils.extractInterval(eventDate); if (DateUtils.isRange(eventDate)) { int endYear = interval.getEnd().getYear(); startYear = interval.getStart().getYear(); if (endYear > upperBound) { result.setValue(ComplianceValue.NOT_COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' extends outside the range " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } else { if (useLowerBound) { if (startYear < lowerBound) { result.setValue(ComplianceValue.NOT_COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' extends outside the range " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } else { result.setValue(ComplianceValue.COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is a range spanning at least part of " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } } else { result.setValue(ComplianceValue.COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is a range spanning at least part of " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } } } else { startYear = interval.getStart().getYear(); if (useLowerBound) { if (startYear < lowerBound || startYear > upperBound) { result.setValue(ComplianceValue.NOT_COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' does not have a year in the range " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } else { result.setValue(ComplianceValue.COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' does not have a year in the range " + lowerBound.toString() + " to " + upperBound.toString() + " (current year)."); } } else { if (startYear > upperBound) { result.setValue(ComplianceValue.NOT_COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is not after " + upperBound.toString() + " (current year)."); } else { result.setValue(ComplianceValue.COMPLIANT); result.addComment("Provided value for dwc:eventDate '" + eventDate + "' is after " + upperBound.toString() + " (current year)."); } } } result.setResultState(ResultState.RUN_HAS_RESULT); } } return result; }
From source file:org.forgerock.openidm.util.DateUtil.java
License:CDDL license
/** * Returns a {@link DateTime} object representing the end date of the supplied interval. * /*from ww w.ja va 2 s .com*/ * @param intervalString a {@link String} object representing an ISO 8601 time interval. * @return a {@link DateTime} object representing the end date of the supplied interval. * @throws IllegalArgumentException if an error occurs while parsing the intervalString. */ public DateTime getEndOfInterval(String intervalString) throws IllegalArgumentException { Interval interval = Interval.parse(intervalString); DateTime result = interval.getEnd(); return result; }
From source file:org.jadira.usertype.dateandtime.joda.PersistentInterval.java
License:Apache License
@Override protected Object[] toConvertedColumns(Interval value) { return new Object[] { value.getStart(), value.getEnd() }; }