Changeset 8750 in josm for trunk/src/org
- Timestamp:
- 2015-09-11T21:55:13+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/preferences/imagery/CacheContentsPanel.java
r8734 r8750 35 35 import javax.swing.table.TableCellRenderer; 36 36 import javax.swing.table.TableColumn; 37 import javax.swing.table.TableModel; 37 38 38 39 import org.apache.commons.jcs.access.CacheAccess; … … 142 143 public CacheContentsPanel() { 143 144 super(new GridBagLayout()); 144 CacheAccess<String, BufferedImageCacheEntry> cache = TMSLayer.getCache(); 145 add( 146 new JLabel(tr("TMS cache, total cache size: {0} bytes", getCacheSize(cache))), 147 GBC.eol().insets(5, 5, 0, 0) 148 ); 149 add( 150 new JScrollPane(getTableForCache(cache)), 151 GBC.eol().fill(GBC.BOTH)); 152 153 cache = WMSLayer.getCache(); 154 add( 155 new JLabel(tr("WMS cache, total cache size: {0} bytes", getCacheSize(cache))), 156 GBC.eol().insets(5, 5, 0, 0)); 157 add( 158 new JScrollPane(getTableForCache(cache)), 159 GBC.eol().fill(GBC.BOTH)); 160 161 cache = WMTSLayer.getCache(); 162 add( 163 new JLabel(tr("WMTS cache, total cache size: {0} bytes", getCacheSize(cache))), 164 GBC.eol().insets(5, 5, 0, 0)); 165 166 add( 167 new JScrollPane(getTableForCache(cache)), 168 GBC.eol().fill(GBC.BOTH)); 169 145 executor.submit(new Runnable() { 146 @Override 147 public void run() { 148 addToPanel(TMSLayer.getCache(), "TMS"); 149 addToPanel(WMSLayer.getCache(), "WMS"); 150 addToPanel(WMTSLayer.getCache(), "WMTS"); 151 } 152 }); 170 153 executor.shutdown(); 154 } 155 156 private void addToPanel(final CacheAccess<String, BufferedImageCacheEntry> cache, final String name) { 157 final Long cacheSize = getCacheSize(cache); 158 final TableModel tableModel = getTableModel(cache); 159 160 GuiHelper.runInEDT(new Runnable() { 161 @Override 162 public void run() { 163 add( 164 new JLabel(tr("{0} cache, total cache size: {1} bytes", name, cacheSize)), 165 GBC.eol().insets(5, 5, 0, 0)); 166 167 add( 168 new JScrollPane(getTableForCache(cache, tableModel)), 169 GBC.eol().fill(GBC.BOTH)); 170 } 171 }); 171 172 } 172 173 … … 187 188 } 188 189 189 private static Map<String, Integer>getCacheStats(CacheAccess<String, BufferedImageCacheEntry> cache) {190 private static String[][] getCacheStats(CacheAccess<String, BufferedImageCacheEntry> cache) { 190 191 Set<String> keySet = cache.getCacheControl().getKeySet(); 191 192 Map<String, int[]> temp = new ConcurrentHashMap<>(); // use int[] as a Object reference to int, gives better performance … … 204 205 } 205 206 206 // convert to standard Map<String, Integer> 207 Map<String, Integer> ret = new ConcurrentHashMap<>(); 207 List<Pair<String, Integer>> sortedStats = new ArrayList<>(); 208 208 for (Entry<String, int[]> e: temp.entrySet()) { 209 ret.put(e.getKey(), e.getValue()[0]); 209 sortedStats.add(new Pair<>(e.getKey(), e.getValue()[0])); 210 } 211 Collections.sort(sortedStats, new Comparator<Pair<String, Integer>>() { 212 @Override 213 public int compare(Pair<String, Integer> o1, Pair<String, Integer> o2) { 214 return -1 * o1.b.compareTo(o2.b); 215 } 216 }); 217 String[][] ret = new String[sortedStats.size()][3]; 218 int index = 0; 219 for(Pair<String, Integer> e: sortedStats) { 220 ret[index] = new String[]{e.a, e.b.toString(), tr("Clear")}; 221 index++; 210 222 } 211 223 return ret; 212 224 } 213 225 214 private void backgroundUpdateModel(final CacheAccess<String, BufferedImageCacheEntry> cache, final DefaultTableModel tableModel) { 215 // fetch statistics in background thread as this may take some time 216 executor.submit(new Runnable() { 217 @Override 218 public void run() { 219 final List<Pair<String, Integer>> sortedStats = new ArrayList<>(); 220 for (Entry<String, Integer> e: getCacheStats(cache).entrySet()) { 221 sortedStats.add(new Pair<>(e.getKey(), e.getValue())); 222 } 223 Collections.sort(sortedStats, new Comparator<Pair<String, Integer>>() { 224 @Override 225 public int compare(Pair<String, Integer> o1, Pair<String, Integer> o2) { 226 return -1 * o1.b.compareTo(o2.b); 227 } 228 }); 229 // once statistics are ready, update the model in EDT thread 230 GuiHelper.runInEDT(new Runnable() { 231 @Override 232 public void run() { 233 tableModel.removeRow(0); 234 for (Pair<String, Integer> e: sortedStats) { 235 tableModel.addRow(new String[]{e.a, e.b.toString(), tr("Clear")}); 236 } 237 } 238 }); 239 } 240 }); 241 } 242 243 private JTable getTableForCache(final CacheAccess<String, BufferedImageCacheEntry> cache) { 244 final DefaultTableModel tableModel = new DefaultTableModel( 245 new String[][]{{tr("Loading data"), tr("Please wait"), ""}}, 246 new String[]{"Cache name", "Object Count", "Clear"}) { 247 @Override 248 public boolean isCellEditable(int row, int column) { 249 return column == 2; 250 } 251 }; 252 253 backgroundUpdateModel(cache, tableModel); 254 226 private JTable getTableForCache(final CacheAccess<String, BufferedImageCacheEntry> cache, final TableModel tableModel) { 255 227 final JTable ret = new JTable(tableModel); 256 228 … … 269 241 return ret; 270 242 } 243 244 private DefaultTableModel getTableModel(final CacheAccess<String, BufferedImageCacheEntry> cache) { 245 final DefaultTableModel tableModel = new DefaultTableModel( 246 getCacheStats(cache), 247 new String[]{"Cache name", "Object Count", "Clear"}) { 248 @Override 249 public boolean isCellEditable(int row, int column) { 250 return column == 2; 251 } 252 }; 253 return tableModel; 254 } 271 255 }
Note:
See TracChangeset
for help on using the changeset viewer.