]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/FileLoader.java
Version 7, February 2009
[GpsPrune.git] / tim / prune / load / FileLoader.java
1 package tim.prune.load;
2
3 import java.io.File;
4
5 import javax.swing.JFileChooser;
6 import javax.swing.JFrame;
7
8 import tim.prune.App;
9 import tim.prune.Config;
10 import tim.prune.load.xml.XmlFileLoader;
11 import tim.prune.load.xml.ZipFileLoader;
12
13
14 /**
15  * Generic FileLoader class to select a file
16  * and pass handling on to appropriate loader
17  */
18 public class FileLoader
19 {
20         private App _app;
21         private JFileChooser _fileChooser = null;
22         private JFrame _parentFrame;
23         private TextFileLoader _textFileLoader = null;
24         private XmlFileLoader _xmlFileLoader = null;
25         private ZipFileLoader _zipFileLoader = null;
26
27
28         /**
29          * Constructor
30          * @param inApp Application object to inform of track load
31          * @param inParentFrame parent frame to reference for dialogs
32          */
33         public FileLoader(App inApp, JFrame inParentFrame)
34         {
35                 _app = inApp;
36                 _parentFrame = inParentFrame;
37                 _textFileLoader = new TextFileLoader(inApp, inParentFrame);
38                 _xmlFileLoader = new XmlFileLoader(inApp);
39                 _zipFileLoader = new ZipFileLoader(inApp, _xmlFileLoader);
40         }
41
42
43         /**
44          * Select an input file and open the GUI frame
45          * to select load options
46          */
47         public void openFile()
48         {
49                 // Construct file chooser if necessary
50                 if (_fileChooser == null)
51                 {
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);}
61                 }
62                 // Show the open dialog
63                 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
64                 {
65                         File file = _fileChooser.getSelectedFile();
66                         // Check file exists and is readable
67                         if (file != null && file.exists() && file.canRead())
68                         {
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"))
77                                 {
78                                         // Use xml loader for kml, gpx and xml filenames
79                                         _xmlFileLoader.openFile(file);
80                                 }
81                                 else if (fileExtension.equals(".kmz") || fileExtension.equals(".zip"))
82                                 {
83                                         // Use zip loader for zipped kml (or zipped gpx)
84                                         _zipFileLoader.openFile(file);
85                                 }
86                                 else
87                                 {
88                                         // Use text loader for everything else
89                                         _textFileLoader.openFile(file);
90                                 }
91                         }
92                         else
93                         {
94                                 // couldn't read file - show error message
95                                 _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
96                         }
97                 }
98         }
99
100         /**
101          * @return the last delimiter character used for a text file load
102          */
103         public char getLastUsedDelimiter()
104         {
105                 return _textFileLoader.getLastUsedDelimiter();
106         }
107 }