X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fload%2FFileLoader.java;fp=src%2Ftim%2Fprune%2Fload%2FFileLoader.java;h=52bdef232942f0c5290d2c8160dccba45ce0ef92;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/load/FileLoader.java b/src/tim/prune/load/FileLoader.java new file mode 100644 index 0000000..52bdef2 --- /dev/null +++ b/src/tim/prune/load/FileLoader.java @@ -0,0 +1,159 @@ +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 dataFiles = new ArrayList(); + if (files != null) + { + for (int i=0; i 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 photoSet = new TreeSet(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(); + } +}