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 75 76 77 78 79 80 81 82 83 84 85 86 87
|
package tim.prune.load.xml;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import tim.prune.App;
import tim.prune.data.SourceInfo;
import tim.prune.load.FileToBeLoaded;
import tim.prune.load.FileTypeLoader;
import tim.prune.load.MediaLinkInfo;
/**
* Class to handle the loading of zipped xml files
*/
public class ZipFileLoader
{
/** App for callback of file loading */
private App _app = null;
/** Object to do the handling of the xml */
private XmlFileLoader _xmlLoader = null;
/**
* Constructor
* @param inApp App object
* @param inXmlLoader object to do the xml handling
*/
public ZipFileLoader(App inApp, XmlFileLoader inXmlLoader)
{
_app = inApp;
_xmlLoader = inXmlLoader;
}
/**
* Open the selected file and select appropriate xml loader
* @param inFileLock File to open
* @param inAutoAppend true to auto-append
*/
public void openFile(FileToBeLoaded inFileLock, boolean inAutoAppend)
{
try
{
ZipFile file = new ZipFile(inFileLock.getFile());
Enumeration<?> entries = file.entries();
boolean xmlFound = false;
while (entries.hasMoreElements() && !xmlFound)
{
ZipEntry entry = (ZipEntry) entries.nextElement();
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();
// Parse the stream using either Xerces or java classes
_xmlLoader.parseXmlStream(file.getInputStream(entry));
XmlHandler handler = _xmlLoader.getHandler();
if (handler == null) {
_app.showErrorMessage("error.load.dialogtitle", "error.load.othererror");
}
else
{
// Send back to app
SourceInfo sourceInfo = new SourceInfo(inFileLock.getFile(), handler.getFileType(),
handler.getFileVersion());
sourceInfo.setFileTitle(handler.getFileTitle());
sourceInfo.setFileDescription(handler.getFileDescription());
sourceInfo.setExtensionInfo(handler.getExtensionInfo());
new FileTypeLoader(_app).loadData(handler, sourceInfo, inAutoAppend,
new MediaLinkInfo(inFileLock.getFile(), handler.getLinkArray()));
xmlFound = true;
}
}
}
}
file.close();
// Check whether there was an xml file inside
if (!xmlFound) {
_app.showErrorMessage("error.load.dialogtitle", "error.load.noxmlinzip");
}
}
catch (Exception e) {
_app.showErrorMessageNoLookup("error.load.dialogtitle", e.getClass().getName() + "\n - " + e.getMessage());
}
}
}
|