Commit b312c808 authored by Riegel's avatar Riegel
Browse files

Refactor: Rework CityGmlArchive to use Streams for parsing

2 merge requests!28Version 3.17.0 Release,!26Add ZIP-archive support
Showing with 15 additions and 15 deletions
+15 -15
...@@ -8,6 +8,7 @@ import org.apache.commons.io.FileUtils; ...@@ -8,6 +8,7 @@ import org.apache.commons.io.FileUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.Serial; import java.io.Serial;
...@@ -17,8 +18,11 @@ import java.nio.file.Paths; ...@@ -17,8 +18,11 @@ import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class CityGmlArchive { public class CityGmlArchive {
...@@ -31,29 +35,25 @@ public class CityGmlArchive { ...@@ -31,29 +35,25 @@ public class CityGmlArchive {
public static CityGmlArchive fromZipFile(String zipFile, ParserConfiguration config) { public static CityGmlArchive fromZipFile(String zipFile, ParserConfiguration config) {
ArrayList<CityGmlZipEntry> archiveEntries = new ArrayList<>(); ArrayList<CityGmlZipEntry> archiveEntries = new ArrayList<>();
Path tmpDir = null; ZipFile zip = null;
try (ZipFile zipFileObj = new ZipFile(zipFile)) { try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));) {
tmpDir = Files.createTempDirectory("zipTmp"); zip = new ZipFile(zipFile);
tmpDir.toFile().deleteOnExit(); ZipEntry ze;
for (Enumeration<? extends ZipEntry> entries = zipFileObj.entries(); entries.hasMoreElements();) { while ((ze = zis.getNextEntry()) != null )
ZipEntry entry = entries.nextElement(); {
if (entry.isDirectory()) { if (ze.isDirectory()) {
continue; continue;
} }
if (entry.getName().endsWith(".gml")) { if (ze.getName().endsWith(".gml")) {
InputStream is = zipFileObj.getInputStream(entry); archiveEntries.add(CityGmlZipEntry.of(ze, zip, config));
archiveEntries.add(CityGmlZipEntry.of(entry, config, zipFile, tmpDir, is));
} }
} }
} catch (IOException e) { } catch (IOException e) {
logger.error(e); logger.error(e);
} catch (Exception e){
// Catch and rethrow other Exceptions to ensure tmpDir deletion in finally block
throw e;
} finally { } finally {
if (tmpDir != null) { if(zip != null){
try { try {
FileUtils.deleteDirectory(tmpDir.toFile()); zip.close();
} catch (IOException e) { } catch (IOException e) {
logger.error(e); logger.error(e);
} }
......
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