package org.openautonomousconnection.luascript.hosts; import javafx.scene.web.WebEngine; import org.openautonomousconnection.luascript.fx.FxDomHost; import org.openautonomousconnection.luascript.fx.FxEventHost; import org.openautonomousconnection.luascript.fx.FxUiHost; import org.openautonomousconnection.luascript.fx.FxWebViewResourceHost; import org.openautonomousconnection.luascript.runtime.LuaRuntime; import java.util.Objects; import java.util.Optional; /** * Service container holding optional host capabilities. * *
This avoids one huge "bridge" interface.
*/ public final class HostServices { private final ConsoleHost console; private final DomHost dom; private final EventHost events; private final ResourceHost resources; private final UiHost ui; private HostServices(Builder b) { this.console = b.console; this.ui = b.ui; this.dom = b.dom; this.events = b.events; this.resources = b.resources; } /** * Builds a JavaFX WebView preset of HostServices (DOM + events + resources + UI). * *Important: This method creates the {@link EventHost} using the provided {@link LuaRuntime}'s * {@link org.openautonomousconnection.luascript.runtime.LuaEventRouter}. Therefore, the runtime must already * be constructed before calling this method.
* *Note: You should call {@link FxDomHost#ensureAllElementsHaveId()} after the WebEngine finished loading.
* * @param engine JavaFX WebEngine * @param runtime Lua runtime used for event routing * @param console optional console host (may be null) * @return HostServices preset for JavaFX WebView */ public static HostServices fxPreset(WebEngine engine, LuaRuntime runtime, ConsoleHost console) { Objects.requireNonNull(engine, "engine"); Objects.requireNonNull(runtime, "runtime"); FxDomHost dom = new FxDomHost(engine); FxWebViewResourceHost resources = new FxWebViewResourceHost(engine); FxUiHost ui = new FxUiHost(engine, dom); FxEventHost events = new FxEventHost(dom, runtime.eventRouter()); Builder b = builder().dom(dom).events(events).resources(resources).ui(ui); if (console != null) { b.console(console); } return b.build(); } /** * @return builder */ public static Builder builder() { return new Builder(); } /** * @return optional DomHost capability */ public Optional