/** * */ package logbook.scripting; import logbook.constants.AppConstants; import logbook.dto.ShipDto; import logbook.dto.ShipFilterDto; import logbook.scripting.ScriptLoader.MethodInvoke; import logbook.scripting.ScriptLoader.TableScriptCollection; /** * @author Nekopanda * */ public class ShipItemProxy implements ShipItemListener { private class BodyMethod implements MethodInvoke { public ShipDto ship; @Override public Object invoke(Object arg) { return ((ShipItemListener) arg).body(this.ship); } } private TableScriptCollection script; private final BodyMethod bodyMethod = new BodyMethod(); private static ShipItemProxy instance = new ShipItemProxy(); public static ShipItemProxy get() { instance.script = ScriptLoader.getTableScript( AppConstants.SHIPTABLE_PREFIX, ShipItemListener.class); return instance; } @Override public String[] header() { return this.script.header(); } @Override public void begin(final boolean specdiff, final ShipFilterDto filter, final int specdisp) { this.script.invoke(new MethodInvoke() { @Override public Object invoke(Object arg) { ((ShipItemListener) arg).begin(specdiff, filter, specdisp); return null; } }); } @Override public Comparable[] body(ShipDto ship) { this.bodyMethod.ship = ship; return this.script.body(this.bodyMethod); } @Override public void end() { this.script.invoke(new MethodInvoke() { @Override public Object invoke(Object arg) { ((ShipItemListener) arg).end(); return null; } }); } }