/** * */ package logbook.scripting; import logbook.constants.AppConstants; import logbook.dto.QuestDto; import logbook.scripting.ScriptLoader.MethodInvoke; import logbook.scripting.ScriptLoader.TableScriptCollection; /** * @author Nekopanda * */ public class QuestProxy implements QuestListener { private class BodyMethod implements MethodInvoke { public QuestDto data; @Override public Object invoke(Object arg) { return ((QuestListener) arg).body(this.data); } } private TableScriptCollection script; private final BodyMethod bodyMethod = new BodyMethod(); private static QuestProxy instance = new QuestProxy(); public static QuestProxy get() { instance.script = ScriptLoader.getTableScript( AppConstants.QUESTTABLE_PREFIX, QuestListener.class); return instance; } @Override public String[] header() { return this.script.header(); } @Override public void begin() { this.script.invoke(new MethodInvoke() { @Override public Object invoke(Object arg) { ((QuestListener) arg).begin(); return null; } }); } @Override public Comparable[] body(QuestDto data) { this.bodyMethod.data = data; return this.script.body(this.bodyMethod); } @Override public void end() { this.script.invoke(new MethodInvoke() { @Override public Object invoke(Object arg) { ((QuestListener) arg).end(); return null; } }); } }