Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
a1ec190b
Commit
a1ec190b
authored
Nov 27, 2024
by
Riegel
Browse files
Feat: Implement unzipping of zip-files
parent
db25e16d
Changes
3
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlArchive.java
View file @
a1ec190b
package
de.hft.stuttgart.citydoctor2.ziploader
;
package
de.hft.stuttgart.citydoctor2.ziploader
;
import
de.hft.stuttgart.citydoctor2.check.Checker
;
import
de.hft.stuttgart.citydoctor2.check.Checker
;
import
de.hft.stuttgart.citydoctor2.parser.ParserConfiguration
;
import
org.apache.commons.io.FileUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
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.ArrayList
;
import
java.util.Enumeration
;
import
java.util.List
;
import
java.util.List
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipFile
;
public
class
CityGmlArchive
{
public
class
CityGmlArchive
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
CityGmlArchive
.
class
);
@Serial
private
static
final
long
serialVersionUID
=
2168389511043362615L
;
private
List
<
CityGmlZipEntry
>
entries
;
private
List
<
CityGmlZipEntry
>
entries
;
public
CityGmlArchive
(
List
<
CityGmlZipEntry
>
entries
)
{
private
boolean
validated
=
false
;
public
static
CityGmlArchive
fromZipFile
(
String
zipFile
,
ParserConfiguration
config
)
{
ArrayList
<
CityGmlZipEntry
>
archiveEntries
=
new
ArrayList
<>();
Path
tmpDir
=
null
;
try
(
ZipFile
zipFileObj
=
new
ZipFile
(
zipFile
))
{
tmpDir
=
Files
.
createTempDirectory
(
"zipTmp"
);
tmpDir
.
toFile
().
deleteOnExit
();
for
(
Enumeration
<?
extends
ZipEntry
>
entries
=
zipFileObj
.
entries
();
entries
.
hasMoreElements
();)
{
ZipEntry
entry
=
entries
.
nextElement
();
if
(
entry
.
isDirectory
())
{
continue
;
}
if
(
entry
.
getName
().
endsWith
(
".gml"
))
{
InputStream
is
=
zipFileObj
.
getInputStream
(
entry
);
Files
.
copy
(
is
,
Path
.
of
(
tmpDir
.
toString
(),
entry
.
getName
()));
archiveEntries
.
add
(
CityGmlZipEntry
.
of
(
entry
,
config
,
zipFile
,
tmpDir
));
}
}
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
catch
(
Exception
e
){
throw
e
;
}
finally
{
if
(
tmpDir
!=
null
)
{
try
{
FileUtils
.
deleteDirectory
(
tmpDir
.
toFile
());
}
catch
(
IOException
e
)
{
logger
.
error
(
e
);
}
}
}
logger
.
info
(
"Parsed zip-archive with {} entries"
,
archiveEntries
.
size
());
return
new
CityGmlArchive
(
archiveEntries
);
}
private
CityGmlArchive
(
List
<
CityGmlZipEntry
>
entries
)
{
this
.
entries
=
entries
;
this
.
entries
=
entries
;
}
}
public
void
exportToZipFile
(
String
path
)
{
if
(!
path
.
endsWith
(
".zip"
)){
throw
new
IllegalArgumentException
(
"Target zip-filepath must end with '.zip'"
);
}
if
(
validated
)
{
//TODO: Export of validation reports for each entry
}
}
public
void
checkEntries
(){
public
void
checkEntries
(){
validated
=
false
;
for
(
CityGmlZipEntry
entry
:
entries
){
for
(
CityGmlZipEntry
entry
:
entries
){
Checker
checker
=
new
Checker
(
entry
.
getModel
());
Checker
checker
=
new
Checker
(
entry
.
getModel
());
checker
.
runChecks
();
checker
.
runChecks
();
}
}
validated
=
true
;
}
public
List
<
CityGmlZipEntry
>
getEntries
()
{
return
entries
;
}
}
}
}
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlZipEntry.java
View file @
a1ec190b
package
de.hft.stuttgart.citydoctor2.ziploader
;
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.datastructure.CityDoctorModel
;
import
de.hft.stuttgart.citydoctor2.parser.CityGmlParseException
;
import
de.hft.stuttgart.citydoctor2.parser.CityGmlParseException
;
import
de.hft.stuttgart.citydoctor2.parser.CityGmlParser
;
import
de.hft.stuttgart.citydoctor2.parser.CityGmlParser
;
...
@@ -8,6 +9,10 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
...
@@ -8,6 +9,10 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
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.IOException
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipEntry
;
public
class
CityGmlZipEntry
{
public
class
CityGmlZipEntry
{
...
@@ -19,23 +24,38 @@ public class CityGmlZipEntry {
...
@@ -19,23 +24,38 @@ public class CityGmlZipEntry {
private
String
archivePath
;
private
String
archivePath
;
private
CityDoctorModel
model
;
private
CityDoctorModel
model
;
private
boolean
erroneous
=
false
;
private
boolean
erroneous
Entry
=
false
;
private
boolean
isLibraryObject
=
false
;
private
boolean
isLibraryObject
=
false
;
private
boolean
validated
=
false
;
public
static
CityGmlZipEntry
of
(
ZipEntry
entry
,
ParserConfiguration
config
,
String
archivePath
){
public
static
CityGmlZipEntry
of
(
ZipEntry
entry
,
ParserConfiguration
config
,
String
archivePath
,
Path
tempDir
){
CityGmlZipEntry
cgzEntry
=
new
CityGmlZipEntry
();
CityGmlZipEntry
cgzEntry
=
new
CityGmlZipEntry
();
cgzEntry
.
fileName
=
entry
.
getName
();
cgzEntry
.
fileName
=
entry
.
getName
();
cgzEntry
.
archivePath
=
archivePath
;
cgzEntry
.
archivePath
=
archivePath
;
try
{
try
{
cgzEntry
.
model
=
CityGmlParser
.
parseCityGmlFile
(
entry
.
getName
(),
config
);
CityGmlParser
.
gagLogger
(
true
);
cgzEntry
.
model
=
CityGmlParser
.
parseCityGmlFile
(
tempDir
.
toString
()
+
"\\"
+
entry
.
getName
(),
config
);
}
}
catch
(
CityGmlParseException
|
InvalidGmlFileException
e
)
{
catch
(
CityGmlParseException
|
InvalidGmlFileException
e
)
{
logger
.
error
(
e
);
logger
.
error
(
e
);
cgzEntry
.
erroneous
=
true
;
cgzEntry
.
erroneous
Entry
=
true
;
}
}
return
cgzEntry
;
return
cgzEntry
;
}
}
public
void
validateModel
(){
if
(
erroneousEntry
){
return
;
}
Checker
checker
=
new
Checker
(
this
.
getModel
());
checker
.
runChecks
();
validated
=
true
;
}
public
boolean
isValidated
(){
return
validated
;
}
public
void
setIsLibraryObject
(
boolean
isLibraryObject
)
{
public
void
setIsLibraryObject
(
boolean
isLibraryObject
)
{
this
.
isLibraryObject
=
isLibraryObject
;
this
.
isLibraryObject
=
isLibraryObject
;
}
}
...
@@ -56,7 +76,7 @@ public class CityGmlZipEntry {
...
@@ -56,7 +76,7 @@ public class CityGmlZipEntry {
return
isLibraryObject
;
return
isLibraryObject
;
}
}
public
boolean
isErroneous
()
{
public
boolean
isErroneous
Entry
()
{
return
erroneous
;
return
erroneous
Entry
;
}
}
}
}
CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/ZipParser.java
View file @
a1ec190b
...
@@ -16,22 +16,6 @@ public class ZipParser {
...
@@ -16,22 +16,6 @@ public class ZipParser {
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
ZipParser
.
class
);
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
ZipParser
.
class
);
public
static
List
<
CityGmlZipEntry
>
parseZipFile
(
String
zipFile
,
ParserConfiguration
config
)
{
ArrayList
<
CityGmlZipEntry
>
archiveEntries
=
new
ArrayList
<>();
try
(
ZipFile
zipFileObj
=
new
ZipFile
(
zipFile
))
{
for
(
Enumeration
<?
extends
ZipEntry
>
entries
=
zipFileObj
.
entries
();
entries
.
hasMoreElements
();)
{
ZipEntry
entry
=
entries
.
nextElement
();
if
(
entry
.
isDirectory
())
{
continue
;
}
if
(
entry
.
getName
().
endsWith
(
".gml"
))
{
archiveEntries
.
add
(
CityGmlZipEntry
.
of
(
entry
,
config
,
zipFile
));
}
}
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
return
archiveEntries
;
}
}
}
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