private int parseRevision(final String name, final String revision) { try { return Integer.parseInt(revision); } catch (final NumberFormatException e) { throw new ImporterException( "Error parsing revision '" + revision + "' for item '" + name + "'.", e); } }
private int parseRevision(final String name, final String revision) { try { return Integer.parseInt(revision); } catch (final NumberFormatException e) { throw new ImporterException( "Error parsing revision '" + revision + "' for item '" + name + "'.", e); } }
@Override public BufferedReader createReader() throws IOException { final InputStream inputStream = this.zip.getInputStream(this.entry); if (inputStream == null) { throw new ImporterException( "Entry '" + this.entry + "' does not exist in zip file " + this.zip.getName()); } return new BufferedReader(new InputStreamReader(inputStream, this.charset)); }
@Override public BufferedReader createReader() throws IOException { final InputStream inputStream = this.zip.getInputStream(this.entry); if (inputStream == null) { throw new ImporterException( "Entry '" + this.entry + "' does not exist in zip file " + this.zip.getName()); } return new BufferedReader(new InputStreamReader(inputStream, this.charset)); }
/** * Finds a matching {@link ImporterFactory} that can handle the given * {@link Path}. If no or more than one {@link ImporterFactory} is found, * this throws an {@link ImporterException}. * * @param file * the file for which to get a {@link ImporterFactory}. * @return a matching {@link ImporterFactory} that can handle the given * {@link Path} * @throws ImporterException * when no or more than one {@link ImporterFactory} is found. */ public ImporterFactory getImporterFactory(final InputFile file) { final List<ImporterFactory> matchingImporters = getMatchingFactories(file); switch (matchingImporters.size()) { case 0: throw new ImporterException("Found no matching importer for file '" + file + "'"); case 1: return matchingImporters.get(0); default: throw new ImporterException( "Found more than one matching importer for file '" + file + "'"); } }
private void processLine(final LineConsumer consumer, final int currentLineNumber, final String line) { try { consumer.readLine(currentLineNumber, line); } catch (final Exception e) { throw new ImporterException("Error processing line " + this.file.getPath() + ":" + currentLineNumber + " (" + line + "): " + e.getMessage(), e); } }
public void readLines(final LineConsumer consumer) { int currentLineNumber = 0; try (final LineNumberReader reader = new LineNumberReader(this.file.createReader())) { String line; while ((line = reader.readLine()) != null) { currentLineNumber = reader.getLineNumber(); processLine(consumer, currentLineNumber, line); } } catch (final IOException exception) { throw new ImporterException( "Error reading \"" + this.file + "\" at line " + currentLineNumber, exception); } }
public void readLines(final LineConsumer consumer) { int currentLineNumber = 0; try (final LineNumberReader reader = new LineNumberReader(this.file.createReader())) { String line; while ((line = reader.readLine()) != null) { currentLineNumber = reader.getLineNumber(); processLine(consumer, currentLineNumber, line); } } catch (final IOException exception) { throw new ImporterException( "Error reading \"" + this.file + "\" at line " + currentLineNumber, exception); } }
private void processLine(final LineConsumer consumer, final int currentLineNumber, final String line) { try { consumer.readLine(currentLineNumber, line); } catch (final Exception e) { throw new ImporterException("Error processing line " + this.file.getPath() + ":" + currentLineNumber + " (" + line + "): " + e.getMessage(), e); } }
@Override public void startElement(final TreeElement treeElement) { LOG.finest(() -> "Start element: " + treeElement); final Consumer<TreeElement> consumer = this.startElementListeners.getOrDefault( treeElement.getElement().getName().getLocalPart(), this.defaultStartElementListener); if (consumer == null) { LOG.warning(() -> "No consumer for event " + treeElement); return; } try { consumer.accept(treeElement); } catch (final Exception e) { throw new ImporterException("Error handling " + treeElement + " with consumer " + consumer + ": " + e.getMessage(), e); } }
@Override public void startElement(final TreeElement treeElement) { LOG.finest(() -> "Start element: " + treeElement); final Consumer<TreeElement> consumer = this.startElementListeners.getOrDefault( treeElement.getElement().getName().getLocalPart(), this.defaultStartElementListener); if (consumer == null) { LOG.warning(() -> "No consumer for event " + treeElement); return; } try { consumer.accept(treeElement); } catch (final Exception e) { throw new ImporterException("Error handling " + treeElement + " with consumer " + consumer + ": " + e.getMessage(), e); } }
@Override public void runImport() { if (!this.file.isRealFile()) { throw new UnsupportedOperationException( "Importing a zip file from a stream is not supported"); } try (ZipFile zip = new ZipFile(this.file.toPath().toFile(), StandardCharsets.UTF_8)) { zip.stream() // .filter(entry -> !entry.isDirectory()) // .map(entry -> createInput(zip, entry)) // .forEach(this.delegateImporter::importFile); } catch (final IOException e) { throw new ImporterException("Error reading \"" + this.file + "\"", e); } }
@Override public MultiFileImporter importRecursiveDir(final Path dir, final String glob) { final PathMatcher matcher = dir.getFileSystem().getPathMatcher("glob:" + glob); final AtomicInteger fileCount = new AtomicInteger(0); final int itemCountBefore = this.specItemBuilder.getItemCount(); try (Stream<Path> fileStream = Files.walk(dir)) { fileStream.filter(path -> !path.toFile().isDirectory()) // .filter(matcher::matches) // .map(path -> RealFileInput.forPath(path, DEFAULT_CHARSET)) .filter(this.factoryLoader::supportsFile) .map(file -> createImporter(file, this.specItemBuilder)).forEach(importer -> { importer.runImport(); fileCount.incrementAndGet(); }); } catch (final IOException e) { throw new ImporterException("Error walking directory " + dir, e); } final int itemCountImported = this.specItemBuilder.getItemCount() - itemCountBefore; LOG.fine(() -> "Imported " + fileCount + " files containing " + itemCountImported + " items from '" + dir + "'."); return this; }
@Override public void runImport() { if (!this.file.isRealFile()) { throw new UnsupportedOperationException( "Importing a zip file from a stream is not supported"); } try (ZipFile zip = new ZipFile(this.file.toPath().toFile(), StandardCharsets.UTF_8)) { zip.stream() // .filter(entry -> !entry.isDirectory()) // .map(entry -> createInput(zip, entry)) // .forEach(this.delegateImporter::importFile); } catch (final IOException e) { throw new ImporterException("Error reading \"" + this.file + "\"", e); } }
/** * Create an importer that is able to read the given file. * * @param file * the file from which specification items are imported * @param listener * the listener to be informed about detected specification item * fragments * @return an {@link Importer} instance */ @Override public Importer createImporter(final InputFile file, final ImportEventListener listener) { if (!supportsFile(file)) { throw new ImporterException( "File '" + file + "' not supported for import. Supported file name patterns: " + this.supportedFilenamePatterns); } LOG.finest(() -> "Creating importer for file " + file); return () -> runImporter(file, listener); }
@Override public Importer createImporter(final InputFile path, final ImportEventListener listener) { if (!supportsFile(path)) { throw new ImporterException("File '" + path + "' cannot be imported because it does not match any supported file patterns: " + DEFAULT_FILE_REGEX + " and " + getPathConfigs().collect(toList())); } final Optional<PathConfig> config = findConfig(path); return TagImporter.create(config, path, listener); }
@Override public Importer createImporter(final InputFile path, final ImportEventListener listener) { if (!supportsFile(path)) { throw new ImporterException("File '" + path + "' cannot be imported because it does not match any supported file patterns: " + DEFAULT_FILE_REGEX + " and " + getPathConfigs().collect(toList())); } final Optional<PathConfig> config = findConfig(path); return TagImporter.create(config, path, listener); }
@Override public void runImport() { LOG.fine(() -> "Starting import of file " + this.file); String line; this.lineNumber = 0; try (BufferedReader reader = this.file.createReader()) { while ((line = reader.readLine()) != null) { ++this.lineNumber; this.stateMachine.step(line); } } catch (final IOException exception) { throw new ImporterException( "Error reading \"" + this.file.getPath() + "\" at line " + this.lineNumber, exception); } finishImport(); }
@Override public void runImport() { try (Reader reader = this.file.createReader()) { final XMLReader xmlReader = this.saxParserFactory.newSAXParser().getXMLReader(); xmlReader.setEntityResolver(new IgnoringEntityResolver()); final SpecDocumentHandlerBuilder config = new SpecDocumentHandlerBuilder(this.file, this.listener); final TreeContentHandler treeContentHandler = config.build(); new ContentHandlerAdapter(this.file.getPath(), xmlReader, new TreeBuildingContentHandler(treeContentHandler)).registerListener(); final InputSource input = new InputSource(reader); xmlReader.parse(input); } catch (SAXException | ParserConfigurationException | IOException exception) { throw new ImporterException("Error reading \"" + this.file + "\"", exception); } } }
@Override public void runImport() { try (Reader reader = this.file.createReader()) { final XMLReader xmlReader = this.saxParserFactory.newSAXParser().getXMLReader(); xmlReader.setEntityResolver(new IgnoringEntityResolver()); final SpecDocumentHandlerBuilder config = new SpecDocumentHandlerBuilder(this.file, this.listener); final TreeContentHandler treeContentHandler = config.build(); new ContentHandlerAdapter(this.file.getPath(), xmlReader, new TreeBuildingContentHandler(treeContentHandler)).registerListener(); final InputSource input = new InputSource(reader); xmlReader.parse(input); } catch (SAXException | ParserConfigurationException | IOException exception) { throw new ImporterException("Error reading \"" + this.file + "\"", exception); } } }