package com.netifera.platform.host.filesystem.ui; import java.text.DateFormat; import java.util.Locale; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.swt.graphics.Image; import com.netifera.platform.host.filesystem.File; import com.netifera.platform.host.internal.filesystem.ui.Activator; public class FileSystemLabelProvider extends ColumnLabelProvider { private final Image directoryImage = Activator.getInstance().getImageCache().get("icons/folder.png"); private final Image archiveImage = Activator.getInstance().getImageCache().get("icons/file-types/archive.png"); private final Image audioImage = Activator.getInstance().getImageCache().get("icons/file-types/audio.png"); private final Image binaryImage = Activator.getInstance().getImageCache().get("icons/file-types/binery.png"); private final Image executableImage = Activator.getInstance().getImageCache().get("icons/file-types/executable.png"); private final Image flashImage = Activator.getInstance().getImageCache().get("icons/file-types/flash.png"); private final Image htmlImage = Activator.getInstance().getImageCache().get("icons/file-types/html.png"); private final Image imageImage = Activator.getInstance().getImageCache().get("icons/file-types/image.png"); private final Image mswordImage = Activator.getInstance().getImageCache().get("icons/file-types/msword.png"); private final Image pdfImage = Activator.getInstance().getImageCache().get("icons/file-types/pdf.png"); private final Image scriptImage = Activator.getInstance().getImageCache().get("icons/file-types/script.png"); private final Image textImage = Activator.getInstance().getImageCache().get("icons/file-types/text.png"); private final Image videoImage = Activator.getInstance().getImageCache().get("icons/file-types/video.png"); private final Image xmlImage = Activator.getInstance().getImageCache().get("icons/file-types/xml.png"); private final Image configImage = Activator.getInstance().getImageCache().get("icons/file-types/config.png"); private final Image logImage = Activator.getInstance().getImageCache().get("icons/file-types/log.png"); private int column; public FileSystemLabelProvider(int column) { this.column = column; } @Override public Image getImage(Object element) { /* Only return images in column 0 */ if(column != 0) return null; if (!(element instanceof File)) return null; File file = (File) element; if (file.isDirectory()) return directoryImage; String extension = file.getName().substring(file.getName().lastIndexOf(".")+1); extension = extension.toLowerCase(Locale.ENGLISH); if (extension.matches("htm.*")) return htmlImage; if (extension.matches("sh|py|pl|rb|js|vb|bat")) return scriptImage; if (extension.matches("xml")) return xmlImage; /* if (extension.matches("text|txt|me|faq|info|notes")) return textImage; */ if (extension.matches("jpg|jpeg|gif|bmp|tif|tiff|png|ico|icon")) return imageImage; if (extension.matches("mp3|wav|ra")) return audioImage; if (extension.matches("mpg|mpeg|mov|rm|divx|xvid|avi")) return videoImage; if (extension.matches("arj|.?zip|jar|lha|lhz|rar|rpm|deb|sit|tar|gz|gz2")) return archiveImage; if (extension.matches("exe")) return executableImage; if (extension.matches("swf|flv|fla")) return flashImage; if (extension.matches("pdf")) return pdfImage; if (extension.matches("doc")) return mswordImage; if (extension.matches("dll|so|lib|o|obj")) return binaryImage; if (extension.matches("init|rc|cfg|conf.*")) return configImage; if (extension.matches("log")) return logImage; // System.err.println("Unknown file type \""+extension+"\""); return textImage; } @Override public String getText(Object element) { if (!(element instanceof File)) return column == 0 ? element.toString() : null; File file = (File) element; switch (column) { case 0: return file.getName(); case 1: return file.isFile() ? getLengthText(file.length()) : null; case 2: if (file.lastModified() == 0) { return null; } /* * KLUDGE: thread-safe DateFormat * * creates a new instance of a Format object for each invocation * (performance hit) */ return DateFormat.getInstance().format(file.lastModified()); } return null; } private String getLengthText(long length) { if (length < 1024) return length+" bytes"; if (length < 1024*1024) return (length/1024)+" KB"; if (length < 1024*1024*1024) return (length/1024/1024)+" MB"; if (length < 1024*1024*1024*1024) return (length/1024/1024/1024)+" GB"; return length+" bytes"; } @Override public String getToolTipText(Object element) { if (element instanceof File) return ((File)element).getAbsolutePath(); return null; } @Override public void dispose() { super.dispose(); // images.dispose(); } }