@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 boolean apply(Granule input) { return input.getEnvelope() != null && input.getEnvelope().getCoordinateReferenceSystem() != 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; } }
@Override protected SpatialFile newSpatialFile(File f, DataFormat format) { if (format instanceof GridFormat) { Granule g = new Granule(super.newSpatialFile(f, format)); //process the granule try { AbstractGridCoverage2DReader r = ((GridFormat)format).gridReader(g); try { //get the envelope GridCoverage2D cov = r.read(null); g.setEnvelope(cov.getEnvelope2D()); g.setGrid(cov.getGridGeometry()); cov.dispose(false); //compute time stamp g.setTimestamp(timeHandler.computeTimestamp(g)); return g; } finally { if (r != null) { r.dispose(); } } } catch (Exception e) { LOGGER.log(Level.WARNING, "Could not read file " + f + ", unable to get coverage info"); } } return super.newSpatialFile(f, format); }
Envelope2D envelope = new Envelope2D(first.getEnvelope()); if (g.getEnvelope() == null) { LOGGER.warning("Skipping " + g.getFile().getAbsolutePath() + ", no envelope"); f.setDefaultGeometry(JTS.toGeometry((BoundingBox)g.getEnvelope())); f.setAttribute("location", g.getFile().getName()); if (mosaic.getTimeMode() != TimeMode.NONE) { f.setAttribute("time", g.getTimestamp()); envelope.include(g.getEnvelope()); double width = first.getGrid().getGridRange2D().getWidth(); double height = first.getGrid().getGridRange2D().getHeight(); props.setProperty("Levels", String.format("%f,%f", first.getEnvelope().getWidth()/width, first.getEnvelope().getHeight()/height)); props.setProperty("LevelsNum", "1"); props.setProperty("LocationAttribute", "location");
Envelope2D envelope = new Envelope2D(first.getEnvelope()); if (g.getEnvelope() == null) { LOGGER.warning( "Skipping " + g.getFile().getAbsolutePath() + ", no envelope"); f.setDefaultGeometry(JTS.toGeometry((BoundingBox) g.getEnvelope())); f.setAttribute("location", g.getFile().getName()); if (mosaic.getTimeMode() != TimeMode.NONE) { f.setAttribute("time", g.getTimestamp()); envelope.include(g.getEnvelope());
@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()); } }
@Override protected SpatialFile newSpatialFile(File f, DataFormat format) { if (format instanceof GridFormat) { Granule g = new Granule(super.newSpatialFile(f, format)); // process the granule try { AbstractGridCoverage2DReader r = ((GridFormat) format).gridReader(g); try { // get the envelope GridCoverage2D cov = r.read(null); g.setEnvelope(cov.getEnvelope2D()); g.setGrid(cov.getGridGeometry()); cov.dispose(false); // compute time stamp g.setTimestamp(timeHandler.computeTimestamp(g)); return g; } finally { if (r != null) { r.dispose(); } } } catch (Exception e) { LOGGER.log( Level.WARNING, "Could not read file " + f + ", unable to get coverage info"); } } return super.newSpatialFile(f, format); }
@Override public Date computeTimestamp(Granule g) { switch(TimeMode.this) { case AUTO: return Dates.matchAndParse(g.getFile().getName()); case MANUAL: return g.getTimestamp(); } return null; } };
Preconditions.checkNotNull(timeFormat); String filename = g.getFile().getName(); Matcher m = filenamePattern.matcher(g.getFile().getName()); if (!m.matches() || m.groupCount() != 2) { + " with pattern " + getFilenameRegex(); g.setMessage(msg); + ": " + e.getLocalizedMessage(); g.setMessage(msg);
@Override public boolean apply(Granule input) { return input.getEnvelope() != null && input.getEnvelope().getCoordinateReferenceSystem() != null; } });