@Override public CloseableIterator<String> readScannerLogs() { ensureInitialized(); File file = delegate.getFileStructure().analysisLog(); if (!file.exists()) { return CloseableIterator.emptyCloseableIterator(); } try { InputStreamReader reader = new InputStreamReader(FileUtils.openInputStream(file), UTF_8); return new LineReaderIterator(reader); } catch (IOException e) { throw new IllegalStateException("Fail to open file " + file, e); } }
@Override public boolean hasNext() { // Optimization to not call bufferNext() when already closed if (isClosed) { return false; } boolean hasNext = nextObject != null || bufferNext() != null; if (!hasNext) { close(); } return hasNext; }
@Test(expected = NoSuchElementException.class) public void emptyIterator_next_throws_NoSuchElementException() { CloseableIterator.emptyCloseableIterator().next(); }
@Override public O next() { if (!hasNext()) { throw new NoSuchElementException(); } O result = nextObject; nextObject = null; return result; }
private Duplication[] readDuplications(DefaultInputFile file, int expected) { assertThat(reader.readComponentDuplications(file.scannerId())).hasSize(expected); Duplication[] duplications = new Duplication[expected]; CloseableIterator<Duplication> dups = reader.readComponentDuplications(file.scannerId()); for (int i = 0; i < expected; i++) { duplications[i] = dups.next(); } dups.close(); return duplications; }
@Test public void emptyIterator_has_next_is_false() { assertThat(CloseableIterator.emptyCloseableIterator().hasNext()).isFalse(); }
@Override protected void doClose() { delegate.close(); } }
@Test public void insert_fails_with_IAE_if_data_is_fully_read() { CloseableIterator<String> iterator = scannerContextInputStreamOf("aa"); iterator.next(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Scanner context can not be empty"); underTest.insert(dbSession, SOME_UUID, iterator); }
@Override public CloseableIterator<ScannerReport.ContextProperty> readContextProperties() { return CloseableIterator.from(contextProperties.iterator()); }
private static <T> CloseableIterator<T> closeableIterator(@Nullable List<T> list) { return list == null ? CloseableIterator.emptyCloseableIterator() : CloseableIterator.from(list.iterator()); }
@Override public boolean hasNext() { if (delegate.hasNext()) { checkState(currentLine < numberOfLines, "Source of file '%s' has at least one more line than the expected number (%s)", file, numberOfLines); return true; } checkState((currentLine + 1) >= numberOfLines, "Source of file '%s' has less lines (%s) than the expected number (%s)", file, currentLine, numberOfLines); return currentLine < numberOfLines; }
@Test public void constructor_throws_IAE_when_ClosableIterator_has_already_been_read() { CloseableIterator<String> iterator = CloseableIterator.from(Arrays.asList("line1").iterator()); // read iterator to the end iterator.next(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("LogsIterator can't be empty or already read"); new LogsIteratorInputStream(iterator, UTF_8); }
@Override public void close() { for (CloseableIterator<?> reportIterator : closeables) { reportIterator.close(); } }
@Override public CloseableIterator<String> readScannerLogs() { if (scannerLogs == null) { throw new IllegalStateException("Scanner logs are missing"); } return CloseableIterator.from(scannerLogs.iterator()); }