Commit 3563658f authored by Riegel's avatar Riegel
Browse files

Refactor: Use new FactoryMethods for parsing

2 merge requests!28Version 3.17.0 Release,!26Add ZIP-archive support
Showing with 20 additions and 40 deletions
+20 -40
......@@ -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;
......
......@@ -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) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment