]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/FileLoader.java
c6d9827921ffa9a4d64f401411fa670b8134a2e6
[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.Config;
10 import tim.prune.load.xml.GzipFileLoader;
11 import tim.prune.load.xml.XmlFileLoader;
12 import tim.prune.load.xml.ZipFileLoader;
13
14
15 /**
16  * Generic FileLoader class to select a file
17  * and pass handling on to appropriate loader
18  */
19 public class FileLoader
20 {
21         private App _app;
22         private JFileChooser _fileChooser = null;
23         private JFrame _parentFrame;
24         private TextFileLoader _textFileLoader = null;
25         private NmeaFileLoader _nmeaFileLoader = null;
26         private XmlFileLoader _xmlFileLoader = null;
27         private ZipFileLoader _zipFileLoader = null;
28         private GzipFileLoader _gzipFileLoader = null;
29
30
31         /**
32          * Constructor
33          * @param inApp Application object to inform of track load
34          * @param inParentFrame parent frame to reference for dialogs
35          */
36         public FileLoader(App inApp, JFrame inParentFrame)
37         {
38                 _app = inApp;
39                 _parentFrame = inParentFrame;
40                 _textFileLoader = new TextFileLoader(inApp, inParentFrame);
41                 _nmeaFileLoader = new NmeaFileLoader(inApp);
42                 _xmlFileLoader = new XmlFileLoader(inApp);
43                 _zipFileLoader = new ZipFileLoader(inApp, _xmlFileLoader);
44                 _gzipFileLoader = new GzipFileLoader(inApp, _xmlFileLoader);
45         }
46
47
48         /**
49          * Select an input file and open the GUI frame
50          * to select load options
51          */
52         public void openFile()
53         {
54                 // Construct file chooser if necessary
55                 if (_fileChooser == null)
56                 {
57                         _fileChooser = new JFileChooser();
58                         _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.txt", new String[] {"txt", "text"}));
59                         _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.gpx", new String[] {"gpx"}));
60                         _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kml", new String[] {"kml"}));
61                         _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kmz", new String[] {"kmz"}));
62                         _fileChooser.setAcceptAllFileFilterUsed(true);
63                         // start from directory in config if already set (by load jpegs)
64                         String configDir = Config.getConfigString(Config.KEY_TRACK_DIR);
65                         if (configDir == null) {configDir = Config.getConfigString(Config.KEY_PHOTO_DIR);}
66                         if (configDir != null) {_fileChooser.setCurrentDirectory(new File(configDir));}
67                         _fileChooser.setMultiSelectionEnabled(true); // Allow multiple selections
68                 }
69                 // Show the open dialog
70                 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
71                 {
72                         File[] files = _fileChooser.getSelectedFiles();
73                         // Loop through files looking for files which exist and are readable
74                         ArrayList<File> dataFiles = new ArrayList<File>();
75                         if (files != null)
76                         {
77                                 for (int i=0; i<files.length; i++)
78                                 {
79                                         File file = files[i];
80                                         if (file.exists() && file.isFile() && file.canRead())
81                                         {
82                                                 dataFiles.add(file);
83                                         }
84                                 }
85                         }
86                         if (dataFiles.size() > 0) {
87                                 _app.loadDataFiles(dataFiles);
88                         }
89                         else
90                         {
91                                 // couldn't find any files to load - show error message
92                                 _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
93                         }
94                 }
95         }
96
97         /**
98          * Open the selected input file
99          * @param inFile file to open
100          */
101         public void openFile(File inFile)
102         {
103                 // Store directory in config for later
104                 File parent = inFile.getParentFile();
105                 if (parent != null) {
106                         Config.setConfigString(Config.KEY_TRACK_DIR, parent.getAbsolutePath());
107                 }
108                 // Check file type to see if it's xml or just normal text
109                 String fileExtension = inFile.getName().toLowerCase();
110                 if (fileExtension.length() > 4)
111                         {fileExtension = fileExtension.substring(fileExtension.length() - 4);}
112                 if (fileExtension.equals(".kml") || fileExtension.equals(".gpx")
113                         || fileExtension.equals(".xml"))
114                 {
115                         // Use xml loader for kml, gpx and xml filenames
116                         _xmlFileLoader.openFile(inFile);
117                 }
118                 else if (fileExtension.equals(".kmz") || fileExtension.equals(".zip"))
119                 {
120                         // Use zip loader for zipped kml (or zipped gpx)
121                         _zipFileLoader.openFile(inFile);
122                 }
123                 else if (fileExtension.endsWith(".gz") || fileExtension.equals("gzip"))
124                 {
125                         // Use gzip loader for gzipped xml
126                         _gzipFileLoader.openFile(inFile);
127                 }
128                 else if (fileExtension.equals("nmea"))
129                 {
130                         _nmeaFileLoader.openFile(inFile);
131                 }
132                 else
133                 {
134                         // Use text loader for everything else
135                         _textFileLoader.openFile(inFile);
136                 }
137         }
138
139         /**
140          * @return the last delimiter character used for a text file load
141          */
142         public char getLastUsedDelimiter()
143         {
144                 return _textFileLoader.getLastUsedDelimiter();
145         }
146 }