X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fload%2Fxml%2FZipFileLoader.java;h=20b3ab2f753d69d302cb27cb13098a8109ad3069;hb=f35b6d628f68e3b5ef19965ad8988d0dd1eb8efa;hp=cf3801c3053fd34f8b7322b35f764a9add4e73c3;hpb=54b9d8bc8f0025ccf97a67d9dd217ef1f9cf082f;p=GpsPrune.git diff --git a/tim/prune/load/xml/ZipFileLoader.java b/tim/prune/load/xml/ZipFileLoader.java index cf3801c..20b3ab2 100644 --- a/tim/prune/load/xml/ZipFileLoader.java +++ b/tim/prune/load/xml/ZipFileLoader.java @@ -1,15 +1,18 @@ package tim.prune.load.xml; import java.io.File; +import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import tim.prune.App; import tim.prune.data.Altitude; +import tim.prune.data.SourceInfo; /** * Class to handle the loading of zipped xml files @@ -19,7 +22,7 @@ public class ZipFileLoader /** App for callback of file loading */ private App _app = null; /** Object to do the handling of the xml */ - XmlFileLoader _xmlLoader = null; + private XmlFileLoader _xmlLoader = null; /** * Constructor @@ -33,7 +36,7 @@ public class ZipFileLoader } /** - * Open the selected file and show the GUI dialog to select load options + * Open the selected file and select appropriate xml loader * @param inFile File to open */ public void openFile(File inFile) @@ -61,8 +64,10 @@ public class ZipFileLoader } else { // Send back to app + SourceInfo sourceInfo = new SourceInfo(inFile, + (handler instanceof GpxHandler?SourceInfo.FILE_TYPE.GPX:SourceInfo.FILE_TYPE.KML)); _app.informDataLoaded(handler.getFieldArray(), handler.getDataArray(), - Altitude.Format.METRES, inFile.getName()); + Altitude.Format.METRES, sourceInfo, handler.getTrackNameList(), handler.getLinkArray()); xmlFound = true; } } @@ -75,8 +80,53 @@ public class ZipFileLoader } } catch (Exception e) { - System.err.println("Error: " + e.getMessage()); + System.err.println("ZipFile Error: " + e.getClass().getName() + " -message= " + e.getMessage()); } } + /** + * Use the given stream to access a remote zip file + * @param inStream stream to use to access file + */ + public void openStream(InputStream inStream) + { + try + { + ZipInputStream zis = new ZipInputStream(inStream); + boolean xmlFound = false; + while (!xmlFound && zis.available() > 0) + { + ZipEntry entry = zis.getNextEntry(); + String entryName = entry.toString(); + if (entryName != null && entryName.length() > 4) + { + String suffix = entryName.substring(entryName.length()-4).toLowerCase(); + if (suffix.equals(".kml") || suffix.equals(".gpx") || suffix.equals(".xml")) + { + _xmlLoader.reset(); + SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); + saxParser.parse(zis, _xmlLoader); + XmlHandler handler = _xmlLoader.getHandler(); + if (handler == null) { + _app.showErrorMessage("error.load.dialogtitle", "error.load.othererror"); + } + else { + // Send back to app + _app.informDataLoaded(handler.getFieldArray(), handler.getDataArray(), + Altitude.Format.METRES, new SourceInfo("gpsies", SourceInfo.FILE_TYPE.GPSIES), + handler.getTrackNameList()); + xmlFound = true; + } + } + } + } + // Check whether there was an xml file inside + if (!xmlFound) { + _app.showErrorMessage("error.load.dialogtitle", "error.load.noxmlinzip"); + } + } + catch (Exception e) { + System.err.println("ZipStream Error: " + e.getClass().getName() + " -message= " + e.getMessage()); + } + } }