public Collection<Object> convertDimensionValue(String name, String value) { List<Object> result = new ArrayList<Object>(); try { String typeName = getDomainDatatype(name); if (typeName != null) { Class<?> type = Class.forName(typeName); if (type == java.util.Date.class) { result.addAll(new TimeParser().parse(value)); } else if (Number.class.isAssignableFrom(type) && !value.contains(",")) { result.add(parseNumberOrRange(value)); } else { for (String element : value.split(",")) { result.add(Converters.convert(element, type)); } } } else { result.add(value); } } catch (Exception e) { LOGGER.log(Level.WARNING, "Failed to convert dimension value: ", e); result.add(value); } return result; }
int maxValues = getMaxTimes(); for (String date : listDates) { Object o = getFuzzyDate(date); if (o instanceof Date) { addDate(result, (Date) o); } else { addPeriod(result, (DateRange) o); Date[] range = parseTimeDuration(period); final long millisIncrement = parsePeriod(period[2]); final long startTime = range[0].getTime(); final long endTime = range[1].getTime(); final Calendar calendar = new GregorianCalendar(UTC_TZ); calendar.setTimeInMillis(time); addDate(result, calendar.getTime()); j++; checkMaxTimes(result, maxValues); Date[] range = parseTimeDuration(period); addPeriod(result, new DateRange(range[0], range[1])); } else { throw new ParseException("Invalid time period: " + Arrays.toString(period), 0); checkMaxTimes(result, maxValues);
durationOffset = parsePeriod(period[0]); } else { begin = beginning(getFuzzyDate(period[0])); durationOffset = parsePeriod(period[1]); final Calendar calendar = new GregorianCalendar(); calendar.setTimeInMillis(begin.getTime() + durationOffset); end = end(getFuzzyDate(period[1])); final Calendar calendar = new GregorianCalendar(); calendar.setTimeInMillis(end.getTime() - durationOffset); begin = beginning(getFuzzyDate(period[0])); end = end(getFuzzyDate(period[1]));
@SuppressWarnings({"unchecked", "rawtypes"}) public Object parse(String value) throws ParseException { TimeParser parser = getTimeParser(); return parser.parse(value); }
protected TimeParser getTimeParser() { int maxRequestedDimensionValues = wms.getMaxRequestedDimensionValues(); return new TimeParser(maxRequestedDimensionValues); } }
private static Number parseValue(String s, Class dataType) throws ParseException { if (Date.class.isAssignableFrom(dataType)) { return TimeParser.parsePeriod(s); } // TODO: add support for Number, e.g., elevation throw new IllegalArgumentException("Unsupported value type " + dataType); }
c.clear(); Date instant = (Date) TimeParser.getFuzzyDate("2000-04-04T12:00:00.000Z"); c.set(Calendar.YEAR, 2000); c.set(Calendar.MONTH, 3); // 0-indexed TimeParser.getFuzzyDate( "2005-12-31T23:59:60.000Z"); // selected due to leapsecond at assertEquals(instant, c.getTime()); instant = (Date) TimeParser.getFuzzyDate("-25-06-08T17:15:00.123Z"); c.clear(); c.set(Calendar.ERA, GregorianCalendar.BC);
@SuppressWarnings({"unchecked", "rawtypes"}) public Object parse(String value) throws ParseException { Collection times = parser.parse(value); if (times.isEmpty() || times.size() > 1) { throw new ServiceException( "Invalid time specification, must be a single time, or a time range", ServiceException.INVALID_PARAMETER_VALUE, "time"); } return times.iterator().next(); } }
protected TimeParser getTimeParser() { WCSInfo info = geoServer.getService(WCSInfo.class); int maxRequestedDimensionValues = info.getMaxRequestedDimensionValues(); return new TimeParser(maxRequestedDimensionValues); } }
/** * Tests only the increment part of the time parameter. * * @throws ParseException if the string can't be parsed. */ public void testPeriod() throws ParseException { final long millisInDay = TimeParser.MILLIS_IN_DAY; assertEquals(millisInDay, TimeParser.parsePeriod("P1D")); assertEquals(3 * millisInDay, TimeParser.parsePeriod("P3D")); assertEquals(14 * millisInDay, TimeParser.parsePeriod("P2W")); assertEquals(8 * millisInDay, TimeParser.parsePeriod("P1W1D")); assertEquals(millisInDay, TimeParser.parsePeriod("PT24H")); assertEquals(Math.round(1.5 * millisInDay), TimeParser.parsePeriod("P1.5D")); }
public void testReducedAccuracyYear() throws Exception { Calendar c = new GregorianCalendar(); c.setTimeZone(TimeParser.UTC_TZ); DateRange year = (DateRange) TimeParser.getFuzzyDate("2000"); c.clear(); c.set(Calendar.YEAR, 2000); assertRangeStarts(year, c.getTime()); c.set(Calendar.YEAR, 2001); c.add(Calendar.MILLISECOND, -1); assertRangeEnds(year, c.getTime()); year = (DateRange) TimeParser.getFuzzyDate("2001"); c.clear(); c.set(Calendar.YEAR, 2001); assertRangeStarts(year, c.getTime()); c.set(Calendar.YEAR, 2002); c.add(Calendar.MILLISECOND, -1); assertRangeEnds(year, c.getTime()); year = (DateRange) TimeParser.getFuzzyDate("-6052"); c.clear(); c.set(Calendar.ERA, GregorianCalendar.BC); c.set(Calendar.YEAR, 6053); assertRangeStarts(year, c.getTime()); c.set(Calendar.YEAR, 6052); c.add(Calendar.MILLISECOND, -1); assertRangeEnds(year, c.getTime()); }
private boolean isValidTimeReference(String stringValue, Strategy strategy) { try { TimeParser parser = new TimeParser(); List values = (List) parser.parse(stringValue); // the KVP parser accepts also lists of values, we want a single one if (strategy == Strategy.FIXED) { // point or range, but just one return values.size() == 1; } else if (strategy == Strategy.NEAREST) { // only point value, no ranges allowed return values.size() == 1 && !(values.get(0) instanceof Range); } else { // nope, we cannot have a reference value if the strategy is // not fixed or nearest return false; } } catch (Exception e) { if (LOGGER.isLoggable(Level.FINER)) { LOGGER.log(Level.FINER, "Invalid time value " + stringValue, e); } return false; } } }
if (referenceValue != null) { try { refDate = singleValue(timeParser.parse(referenceValue), new Date()); } catch (ParseException e) { throw new ServiceException(
c.clear(); DateRange hour = (DateRange) TimeParser.getFuzzyDate("2000-04-04T12Z"); c.set(Calendar.YEAR, 2000); c.set(Calendar.MONTH, 3); // 0-indexed TimeParser.getFuzzyDate( "2005-12-31T23Z"); // selected due to leapsecond at 23:59:60 UTC c.clear(); assertRangeEnds(hour, c.getTime()); hour = (DateRange) TimeParser.getFuzzyDate("-25-06-08T17Z"); c.clear(); c.set(Calendar.ERA, GregorianCalendar.BC);
@Override public Object parse(String value) throws Exception { TimeSequenceType timeSequence = Wcs111Factory.eINSTANCE.createTimeSequenceType(); WCSInfo info = geoServer.getService(WCSInfo.class); int maxRequestedDimensionValues = info.getMaxRequestedDimensionValues(); TimeParser parser = new TimeParser(maxRequestedDimensionValues); Collection<Date> timePositions = (Collection<Date>) parser.parse(value); for (Date tp : timePositions) { timeSequence.getTimePosition().add(tp); } return timeSequence; } }
TimeParser timeParser = new TimeParser(configuration.getMaxAnimationFrames()); Collection parsedTimes = timeParser.parse(time); progressListener.started(); int count = 1;