package xapi.elemental.impl; import static xapi.elemental.X_Elemental.toElement; import javax.inject.Provider; import xapi.util.api.ConvertsValue; import xapi.util.impl.ImmutableProvider; import xapi.util.impl.LazyProvider; import elemental.dom.Element; public class LazyHtmlClone <E extends Element> implements Provider<E> { private final Provider<E> provider; @SuppressWarnings("unchecked" ) private ConvertsValue<E, E> converter = ConvertsValue.PASS_THRU; public LazyHtmlClone(String html) { provider = new LazyProvider<E>(() -> toElement(html)); } public LazyHtmlClone(Provider<String> html) { provider = new LazyProvider<E>(() -> { String val = html.get(); return val == null ? null : toElement(val); }); } protected E init(E element) { return converter.convert(element); } public LazyHtmlClone<E> setInitializer(ConvertsValue<E, E> initializer) { converter = initializer; return this; } @SuppressWarnings({ "rawtypes", "unchecked" } ) public LazyHtmlClone(Element e) { provider = new ImmutableProvider(e); } @SuppressWarnings({ "rawtypes", "unchecked" } ) public LazyHtmlClone(Element e, String backup) { provider = new LazyProvider(e, () -> toElement(backup)); } @Override @SuppressWarnings("unchecked") public E get() { return init((E)provider.get().cloneNode(true)); } }