@Override
    public void parse(InputStream stream, ContentHandler handler, Metadata metadata,
                      ParseContext context) throws IOException, SAXException, TikaException {

        if (!ExternalParser.check("gdalinfo")) {
            return;
        }

        // first set up and run GDAL
        // process the command
        TemporaryResources tmp = new TemporaryResources();
        TikaInputStream tis = TikaInputStream.get(stream, tmp, metadata);

        String runCommand = processCommand(tis);
        String output = execCommand(new String[]{runCommand});

        // now extract the actual metadata params
        // from the GDAL output in the content stream
        // to do this, we need to literally process the output
        // from the invoked command b/c we can't read metadata and
        // output text from the handler in ExternalParser
        // at the same time, so for now, we can't use the
        // ExternalParser to do this and I've had to bring some of
        // that functionality directly into this class
        // TODO: investigate a way to do both using ExternalParser

        extractMetFromOutput(output, metadata);
        applyPatternsToOutput(output, metadata, getPatterns());

        // make the content handler and provide output there
        // now that we have metadata
        processOutput(handler, metadata, output);
    }
@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);
        //recent version of gdalinfo doesn't include "Coordinate System":
        // GDAL 3.7.1, released 2023/07/06
        //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"));

    }