Changeset 2618 in josm for trunk/src


Ignore:
Timestamp:
2009-12-12T16:38:28+01:00 (15 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

Location:
trunk/src/org/openstreetmap/josm
Files:
4 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    }
  • trunk/src/org/openstreetmap/josm/data/osm/ChangesetCache.java

    r2613 r2618  
    1010import java.util.logging.Logger;
    1111
    12 public class ChangesetCache {
     12import org.openstreetmap.josm.Main;
     13import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
     14import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
     15
     16public class ChangesetCache implements PreferenceChangedListener{
    1317    static private final Logger logger = Logger.getLogger(ChangesetCache.class.getName());
    1418    static private final ChangesetCache instance = new ChangesetCache();
     
    2428
    2529    private ChangesetCache() {
     30        Main.pref.addPreferenceChangeListener(this);
    2631    }
    2732
     
    135140        return ret;
    136141    }
     142
     143    /* ------------------------------------------------------------------------- */
     144    /* interface PreferenceChangedListener                                       */
     145    /* ------------------------------------------------------------------------- */
     146    public void preferenceChanged(PreferenceChangeEvent e) {
     147        if (e.getKey() == null || ! e.getKey().equals("osm-server.url"))
     148            return;
     149
     150        // clear the cache when the API url changes
     151        if (e.getOldValue() == null || e.getNewValue() == null || !e.getOldValue().equals(e.getNewValue())) {
     152            clear();
     153        }
     154    }
    137155}
  • trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java

    r2613 r2618  
    3030import org.openstreetmap.josm.Main;
    3131import org.openstreetmap.josm.data.APIDataSet;
     32import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
     33import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
    3234import org.openstreetmap.josm.data.osm.Changeset;
    3335import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    4547 *
    4648 */
    47 public class UploadDialog extends JDialog implements PropertyChangeListener{
     49public class UploadDialog extends JDialog implements PropertyChangeListener, PreferenceChangedListener{
    4850    protected static final Logger logger = Logger.getLogger(UploadDialog.class.getName());
    4951
     
    221223                }
    222224        );
     225
     226        Main.pref.addPreferenceChangeListener(this);
    223227    }
    224228
     
    453457        }
    454458    }
     459
     460    /* -------------------------------------------------------------------------- */
     461    /* Interface PreferenceChangedListener                                        */
     462    /* -------------------------------------------------------------------------- */
     463    public void preferenceChanged(PreferenceChangeEvent e) {
     464        if (e.getKey() == null || ! e.getKey().equals("osm-server.url"))
     465            return;
     466        if (e.getNewValue() == null) {
     467            setTitle(tr("Upload"));
     468        } else {
     469            setTitle(tr("Upload to ''{0}''", e.getNewValue()));
     470        }
     471    }
    455472}
  • trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java

    r2450 r2618  
    3434import org.openstreetmap.josm.actions.RenameLayerAction;
    3535import org.openstreetmap.josm.data.Bounds;
     36import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
    3637import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
    3738import org.openstreetmap.josm.data.coor.EastNorth;
     
    113114        setAssociatedFile(associatedFile);
    114115        this.data = data;
    115         Main.pref.listener.add(this);
     116        Main.pref.addPreferenceChangeListener(this);
    116117    }
    117118
     
    284285    }
    285286
    286     public void preferenceChanged(String key, String newValue) {
    287         if (Main.map != null && (key.equals("draw.rawgps.lines") || key.equals("draw.rawgps.lines.force"))) {
     287    public void preferenceChanged(PreferenceChangeEvent e) {
     288        if (Main.map != null && (e.getKey().equals("draw.rawgps.lines") || e.getKey().equals("draw.rawgps.lines.force"))) {
    288289            Main.map.repaint();
    289290        }
     
    291292
    292293    @Override public void destroy() {
    293         Main.pref.listener.remove(RawGpsLayer.this);
     294        Main.pref.removePreferenceChangeListener(this);
    294295    }
    295296}
Note: See TracChangeset for help on using the changeset viewer.