]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/FileLoader.java
Version 6, October 2008
[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 import javax.swing.JOptionPane;
8
9 import tim.prune.App;
10 import tim.prune.Config;
11 import tim.prune.I18nManager;
12 import tim.prune.load.xml.XmlFileLoader;
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 JFileChooser _fileChooser = null;
22         private JFrame _parentFrame;
23         private TextFileLoader _textFileLoader = null;
24         private XmlFileLoader _xmlFileLoader = null;
25
26
27         /**
28          * Constructor
29          * @param inApp Application object to inform of track load
30          * @param inParentFrame parent frame to reference for dialogs
31          */
32         public FileLoader(App inApp, JFrame inParentFrame)
33         {
34                 _parentFrame = inParentFrame;
35                 _textFileLoader = new TextFileLoader(inApp, inParentFrame);
36                 _xmlFileLoader = new XmlFileLoader(inApp, inParentFrame);
37         }
38
39
40         /**
41          * Select an input file and open the GUI frame
42          * to select load options
43          */
44         public void openFile()
45         {
46                 // Construct file chooser if necessary
47                 if (_fileChooser == null)
48                 {
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);}
57                 }
58                 // Show the open dialog
59                 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
60                 {
61                         File file = _fileChooser.getSelectedFile();
62                         // Check file exists and is readable
63                         if (file != null && file.exists() && file.canRead())
64                         {
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"))
73                                 {
74                                         // Use xml loader for kml, gpx and xml filenames
75                                         _xmlFileLoader.openFile(file);
76                                 }
77                                 else
78                                 {
79                                         // Use text loader for everything else
80                                         _textFileLoader.openFile(file);
81                                 }
82                         }
83                         else
84                         {
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);
88                         }
89                 }
90         }
91
92         /**
93          * @return the last delimiter character used for a text file load
94          */
95         public char getLastUsedDelimiter()
96         {
97                 return _textFileLoader.getLastUsedDelimiter();
98         }
99 }