/** * Read a map file stream and initialize the registry. * * @param inputStream the input stream * @param logFileName the name of the log file used for user feedback * @param registry string registry */ private void readMapFile(final InputStream inputStream, final String mapFileName, final ReaderRegistry<String> registry) { final Class<? extends AbstractDecompressionFilter> decompressionClass = FSReaderUtil.findDecompressionFilterByExtension(mapFileName); this.logger.debug("Reading map file {}", mapFileName); /** detecting correct map file deserializer. */ final Class<? extends AbstractMapDeserializer> deserializerClass; if (decompressionClass.equals(NoneDecompressionFilter.class)) { deserializerClass = FSReaderUtil.findMapDeserializer(mapFileName); } else { final String baseName = mapFileName.substring(0, mapFileName.lastIndexOf('.') - 1); deserializerClass = FSReaderUtil.findMapDeserializer(baseName); } try { final AbstractDecompressionFilter decompressionFilter = decompressionClass.getConstructor(Configuration.class).newInstance(this.configuration); final AbstractMapDeserializer deserializer = deserializerClass.getConstructor(Configuration.class).newInstance(this.configuration); deserializer.processDataStream(decompressionFilter.chainInputStream(inputStream), registry, mapFileName); } catch (final IOException ex) { this.logger.error("Reading map file {} failed.", mapFileName); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { this.logger.error("Cannot instantiate filter {} for decompression.", decompressionClass.getName()); } }