1 package tim.prune.load;
5 import javax.swing.JFileChooser;
6 import javax.swing.JFrame;
7 import javax.swing.JOptionPane;
10 import tim.prune.Config;
11 import tim.prune.I18nManager;
12 import tim.prune.load.xml.XmlFileLoader;
16 * Generic FileLoader class to select a file
17 * and pass handling on to appropriate loader
19 public class FileLoader
21 private JFileChooser _fileChooser = null;
22 private JFrame _parentFrame;
23 private TextFileLoader _textFileLoader = null;
24 private XmlFileLoader _xmlFileLoader = null;
29 * @param inApp Application object to inform of track load
30 * @param inParentFrame parent frame to reference for dialogs
32 public FileLoader(App inApp, JFrame inParentFrame)
34 _parentFrame = inParentFrame;
35 _textFileLoader = new TextFileLoader(inApp, inParentFrame);
36 _xmlFileLoader = new XmlFileLoader(inApp, inParentFrame);
41 * Select an input file and open the GUI frame
42 * to select load options
44 public void openFile()
46 // Construct file chooser if necessary
47 if (_fileChooser == null)
49 _fileChooser = new JFileChooser();
50 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.txt", new String[] {"txt", "text"}));
51 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.gpx", new String[] {"gpx"}));
52 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kml", new String[] {"kml"}));
53 _fileChooser.setAcceptAllFileFilterUsed(true);
54 // start from directory in config if already set (by load jpegs)
55 File configDir = Config.getWorkingDirectory();
56 if (configDir != null) {_fileChooser.setCurrentDirectory(configDir);}
58 // Show the open dialog
59 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
61 File file = _fileChooser.getSelectedFile();
62 // Check file exists and is readable
63 if (file != null && file.exists() && file.canRead())
65 // Store directory in config for later
66 Config.setWorkingDirectory(file.getParentFile());
67 // Check file type to see if it's xml or just normal text
68 String fileExtension = file.getName().toLowerCase();
69 if (fileExtension.length() > 4)
70 {fileExtension = fileExtension.substring(fileExtension.length() - 4);}
71 if (fileExtension.equals(".kml") || fileExtension.equals(".gpx")
72 || fileExtension.equals(".xml"))
74 // Use xml loader for kml, gpx and xml filenames
75 _xmlFileLoader.openFile(file);
79 // Use text loader for everything else
80 _textFileLoader.openFile(file);
85 // couldn't read file - show error message
86 JOptionPane.showMessageDialog(_parentFrame, I18nManager.getText("error.load.noread"),
87 I18nManager.getText("error.load.dialogtitle"), JOptionPane.ERROR_MESSAGE);
93 * @return the last delimiter character used for a text file load
95 public char getLastUsedDelimiter()
97 return _textFileLoader.getLastUsedDelimiter();