Files
LuaScript/src/main/java/org/openautonomousconnection/luascript/hosts/HostServices.java

122 lines
2.9 KiB
Java
Raw Normal View History

2026-01-16 21:47:04 +01:00
package org.openautonomousconnection.luascript.hosts;
import java.util.Objects;
import java.util.Optional;
/**
* Service container holding optional host capabilities.
*
* <p>This avoids one huge "bridge" interface.</p>
*/
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;
}
/**
* @return optional DomHost capability
*/
public Optional<DomHost> dom() {
return Optional.ofNullable(dom);
}
/**
* @return optional EventHost capability
*/
public Optional<EventHost> events() {
return Optional.ofNullable(events);
}
/**
* @return optional ResourceHost capability
*/
public Optional<ResourceHost> resources() {
return Optional.ofNullable(resources);
}
/** @return optional console host */
public Optional<ConsoleHost> console() {
return Optional.ofNullable(console);
}
/** @return optional ui host */
public Optional<UiHost> ui() {
return Optional.ofNullable(ui);
}
/** @return builder */
public static Builder builder() {
return new Builder();
}
/**
* Builder for HostServices.
*/
public static final class Builder {
private ConsoleHost console;
private DomHost dom;
private EventHost events;
private ResourceHost resources;
private UiHost ui;
public Builder console(ConsoleHost console) {
this.console = Objects.requireNonNull(console, "console");
return this;
}
public Builder ui(UiHost ui) {
this.ui = Objects.requireNonNull(ui, "ui");
return this;
}
/**
* Provides dom capability.
*
* @param dom dom host
* @return this
*/
public Builder dom(DomHost dom) {
this.dom = Objects.requireNonNull(dom, "dom");
return this;
}
/**
* Provides event subscription capability.
*
* @param events event host
* @return this
*/
public Builder events(EventHost events) {
this.events = Objects.requireNonNull(events, "events");
return this;
}
/**
* Provides resource loading capability.
*
* @param resources resource host
* @return this
*/
public Builder resources(ResourceHost resources) {
this.resources = Objects.requireNonNull(resources, "resources");
return this;
}
public HostServices build() {
return new HostServices(this);
}
}
}