diff -r 73da889306b7 -r f46bfa7a2956 src/demo/share/jfc/SwingSet2/ExampleFileView.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/demo/share/jfc/SwingSet2/ExampleFileView.java Fri Mar 23 13:43:39 2018 -0700 @@ -0,0 +1,176 @@ +/* + * + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import javax.swing.*; +import javax.swing.filechooser.*; + +import java.io.File; +import java.util.Hashtable; + +/** + * A convenience implementation of the FileView interface that + * manages name, icon, traversable, and file type information. + * + * This this implemention will work well with file systems that use + * "dot" extensions to indicate file type. For example: "picture.gif" + * as a gif image. + * + * If the java.io.File ever contains some of this information, such as + * file type, icon, and hidden file inforation, this implementation may + * become obsolete. At minimum, it should be rewritten at that time to + * use any new type information provided by java.io.File + * + * Example: + * JFileChooser chooser = new JFileChooser(); + * fileView = new ExampleFileView(); + * fileView.putIcon("jpg", new ImageIcon("images/jpgIcon.jpg")); + * fileView.putIcon("gif", new ImageIcon("images/gifIcon.gif")); + * chooser.setFileView(fileView); + * + * @author Jeff Dinkins + */ +public class ExampleFileView extends FileView { + private Hashtable icons = new Hashtable(5); + private Hashtable fileDescriptions = new Hashtable(5); + private Hashtable typeDescriptions = new Hashtable(5); + + /** + * The name of the file. Do nothing special here. Let + * the system file view handle this. + * @see FileView#getName + */ + public String getName(File f) { + return null; + } + + /** + * Adds a human readable description of the file. + */ + public void putDescription(File f, String fileDescription) { + fileDescriptions.put(f, fileDescription); + } + + /** + * A human readable description of the file. + * + * @see FileView#getDescription + */ + public String getDescription(File f) { + return (String) fileDescriptions.get(f); + }; + + /** + * Adds a human readable type description for files. Based on "dot" + * extension strings, e.g: ".gif". Case is ignored. + */ + public void putTypeDescription(String extension, String typeDescription) { + typeDescriptions.put(extension, typeDescription); + } + + /** + * Adds a human readable type description for files of the type of + * the passed in file. Based on "dot" extension strings, e.g: ".gif". + * Case is ignored. + */ + public void putTypeDescription(File f, String typeDescription) { + putTypeDescription(getExtension(f), typeDescription); + } + + /** + * A human readable description of the type of the file. + * + * @see FileView#getTypeDescription + */ + public String getTypeDescription(File f) { + return (String) typeDescriptions.get(getExtension(f)); + } + + /** + * Convenience method that returns the "dot" extension for the + * given file. + */ + public String getExtension(File f) { + String name = f.getName(); + if(name != null) { + int extensionIndex = name.lastIndexOf('.'); + if(extensionIndex < 0) { + return null; + } + return name.substring(extensionIndex+1).toLowerCase(); + } + return null; + } + + /** + * Adds an icon based on the file type "dot" extension + * string, e.g: ".gif". Case is ignored. + */ + public void putIcon(String extension, Icon icon) { + icons.put(extension, icon); + } + + /** + * Icon that reperesents this file. Default implementation returns + * null. You might want to override this to return something more + * interesting. + * + * @see FileView#getIcon + */ + public Icon getIcon(File f) { + Icon icon = null; + String extension = getExtension(f); + if(extension != null) { + icon = (Icon) icons.get(extension); + } + return icon; + } + + /** + * Whether the directory is traversable or not. Generic implementation + * returns true for all directories and special folders. + * + * You might want to subtype ExampleFileView to do somethimg more interesting, + * such as recognize compound documents directories; in such a case you might + * return a special icon for the directory that makes it look like a regular + * document, and return false for isTraversable to not allow users to + * descend into the directory. + * + * @see FileView#isTraversable + */ + public Boolean isTraversable(File f) { + // if (some_reason) { + // return Boolean.FALSE; + // } + return null; // Use default from FileSystemView + }; + +}