mirror of
https://github.com/AndorsTrailRelease/ATCS.git
synced 2025-10-27 18:44:03 +01:00
Some refactoring. Replaced all "listeners" list by instances of
CopyOnWriteArrayList, to allow listeners to unregister themselves due to an event while preventing ConcurrentModificationExceptions. Modified all GameDataElement.elementChanged concrete implementation to remove the backlink from the oldOne.An element pointed by an altered element will not show the game source element in its backlink list anymore.
This commit is contained in:
@@ -12,6 +12,8 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import javax.swing.Action;
|
||||
import javax.swing.JFileChooser;
|
||||
@@ -452,10 +454,8 @@ public class WorkspaceActions {
|
||||
public void putValue(String key, Object value) {
|
||||
PropertyChangeEvent event = new PropertyChangeEvent(this, key, values.get(key), value);
|
||||
values.put(key, value);
|
||||
synchronized(listeners) {
|
||||
for (PropertyChangeListener l : listeners) {
|
||||
l.propertyChange(event);
|
||||
}
|
||||
for (PropertyChangeListener l : listeners) {
|
||||
l.propertyChange(event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -463,10 +463,8 @@ public class WorkspaceActions {
|
||||
public void setEnabled(boolean b) {
|
||||
PropertyChangeEvent event = new PropertyChangeEvent(this, "enabled", isEnabled(), b);
|
||||
enabled = b;
|
||||
synchronized(listeners) {
|
||||
for (PropertyChangeListener l : listeners) {
|
||||
l.propertyChange(event);
|
||||
}
|
||||
for (PropertyChangeListener l : listeners) {
|
||||
l.propertyChange(event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -475,20 +473,16 @@ public class WorkspaceActions {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
private Set<PropertyChangeListener> listeners = new HashSet<PropertyChangeListener>();
|
||||
private List<PropertyChangeListener> listeners = new CopyOnWriteArrayList<PropertyChangeListener>();
|
||||
|
||||
@Override
|
||||
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||
synchronized(listeners) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||
synchronized(listeners) {
|
||||
listeners.remove(listener);
|
||||
}
|
||||
listeners.remove(listener);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user