Changeset 2961 in josm for trunk/src


Ignore:
Timestamp:
2010-02-10T15:23:17+01:00 (15 years ago)
Author:
Gubaer
Message:

fixed #4392: exception in version history dialog on re-downloading a changed element

Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java

    r2936 r2961  
    77import java.util.concurrent.CopyOnWriteArrayList;
    88
     9import org.openstreetmap.josm.Main;
    910import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    1011import org.openstreetmap.josm.data.osm.PrimitiveId;
    1112import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
     13import org.openstreetmap.josm.gui.MapView;
     14import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
     15import org.openstreetmap.josm.gui.layer.Layer;
    1216import org.openstreetmap.josm.tools.CheckParameterUtil;
    1317
     
    1721 *
    1822 */
    19 public class HistoryDataSet {
     23public class HistoryDataSet implements LayerChangeListener{
    2024    //private final static Logger logger = Logger.getLogger(HistoryDataSet.class.getName());
    2125
     
    3135        if (historyDataSet == null) {
    3236            historyDataSet = new HistoryDataSet();
     37            MapView.addLayerChangeListener(historyDataSet);
    3338        }
    3439        return  historyDataSet;
     
    5762        for (HistoryDataSetListener l : listeners) {
    5863            l.historyUpdated(this, id);
     64        }
     65    }
     66
     67    protected void fireCacheCleared() {
     68        for (HistoryDataSetListener l : listeners) {
     69            l.historyDataSetCleared(this);
    5970        }
    6071    }
     
    151162        fireHistoryUpdated(null);
    152163    }
     164
     165    /* ------------------------------------------------------------------------------ */
     166    /* interface LayerChangeListener                                                  */
     167    /* ------------------------------------------------------------------------------ */
     168    public void activeLayerChange(Layer oldLayer, Layer newLayer) {/* irrelevant in this context */}
     169    public void layerAdded(Layer newLayer) {/* irrelevant in this context */}
     170    public void layerRemoved(Layer oldLayer) {
     171        if (Main.map == null || Main.map.mapView == null) return;
     172        if (Main.map.mapView.getNumLayers() == 0) {
     173            data.clear();
     174            fireCacheCleared();
     175        }
     176    }
    153177}
  • trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSetListener.java

    r2512 r2961  
    55
    66public interface HistoryDataSetListener {
     7    /**
     8     * Fired by a {@see HistoryDataSet} if the cached history of an OSM primitive with
     9     * id <code>id</code> is updated
     10     *
     11     * @param source the data set firing the event
     12     * @param id the id of the updated primitive
     13     */
    714    void historyUpdated(HistoryDataSet source, PrimitiveId id);
     15
     16    /**
     17     * Fired by a {@see HistoryDataSet} if the history cached is cleared.
     18     *
     19     * @param source the history data set firing the event
     20     */
     21    void historyDataSetCleared(HistoryDataSet source);
    822}
  • trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java

    r2928 r2961  
    4343import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
    4444import org.openstreetmap.josm.gui.SideButton;
     45import org.openstreetmap.josm.gui.help.HelpUtil;
    4546import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
    4647import org.openstreetmap.josm.gui.history.HistoryLoadTask;
     
    7172        build();
    7273        DataSet.selListeners.add(model);
     74
     75        HelpUtil.setHelpContext(this, HelpUtil.ht("/Dialog/HistoryDialog"));
    7376    }
    7477
     
    146149    }
    147150
     151    /* ----------------------------------------------------------------------------- */
     152    /* interface HistoryDataSetListener                                              */
     153    /* ----------------------------------------------------------------------------- */
    148154    public void historyUpdated(HistoryDataSet source, PrimitiveId primitiveId) {
     155        model.refresh();
     156    }
     157
     158    public void historyDataSetCleared(HistoryDataSet source) {
    149159        model.refresh();
    150160    }
     
    317327        protected List<OsmPrimitive> filterPrimitivesWithUnloadedHistory(Collection<OsmPrimitive> primitives) {
    318328            ArrayList<OsmPrimitive> ret = new ArrayList<OsmPrimitive>(primitives.size());
     329            HistoryDataSet hds = HistoryDataSet.getInstance();
    319330            for (OsmPrimitive p: primitives) {
    320                 if (HistoryDataSet.getInstance().getHistory(p.getPrimitiveId()) == null) {
     331                if (hds.getHistory(p.getPrimitiveId()) == null) {
     332                    // reload if the history is not in the cache yet
     333                    ret.add(p);
     334                } else if (!p.isNew() && hds.getHistory(p.getPrimitiveId()).getByVersion(p.getUniqueId()) == null) {
     335                    // reload if the history object of the selected object is not in the cache
     336                    // yet
    321337                    ret.add(p);
    322338                }
  • trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java

    r2936 r2961  
    108108    }
    109109
     110    public void unlinkAsListener() {
     111        getHistoryBrowser().getModel().unlinkAsListener();
     112    }
     113
     114    /* ---------------------------------------------------------------------------------- */
     115    /* interface HistoryDataSetListener                                                   */
     116    /* ---------------------------------------------------------------------------------- */
    110117    public void historyUpdated(HistoryDataSet source, PrimitiveId primitiveId) {
    111118        if (primitiveId == null || primitiveId.equals(browser.getHistory().getPrimitmiveId())) {
     
    114121    }
    115122
    116     public void unlinkAsListener() {
    117         getHistoryBrowser().getModel().unlinkAsListener();
     123    public void historyDataSetCleared(HistoryDataSet source) {
     124        closeAction.run();
    118125    }
     126
    119127
    120128    class CloseAction extends AbstractAction {
Note: See TracChangeset for help on using the changeset viewer.