public Mosaic(File file) { super(file, false); setTimeMode(TimeMode.NONE); }
Collection<Granule> granules = mosaic.granules(); if (granules.isEmpty()) { LOGGER.warning("No granules in mosaic, nothing to write"); typeBuilder.setName(mosaic.getName()); typeBuilder.setCRS(envelope.getCoordinateReferenceSystem()); typeBuilder.add("the_geom", Polygon.class); typeBuilder.add("location", String.class); if (mosaic.getTimeMode() != TimeMode.NONE) { typeBuilder.add("time", Date.class); File indexerFile = new File(mosaic.getFile(), "indexer.properties"); Properties indexer = new Properties(); indexer.put(Utils.Prop.NAME, mosaic.getName()); indexer.put(Utils.Prop.INDEX_NAME, mosaic.getName()); indexer.put(Utils.Prop.USE_EXISTING_SCHEMA, "true"); FileOutputStream ifos = null; DirectoryDataStore dir = new DirectoryDataStore( mosaic.getFile(), new ShapefileDataStoreFactory.ShpFileStoreFactory( shpFactory, new HashMap())); dir.getFeatureWriterAppend(mosaic.getName(), Transaction.AUTO_COMMIT); for (Granule g : mosaic.granules()) { if (g.getEnvelope() == 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); }
@Test public void testTimeMosaicAuto() throws Exception { Mosaic m = new Mosaic(unpack("mosaic/bm_time.zip")); m.setTimeMode(TimeMode.AUTO); 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); }
@Override public boolean accept(File dir, String name) { if ("sample_image".equalsIgnoreCase(name)) { return true; } if (!mosaic.getName().equalsIgnoreCase(FilenameUtils.getBaseName(name))) { return false; } String ext = FilenameUtils.getExtension(name); ShpFileType shpFileType = null; if (ext != null) { try { shpFileType = ShpFileType.valueOf(ext.toUpperCase()); } catch (IllegalArgumentException iae) { // the extension is not matching } } return "properties".equalsIgnoreCase(ext) || shpFileType != null; } })) {
public void testMosaicAuxillaryFiles() throws Exception { File unpack = ImporterTestUtils.unpack("mosaic/bm.zip"); // all types of junk! String[] aux = new String[] {"aux", "rrd", "xml", "tif.aux.xml", "tfw"}; File[] tifs = unpack.listFiles(); for (int i = 0; i < tifs.length; i++) { File file = tifs[i]; for (int j = 0; j < aux.length; j++) { new File(unpack, file.getName().replace("tif", aux[j])).createNewFile(); } } Mosaic m = new Mosaic(unpack); m.prepare(); assertEquals(4, m.getFiles().size()); for (int i = 0; i < m.getFiles().size(); i++) { assertEquals("GeoTIFF", m.getFiles().get(1).getFormat().getName()); } // make sure the junk was actually picked up for (FileData f : m.getFiles()) { assertEquals(aux.length, ((SpatialFile) f).getSuppFiles().size()); } }
@Override public List<ImportTask> list(ImportData data, Catalog catalog, ProgressMonitor monitor) throws IOException { List<ImportTask> tasks = super.list(data, catalog, monitor); Mosaic m = (Mosaic) data; if (m.getTimeMode() != TimeMode.NONE) { //set up the time dimension object for (ImportTask task : tasks) { DimensionInfo dim = new DimensionInfoImpl(); dim.setEnabled(true); dim.setAttribute("time"); dim.setPresentation(DimensionPresentation.LIST); dim.setUnits("ISO8601"); //TODO: is there an enumeration for this? ResourceInfo r = task.getLayer().getResource(); r.getMetadata().put(ResourceInfo.TIME, dim); } } return tasks; } }
public void delete() throws IOException { for (File f : mosaic.getFile().listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) {
@Test public void testSimpleMosaic() throws Exception { File dir = unpack("mosaic/bm.zip"); ImportContext context = importer.createContext(new Mosaic(dir)); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertTrue(task.getData() instanceof Mosaic); assertTrue(task.getData().getFormat() instanceof MosaicFormat); importer.run(context); runChecks(dir.getName()); }
Collection<Granule> granules = mosaic.granules(); if (granules.isEmpty()) { LOGGER.warning("No granules in mosaic, nothing to write"); typeBuilder.setName(mosaic.getName()); typeBuilder.setCRS(envelope.getCoordinateReferenceSystem()); typeBuilder.add("the_geom", Polygon.class); typeBuilder.add("location", String.class); if (mosaic.getTimeMode() != TimeMode.NONE) { typeBuilder.add("time", Date.class); DirectoryDataStore dir = new DirectoryDataStore(mosaic.getFile(), new ShapefileDataStoreFactory.ShpFileStoreFactory(shpFactory, new HashMap())); dir.getFeatureWriterAppend(mosaic.getName(), Transaction.AUTO_COMMIT); for (Granule g : mosaic.granules()) { 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()); props.setProperty("Name", mosaic.getName()); props.setProperty("Levels", String.format("%f,%f", first.getEnvelope().getWidth()/width, first.getEnvelope().getHeight()/height));
@Override public boolean accept(File dir, String name) { if ("sample_image".equalsIgnoreCase(name)) { return true; } if (!mosaic.getName() .equalsIgnoreCase( FilenameUtils.getBaseName(name))) { return false; } String ext = FilenameUtils.getExtension(name); ShpFileType shpFileType = null; if (ext != null) { try { shpFileType = ShpFileType.valueOf(ext.toUpperCase()); } catch (IllegalArgumentException iae) { // the extension is not matching } } return "properties".equalsIgnoreCase(ext) || shpFileType != null; } })) {
@Override public List<ImportTask> list(ImportData data, Catalog catalog, ProgressMonitor monitor) throws IOException { List<ImportTask> tasks = super.list(data, catalog, monitor); Mosaic m = (Mosaic) data; if (m.getTimeMode() != TimeMode.NONE) { // set up the time dimension object for (ImportTask task : tasks) { DimensionInfo dim = new DimensionInfoImpl(); dim.setEnabled(true); dim.setAttribute("time"); dim.setPresentation(DimensionPresentation.LIST); dim.setUnits("ISO8601"); // TODO: is there an enumeration for this? ResourceInfo r = task.getLayer().getResource(); r.getMetadata().put(ResourceInfo.TIME, dim); } } return tasks; } }
public void delete() throws IOException { for (File f : mosaic.getFile() .listFiles( new FilenameFilter() {
public Mosaic(File file) { super(file, false); setTimeMode(TimeMode.NONE); }