]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/FileLoader.java
Version 8, September 2009
[GpsPrune.git] / tim / prune / load / FileLoader.java
1 package tim.prune.load;
2
3 import java.io.File;
4 import java.util.ArrayList;
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 NmeaFileLoader _nmeaFileLoader = null;
25         private XmlFileLoader _xmlFileLoader = null;
26         private ZipFileLoader _zipFileLoader = null;
27
28
29         /**
30          * Constructor
31          * @param inApp Application object to inform of track load
32          * @param inParentFrame parent frame to reference for dialogs
33          */
34         public FileLoader(App inApp, JFrame inParentFrame)
35         {
36                 _app = inApp;
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);
42         }
43
44
45         /**
46          * Select an input file and open the GUI frame
47          * to select load options
48          */
49         public void openFile()
50         {
51                 // Construct file chooser if necessary
52                 if (_fileChooser == null)
53                 {
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
65                 }
66                 // Show the open dialog
67                 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
68                 {
69                         File[] files = _fileChooser.getSelectedFiles();
70                         // Loop through files looking for files which exist and are readable
71                         ArrayList<File> dataFiles = new ArrayList<File>();
72                         if (files != null)
73                         {
74                                 for (int i=0; i<files.length; i++)
75                                 {
76                                         File file = files[i];
77                                         if (file.exists() && file.isFile() && file.canRead())
78                                         {
79                                                 dataFiles.add(file);
80                                         }
81                                 }
82                         }
83                         if (dataFiles.size() > 0) {
84                                 _app.loadDataFiles(dataFiles);
85                         }
86                         else
87                         {
88                                 // couldn't find any files to load - show error message
89                                 _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
90                         }
91                 }
92         }
93
94         /**
95          * Open the selected input file
96          * @param inFile file to open
97          */
98         public void openFile(File inFile)
99         {
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());
104                 }
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"))
111                 {
112                         // Use xml loader for kml, gpx and xml filenames
113                         _xmlFileLoader.openFile(inFile);
114                 }
115                 else if (fileExtension.equals(".kmz") || fileExtension.equals(".zip"))
116                 {
117                         // Use zip loader for zipped kml (or zipped gpx)
118                         _zipFileLoader.openFile(inFile);
119                 }
120                 else if (fileExtension.equals("nmea"))
121                 {
122                         _nmeaFileLoader.openFile(inFile);
123                 }
124                 else
125                 {
126                         // Use text loader for everything else
127                         _textFileLoader.openFile(inFile);
128                 }
129         }
130
131         /**
132          * @return the last delimiter character used for a text file load
133          */
134         public char getLastUsedDelimiter()
135         {
136                 return _textFileLoader.getLastUsedDelimiter();
137         }
138 }