]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/load/xml/GzipFileLoader.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / load / xml / GzipFileLoader.java
diff --git a/src/tim/prune/load/xml/GzipFileLoader.java b/src/tim/prune/load/xml/GzipFileLoader.java
new file mode 100644 (file)
index 0000000..4be2bab
--- /dev/null
@@ -0,0 +1,74 @@
+package tim.prune.load.xml;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.zip.GZIPInputStream;
+import tim.prune.App;
+import tim.prune.I18nManager;
+import tim.prune.data.SourceInfo;
+import tim.prune.load.MediaLinkInfo;
+
+/**
+ * Class to handle the loading of gzipped xml files
+ */
+public class GzipFileLoader
+{
+       /** App for callback of file loading */
+       private App _app = null;
+       /** Object to do the handling of the xml */
+       XmlFileLoader _xmlLoader = null;
+
+       /**
+        * Constructor
+        * @param inApp App object
+        * @param inXmlLoader object to do the xml handling
+        */
+       public GzipFileLoader(App inApp, XmlFileLoader inXmlLoader)
+       {
+               _app = inApp;
+               _xmlLoader = inXmlLoader;
+       }
+
+       /**
+        * Open the selected file and select appropriate xml loader
+        * @param inFile File to open
+        */
+       public void openFile(File inFile)
+       {
+               GZIPInputStream istream = null;
+               try
+               {
+                       istream = new GZIPInputStream(new FileInputStream(inFile));
+                       _xmlLoader.reset();
+                       // Parse the stream using either Xerces or java classes
+                       _xmlLoader.parseXmlStream(istream);
+                       XmlHandler handler = _xmlLoader.getHandler();
+                       if (handler == null) {
+                               _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
+                       }
+                       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(),
+                                       null, sourceInfo, handler.getTrackNameList(),
+                                       new MediaLinkInfo(inFile, handler.getLinkArray()));
+                       }
+               }
+               catch (Exception e)
+               {
+                       // Error occurred, could be a non-xml file borking the parser
+                       _app.showErrorMessageNoLookup("error.load.dialogtitle",
+                               I18nManager.getText("error.load.othererror") + " " + e.getClass().getName());
+                       // It would be nice to verify the filename of the file inside the gz,
+                       // but the java classes don't give access to this information
+               }
+               finally {
+                       try {
+                               istream.close();
+                       }
+                       catch (Exception e2) {}
+               }
+       }
+}