/** * */ package xapi.components.api; import java.util.Iterator; import elemental.dom.Element; /** * This class is designed to transform an Iterable of {@link Element} into an Iterable of a WebComponent type. * It is, in essence, simply performing an unsafe cast for you. * <p> * Recommend usage is to use element.querySelector("my-web-component-name") to get a NodeList of elements, * transformed into an Iterable<Element> via ElementIterable in the xapi-elemental module. From there, * you can use this wrapper to transform your elements into web components. * * @author James X. Nelson (james@wetheinter.net, @james) * */ public class WebComponentIterable <W extends IsWebComponent<?>> implements Iterable<W>{ public static <W extends IsWebComponent<?>> Iterable<W> asWebComponents(final Iterable<Element> iter) { return new WebComponentIterable<W>(iter); } private final class Itr implements Iterator<W> { private final Iterator<Element> itr; public Itr(final Iterator<Element> iterator) { this.itr = iterator; } @Override public boolean hasNext() { return itr.hasNext(); } @Override @SuppressWarnings("unchecked") public W next() { return (W)itr.next(); } } private final Iterable<Element> iter; public WebComponentIterable(final Iterable<Element> source) { this.iter = source; } @Override public Iterator<W> iterator() { return new Itr(iter.iterator()); } }