package nars.gui.util; import nars.util.AbstractObserver; import nars.util.Events; import nars.util.Events.CycleEnd; import nars.util.Events.CycleStart; import nars.storage.Memory; import nars.NAR; import nars.entity.Concept; import nars.entity.Task; import nars.io.Output; public abstract class MemoryObserver extends AbstractObserver { private final Memory memory; public MemoryObserver(NAR n, boolean active) { this(n.memory, active); } public MemoryObserver(Memory m, boolean active) { super(m.event, active, Events.CycleStart.class, Events.CycleEnd.class, Events.ConceptNew.class, Events.ConceptForget.class, Events.ConceptBeliefAdd.class, Events.ConceptBeliefRemove.class, Events.ConceptDirectProcessedTask.class, Events.ConceptFire.class, Events.ConceptGoalAdd.class, Events.ConceptGoalRemove.class, Events.ConceptQuestionAdd.class, Events.ConceptQuestionRemove.class, Events.ConceptUnification.class, Events.BeliefSelect.class, Events.PluginsChange.class, Events.TaskAdd.class, Events.TaskRemove.class, Events.TaskDerive.class, Events.TaskImmediateProcess.class, Events.TermLinkSelect.class, //Events.UnExecutedGoal.class, //Output.OUT.class, Events.ResetEnd.class); this.memory = m; } @Override public void event(final Class event, final Object[] arguments) { if (event == Events.ConceptNew.class) { onConceptAdd((Concept) arguments[0]); } else if (event == Output.OUT.class) { output(event, arguments[0].toString()); } else if (event == Events.ResetEnd.class) { output(event); } else if (event == CycleStart.class) { onCycleStart(memory.time()); } else if (event == CycleEnd.class) { onCycleEnd(memory.time()); } else { output(event, arguments); } //cycle start //cycle end //task add //task remove } /** * Add new text to display * * @param s The line to be displayed */ abstract public void output(Class channel, Object... args); public void output(String s) { output(String.class, s); } /** * when a concept is instantiated */ abstract public void onConceptAdd(Concept concept); /** * called at the beginning of each inference clock cycle */ abstract public void onCycleStart(long clock); /** * called at the end of each inference clock cycle */ abstract public void onCycleEnd(long clock); /** * Added task */ abstract public void onTaskAdd(Task task, String reason); /** * Neglected task */ abstract public void onTaskRemove(Task task, String reason); }