protected void refreshCacheTab() { // refresh list of cache hosts cacheBox.removeAll(); ArrayList<JLabel> labels = new ArrayList<JLabel>(); File cache = ResourceLoader.getOSPCache(); File[] hosts = cache == null ? new File[0] : cache.listFiles(ResourceLoader.OSP_CACHE_FILTER); clearCacheButton.setEnabled(hosts.length > 0); if (hosts.length == 0) { JLabel label = new JLabel(ToolsRes.getString("LibraryManager.Cache.IsEmpty")); // $NON-NLS-1$ label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 0)); Box box = Box.createHorizontalBox(); box.add(label); box.add(Box.createHorizontalGlue()); cacheBox.add(box); return; } for (File hostFile : hosts) { // eliminate the "osp-" that starts all cache host filenames String hostText = hostFile.getName().substring(4).replace('_', '.'); long bytes = getFileSize(hostFile); long size = bytes / (1024 * 1024); if (bytes > 0) { if (size > 0) hostText += " (" + size + " MB)"; // $NON-NLS-1$ //$NON-NLS-2$ else hostText += " (" + bytes / 1024 + " kB)"; // $NON-NLS-1$ //$NON-NLS-2$ } JLabel label = new JLabel(hostText); label.setToolTipText(hostFile.getAbsolutePath()); labels.add(label); ClearHostButton button = new ClearHostButton(hostFile); Box bar = Box.createHorizontalBox(); bar.add(label); bar.add(button); bar.add(Box.createHorizontalGlue()); cacheBox.add(bar); FontSizer.setFonts(cacheBox, FontSizer.getLevel()); } // set label sizes FontRenderContext frc = new FontRenderContext(null, false, false); Font font = labels.get(0).getFont(); int w = 0; for (JLabel next : labels) { Rectangle2D rect = font.getStringBounds(next.getText(), frc); w = Math.max(w, (int) rect.getWidth()); } Dimension labelSize = new Dimension(w + 48, 20); for (JLabel next : labels) { next.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 0)); next.setPreferredSize(labelSize); } }
/** * Gets the total size of a folder. * * @param folder the folder * @return the size in bytes */ private long getFileSize(File folder) { if (folder == null) return 0; long foldersize = 0; File[] files = folder.equals(ResourceLoader.getOSPCache()) ? folder.listFiles(ResourceLoader.OSP_CACHE_FILTER) : folder.listFiles(); if (files == null) return 0; for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { foldersize += getFileSize(files[i]); } else { foldersize += files[i].length(); } } return foldersize; }