[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model Project.java, 1.103, 1.104
Status: Pre-Alpha
Brought to you by:
henryml
|
From: Nordholt <nor...@us...> - 2006-12-30 15:30:42
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv23342/src/net/sourceforge/bprocessor/model Modified Files: Project.java Log Message: added method to schedule the addition of a new observer so there is no exception thrown when an observer is added in an update method. Index: Project.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Project.java,v retrieving revision 1.103 retrieving revision 1.104 diff -C2 -d -r1.103 -r1.104 *** Project.java 19 Dec 2006 13:20:32 -0000 1.103 --- Project.java 30 Dec 2006 15:30:35 -0000 1.104 *************** *** 44,47 **** --- 44,50 ---- private List observers; + /** The scheduled observers */ + private List scheduledObservers; + /** The Mesh */ private Space world; *************** *** 104,107 **** --- 107,113 ---- private Collection copyBuffer; + /** Flag set when updating */ + private boolean updating = false; + /** * Get the instance *************** *** 130,133 **** --- 136,140 ---- new double[]{0, 0, 1}, Camera.PERSPECTIVE); observers = new LinkedList(); + scheduledObservers = new LinkedList(); world = new Space("Project", Space.FUNCTIONAL, Space.PROJECT_LEVEL, true); world.setId(new Long(0)); *************** *** 200,203 **** --- 207,231 ---- /** + * Schedule adding an observer. Will be added at a safe time. + * @param observer The observer + */ + public void scheduleObserver(Observer observer) { + scheduledObservers.add(observer); + if (!updating) { + addSchedule(); + } + } + + /** + * Adds observers scheduled. + */ + private void addSchedule() { + Iterator it = scheduledObservers.iterator(); + while (it.hasNext()) { + addObserver((Observer)it.next()); + } + } + + /** * Remove observer * @param observer The observer *************** *** 213,220 **** --- 241,251 ---- public void changed(Object entity) { Iterator iter = observers.iterator(); + updating = true; while (iter.hasNext()) { Observer current = (Observer) iter.next(); current.update(entity); } + updating = false; + addSchedule(); makeDirty(); } |