FormatNameFilterIterator(Iterator<T> iter, String formatName) { this.iter = iter; this.formatName = formatName; advance(); }
private static ImageReaderSpi getImageReaderSpi(ImageReaderParam param) { Iterator<ImageReaderSpi> iter = new FormatNameFilterIterator<ImageReaderSpi>( ServiceLoader.load(ImageReaderSpi.class).iterator(), param.formatName); if (!iter.hasNext()) throw new RuntimeException("No Reader for format: " + param.formatName + " registered"); ImageReaderSpi spi = iter.next(); if (param.className != null) { while (!param.className.equals(spi.getPluginClassName())) { if (iter.hasNext()) spi = iter.next(); else { LOG.warn("No preferred Reader {} for format: {} - use {}", param.className, param.formatName, spi.getPluginClassName()); break; } } } return spi; } }
private void advance() { while (iter.hasNext()) { T elt = iter.next(); if (contains(elt.getFormatNames(), formatName)) { next = elt; return; } } next = null; }
private static ImageWriterSpi getImageWriterSpi(ImageWriterParam param) { Iterator<ImageWriterSpi> iter = new FormatNameFilterIterator<ImageWriterSpi>( ServiceLoader.load(ImageWriterSpi.class).iterator(), param.formatName); if (!iter.hasNext()) throw new RuntimeException("No Writer for format: " + param.formatName + " registered"); ImageWriterSpi spi = iter.next(); if (param.className != null) { while (!param.className.equals(spi.getPluginClassName())) { if (iter.hasNext()) spi = iter.next(); else { LOG.warn("No preferred Writer {} for format: {} - use {}", param.className, param.formatName, spi.getPluginClassName()); break; } } } return spi; }
@Override public T next() { if (next == null) { throw new NoSuchElementException(); } T o = next; advance(); return o; }