@Override public void init(Map<String, Object> props) { if (props.containsKey(FILENAME_REGEX)) { setFilenameRegex(props.get(FILENAME_REGEX).toString()); } if (props.containsKey(TIME_FORMAT)) { setTimeFormat(props.get(TIME_FORMAT).toString()); } }
public TimeHandler createHandler() { if (this == FILENAME) { return new FilenameTimeHandler(); } return new TimeHandler() { private static final long serialVersionUID = 1L; @Override public Date computeTimestamp(Granule g) { switch (TimeMode.this) { case AUTO: return Dates.matchAndParse(g.getFile().getName()); case MANUAL: return g.getTimestamp(); } return null; } }; } }
@Override public Date computeTimestamp(Granule g) { Preconditions.checkNotNull(filenamePattern); Preconditions.checkNotNull(timeFormat); String filename = g.getFile().getName(); //TODO: add a reason for cases why timestamp can't be determined Matcher m = filenamePattern.matcher(g.getFile().getName()); if (!m.matches() || m.groupCount() != 2) { //report back message String msg = "Failure parsing time from file " + filename + " with pattern " + getFilenameRegex(); g.setMessage(msg); LOGGER.log(Level.WARNING,msg); return null; } try { return timeFormat.parse(m.group(1)); } catch (ParseException e) { String msg = "Failure parsing timestamp with pattern " + timeFormat.toPattern() + ": " + e.getLocalizedMessage(); g.setMessage(msg); LOGGER.log(Level.WARNING, msg, e); return null; } }
+ filename + " with pattern " + getFilenameRegex(); g.setMessage(msg);
@Override public void init(Map<String, Object> props) { if (props.containsKey(FILENAME_REGEX)) { setFilenameRegex(props.get(FILENAME_REGEX).toString()); } if (props.containsKey(TIME_FORMAT)) { setTimeFormat(props.get(TIME_FORMAT).toString()); } }
public TimeHandler createHandler() { if (this == FILENAME) { return new FilenameTimeHandler(); } return new TimeHandler() { private static final long serialVersionUID = 1L; @Override public Date computeTimestamp(Granule g) { switch(TimeMode.this) { case AUTO: return Dates.matchAndParse(g.getFile().getName()); case MANUAL: return g.getTimestamp(); } return null; } }; } }
@Test public void testFilenameTimeHandler() throws Exception { Mosaic m = new Mosaic(unpack("mosaic/bm_time.zip")); m.setTimeMode(TimeMode.FILENAME); FilenameTimeHandler th = (FilenameTimeHandler) m.getTimeHandler(); th.setFilenameRegex("(\\d){6}"); th.setTimeFormat("yyyyMM"); m.prepare(); List<FileData> files = m.getFiles(); assertEquals(4, files.size()); for (int i = 0; i < files.size(); i++) { FileData fd = files.get(i); assertTrue(fd instanceof Granule); Granule g = (Granule) fd; // TODO: comparison fails on build server assertNotNull(g.getTimestamp()); // assertEquals(date(2004, i), g.getTimestamp()); } }
@Test public void testTimeMosaic() throws Exception { Mosaic m = new Mosaic(unpack("mosaic/bm_time.zip")); m.setTimeMode(TimeMode.FILENAME); FilenameTimeHandler th = (FilenameTimeHandler) m.getTimeHandler(); th.setFilenameRegex("(\\d){6}"); th.setTimeFormat("yyyyMM"); ImportContext context = importer.createContext(m); assertEquals(1, context.getTasks().size()); importer.run(context); LayerInfo l = context.getTasks().get(0).getLayer(); ResourceInfo r = l.getResource(); assertTrue(r.getMetadata().containsKey("time")); DimensionInfo d = (DimensionInfo) r.getMetadata().get("time"); assertNotNull(d); runChecks(l.getName()); Document dom = getAsDOM( String.format( "/%s/%s/wms?request=getcapabilities", r.getStore().getWorkspace().getName(), l.getName())); XMLAssert.assertXpathExists( "//wms:Layer[wms:Name = '" + m.getName() + "']/wms:Dimension[@name = 'time']", dom); }