1 6 21 22 package de.schlichtherle.io.swing; 23 24 import de.schlichtherle.io.*; 25 26 import java.util.*; 27 28 import javax.swing.*; 29 import javax.swing.filechooser.*; 30 31 46 class FileView extends AbstractFileView { 47 48 private static final String CLASS_NAME 49 = "de/schlichtherle/io/swing/FileView".replace('/', '.'); private static final ResourceBundle resources 51 = ResourceBundle.getBundle(CLASS_NAME); 52 53 58 public FileView(javax.swing.filechooser.FileView delegate) { 59 super(delegate); 60 } 61 62 public Icon getIcon(java.io.File file) { 63 Icon icon = closedIcon(file); 64 return icon != null 65 ? icon 66 : super.getIcon(file); 67 } 68 69 public String getTypeDescription(java.io.File file) { 70 String typeDescription = typeDescription(file); 71 return typeDescription != null 72 ? typeDescription 73 : super.getTypeDescription(file); 74 } 75 76 public Boolean isTraversable(java.io.File file) { 77 Boolean traversable = traversable(file); 78 return traversable != null 79 ? traversable 80 : super.isTraversable(file); 81 } 82 83 static Icon openIcon(java.io.File file) { 84 if (!(file instanceof File)) 85 return null; 86 87 return icon((File) file); 88 } 89 90 static Icon closedIcon(java.io.File file) { 91 if (!(file instanceof File)) 92 return null; 93 94 return icon((File) file); 95 } 96 97 private static Icon icon(File file) { 98 if (isValidArchive(file)) { 99 return UIManager.getIcon("FileView.directoryIcon"); 100 } else if (isEntryInValidArchive(file)) { 101 if (file.isDirectory()) 102 return UIManager.getIcon("FileView.directoryIcon"); 103 else 104 return UIManager.getIcon("FileView.fileIcon"); 105 } 106 return null; 107 } 108 109 static String typeDescription(java.io.File file) { 110 if (!(file instanceof File)) 111 return null; 112 113 File smartFile = (File) file; 114 if (isValidArchive(smartFile)) { 115 return resources.getString("archiveFile"); 116 } else if (isEntryInValidArchive(smartFile)) { 117 if (smartFile.isDirectory()) 118 return resources.getString("archiveDirectoryEntry"); 119 else 120 return resources.getString("archiveFileEntry"); 121 } 122 return null; 123 } 124 125 private static boolean isValidArchive(File file) { 126 return file.isArchive() && file.isDirectory() 127 && !createNonArchiveFile(file).isDirectory(); 128 } 129 130 private static File createNonArchiveFile(File file) { 131 return ArchiveDetector.NULL.createFile( 132 file .getParentFile(), file.getName()); 133 } 134 135 private static boolean isEntryInValidArchive(File file) { 136 if (!file.isEntry()) 139 return false; 140 java.io.File parent = file.getParentFile(); 141 assert parent != null : "An archive entry must always name a parent!"; 142 return parent.isDirectory() 143 && !ArchiveDetector.NULL.createFile(parent.getPath()) 144 .isDirectory(); 145 } 146 147 static Boolean traversable(java.io.File file) { 148 if (!(file instanceof File)) 149 return null; 150 151 File smartFile = (File) file; 152 return smartFile.isDirectory() ? Boolean.TRUE : Boolean.FALSE; 153 } 154 } 155 | Popular Tags |