Ignore:
Timestamp:
2009-12-12T16:38:28+01:00 (16 years ago)
Author:
Gubaer
Message:

fixed #4153: Upload dialog's "Upload to '$URL'" isn't updated when the API URL is changed in the preferences
fixed #3642: JOSM offers to use open changeset from a different server

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/Preferences.java

    r2542 r2618  
    2424import java.util.TreeMap;
    2525import java.util.Map.Entry;
     26import java.util.concurrent.CopyOnWriteArrayList;
    2627import java.util.regex.Matcher;
    2728import java.util.regex.Pattern;
     
    5051    private File preferencesDirFile = null;
    5152
     53    public static interface PreferenceChangeEvent{
     54        public String getKey();
     55        public String getOldValue();
     56        public String getNewValue();
     57    }
     58
    5259    public static interface PreferenceChangedListener {
    53         void preferenceChanged(String key, String newValue);
     60        void preferenceChanged(PreferenceChangeEvent e);
     61    }
     62
     63    private static class DefaultPreferenceChangeEvent implements PreferenceChangeEvent {
     64        private String key;
     65        private String oldValue;
     66        private String newValue;
     67
     68        public DefaultPreferenceChangeEvent(String key, String oldValue, String newValue) {
     69            this.key = key;
     70            this.oldValue = oldValue;
     71            this.newValue = newValue;
     72        }
     73
     74        public String getKey() {
     75            return key;
     76        }
     77        public void setKey(String key) {
     78            this.key = key;
     79        }
     80        public String getOldValue() {
     81            return oldValue;
     82        }
     83        public void setOldValue(String oldValue) {
     84            this.oldValue = oldValue;
     85        }
     86        public String getNewValue() {
     87            return newValue;
     88        }
     89        public void setNewValue(String newValue) {
     90            this.newValue = newValue;
     91        }
    5492    }
    5593
     
    96134    }
    97135
    98     public final ArrayList<PreferenceChangedListener> listener = new ArrayList<PreferenceChangedListener>();
     136    private final CopyOnWriteArrayList<PreferenceChangedListener> listeners = new CopyOnWriteArrayList<PreferenceChangedListener>();
     137
     138
     139    public void addPreferenceChangeListener(PreferenceChangedListener listener) {
     140        if (listener != null && ! listeners.contains(listener)) {
     141            listeners.add(listener);
     142        }
     143    }
     144
     145    public void removePreferenceChangeListener(PreferenceChangedListener listener) {
     146        if (listener != null && listeners.contains(listener)) {
     147            listeners.remove(listener);
     148        }
     149    }
     150
     151    protected void firePrefrenceChanged(String key, String oldValue, String newValue) {
     152        PreferenceChangeEvent evt = new DefaultPreferenceChangeEvent(key, oldValue, newValue);
     153        for (PreferenceChangedListener l : listeners) {
     154            l.preferenceChanged(evt);
     155        }
     156    }
    99157
    100158    /**
     
    289347                System.out.println(tr("Warning: failed to persist preferences to ''{0}''", getPreferenceFile().getAbsoluteFile()));
    290348            }
    291             firePreferenceChanged(key, value);
     349            firePrefrenceChanged(key, oldvalue, value);
    292350            return true;
    293351        }
     
    311369    }
    312370
    313     private final void firePreferenceChanged(final String key, final String value) {
    314         for (final PreferenceChangedListener l : listener) {
    315             l.preferenceChanged(key, value);
    316         }
    317     }
    318371
    319372    /**
     
    618671    synchronized public String getCollectionAsString(final String key) {
    619672        String s = get(key);
    620         if(s != null && s.length() != 0)
     673        if(s != null && s.length() != 0) {
    621674            s = s.replaceAll("\u001e",",");
     675        }
    622676        return s;
    623677    }
Note: See TracChangeset for help on using the changeset viewer.