source: trunk/src/org/apollo/mvc/AbstractSubject.java@ 1102

Last change on this file since 1102 was 1102, checked in by davidb, 6 years ago

Reworking of the code-base to separate logic from graphics. This version of Expeditee now supports a JFX graphics as an alternative to SWING

File size: 1.8 KB
Line 
1package org.apollo.mvc;
2
3import java.util.HashSet;
4import java.util.Set;
5
6import org.expeditee.gio.EcosystemManager;
7
8/**
9 * A Skeletal implementation of a Subject in the model-view-controller package.
10 *
11 * @author Brook Novak
12 */
13public abstract class AbstractSubject implements Subject {
14
15 /** Collection of registered observers. */
16 protected Set<Observer> observers = new HashSet <Observer>();
17
18 /**
19 * Adds an observer to the set of registered observers.
20 * @param ob The observer to add.
21 */
22 public final void addObserver(final Observer ob) {
23 synchronized (observers) {
24 observers.add(ob);
25 }
26 ob.setObservedSubject(this);
27 }
28
29 /**
30 * Removes an observer from the set of registered observers.
31 *
32 * @param ob The observer to remove
33 */
34 public final void removeObserver(final Observer ob) {
35 synchronized (observers) {
36 observers.remove(ob);
37 }
38 ob.setObservedSubject(null);
39 }
40
41 /**
42 * Notifies all observers that this object has changed with the given
43 * ModelChangeEvent.
44 *
45 * @param event
46 * A ModelChangeEvent which specifies how this object has
47 * changed.
48 */
49 protected final void fireSubjectChanged(final SubjectChangedEvent event) {
50
51 synchronized (observers) {
52 for (Observer ob : observers) {
53 ob.modelChanged(this, event);
54 }
55 }
56 }
57
58 /**
59 * Notifies all observers that this object has changed with the given
60 * ModelChangeEvent. On the swing thread.
61 *
62 * @param event
63 * A ModelChangeEvent which specifies how this object has
64 * changed.
65 */
66 protected final void fireSubjectChangedLaterOnSwingThread(final SubjectChangedEvent event) {
67
68 EcosystemManager.getMiscManager().runOnGIOThread(new Runnable() {
69 public void run() {
70 fireSubjectChanged(event);
71 }
72 });
73
74 }
75
76}
Note: See TracBrowser for help on using the repository browser.