package bashoid; import java.util.ArrayList; import java.util.List; public abstract class Addon implements PeriodicAddonListener { protected List<String> reaction = new ArrayList<>(); protected boolean errorOccurred; protected AddonConfig config = new AddonConfig( getClass().getName() ); protected PeriodicAddonUpdate periodicAddonUpdate; protected Exception error; protected static AddonListener addonListener; protected final static String MESSAGE_FAIL = "Addon has failed."; public abstract boolean shouldReact(Message message); protected abstract void setReaction(Message message); public static void setAddonListener(AddonListener listener) { addonListener = listener; } public final List<String> generateReaction(Message message) { resetAddonStatus(); setReaction(message); return reaction; } protected final void resetAddonStatus() { reaction.clear(); errorOccurred = false; error = null; } protected final void setError() { setError(MESSAGE_FAIL, null); } protected final void setError(Exception e) { setError(MESSAGE_FAIL, e); } protected final void setError(String reason) { setError(reason, null); } protected final void setError(String reason, Exception e) { reaction.clear(); reaction.add(reason); errorOccurred = true; error = e; } public final Exception getError() { return error; } public final boolean errorOccurred() { return errorOccurred; } protected void setPeriodicUpdate(long period) { periodicAddonUpdate = new PeriodicAddonUpdate(period); periodicAddonUpdate.addEventListener((PeriodicAddonListener)this); } protected void stopPeriodicUpdate() { periodicAddonUpdate.stop(); periodicAddonUpdate = null; } public void periodicAddonUpdate() { } protected void sendAction(String target, String msg) { addonListener.sendAddonAction(target, msg); } protected void sendMessage(String target, String msg) { addonListener.sendAddonMessage(target, msg); } protected void sendMessageToChannels(String msg) { addonListener.sendAddonMessageToChannels(msg); } protected void reloadConfig() { config.reload(); } }