+++ /dev/null
-package tim.prune.load;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.TreeSet;
-
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-
-import tim.prune.App;
-import tim.prune.config.Config;
-import tim.prune.data.Photo;
-import tim.prune.load.xml.GzipFileLoader;
-import tim.prune.load.xml.XmlFileLoader;
-import tim.prune.load.xml.ZipFileLoader;
-
-
-/**
- * Generic FileLoader class to select a file
- * and pass handling on to appropriate loader
- */
-public class FileLoader
-{
- private App _app;
- private JFileChooser _fileChooser = null;
- private JFrame _parentFrame;
- private TextFileLoader _textFileLoader = null;
- private NmeaFileLoader _nmeaFileLoader = null;
- private XmlFileLoader _xmlFileLoader = null;
- private ZipFileLoader _zipFileLoader = null;
- private GzipFileLoader _gzipFileLoader = null;
-
-
- /**
- * Constructor
- * @param inApp Application object to inform of track load
- * @param inParentFrame parent frame to reference for dialogs
- */
- public FileLoader(App inApp, JFrame inParentFrame)
- {
- _app = inApp;
- _parentFrame = inParentFrame;
- _textFileLoader = new TextFileLoader(inApp, inParentFrame);
- _nmeaFileLoader = new NmeaFileLoader(inApp);
- _xmlFileLoader = new XmlFileLoader(inApp);
- _zipFileLoader = new ZipFileLoader(inApp, _xmlFileLoader);
- _gzipFileLoader = new GzipFileLoader(inApp, _xmlFileLoader);
- }
-
-
- /**
- * Select an input file and open the GUI frame
- * to select load options
- */
- public void openFile()
- {
- // Construct file chooser if necessary
- if (_fileChooser == null)
- {
- _fileChooser = new JFileChooser();
- _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.txt", new String[] {"txt", "text"}));
- _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.gpx", new String[] {"gpx"}));
- _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kml", new String[] {"kml"}));
- _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kmz", new String[] {"kmz"}));
- _fileChooser.setAcceptAllFileFilterUsed(true);
- _fileChooser.setFileFilter(_fileChooser.getAcceptAllFileFilter()); // For some reason seems necessary
- // start from directory in config if already set (by load jpegs)
- String configDir = Config.getConfigString(Config.KEY_TRACK_DIR);
- if (configDir == null) {configDir = Config.getConfigString(Config.KEY_PHOTO_DIR);}
- if (configDir != null) {_fileChooser.setCurrentDirectory(new File(configDir));}
- _fileChooser.setMultiSelectionEnabled(true); // Allow multiple selections
- }
- // Show the open dialog
- if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
- {
- File[] files = _fileChooser.getSelectedFiles();
- // Loop through files looking for files which exist and are readable
- ArrayList<File> dataFiles = new ArrayList<File>();
- if (files != null)
- {
- for (int i=0; i<files.length; i++)
- {
- File file = files[i];
- if (file.exists() && file.isFile() && file.canRead())
- {
- dataFiles.add(file);
- }
- }
- }
- if (dataFiles.size() > 0) {
- _app.loadDataFiles(dataFiles);
- }
- else
- {
- // couldn't find any files to load - show error message
- _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
- }
- }
- }
-
- /**
- * Open the selected input file
- * @param inFile file to open
- */
- public void openFile(File inFile)
- {
- // Store directory in config for later
- File parent = inFile.getParentFile();
- if (parent != null) {
- Config.setConfigString(Config.KEY_TRACK_DIR, parent.getAbsolutePath());
- }
- // Check file type to see if it's xml or just normal text
- String fileExtension = inFile.getName().toLowerCase();
- if (fileExtension.length() > 4) {
- fileExtension = fileExtension.substring(fileExtension.length() - 4);
- }
- if (fileExtension.equals(".kml") || fileExtension.equals(".gpx")
- || fileExtension.equals(".xml"))
- {
- // Use xml loader for kml, gpx and xml filenames
- _xmlFileLoader.openFile(inFile);
- }
- else if (fileExtension.equals(".kmz") || fileExtension.equals(".zip"))
- {
- // Use zip loader for zipped kml (or zipped gpx)
- _zipFileLoader.openFile(inFile);
- }
- else if (fileExtension.endsWith(".gz") || fileExtension.equals("gzip"))
- {
- // Use gzip loader for gzipped xml
- _gzipFileLoader.openFile(inFile);
- }
- else if (fileExtension.equals("nmea"))
- {
- _nmeaFileLoader.openFile(inFile);
- }
- else if (fileExtension.equals(".jpg") || fileExtension.equals("jpeg"))
- {
- Photo photo = JpegLoader.createPhoto(inFile);
- TreeSet<Photo> photoSet = new TreeSet<Photo>(new MediaSorter());
- photoSet.add(photo);
- _app.informPhotosLoaded(photoSet);
- _app.informNoDataLoaded(); // To trigger load of next file if any
- }
- else
- {
- // Use text loader for everything else
- _textFileLoader.openFile(inFile);
- }
- }
-
- /**
- * @return the last delimiter character used for a text file load
- */
- public char getLastUsedDelimiter()
- {
- return _textFileLoader.getLastUsedDelimiter();
- }
-}