Changeset 4985 in josm for trunk


Ignore:
Timestamp:
2012-02-18T14:26:14+01:00 (8 years ago)
Author:
Don-vip
Message:

fix #7256 - "flush tile cache" takes forever -> See progress advancement and allow to cancel it

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java

    r4825 r4985  
    2020import java.io.StringReader;
    2121import java.net.URL;
    22 import java.util.*;
     22import java.util.ArrayList;
     23import java.util.Collections;
     24import java.util.HashSet;
     25import java.util.LinkedList;
     26import java.util.List;
     27import java.util.Map;
    2328import java.util.Map.Entry;
     29import java.util.Scanner;
    2430import java.util.concurrent.Callable;
    2531import java.util.regex.Matcher;
     
    3945import org.openstreetmap.gui.jmapviewer.MemoryTileCache;
    4046import org.openstreetmap.gui.jmapviewer.OsmFileCacheTileLoader;
     47import org.openstreetmap.gui.jmapviewer.OsmFileCacheTileLoader.TileClearController;
    4148import org.openstreetmap.gui.jmapviewer.OsmTileLoader;
    4249import org.openstreetmap.gui.jmapviewer.Tile;
     
    6471import org.openstreetmap.josm.gui.MapView;
    6572import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
     73import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    6674import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    6775import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
     76import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     77import org.openstreetmap.josm.gui.progress.ProgressMonitor.CancelListener;
    6878import org.openstreetmap.josm.io.CacheCustomContent;
     79import org.openstreetmap.josm.io.OsmTransferException;
    6980import org.openstreetmap.josm.io.UTFInputStreamReader;
    7081import org.xml.sax.InputSource;
     82import org.xml.sax.SAXException;
    7183
    7284/**
     
    137149        return tileCache;
    138150    }
    139 
    140     void clearTileCache()
     151   
     152    private class TmsTileClearController implements TileClearController, CancelListener {
     153
     154        private final ProgressMonitor monitor;
     155        private boolean cancel = false;
     156       
     157        public TmsTileClearController(ProgressMonitor monitor) {
     158            this.monitor = monitor;
     159            this.monitor.addCancelListener(this);
     160        }
     161
     162        @Override
     163        public void initClearDir(File dir) {
     164        }
     165
     166        @Override
     167        public void initClearFiles(File[] files) {
     168            monitor.setTicksCount(files.length);
     169            monitor.setTicks(0);
     170        }
     171
     172        @Override
     173        public boolean cancel() {
     174            return cancel;
     175        }
     176
     177        @Override
     178        public void fileDeleted(File file) {
     179            monitor.setTicks(monitor.getTicks()+1);
     180        }
     181
     182        @Override
     183        public void clearFinished() {
     184            monitor.finishTask();
     185        }
     186
     187        @Override
     188        public void operationCanceled() {
     189            cancel = true;
     190        }
     191    }
     192
     193    void clearTileCache(ProgressMonitor monitor)
    141194    {
    142195        tileCache.clear();
    143196        if (tileLoader instanceof OsmFileCacheTileLoader) {
    144             ((OsmFileCacheTileLoader)tileLoader).clearCache(tileSource);
     197            ((OsmFileCacheTileLoader)tileLoader).clearCache(tileSource, new TmsTileClearController(monitor));
    145198        }
    146199    }
     
    512565                    @Override
    513566                    public void actionPerformed(ActionEvent ae) {
    514                         clearTileCache();
     567                        new PleaseWaitRunnable(tr("Flush Tile Cache")) {
     568                           
     569                            @Override
     570                            protected void realRun() throws SAXException, IOException,
     571                                    OsmTransferException {
     572                                clearTileCache(getProgressMonitor());
     573                            }
     574                           
     575                            @Override
     576                            protected void finish() {
     577                            }
     578                           
     579                            @Override
     580                            protected void cancel() {
     581                            }
     582                        }.run();
     583                       
    515584                    }
    516585                }));
Note: See TracChangeset for help on using the changeset viewer.