Changeset 2961 in josm


Ignore:
Timestamp:
10.02.2010 15:23:17 (2 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.