package org.seqcode.projects.seqview.model; import java.util.*; import org.seqcode.gseutils.*; public abstract class SeqViewModel implements Model { private HashSet<Listener<EventObject>> listeners; private boolean keepRunning; private ModelProperties props; protected boolean dataError=false; public SeqViewModel() { listeners = new HashSet<Listener<EventObject>>(); keepRunning = true; props = new ModelProperties(); } public ModelProperties getProperties() {return props;} public boolean keepRunning() {return keepRunning;} public boolean isDataError(){return dataError;} public void stopRunning() { keepRunning = false; synchronized(this) { this.notifyAll(); } } public synchronized void notifyListeners() { for (Listener<EventObject> l : listeners) { l.eventRegistered(new EventObject(this)); } } public void addEventListener(Listener<EventObject> l) { listeners.add(l); } public void removeEventListener(Listener<EventObject> l) { listeners.remove(l); if (!hasListeners()) { stopRunning(); } } public boolean hasListeners() {return listeners.size() > 0;} }