@Override public DecodeQualification getDecodeQualification(Object input) { String filename = new File(input.toString()).getName(); if (!isLandsatMSSFilename(filename) && !isLandsat4Filename(filename) && !isLandsat5Filename(filename) && !isLandsat7Filename(filename) && !isLandsat8Filename(filename) && !isLandsat5LegacyFilename(filename) && !isLandsat7LegacyFilename(filename)) { return DecodeQualification.UNABLE; } VirtualDir virtualDir; try { virtualDir = getInput(input); } catch (IOException e) { return DecodeQualification.UNABLE; } if (virtualDir == null) { return DecodeQualification.UNABLE; } String[] allFiles; try { allFiles = virtualDir.listAllFiles(); if (allFiles == null || allFiles.length == 0) { return DecodeQualification.UNABLE; } } catch (IOException e) { return DecodeQualification.UNABLE; } for (String filePath : allFiles) { try { if (isMetadataFilename(new File(filePath).getName())) { InputStream inputStream = virtualDir.getInputStream(filePath); if (isMetadataFile(inputStream)) { return DecodeQualification.INTENDED; } } } catch (IOException ignore) { // file is broken, but be tolerant here } } // didn't find the expected metadata file return DecodeQualification.UNABLE; }
static VirtualDir getInput(Object input) throws IOException { File inputFile = getFileInput(input); if (inputFile == null) { throw new IOException("Unknown input type."); } if (inputFile.isFile() && !isCompressedFile(inputFile)) { final File absoluteFile = inputFile.getAbsoluteFile(); inputFile = absoluteFile.getParentFile(); if (inputFile == null) { throw new IOException( "Unable to retrieve parent to file: " + absoluteFile.getAbsolutePath()); } } VirtualDir virtualDir = VirtualDir.create(inputFile); if (virtualDir == null) { virtualDir = new VirtualDirTgz(inputFile); } return virtualDir; }