ExampleFileView.java |
1 /* 2 * @(#)ExampleFileView.java 1.8 04/07/26 3 * 4 * Copyright (c) 2004 Sun Microsystems, Inc. All Rights Reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * -Redistribution of source code must retain the above copyright notice, this 10 * list of conditions and the following disclaimer. 11 * 12 * -Redistribution in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * Neither the name of Sun Microsystems, Inc. or the names of contributors may 17 * be used to endorse or promote products derived from this software without 18 * specific prior written permission. 19 * 20 * This software is provided "AS IS," without a warranty of any kind. ALL 21 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING 22 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE 23 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN") 24 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE 25 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS 26 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST 27 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, 28 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY 29 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, 30 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 31 * 32 * You acknowledge that this software is not designed, licensed or intended 33 * for use in the design, construction, operation or maintenance of any 34 * nuclear facility. 35 */ 36 37 /* 38 * @(#)ExampleFileView.java 1.8 04/07/26 39 */ 40 41 import javax.swing.*; 42 import javax.swing.filechooser.*; 43 44 import java.io.File; 45 import java.util.Hashtable; 46 47 /** 48 * A convenience implementation of the FileView interface that 49 * manages name, icon, traversable, and file type information. 50 * 51 * This this implemention will work well with file systems that use 52 * "dot" extensions to indicate file type. For example: "picture.gif" 53 * as a gif image. 54 * 55 * If the java.io.File ever contains some of this information, such as 56 * file type, icon, and hidden file inforation, this implementation may 57 * become obsolete. At minimum, it should be rewritten at that time to 58 * use any new type information provided by java.io.File 59 * 60 * Example: 61 * JFileChooser chooser = new JFileChooser(); 62 * fileView = new ExampleFileView(); 63 * fileView.putIcon("jpg", new ImageIcon("images/jpgIcon.jpg")); 64 * fileView.putIcon("gif", new ImageIcon("images/gifIcon.gif")); 65 * chooser.setFileView(fileView); 66 * 67 * @version 1.8 07/26/04 68 * @author Jeff Dinkins 69 */ 70 public class ExampleFileView extends FileView { 71 private Hashtable icons = new Hashtable(5); 72 private Hashtable fileDescriptions = new Hashtable(5); 73 private Hashtable typeDescriptions = new Hashtable(5); 74 75 /** 76 * The name of the file. Do nothing special here. Let 77 * the system file view handle this. 78 * @see #setName 79 * @see FileView#getName 80 */ 81 public String getName(File f) { 82 return null; 83 } 84 85 /** 86 * Adds a human readable description of the file. 87 */ 88 public void putDescription(File f, String fileDescription) { 89 fileDescriptions.put(fileDescription, f); 90 } 91 92 /** 93 * A human readable description of the file. 94 * 95 * @see FileView#getDescription 96 */ 97 public String getDescription(File f) { 98 return (String) fileDescriptions.get(f); 99 }; 100 101 /** 102 * Adds a human readable type description for files. Based on "dot" 103 * extension strings, e.g: ".gif". Case is ignored. 104 */ 105 public void putTypeDescription(String extension, String typeDescription) { 106 typeDescriptions.put(typeDescription, extension); 107 } 108 109 /** 110 * Adds a human readable type description for files of the type of 111 * the passed in file. Based on "dot" extension strings, e.g: ".gif". 112 * Case is ignored. 113 */ 114 public void putTypeDescription(File f, String typeDescription) { 115 putTypeDescription(getExtension(f), typeDescription); 116 } 117 118 /** 119 * A human readable description of the type of the file. 120 * 121 * @see FileView#getTypeDescription 122 */ 123 public String getTypeDescription(File f) { 124 return (String) typeDescriptions.get(getExtension(f)); 125 } 126 127 /** 128 * Conveinience method that returnsa the "dot" extension for the 129 * given file. 130 */ 131 public String getExtension(File f) { 132 String name = f.getName(); 133 if(name != null) { 134 int extensionIndex = name.lastIndexOf('.'); 135 if(extensionIndex < 0) { 136 return null; 137 } 138 return name.substring(extensionIndex+1).toLowerCase(); 139 } 140 return null; 141 } 142 143 /** 144 * Adds an icon based on the file type "dot" extension 145 * string, e.g: ".gif". Case is ignored. 146 */ 147 public void putIcon(String extension, Icon icon) { 148 icons.put(extension, icon); 149 } 150 151 /** 152 * Icon that reperesents this file. Default implementation returns 153 * null. You might want to override this to return something more 154 * interesting. 155 * 156 * @see FileView#getIcon 157 */ 158 public Icon getIcon(File f) { 159 Icon icon = null; 160 String extension = getExtension(f); 161 if(extension != null) { 162 icon = (Icon) icons.get(extension); 163 } 164 return icon; 165 } 166 167 /** 168 * Whether the file is hidden or not. This implementation returns 169 * true if the filename starts with a "." 170 * 171 * @see FileView#isHidden 172 */ 173 public Boolean isHidden(File f) { 174 String name = f.getName(); 175 if(name != null && !name.equals("") && name.charAt(0) == '.') { 176 return Boolean.TRUE; 177 } else { 178 return Boolean.FALSE; 179 } 180 }; 181 182 /** 183 * Whether the directory is traversable or not. Generic implementation 184 * returns true for all directories and special folders. 185 * 186 * You might want to subtype ExampleFileView to do somethimg more interesting, 187 * such as recognize compound documents directories; in such a case you might 188 * return a special icon for the diretory that makes it look like a regular 189 * document, and return false for isTraversable to not allow users to 190 * descend into the directory. 191 * 192 * @see FileView#isTraversable 193 */ 194 public Boolean isTraversable(File f) { 195 // if (some_reason) { 196 // return Boolean.FALSE; 197 // } 198 return null; // Use default from FileSystemView 199 }; 200 201 } 202