diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipArchive.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipArchive.java index ade36b3c2f271768bfa1c29c42848417126fb0f9..d827598b6f85a65ce3d7db04ea2a943a5a388f99 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipArchive.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipArchive.java @@ -12,7 +12,6 @@ import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; -import java.util.zip.ZipException; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; @@ -25,36 +24,14 @@ public class CityGmlZipArchive implements Serializable { private List<CityGmlZipEntry> entries; private final Path archivePath; + private final String archiveNameRE; private ZipFile zipFile; public static CityGmlZipArchive fromZipFile(String zipFile, ParserConfiguration config) { - ArrayList<CityGmlZipEntry> archiveEntries = new ArrayList<>(); - ZipFile zip = null; - try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { - zip = new ZipFile(zipFile); - ZipEntry ze; - while ((ze = zis.getNextEntry()) != null ) - { - if (ze.isDirectory()) { - continue; - } - if (ze.getName().endsWith(".gml")) { - archiveEntries.add(CityGmlZipEntry.of(ze, config)); - } - } - } catch (IOException e) { - logger.error(e); - } finally { - if(zip != null){ - try { - zip.close(); - } catch (IOException e) { - logger.error(e); - } - } - } - logger.info("Zip-archive successfully uncompressed, {} CityGml files detected", archiveEntries.size()); - return new CityGmlZipArchive(archiveEntries, Path.of(zipFile)); + CityGmlZipArchive archive = CityGmlZipArchive.register(zipFile); + archive.mountArchive(config); + logger.info("Zip-archive successfully uncompressed, {} CityGml files detected", archive.getEntries().size()); + return archive; } public static CityGmlZipArchive register(String zipFile) { @@ -68,7 +45,7 @@ public class CityGmlZipArchive implements Serializable { continue; } if (ze.getName().endsWith(".gml")) { - archiveEntries.add(CityGmlZipEntry.register(ze)); + archiveEntries.add(CityGmlZipEntry.register(ze, cgmlArchive)); } } cgmlArchive.setEntries(archiveEntries); @@ -93,11 +70,7 @@ public class CityGmlZipArchive implements Serializable { private CityGmlZipArchive(Path archivePath){ this.archivePath = archivePath; - } - - private CityGmlZipArchive(List<CityGmlZipEntry> entries, Path archivePath) { - setEntries(entries); - this.archivePath = archivePath; + this.archiveNameRE = archivePath.getFileName().toString().replace(".zip","") + File.separator; } private void setEntries(List<CityGmlZipEntry> entries) { @@ -111,14 +84,20 @@ public class CityGmlZipArchive implements Serializable { public CityGmlZipEntry getEntry(String fileName) { + fileName = stripArchivePath(fileName); for(CityGmlZipEntry entry : entries){ - if(entry.getFileName().equals(fileName)){ + String entryName = stripArchivePath(entry.getFileName()); + if(entryName.equals(fileName)){ return entry; } } return null; } + private String stripArchivePath(String path) { + Path systemPath = Path.of(path); + return systemPath.toString().replace(archiveNameRE, ""); + } public Path getArchivePath() { return archivePath; diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipEntry.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipEntry.java index 78ea6ee7fc764e44b0fa2e5fe56654608effd968..487064e1a9cbf1175fa873266f2f93c97e93a488 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipEntry.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipEntry.java @@ -27,8 +27,8 @@ public class CityGmlZipEntry { private static final long MB = 1024 * 1024L; private ZipEntryErrorType errorType = null; - public static CityGmlZipEntry of(ZipEntry entry, ParserConfiguration config){ - CityGmlZipEntry ze = CityGmlZipEntry.register(entry); + public static CityGmlZipEntry of(ZipEntry entry,CityGmlZipArchive parentArchive, ParserConfiguration config){ + CityGmlZipEntry ze = CityGmlZipEntry.register(entry, parentArchive); ze.loadEntry(config); return ze; } @@ -53,8 +53,8 @@ public class CityGmlZipEntry { } } - public static CityGmlZipEntry register(ZipEntry entry){ - CityGmlZipEntry cgzEntry = new CityGmlZipEntry(entry, false); + public static CityGmlZipEntry register(ZipEntry entry, CityGmlZipArchive parentArchive){ + CityGmlZipEntry cgzEntry = new CityGmlZipEntry(entry, parentArchive,false); try{ if (!cgzEntry.entrySizeWithinMemoryLimits()) { cgzEntry.errorType = ZipEntryErrorType.EXCESSIVE_FILESIZE; @@ -85,10 +85,11 @@ public class CityGmlZipEntry { } - protected CityGmlZipEntry(ZipEntry entry, boolean decompressed) { + protected CityGmlZipEntry(ZipEntry entry,CityGmlZipArchive parentArchive, boolean decompressed) { this.fileName = entry.getName(); this.model = null; this.decompressed = decompressed; + this.parentArchive = parentArchive; } protected CityGmlZipEntry(String fileName, boolean decompressed) {