1 25 package info.monitorenter.gui.chart.io; 26 27 import java.io.File ; 28 import java.net.MalformedURLException ; 29 import java.net.URL ; 30 import java.util.StringTokenizer ; 31 32 import javax.swing.filechooser.FileFilter ; 33 import javax.swing.filechooser.FileSystemView ; 34 35 66 public final class FileFilterExtensions extends FileFilter implements INameFilter { 67 68 private String [] m_extensions; 69 70 71 private boolean m_isWindows = false; 72 73 83 public FileFilterExtensions(final String [] extensionsWithoutDot) throws IllegalArgumentException { 84 this.verify(extensionsWithoutDot); 85 this.m_extensions = extensionsWithoutDot; 86 this.m_isWindows = this.isWindows(); 87 } 88 89 92 public boolean accept(final File pathname) { 93 if (pathname.isDirectory()) { 94 return true; 95 } 96 return acceptNoDirectory(pathname.getAbsolutePath()); 97 } 98 99 102 public boolean accept(final String urlstring) { 103 if (isDirectory(urlstring)) { 104 return true; 105 } 106 return acceptNoDirectory(urlstring); 107 } 108 109 117 private boolean acceptNoDirectory(final String noDirFileNoURL) { 118 boolean ret = false; 119 StringTokenizer tokenizer = new StringTokenizer (noDirFileNoURL, "."); 121 String extension = "no.txt"; 123 while (tokenizer.hasMoreElements()) { 126 extension = tokenizer.nextToken(); 127 } 128 for (int i = this.m_extensions.length - 1; i >= 0; i--) { 129 if (this.m_extensions[i].equals(extension)) { 130 ret = true; 131 break; 132 } 133 } 134 return ret; 135 } 136 137 140 public String getDescription() { 141 StringBuffer ret = new StringBuffer (); 142 int len = this.m_extensions.length; 143 for (int i = 0; i < len; i++) { 144 ret.append("*.").append(this.m_extensions[i]); 145 if (i < (len - 1)) { 146 ret.append(","); 147 } 148 } 149 return ret.toString(); 150 } 151 152 160 private boolean isDirectory(final String urlstring) { 161 boolean ret = false; 162 boolean isURL = false; 163 try { 164 new URL (urlstring); 166 isURL = true; 167 } catch (MalformedURLException e) { 168 } 170 171 int lastDot = urlstring.lastIndexOf('.'); 172 int lastSeparator; 173 if (isURL) { 175 lastSeparator = urlstring.lastIndexOf('/'); 176 } else { 177 if (this.m_isWindows) { 178 lastSeparator = urlstring.lastIndexOf('\\'); 179 } else { 180 lastSeparator = urlstring.lastIndexOf('/'); 181 } 182 } 183 184 if (lastSeparator == -1) { 185 if (lastDot == -1) { 186 ret = true; 188 } else { 189 ret = false; 190 } 191 } else { 192 if (lastDot == -1) { 193 ret = true; 194 } else if (lastDot > (lastSeparator + 1)) { 195 ret = false; 196 } else { 197 ret = true; 198 } 199 } 200 return ret; 201 } 202 203 211 private boolean isWindows() { 212 boolean ret = false; 213 File [] roots = FileSystemView.getFileSystemView().getRoots(); 214 for (int i = 0; i < roots.length; i++) { 215 if (roots[i].getAbsolutePath().indexOf(':') != -1) { 216 ret = true; 217 break; 218 } 219 } 220 return ret; 221 } 222 223 232 private void verify(final String [] extensions) throws IllegalArgumentException { 233 String current; 234 StringBuffer msg = new StringBuffer (); 235 for (int i = extensions.length - 1; i >= 0; i--) { 236 current = extensions[i]; 237 if (current == null) { 238 msg.append("Extension at index " + i + " is null!\n"); 239 } else if (current.indexOf('.') != -1) { 240 msg.append("Extension \"" + current + "\" contains a dot!\n"); 241 } 242 } 243 if (msg.length() > 0) { 244 throw new IllegalArgumentException (msg.toString()); 245 } 246 } 247 } 248 | Popular Tags |