1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 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) {}
}
}
}
|