package org.openautonomousconnection.luascript.hosts; import java.util.Objects; import java.util.Optional; /** * Container for host-side services exposed to Lua. * *

All services are optional to allow different embedding scenarios.

*/ public interface HostServices { /** * Returns an optional UI host. * * @return ui host */ Optional ui(); /** * Returns an optional DOM host. * * @return dom host */ Optional dom(); /** * Returns an optional event host. * * @return event host */ Optional events(); /** * Returns an optional resource host. * * @return resource host */ Optional resources(); /** * Returns an optional console host. * * @return console host */ Optional console(); /** * Simple immutable implementation. */ final class Default implements HostServices { private final UiHost ui; private final DomHost dom; private final EventHost events; private final ResourceHost resources; private final ConsoleHost console; /** * Creates a HostServices container. * * @param ui ui host * @param dom dom host * @param events event host * @param resources resource host * @param console console host */ public Default(UiHost ui, DomHost dom, EventHost events, ResourceHost resources, ConsoleHost console) { this.ui = ui; this.dom = dom; this.events = events; this.resources = resources; this.console = console; } @Override public Optional ui() { return Optional.ofNullable(ui); } @Override public Optional dom() { return Optional.ofNullable(dom); } @Override public Optional events() { return Optional.ofNullable(events); } @Override public Optional resources() { return Optional.ofNullable(resources); } @Override public Optional console() { return Optional.ofNullable(console); } } /** * Stdout-based console host. */ final class StdoutConsole implements ConsoleHost { private final String prefix; /** * Creates a new stdout console with a prefix. * * @param prefix prefix (may be empty) */ public StdoutConsole(String prefix) { this.prefix = Objects.requireNonNull(prefix, "prefix"); } @Override public void info(String message) { System.out.println(prefix + "[info] " + safe(message)); } @Override public void log(String message) { System.out.println(prefix + "[log] " + safe(message)); } @Override public void warn(String message) { System.out.println(prefix + "[warn] " + safe(message)); } @Override public void error(String message) { System.err.println(prefix + "[error] " + safe(message)); } @Override public void exception(String message) { System.err.println(prefix + "[exception] " + safe(message)); } private static String safe(String s) { return s == null ? "" : s; } } }