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) {}
}
}
}