diff --git a/lc-isf-tc/src/main/java/lc/isf/app/AppBinder.java b/lc-isf-tc/src/main/java/lc/isf/app/AppBinder.java new file mode 100644 index 0000000000000000000000000000000000000000..b0b28daffdad70d3accb74f47b4a891a1de493fa --- /dev/null +++ b/lc-isf-tc/src/main/java/lc/isf/app/AppBinder.java @@ -0,0 +1,42 @@ +package lc.isf.app; + +import lc.isf.screen.ScreenFactory; + +import java.util.HashMap; +import java.util.Map; + +/** + * This class contains all applications present within the system. Each application is identified with + * a unique stringname. + * + * @author Alex Leigh + * @since 1.0 + */ +public class AppBinder { + private final HashMap apps = new HashMap<>(); + public static final String APP_SYS = "sys"; + + public AppBinder() { + apps.put(APP_SYS, new ScreenApp() { + @Override + public CallReturn call(String func, Map values) { + return new MessageReturn("Test 1-2-3"); + } + + @Override + public ScreenFactory getScreenFactory() { + return new ScreenFactory(); + } + }); + } + + /** + * Return the given application to the caller, or null if no application by that name exists. + * + * @param name The application name. + * @return The application. + */ + public ScreenApp getApplication(String name) { + return apps.get(name); + } +} diff --git a/lc-isf-tc/src/main/java/lc/isf/tc/InteractiveSession.java b/lc-isf-tc/src/main/java/lc/isf/tc/InteractiveSession.java index 8358d83470d1a868fe7c6b27ecd8cca087daa638..8a0bad79baa38be9b0055337ad9f92a8e148ec68 100644 --- a/lc-isf-tc/src/main/java/lc/isf/tc/InteractiveSession.java +++ b/lc-isf-tc/src/main/java/lc/isf/tc/InteractiveSession.java @@ -1,6 +1,7 @@ package lc.isf.tc; import com.googlecode.lanterna.terminal.Terminal; +import lc.isf.app.AppBinder; import lc.mecha.log.MechaLogger; import lc.mecha.log.MechaLoggerFactory; @@ -18,8 +19,11 @@ public class InteractiveSession implements Runnable { private static final MechaLogger logger = MechaLoggerFactory.getLogger(InteractiveSession.class); private final Terminal terminal; - public InteractiveSession(Terminal terminal) { + private final AppBinder binder; + + public InteractiveSession(Terminal terminal, AppBinder binder) { this.terminal = terminal; + this.binder = binder; } @Override @@ -27,7 +31,7 @@ public class InteractiveSession implements Runnable { try { //noinspection InfiniteLoopStatement while (true) { - ScreenController sc = new ScreenController(); + ScreenController sc = new ScreenController(binder.getApplication(AppBinder.APP_SYS)); sc.handle(terminal); logger.info("Screen finished. Restarting."); } diff --git a/lc-isf-tc/src/main/java/lc/isf/tc/ScreenController.java b/lc-isf-tc/src/main/java/lc/isf/tc/ScreenController.java index d2efa41e356e8cd86dbce45d9f12aab268c908df..5066f09a5a283339c3b60858710b06ef4ee379c6 100644 --- a/lc-isf-tc/src/main/java/lc/isf/tc/ScreenController.java +++ b/lc-isf-tc/src/main/java/lc/isf/tc/ScreenController.java @@ -9,7 +9,6 @@ import com.googlecode.lanterna.terminal.Terminal; import lc.isf.app.CallReturn; import lc.isf.app.MessageReturn; import lc.isf.app.ScreenApp; -import lc.isf.screen.ScreenFactory; import lc.isf.screen.ScreenPackage; import lc.isf.widget.Widget; import lc.mecha.lang.StringValue; @@ -42,18 +41,8 @@ public class ScreenController { private MultiWindowTextGUI textGUI; private ArrayList references; - public ScreenController() throws IOException { - app = new ScreenApp() { - @Override - public CallReturn call(String func, Map values) { - return new MessageReturn("Test 1-2-3"); - } - - @Override - public ScreenFactory getScreenFactory() { - return new ScreenFactory(); - } - }; + public ScreenController(ScreenApp app) throws IOException { + this.app = app; pkg = app.getScreenFactory().makeScreenPkg("logon", this); } diff --git a/lc-isf-tc/src/main/java/lc/isf/tc/TerminalControllerService.java b/lc-isf-tc/src/main/java/lc/isf/tc/TerminalControllerService.java index 319c077070abc67882428867f2d24170b634ed2b..b56e82245336e2b560612c844f708c20b31aad1b 100644 --- a/lc-isf-tc/src/main/java/lc/isf/tc/TerminalControllerService.java +++ b/lc-isf-tc/src/main/java/lc/isf/tc/TerminalControllerService.java @@ -2,6 +2,7 @@ package lc.isf.tc; import com.googlecode.lanterna.terminal.ansi.TelnetTerminal; import com.googlecode.lanterna.terminal.ansi.TelnetTerminalServer; +import lc.isf.app.AppBinder; import lc.mecha.log.MechaLogger; import lc.mecha.log.MechaLoggerFactory; @@ -24,6 +25,7 @@ public class TerminalControllerService { public void run() { try { + final AppBinder binder = new AppBinder(); System.err.print("Waiting for incoming telnet connection on port " + telnetPort + " ... "); System.err.flush(); TelnetTerminalServer tts = new TelnetTerminalServer(telnetPort); @@ -31,7 +33,7 @@ public class TerminalControllerService { try { TelnetTerminal rawTerminal = tts.acceptConnection(); System.err.println("Ok, got it!"); - new Thread(new InteractiveSession(rawTerminal)).start(); + new Thread(new InteractiveSession(rawTerminal, binder)).start(); } catch (Exception e) { e.printStackTrace(); }