GDALParser extends AbstractParser { @Override public void parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException { if (!ExternalParser.check("gdalinfo")) { return; } TemporaryResources tmp = new TemporaryResources(); TikaInputStream tis = TikaInputStream.get(stream, tmp); String runCommand = processCommand(tis); String output = execCommand(new String[]{runCommand}); extractMetFromOutput(output, metadata); applyPatternsToOutput(output, metadata, getPatterns()); processOutput(handler, metadata, output); } GDALParser(); void setCommand(String command); String getCommand(); String processCommand(InputStream stream); @Override Set<MediaType> getSupportedTypes(ParseContext context); @Override void parse(InputStream stream, ContentHandler handler,
                      Metadata metadata, ParseContext context);  }
@Test public void testParseBasicInfo() { assumeTrue(canRun()); final String expectedDriver = "netCDF/Network Common Data Format"; final String expectedUpperRight = "512.0, 0.0"; final String expectedUpperLeft = "0.0, 0.0"; final String expectedLowerLeft = "0.0, 512.0"; final String expectedLowerRight = "512.0, 512.0"; final String expectedCoordinateSystem = "`'"; final String expectedSize = "512, 512"; GDALParser parser = new GDALParser(); InputStream stream = TestGDALParser.class .getResourceAsStream("/test-documents/sresa1b_ncar_ccsm3_0_run1_200001.nc"); Metadata met = new Metadata(); BodyContentHandler handler = new BodyContentHandler(); try { parser.parse(stream, handler, met, new ParseContext()); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } assertNotNull(met); assertNotNull(met.get("Driver")); assertEquals(expectedDriver, met.get("Driver")); assumeTrue(met.get("Files") != null); assertNotNull(met.get("Coordinate System")); assertEquals(expectedCoordinateSystem, met.get("Coordinate System")); assertNotNull(met.get("Size")); assertEquals(expectedSize, met.get("Size")); assertNotNull(met.get("Upper Right")); assertEquals(expectedUpperRight, met.get("Upper Right")); assertNotNull(met.get("Upper Left")); assertEquals(expectedUpperLeft, met.get("Upper Left")); assertNotNull(met.get("Upper Right")); assertEquals(expectedLowerRight, met.get("Lower Right")); assertNotNull(met.get("Upper Right")); assertEquals(expectedLowerLeft, met.get("Lower Left")); }
@Test public void testParseMetadata() { assumeTrue(canRun()); final String expectedNcInst = "NCAR (National Center for Atmospheric Research, Boulder, CO, USA)"; final String expectedModelNameEnglish = "NCAR CCSM"; final String expectedProgramId = "Source file unknown Version unknown Date unknown"; final String expectedProjectId = "IPCC Fourth Assessment"; final String expectedRealization = "1"; final String expectedTitle = "model output prepared for IPCC AR4"; final String expectedSub8Name = "\":ua"; final String expectedSub8Desc = "[1x17x128x256] eastward_wind (32-bit floating-point)"; GDALParser parser = new GDALParser(); InputStream stream = TestGDALParser.class .getResourceAsStream("/test-documents/sresa1b_ncar_ccsm3_0_run1_200001.nc"); Metadata met = new Metadata(); BodyContentHandler handler = new BodyContentHandler(); try { parser.parse(stream, handler, met, new ParseContext()); assertNotNull(met); assertNotNull(met.get("NC_GLOBAL#institution")); assertEquals(expectedNcInst, met.get("NC_GLOBAL#institution")); assertNotNull(met.get("NC_GLOBAL#model_name_english")); assertEquals(expectedModelNameEnglish, met.get("NC_GLOBAL#model_name_english")); assertNotNull(met.get("NC_GLOBAL#prg_ID")); assertEquals(expectedProgramId, met.get("NC_GLOBAL#prg_ID")); assertNotNull(met.get("NC_GLOBAL#prg_ID")); assertEquals(expectedProgramId, met.get("NC_GLOBAL#prg_ID")); assertNotNull(met.get("NC_GLOBAL#project_id")); assertEquals(expectedProjectId, met.get("NC_GLOBAL#project_id")); assertNotNull(met.get("NC_GLOBAL#realization")); assertEquals(expectedRealization, met.get("NC_GLOBAL#realization")); assertNotNull(met.get("NC_GLOBAL#title")); assertEquals(expectedTitle, met.get("NC_GLOBAL#title")); assertNotNull(met.get("SUBDATASET_8_NAME")); assertTrue(met.get("SUBDATASET_8_NAME").endsWith(expectedSub8Name)); assertNotNull(met.get("SUBDATASET_8_DESC")); assertEquals(expectedSub8Desc, met.get("SUBDATASET_8_DESC")); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } }
@Test public void testParseFITS() { String fitsFilename = "/test-documents/WFPC2u5780205r_c0fx.fits"; assumeTrue(canRun()); String[] fitsCommand = {"gdalinfo", TestGDALParser.class.getResource(fitsFilename).getPath()}; assumeTrue(ExternalParser.check(fitsCommand, 1)); String expectedAllgMin = "-7.319537E1"; String expectedAtodcorr = "COMPLETE"; String expectedAtodfile = "uref$dbu1405iu.r1h"; String expectedCalVersion = " "; String expectedCalibDef = "1466"; GDALParser parser = new GDALParser(); InputStream stream = TestGDALParser.class .getResourceAsStream(fitsFilename); Metadata met = new Metadata(); BodyContentHandler handler = new BodyContentHandler(); try { parser.parse(stream, handler, met, new ParseContext()); assertNotNull(met); assertNotNull(met.get("ALLG-MIN")); assertEquals(expectedAllgMin, met.get("ALLG-MIN")); assertNotNull(met.get("ATODCORR")); assertEquals(expectedAtodcorr, met.get("ATODCORR")); assertNotNull(met.get("ATODFILE")); assertEquals(expectedAtodfile, met.get("ATODFILE")); assertNotNull(met.get("CAL_VER")); assertEquals(expectedCalVersion, met.get("CAL_VER")); assertNotNull(met.get("CALIBDEF")); assertEquals(expectedCalibDef, met.get("CALIBDEF")); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } }