1 package tim.prune.load;
4 import java.util.ArrayList;
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 NmeaFileLoader _nmeaFileLoader = null;
25 private XmlFileLoader _xmlFileLoader = null;
26 private ZipFileLoader _zipFileLoader = null;
31 * @param inApp Application object to inform of track load
32 * @param inParentFrame parent frame to reference for dialogs
34 public FileLoader(App inApp, JFrame inParentFrame)
37 _parentFrame = inParentFrame;
38 _textFileLoader = new TextFileLoader(inApp, inParentFrame);
39 _nmeaFileLoader = new NmeaFileLoader(inApp);
40 _xmlFileLoader = new XmlFileLoader(inApp);
41 _zipFileLoader = new ZipFileLoader(inApp, _xmlFileLoader);
46 * Select an input file and open the GUI frame
47 * to select load options
49 public void openFile()
51 // Construct file chooser if necessary
52 if (_fileChooser == null)
54 _fileChooser = new JFileChooser();
55 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.txt", new String[] {"txt", "text"}));
56 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.gpx", new String[] {"gpx"}));
57 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kml", new String[] {"kml"}));
58 _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kmz", new String[] {"kmz"}));
59 _fileChooser.setAcceptAllFileFilterUsed(true);
60 // start from directory in config if already set (by load jpegs)
61 String configDir = Config.getConfigString(Config.KEY_TRACK_DIR);
62 if (configDir == null) {configDir = Config.getConfigString(Config.KEY_PHOTO_DIR);}
63 if (configDir != null) {_fileChooser.setCurrentDirectory(new File(configDir));}
64 _fileChooser.setMultiSelectionEnabled(true); // Allow multiple selections
66 // Show the open dialog
67 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
69 File[] files = _fileChooser.getSelectedFiles();
70 // Loop through files looking for files which exist and are readable
71 ArrayList<File> dataFiles = new ArrayList<File>();
74 for (int i=0; i<files.length; i++)
77 if (file.exists() && file.isFile() && file.canRead())
83 if (dataFiles.size() > 0) {
84 _app.loadDataFiles(dataFiles);
88 // couldn't find any files to load - show error message
89 _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
95 * Open the selected input file
96 * @param inFile file to open
98 public void openFile(File inFile)
100 // Store directory in config for later
101 File parent = inFile.getParentFile();
102 if (parent != null) {
103 Config.setConfigString(Config.KEY_TRACK_DIR, parent.getAbsolutePath());
105 // Check file type to see if it's xml or just normal text
106 String fileExtension = inFile.getName().toLowerCase();
107 if (fileExtension.length() > 4)
108 {fileExtension = fileExtension.substring(fileExtension.length() - 4);}
109 if (fileExtension.equals(".kml") || fileExtension.equals(".gpx")
110 || fileExtension.equals(".xml"))
112 // Use xml loader for kml, gpx and xml filenames
113 _xmlFileLoader.openFile(inFile);
115 else if (fileExtension.equals(".kmz") || fileExtension.equals(".zip"))
117 // Use zip loader for zipped kml (or zipped gpx)
118 _zipFileLoader.openFile(inFile);
120 else if (fileExtension.equals("nmea"))
122 _nmeaFileLoader.openFile(inFile);
126 // Use text loader for everything else
127 _textFileLoader.openFile(inFile);
132 * @return the last delimiter character used for a text file load
134 public char getLastUsedDelimiter()
136 return _textFileLoader.getLastUsedDelimiter();