Skip to content
GitLab
Explore
Projects
Groups
Snippets
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
d1bfb680
Commit
d1bfb680
authored
3 months ago
by
Riegel
Browse files
Options
Download
Email Patches
Plain Diff
Refactor: Rework parsing to use Streams instead of tempDir
parent
ead7a434
master
dev
dev_cpp_code_conversion
dev_gui_features_zip_loading
3.17.0
archive/dev_gui_features_zip_loading
2 merge requests
!28
Version 3.17.0 Release
,
!26
Add ZIP-archive support
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlArchive.java
+11
-10
...e/hft/stuttgart/citydoctor2/ziploader/CityGmlArchive.java
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlZipEntry.java
+17
-13
.../hft/stuttgart/citydoctor2/ziploader/CityGmlZipEntry.java
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/utils/ArchivePacker.java
+2
-1
.../stuttgart/citydoctor2/ziploader/utils/ArchivePacker.java
CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/java/de/hft/stuttgart/citydoctor2/ziploader/ZipTest.java
+0
-17
.../java/de/hft/stuttgart/citydoctor2/ziploader/ZipTest.java
with
30 additions
and
41 deletions
+30
-41
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlArchive.java
+
11
-
10
View file @
d1bfb680
package
de.hft.stuttgart.citydoctor2.ziploader
;
import
de.hft.stuttgart.citydoctor2.check.Checker
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel
;
import
de.hft.stuttgart.citydoctor2.parser.ParserConfiguration
;
import
de.hft.stuttgart.citydoctor2.ziploader.utils.ArchivePacker
;
import
org.apache.commons.io.FileUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.Serial
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.util.ArrayList
;
import
java.util.Enumeration
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipFile
;
import
java.util.zip.ZipInputStream
;
...
...
@@ -32,6 +26,7 @@ public class CityGmlArchive {
private
static
final
long
serialVersionUID
=
2168389511043362615L
;
private
final
List
<
CityGmlZipEntry
>
entries
;
private
final
Path
archivePath
;
public
static
CityGmlArchive
fromZipFile
(
String
zipFile
,
ParserConfiguration
config
)
{
ArrayList
<
CityGmlZipEntry
>
archiveEntries
=
new
ArrayList
<>();
...
...
@@ -60,11 +55,13 @@ public class CityGmlArchive {
}
}
logger
.
info
(
"Zip-archive successfully uncompressed, {} CityGml files detected"
,
archiveEntries
.
size
());
return
new
CityGmlArchive
(
archiveEntries
);
return
new
CityGmlArchive
(
archiveEntries
,
Path
.
of
(
zipFile
)
);
}
private
CityGmlArchive
(
List
<
CityGmlZipEntry
>
entries
)
{
private
CityGmlArchive
(
List
<
CityGmlZipEntry
>
entries
,
Path
archivePath
)
{
this
.
entries
=
entries
;
entries
.
forEach
(
e
->
e
.
setArchive
(
this
));
this
.
archivePath
=
archivePath
;
}
public
void
exportToZipFile
(
String
path
)
{
...
...
@@ -78,6 +75,10 @@ public class CityGmlArchive {
}
}
public
Path
getArchivePath
()
{
return
archivePath
;
}
public
List
<
CityGmlZipEntry
>
getEntries
()
{
return
entries
;
}
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlZipEntry.java
+
17
-
13
View file @
d1bfb680
...
...
@@ -18,26 +18,22 @@ public class CityGmlZipEntry {
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
CityGmlZipEntry
.
class
);
private
String
fileName
;
private
String
archivePath
;
private
CityDoctorModel
model
;
private
boolean
erroneousEntry
=
false
;
private
boolean
isLibraryObject
=
false
;
private
final
String
fileName
;
private
final
CityDoctorModel
model
;
private
CityGmlArchive
parentArchive
;
private
boolean
validated
=
false
;
private
ZipEntryErrorType
errorType
=
null
;
public
static
CityGmlZipEntry
of
(
ZipEntry
entry
,
ParserConfiguration
config
,
String
archivePath
,
Path
tempDir
,
InputStream
is
){
CityGmlZipEntry
cgzEntry
=
new
CityGmlZipEntry
();
cgzEntry
.
fileName
=
entry
.
getName
();
cgzEntry
.
archivePath
=
archivePath
;
public
static
CityGmlZipEntry
of
(
ZipEntry
entry
,
ZipFile
archive
,
ParserConfiguration
config
){
if
((
double
)
entry
.
getSize
()
/
1024
/
1024
>
20
)
{
return
new
ErroneousEntry
(
entry
,
ZipEntryErrorType
.
EXCESSIVE_FILESIZE
);
}
else
{
try
{
Files
.
copy
(
is
,
Path
.
of
(
tempDir
.
toString
(),
entry
.
getName
()
));
ZipInputStream
zis
=
new
ZipInputStream
(
archive
.
getInputStream
(
entry
));
CityGmlParser
.
gagLogger
(
true
);
cgzEntry
.
model
=
CityGmlParser
.
parseCityGmlFile
(
tempDir
.
toString
()
+
File
.
separator
+
entry
.
getName
(),
config
);
CityDoctorModel
model
=
CityGmlParser
.
parseCityGmlStream
(
zis
,
config
);
return
new
CityGmlZipEntry
(
entry
.
getName
(),
model
);
}
catch
(
CityGmlParseException
|
InvalidGmlFileException
e
)
{
logger
.
error
(
e
);
return
new
ErroneousEntry
(
entry
,
ZipEntryErrorType
.
INVALID_CITY_GML_FILE
);
...
...
@@ -46,7 +42,6 @@ public class CityGmlZipEntry {
return
new
ErroneousEntry
(
entry
,
ZipEntryErrorType
.
IO_ERROR
);
}
}
return
cgzEntry
;
}
private
CityGmlZipEntry
(
String
filename
,
CityDoctorModel
model
){
...
...
@@ -58,6 +53,15 @@ public class CityGmlZipEntry {
this
.
fileName
=
entry
.
getName
();
this
.
model
=
null
;
}
public
void
setArchive
(
CityGmlArchive
archive
){
parentArchive
=
archive
;
}
public
CityGmlArchive
getArchive
(){
return
parentArchive
;
}
public
void
validateModel
(){
Checker
checker
=
new
Checker
(
this
.
getModel
());
checker
.
runChecks
();
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/utils/ArchivePacker.java
+
2
-
1
View file @
d1bfb680
...
...
@@ -3,6 +3,7 @@ package de.hft.stuttgart.citydoctor2.ziploader.utils;
import
de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel
;
import
de.hft.stuttgart.citydoctor2.ziploader.CityGmlArchive
;
import
de.hft.stuttgart.citydoctor2.ziploader.CityGmlZipEntry
;
import
de.hft.stuttgart.citydoctor2.ziploader.ErroneousEntry
;
import
org.apache.commons.io.FileUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
...
...
@@ -31,7 +32,7 @@ public class ArchivePacker {
tmpDir
=
Files
.
createTempDirectory
(
"zipTmp"
);
tmpDir
.
toFile
().
deleteOnExit
();
for
(
CityGmlZipEntry
entry
:
archive
.
getEntries
())
{
if
(
entry
.
is
ErroneousEntry
()
){
if
(
entry
instanceof
ErroneousEntry
){
continue
;
}
CityDoctorModel
model
=
entry
.
getModel
();
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorZipLoader/src/test/java/de/hft/stuttgart/citydoctor2/ziploader/ZipTest.java
+
0
-
17
View file @
d1bfb680
...
...
@@ -5,13 +5,10 @@ import org.apache.commons.io.FileUtils;
import
org.junit.Rule
;
import
org.junit.Test
;
import
org.junit.rules.ExpectedException
;
import
org.mockito.Mockito
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.util.zip.ZipEntry
;
import
static
org
.
junit
.
Assert
.*;
...
...
@@ -42,20 +39,6 @@ public class ZipTest {
cgmlArch
.
exportToZipFile
(
"src/test/resources/mock"
);
}
@Test
public
void
testExcessiveFilesize
(){
ZipEntry
zipEntry
=
Mockito
.
mock
(
ZipEntry
.
class
);
Path
mockPath
=
Mockito
.
mock
(
Path
.
class
);
InputStream
mockIs
=
Mockito
.
mock
(
InputStream
.
class
);
// Mock filesize of 30 Gb
Mockito
.
when
(
zipEntry
.
getSize
()).
thenReturn
(
1024L
*
1024L
*
30
);
Mockito
.
when
(
zipEntry
.
getName
()).
thenReturn
(
"mock.gml"
);
CityGmlZipEntry
cgmlZE
=
CityGmlZipEntry
.
of
(
zipEntry
,
config
,
"test"
,
mockPath
,
mockIs
);
assertNotNull
(
cgmlZE
);
assertTrue
(
cgmlZE
.
isErroneousEntry
());
assertEquals
(
CityGmlZipEntry
.
ZipEntryErrorType
.
EXCESSIVE_FILESIZE
,
cgmlZE
.
getErrorType
());
}
@Test
public
void
testZipping
()
throws
IOException
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Snippets