1 package tim.prune.load;
5 import javax.swing.JFileChooser;
6 import javax.swing.JFrame;
9 import tim.prune.Config;
10 import tim.prune.load.xml.XmlFileLoader;
11 import tim.prune.load.xml.ZipFileLoader;
15 * Generic FileLoader class to select a file
16 * and pass handling on to appropriate loader
18 public class FileLoader
21 private JFileChooser _fileChooser = null;
22 private JFrame _parentFrame;
23 private TextFileLoader _textFileLoader = null;
24 private XmlFileLoader _xmlFileLoader = null;
25 private ZipFileLoader _zipFileLoader = null;
30 * @param inApp Application object to inform of track load
31 * @param inParentFrame parent frame to reference for dialogs
33 public FileLoader(App inApp, JFrame inParentFrame)
36 _parentFrame = inParentFrame;
37 _textFileLoader = new TextFileLoader(inApp, inParentFrame);
38 _xmlFileLoader = new XmlFileLoader(inApp);
39 _zipFileLoader = new ZipFileLoader(inApp, _xmlFileLoader);
44 * Select an input file and open the GUI frame
45 * to select load options
47 public void openFile()
49 // Construct file chooser if necessary
50 if (_fileChooser == null)
52 _fileChooser = new JFileChooser();
53 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.txt", new String[] {"txt", "text"}));
54 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.gpx", new String[] {"gpx"}));
55 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kml", new String[] {"kml"}));
56 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kmz", new String[] {"kmz"}));
57 _fileChooser.setAcceptAllFileFilterUsed(true);
58 // start from directory in config if already set (by load jpegs)
59 File configDir = Config.getWorkingDirectory();
60 if (configDir != null) {_fileChooser.setCurrentDirectory(configDir);}
62 // Show the open dialog
63 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
65 File file = _fileChooser.getSelectedFile();
66 // Check file exists and is readable
67 if (file != null && file.exists() && file.canRead())
69 // Store directory in config for later
70 Config.setWorkingDirectory(file.getParentFile());
71 // Check file type to see if it's xml or just normal text
72 String fileExtension = file.getName().toLowerCase();
73 if (fileExtension.length() > 4)
74 {fileExtension = fileExtension.substring(fileExtension.length() - 4);}
75 if (fileExtension.equals(".kml") || fileExtension.equals(".gpx")
76 || fileExtension.equals(".xml"))
78 // Use xml loader for kml, gpx and xml filenames
79 _xmlFileLoader.openFile(file);
81 else if (fileExtension.equals(".kmz") || fileExtension.equals(".zip"))
83 // Use zip loader for zipped kml (or zipped gpx)
84 _zipFileLoader.openFile(file);
88 // Use text loader for everything else
89 _textFileLoader.openFile(file);
94 // couldn't read file - show error message
95 _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
101 * @return the last delimiter character used for a text file load
103 public char getLastUsedDelimiter()
105 return _textFileLoader.getLastUsedDelimiter();