package com.vitco.layout.content.console; import com.vitco.manager.pref.PreferencesInterface; import com.vitco.util.misc.DateTools; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.util.ArrayList; /** * deals with the content of the console */ public class Console implements ConsoleInterface { public static final int LINE_BUFFER_COUNT = 500; private final ArrayList<ConsoleListener> consoleListeners = new ArrayList<ConsoleListener>(); private final ArrayList<String> consoleData = new ArrayList<String>(); // var & setter protected PreferencesInterface preferences; @Autowired(required=true) public final void setPreferences(PreferencesInterface preferences) { this.preferences = preferences; } @PostConstruct @Override public void init() { if (preferences.contains("console_stored_data")) { // load console data for (Object line : (ArrayList)preferences.loadObject("console_stored_data")) { consoleData.add((String)line); } } // clear the console on start clear(); } @PreDestroy @Override public void finish() { // store console data preferences.storeObject("console_stored_data", consoleData); } // clear the console data @Override public void clear() { consoleData.clear(); } // return all buffered console data @Override public ArrayList<String> getConsoleData() { ArrayList<String> lines = new ArrayList<String>(); for (String aConsoleData : consoleData) { lines.add(aConsoleData); } return lines; } // adds a line to the console and notifies listeners @Override public void addLine(String text) { String line = DateTools.now("hh:mm:ss a ") + text + "\n"; // format with time consoleData.add(line); // add to console // make sure we do not buffer too many lines while (consoleData.size() > Console.LINE_BUFFER_COUNT) { consoleData.remove(0); } // notify listeners for (ConsoleListener consoleListener : consoleListeners) { consoleListener.lineAdded(line); } } // add a console listener @Override public void addConsoleListener(ConsoleListener consoleListener) { consoleListeners.add(consoleListener); } // remove a console listener @Override public void removeConsoleListener(ConsoleListener consoleListener) { consoleListeners.remove(consoleListener); } }