bug6698013.java revision 9330:8b1f1c2a400f
138494Sobrien/* 2174294Sobrien * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. 338494Sobrien * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 438494Sobrien * 538494Sobrien * This code is free software; you can redistribute it and/or modify it 638494Sobrien * under the terms of the GNU General Public License version 2 only, as 738494Sobrien * published by the Free Software Foundation. 838494Sobrien * 938494Sobrien * This code is distributed in the hope that it will be useful, but WITHOUT 1038494Sobrien * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1138494Sobrien * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1238494Sobrien * version 2 for more details (a copy is included in the LICENSE file that 1338494Sobrien * accompanied this code). 1438494Sobrien * 1538494Sobrien * You should have received a copy of the GNU General Public License version 1638494Sobrien * 2 along with this work; if not, write to the Free Software Foundation, 1738494Sobrien * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1838494Sobrien * 1938494Sobrien * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2042629Sobrien * or visit www.oracle.com if you need additional information or have any 2138494Sobrien * questions. 2238494Sobrien */ 2338494Sobrien 2438494Sobrien/* @test %W% %E% 2538494Sobrien @bug 6698013 2638494Sobrien @summary JFileChooser can no longer navigate non-local file systems. 2738494Sobrien @author Pavel Porvatov 2838494Sobrien @run applet/manual=done bug6698013.html 2938494Sobrien*/ 3038494Sobrien 3138494Sobrienimport javax.swing.*; 3238494Sobrienimport javax.swing.filechooser.FileSystemView; 3338494Sobrienimport java.io.File; 3438494Sobrien 3538494Sobrienpublic class bug6698013 extends JApplet { 3638494Sobrien 3738494Sobrien final static VirtualFile root = new VirtualFile("testdir", true); 3838494Sobrien 3938494Sobrien final static VirtualFile rootFile = new VirtualFile("testdir/test.txt", false); 40174294Sobrien 4138494Sobrien final static VirtualFile subdir = new VirtualFile("testdir/subdir", true); 4238494Sobrien 4338494Sobrien final static VirtualFile subdirFile = new VirtualFile("testdir/subdir/subtest.txt", false); 4438494Sobrien 4538494Sobrien public static void main(String[] args) { 4638494Sobrien JFileChooser chooser = new JFileChooser(new VirtualFileSystemView()); 4738494Sobrien chooser.setCurrentDirectory(root); 4838494Sobrien chooser.showSaveDialog(null); 4938494Sobrien } 5038494Sobrien 5138494Sobrien public void init() { 5238494Sobrien JFileChooser chooser = new JFileChooser(new VirtualFileSystemView()); 53174294Sobrien chooser.setCurrentDirectory(root); 5438494Sobrien chooser.showSaveDialog(null); 5538494Sobrien } 5638494Sobrien} 5738494Sobrien 5838494Sobrienclass VirtualFileSystemView extends FileSystemView { 5938494Sobrien 6038494Sobrien public boolean isRoot(File dir) { 6138494Sobrien return bug6698013.root.equals(dir); 6238494Sobrien } 6338494Sobrien 6438494Sobrien public File createNewFolder(File dir) { 6538494Sobrien return null; 66174294Sobrien } 6738494Sobrien 6838494Sobrien public File[] getRoots() { 6938494Sobrien return new File[]{bug6698013.root}; 7038494Sobrien } 7138494Sobrien 7238494Sobrien public boolean isDrive(File dir) { 7338494Sobrien return false; 7438494Sobrien } 7538494Sobrien 7638494Sobrien public boolean isFloppyDrive(File dir) { 7738494Sobrien return false; 7838494Sobrien } 7938494Sobrien 8038494Sobrien public File getParentDirectory(File dir) { 8138494Sobrien if (dir == null) { 8238494Sobrien return null; 8338494Sobrien } 8438494Sobrien 8538494Sobrien return new VirtualFile(dir.getPath(), true).getParentFile(); 8638494Sobrien } 8738494Sobrien 8838494Sobrien public File[] getFiles(File dir, boolean hide_hidden) { 8938494Sobrien if (dir.equals(bug6698013.root)) { 9038494Sobrien return new File[]{bug6698013.rootFile, bug6698013.subdir}; 9138494Sobrien } 9238494Sobrien 9338494Sobrien if (dir.equals(bug6698013.subdir)) { 9438494Sobrien return new File[]{bug6698013.subdirFile}; 9538494Sobrien } 9638494Sobrien 9738494Sobrien return null; 9838494Sobrien } 9938494Sobrien 10038494Sobrien public File getHomeDirectory() { 10138494Sobrien return bug6698013.root; 10238494Sobrien } 10338494Sobrien 10438494Sobrien public File getDefaultDirectory() { 10538494Sobrien return getHomeDirectory(); 10638494Sobrien } 10738494Sobrien 10838494Sobrien public String getSystemDisplayName(File file) { 10938494Sobrien return file.getName(); 11038494Sobrien } 11138494Sobrien 11238494Sobrien public Boolean isTraversable(File file) { 11338494Sobrien return Boolean.valueOf(file.isDirectory()); 11438494Sobrien } 11538494Sobrien} 11638494Sobrien 11738494Sobrien/** 11838494Sobrien * A Virtual File. Contains a path and a directory flag that 11938494Sobrien * represents the location of a virtual file to be contained in the 12038494Sobrien * Virtual FileSystemView. 12138494Sobrien */ 12238494Sobrienclass VirtualFile extends File { 12338494Sobrien 12438494Sobrien private static final long serialVersionUID = 0L; 12538494Sobrien 12638494Sobrien private String path; 12738494Sobrien 12838494Sobrien private boolean directory; 12938494Sobrien 13038494Sobrien public VirtualFile(String path, boolean directory) { 13138494Sobrien super(path); 13238494Sobrien this.path = path; 13338494Sobrien this.directory = directory; 13438494Sobrien } 13538494Sobrien 13638494Sobrien public File getParentFile() { 13738494Sobrien int index = path.lastIndexOf('/'); 13838494Sobrien 13938494Sobrien if (index == -1) { 14038494Sobrien return null; 14138494Sobrien } 14238494Sobrien 14338494Sobrien return new VirtualFile(path.substring(0, index), true); 14438494Sobrien } 14538494Sobrien 14638494Sobrien public File getCanonicalFile() { 14738494Sobrien return this; 14838494Sobrien } 14938494Sobrien 15038494Sobrien public String getParent() { 15138494Sobrien File parent_file = getParentFile(); 15238494Sobrien 15338494Sobrien return parent_file == null ? null : parent_file.getPath(); 15438494Sobrien } 15538494Sobrien 15638494Sobrien public String getName() { 15738494Sobrien int index = path.lastIndexOf('/'); 158 159 return index == -1 ? path : path.substring(index + 1); 160 } 161 162 public String getPath() { 163 return path; 164 } 165 166 public String getAbsolutePath() { 167 return path; 168 } 169 170 public String getCanonicalPath() { 171 return path; 172 } 173 174 public String toString() { 175 return path; 176 } 177 178 public boolean equals(Object obj) { 179 return obj instanceof VirtualFile && path.equals(obj.toString()); 180 } 181 182 public int hashCode() { 183 return path.hashCode(); 184 } 185 186 public boolean canWrite() { 187 return true; 188 } 189 190 public boolean isDirectory() { 191 return directory; 192 } 193 194 public boolean exists() { 195 return true; 196 } 197} 198