Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Eric Duminil
RegionChooser
Commits
eed91d5d
Commit
eed91d5d
authored
Jun 13, 2016
by
duminil
Browse files
Moving Browser class outside of RegionChooserFX.
parent
c04fd280
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/eu/simstadt/regionchooser/RegionChooserBrowser.java
0 → 100644
View file @
eed91d5d
package
eu.simstadt.regionchooser
;
import
java.io.BufferedReader
;
import
java.io.BufferedWriter
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.util.Enumeration
;
import
java.util.prefs.Preferences
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipFile
;
import
com.vividsolutions.jts.geom.Geometry
;
import
com.vividsolutions.jts.io.ParseException
;
import
com.vividsolutions.jts.io.WKTReader
;
import
eu.simstadt.nf4j.ExportJobFromJavaFXRegionChooser
;
import
javafx.beans.value.ObservableValue
;
import
javafx.concurrent.Task
;
import
javafx.concurrent.Worker.State
;
import
javafx.geometry.HPos
;
import
javafx.geometry.VPos
;
import
javafx.scene.layout.Region
;
import
javafx.scene.web.WebEngine
;
import
javafx.scene.web.WebView
;
import
javafx.stage.FileChooser
;
import
javafx.stage.Stage
;
import
netscape.javascript.JSObject
;
public
class
RegionChooserBrowser
extends
Region
{
public
class
JavaScriptFXBridge
{
private
Path
repo
;
private
WKTReader
wktReader
=
new
WKTReader
();
public
JavaScriptFXBridge
()
{
Preferences
userPrefs
=
Preferences
.
userRoot
().
node
(
"/eu/simstadt/desktop"
);
String
repoString
=
userPrefs
.
get
(
"RECENT_REPOSITORY"
,
null
);
if
(
repoString
==
null
)
{
repo
=
Paths
.
get
(
"../TestRepository"
);
}
else
{
repo
=
Paths
.
get
(
repoString
);
}
}
public
void
downloadRegion
(
String
wktPolygon
,
String
productName
,
JSObject
novaFactoryLayer
)
throws
InterruptedException
{
//TODO: Ask nf Server about available regions
Task
<
Integer
>
task
=
new
Task
<
Integer
>()
{
@Override
protected
Integer
call
()
throws
Exception
{
ExportJobFromJavaFXRegionChooser
nfJob
=
new
ExportJobFromJavaFXRegionChooser
();
Geometry
poly
=
wktReader
.
read
(
wktPolygon
);
nfJob
.
processJob
(
poly
,
productName
,
novaFactoryLayer
);
return
0
;
}
};
new
Thread
(
task
).
start
();
}
public
void
extractZIPtoGML
(
String
zipFilename
)
throws
IOException
{
ZipFile
zipFile
=
new
ZipFile
(
zipFilename
);
Enumeration
<?
extends
ZipEntry
>
entries
=
zipFile
.
entries
();
String
userName
=
System
.
getProperty
(
"user.name"
);
while
(
entries
.
hasMoreElements
())
{
ZipEntry
ze
=
entries
.
nextElement
();
String
zeName
=
ze
.
getName
();
if
(
zeName
.
toLowerCase
().
contains
(
"gml"
))
{
File
extractedCityGML
=
selectSaveFileWithDialog
(
null
,
zeName
.
replace
(
"_GML."
,
"."
).
replace
(
userName
,
"novaFACTORY"
),
""
);
if
(
extractedCityGML
!=
null
)
{
InputStream
cityGMLInputStream
=
zipFile
.
getInputStream
(
ze
);
BufferedReader
cityGMLZipReader
=
new
BufferedReader
(
new
InputStreamReader
(
cityGMLInputStream
));
BufferedWriter
cityGMLOutput
=
Files
.
newBufferedWriter
(
extractedCityGML
.
toPath
());
String
buf
=
null
;
while
((
buf
=
cityGMLZipReader
.
readLine
())
!=
null
)
{
cityGMLOutput
.
write
(
buf
.
replace
(
"srsName=\"\""
,
"srsName=\"EPSG:31467\""
));
}
cityGMLZipReader
.
close
();
cityGMLInputStream
.
close
();
cityGMLOutput
.
close
();
System
.
out
.
println
(
"Extracted"
);
}
}
}
zipFile
.
close
();
}
public
void
downloadRegionFromCityGML
(
String
wktPolygon
,
String
project
,
String
citygml
)
throws
IOException
,
ParseException
{
StringBuffer
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
(
project
,
citygml
),
wktPolygon
);
File
buildingIdsFile
=
selectSaveFileWithDialog
(
project
,
citygml
,
"selected_region"
);
if
(
buildingIdsFile
!=
null
)
{
BufferedWriter
writer
=
Files
.
newBufferedWriter
(
buildingIdsFile
.
toPath
());
writer
.
write
(
sb
.
toString
());
writer
.
close
();
}
}
private
File
selectSaveFileWithDialog
(
String
project
,
String
citygml
,
String
suffix
)
{
Stage
mainStage
=
(
Stage
)
RegionChooserBrowser
.
this
.
getScene
().
getWindow
();
FileChooser
fileChooser
=
new
FileChooser
();
fileChooser
.
setTitle
(
"Save CITYGML ids"
);
if
(
project
!=
null
)
{
fileChooser
.
setInitialDirectory
(
repo
.
resolve
(
project
+
".proj"
).
toFile
());
}
else
{
fileChooser
.
setInitialDirectory
(
repo
.
toFile
());
}
if
(
suffix
.
isEmpty
())
{
fileChooser
.
setInitialFileName
(
citygml
);
}
else
{
fileChooser
.
setInitialFileName
(
citygml
.
replace
(
"."
,
"_"
+
suffix
+
"."
));
}
FileChooser
.
ExtensionFilter
extFilter
=
new
FileChooser
.
ExtensionFilter
(
"GML files (*.gml)"
,
"*.gml"
);
fileChooser
.
getExtensionFilters
().
add
(
extFilter
);
return
fileChooser
.
showSaveDialog
(
mainStage
);
}
public
boolean
checkIfCityGMLSAreAvailable
(
String
project
,
String
citygml
)
{
Path
p
=
citygmlPath
(
project
,
citygml
);
return
Files
.
isReadable
(
p
);
}
public
void
log
(
String
text
)
{
System
.
out
.
println
(
text
);
}
private
Path
citygmlPath
(
String
project
,
String
citygml
)
{
return
repo
.
resolve
(
project
+
".proj"
).
resolve
(
citygml
);
}
public
void
importNovaFactoryBoundingBoxes
()
throws
IOException
{
JSObject
novafactoryVectors
=
(
JSObject
)
webEngine
.
executeScript
(
"novafactory_vectors"
);
BufferedReader
nf_csv
=
new
BufferedReader
(
new
InputStreamReader
(
RegionChooserFX
.
class
.
getResourceAsStream
(
"website/data/novafactory_products.csv"
)));
nf_csv
.
readLine
();
String
sCurrentLine
;
while
((
sCurrentLine
=
nf_csv
.
readLine
())
!=
null
)
{
String
[]
values
=
sCurrentLine
.
trim
().
split
(
","
);
String
product
=
values
[
1
];
// String description = values[2];
String
[]
srs
=
values
[
3
].
split
(
" "
);
String
epsgId
=
srs
[
srs
.
length
-
1
];
// System.out.println(product);
novafactoryVectors
.
call
(
"addNovaFactoryProduct"
,
values
[
8
],
values
[
9
],
values
[
10
],
values
[
11
],
product
,
epsgId
);
}
nf_csv
.
close
();
}
}
final
WebView
browser
=
new
WebView
();
final
WebEngine
webEngine
=
browser
.
getEngine
();
public
RegionChooserBrowser
()
{
//apply the styles
getStyleClass
().
add
(
"browser"
);
String
url
=
RegionChooserFX
.
class
.
getResource
(
"website/index.html"
).
toExternalForm
();
webEngine
.
load
(
url
);
// load the web page
// process page loading
webEngine
.
getLoadWorker
().
stateProperty
().
addListener
(
(
ObservableValue
<?
extends
State
>
ov
,
State
oldState
,
State
newState
)
->
{
if
(
newState
==
State
.
SUCCEEDED
)
{
JSObject
win
=
(
JSObject
)
webEngine
.
executeScript
(
"window"
);
JavaScriptFXBridge
fxapp
=
new
JavaScriptFXBridge
();
win
.
setMember
(
"fxapp"
,
fxapp
);
webEngine
.
executeScript
(
"console.log = function(message)\n"
+
"{\n"
+
" fxapp.log(message);\n"
+
"};"
);
try
{
fxapp
.
importNovaFactoryBoundingBoxes
();
}
catch
(
Exception
ex
)
{
RegionChooserFX
.
LOGGER
.
warning
(
"NovaFactory CSV not found or corrupt"
);
ex
.
printStackTrace
();
}
// try {
// fxapp.selectRegionDirectlyFromCityGML(
// Paths.get("../TestRepository").resolve("Gruenbuehl.proj")
// .resolve("Gruenbuehl_LOD2_validated+ADE.gml"),
// "POLYGON((3515896.6132767177 5415942.563662692,3516013.1135652466 5415930.341095623,3516035.1608944996 5415925.696283888,3516052.531667652 5415905.3452489935,3516053.640043498 5415793.1428597355,3516092.996199113 5415790.117097386,3516086.9957373445 5415687.30812527,3515953.2106800284 5415687.710348818,3515893.4419519473 5415673.416324939,3515876.73573549 5415736.92758554,3515896.6132767177 5415942.563662692))"
// );
// } catch (Exception ex) {
// ex.printStackTrace();
//
// }
// System.exit(0);
}
});
//add the web view to the scene
getChildren
().
add
(
browser
);
}
@Override
protected
void
layoutChildren
()
{
double
w
=
getWidth
();
double
h
=
getHeight
();
layoutInArea
(
browser
,
0
,
0
,
w
,
h
,
0
,
HPos
.
CENTER
,
VPos
.
CENTER
);
}
@Override
protected
double
computePrefWidth
(
double
height
)
{
return
900
;
}
@Override
protected
double
computePrefHeight
(
double
width
)
{
return
600
;
}
}
src/eu/simstadt/regionchooser/RegionChooserFX.java
View file @
eed91d5d
package
eu.simstadt.regionchooser
;
package
eu.simstadt.regionchooser
;
import
java.io.BufferedReader
;
import
java.io.BufferedWriter
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.util.Enumeration
;
import
java.util.logging.Logger
;
import
java.util.logging.Logger
;
import
java.util.prefs.Preferences
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipFile
;
import
com.vividsolutions.jts.geom.Geometry
;
import
com.vividsolutions.jts.io.ParseException
;
import
com.vividsolutions.jts.io.WKTReader
;
import
eu.simstadt.nf4j.ExportJobFromJavaFXRegionChooser
;
import
javafx.application.Application
;
import
javafx.application.Application
;
import
javafx.beans.value.ObservableValue
;
import
javafx.concurrent.Task
;
import
javafx.concurrent.Worker.State
;
import
javafx.geometry.HPos
;
import
javafx.geometry.VPos
;
import
javafx.scene.Scene
;
import
javafx.scene.Scene
;
import
javafx.scene.layout.Region
;
import
javafx.scene.paint.Color
;
import
javafx.scene.paint.Color
;
import
javafx.scene.web.WebEngine
;
import
javafx.scene.web.WebView
;
import
javafx.stage.FileChooser
;
import
javafx.stage.Stage
;
import
javafx.stage.Stage
;
import
netscape.javascript.JSObject
;
public
class
RegionChooserFX
extends
Application
public
class
RegionChooserFX
extends
Application
...
@@ -43,7 +16,7 @@ public class RegionChooserFX extends Application
...
@@ -43,7 +16,7 @@ public class RegionChooserFX extends Application
public
void
start
(
Stage
stage
)
{
public
void
start
(
Stage
stage
)
{
// create the scene
// create the scene
stage
.
setTitle
(
"RegionChooserJavaFX"
);
stage
.
setTitle
(
"RegionChooserJavaFX"
);
scene
=
new
Scene
(
new
Browser
(),
1024
,
768
,
Color
.
web
(
"#666970"
));
scene
=
new
Scene
(
new
RegionChooser
Browser
(),
1024
,
768
,
Color
.
web
(
"#666970"
));
stage
.
setScene
(
scene
);
stage
.
setScene
(
scene
);
stage
.
show
();
stage
.
show
();
}
}
...
@@ -53,187 +26,3 @@ public static void main(String[] args) {
...
@@ -53,187 +26,3 @@ public static void main(String[] args) {
}
}
}
}
class
Browser
extends
Region
{
public
class
JavaScriptFXBridge
{
private
Path
repo
;
private
WKTReader
wktReader
=
new
WKTReader
();
public
JavaScriptFXBridge
()
{
Preferences
userPrefs
=
Preferences
.
userRoot
().
node
(
"/eu/simstadt/desktop"
);
String
repoString
=
userPrefs
.
get
(
"RECENT_REPOSITORY"
,
null
);
if
(
repoString
==
null
)
{
repo
=
Paths
.
get
(
"../TestRepository"
);
}
else
{
repo
=
Paths
.
get
(
repoString
);
}
}
public
void
downloadRegion
(
String
wktPolygon
,
String
productName
,
JSObject
novaFactoryLayer
)
throws
InterruptedException
{
//TODO: Ask nf Server about available regions
Task
<
Integer
>
task
=
new
Task
<
Integer
>()
{
@Override
protected
Integer
call
()
throws
Exception
{
ExportJobFromJavaFXRegionChooser
nfJob
=
new
ExportJobFromJavaFXRegionChooser
();
Geometry
poly
=
wktReader
.
read
(
wktPolygon
);
nfJob
.
processJob
(
poly
,
productName
,
novaFactoryLayer
);
return
0
;
}
};
new
Thread
(
task
).
start
();
}
public
void
extractZIPtoGML
(
String
zipFilename
)
throws
IOException
{
ZipFile
zipFile
=
new
ZipFile
(
zipFilename
);
Enumeration
<?
extends
ZipEntry
>
entries
=
zipFile
.
entries
();
String
userName
=
System
.
getProperty
(
"user.name"
);
while
(
entries
.
hasMoreElements
())
{
ZipEntry
ze
=
entries
.
nextElement
();
String
zeName
=
ze
.
getName
();
if
(
zeName
.
toLowerCase
().
contains
(
"gml"
))
{
File
extractedCityGML
=
selectSaveFileWithDialog
(
null
,
zeName
.
replace
(
"_GML."
,
"."
).
replace
(
userName
,
"novaFACTORY"
),
""
);
if
(
extractedCityGML
!=
null
)
{
InputStream
cityGMLInputStream
=
zipFile
.
getInputStream
(
ze
);
BufferedReader
cityGMLZipReader
=
new
BufferedReader
(
new
InputStreamReader
(
cityGMLInputStream
));
BufferedWriter
cityGMLOutput
=
Files
.
newBufferedWriter
(
extractedCityGML
.
toPath
());
String
buf
=
null
;
while
((
buf
=
cityGMLZipReader
.
readLine
())
!=
null
)
{
cityGMLOutput
.
write
(
buf
.
replace
(
"srsName=\"\""
,
"srsName=\"EPSG:31467\""
));
}
cityGMLZipReader
.
close
();
cityGMLInputStream
.
close
();
cityGMLOutput
.
close
();
System
.
out
.
println
(
"Extracted"
);
}
}
}
zipFile
.
close
();
}
public
void
downloadRegionFromCityGML
(
String
wktPolygon
,
String
project
,
String
citygml
)
throws
IOException
,
ParseException
{
StringBuffer
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
(
project
,
citygml
),
wktPolygon
);
File
buildingIdsFile
=
selectSaveFileWithDialog
(
project
,
citygml
,
"selected_region"
);
if
(
buildingIdsFile
!=
null
)
{
BufferedWriter
writer
=
Files
.
newBufferedWriter
(
buildingIdsFile
.
toPath
());
writer
.
write
(
sb
.
toString
());
writer
.
close
();
}
}
private
File
selectSaveFileWithDialog
(
String
project
,
String
citygml
,
String
suffix
)
{
Stage
mainStage
=
(
Stage
)
Browser
.
this
.
getScene
().
getWindow
();
FileChooser
fileChooser
=
new
FileChooser
();
fileChooser
.
setTitle
(
"Save CITYGML ids"
);
if
(
project
!=
null
)
{
fileChooser
.
setInitialDirectory
(
repo
.
resolve
(
project
+
".proj"
).
toFile
());
}
else
{
fileChooser
.
setInitialDirectory
(
repo
.
toFile
());
}
if
(
suffix
.
isEmpty
())
{
fileChooser
.
setInitialFileName
(
citygml
);
}
else
{
fileChooser
.
setInitialFileName
(
citygml
.
replace
(
"."
,
"_"
+
suffix
+
"."
));
}
FileChooser
.
ExtensionFilter
extFilter
=
new
FileChooser
.
ExtensionFilter
(
"GML files (*.gml)"
,
"*.gml"
);
fileChooser
.
getExtensionFilters
().
add
(
extFilter
);
return
fileChooser
.
showSaveDialog
(
mainStage
);
}
public
boolean
checkIfCityGMLSAreAvailable
(
String
project
,
String
citygml
)
{
Path
p
=
citygmlPath
(
project
,
citygml
);
return
Files
.
isReadable
(
p
);
}
public
void
log
(
String
text
)
{
System
.
out
.
println
(
text
);
}
private
Path
citygmlPath
(
String
project
,
String
citygml
)
{
return
repo
.
resolve
(
project
+
".proj"
).
resolve
(
citygml
);
}
public
void
importNovaFactoryBoundingBoxes
()
throws
IOException
{
JSObject
novafactoryVectors
=
(
JSObject
)
webEngine
.
executeScript
(
"novafactory_vectors"
);
BufferedReader
nf_csv
=
new
BufferedReader
(
new
InputStreamReader
(
RegionChooserFX
.
class
.
getResourceAsStream
(
"website/data/novafactory_products.csv"
)));
nf_csv
.
readLine
();
String
sCurrentLine
;
while
((
sCurrentLine
=
nf_csv
.
readLine
())
!=
null
)
{
String
[]
values
=
sCurrentLine
.
trim
().
split
(
","
);
String
product
=
values
[
1
];
// String description = values[2];
String
[]
srs
=
values
[
3
].
split
(
" "
);
String
epsgId
=
srs
[
srs
.
length
-
1
];
// System.out.println(product);
novafactoryVectors
.
call
(
"addNovaFactoryProduct"
,
values
[
8
],
values
[
9
],
values
[
10
],
values
[
11
],
product
,
epsgId
);
}
nf_csv
.
close
();
}
}
final
WebView
browser
=
new
WebView
();
final
WebEngine
webEngine
=
browser
.
getEngine
();
public
Browser
()
{
//apply the styles
getStyleClass
().
add
(
"browser"
);
String
url
=
RegionChooserFX
.
class
.
getResource
(
"website/index.html"
).
toExternalForm
();
webEngine
.
load
(
url
);
// load the web page
// process page loading
webEngine
.
getLoadWorker
().
stateProperty
().
addListener
(
(
ObservableValue
<?
extends
State
>
ov
,
State
oldState
,
State
newState
)
->
{
if
(
newState
==
State
.
SUCCEEDED
)
{
JSObject
win
=
(
JSObject
)
webEngine
.
executeScript
(
"window"
);
JavaScriptFXBridge
fxapp
=
new
JavaScriptFXBridge
();
win
.
setMember
(
"fxapp"
,
fxapp
);
webEngine
.
executeScript
(
"console.log = function(message)\n"
+
"{\n"
+
" fxapp.log(message);\n"
+
"};"
);
try
{
fxapp
.
importNovaFactoryBoundingBoxes
();
}
catch
(
Exception
ex
)
{
RegionChooserFX
.
LOGGER
.
warning
(
"NovaFactory CSV not found or corrupt"
);
ex
.
printStackTrace
();
}
// try {
// fxapp.selectRegionDirectlyFromCityGML(
// Paths.get("../TestRepository").resolve("Gruenbuehl.proj")
// .resolve("Gruenbuehl_LOD2_validated+ADE.gml"),
// "POLYGON((3515896.6132767177 5415942.563662692,3516013.1135652466 5415930.341095623,3516035.1608944996 5415925.696283888,3516052.531667652 5415905.3452489935,3516053.640043498 5415793.1428597355,3516092.996199113 5415790.117097386,3516086.9957373445 5415687.30812527,3515953.2106800284 5415687.710348818,3515893.4419519473 5415673.416324939,3515876.73573549 5415736.92758554,3515896.6132767177 5415942.563662692))"
// );
// } catch (Exception ex) {
// ex.printStackTrace();
//
// }
// System.exit(0);
}
});
//add the web view to the scene
getChildren
().
add
(
browser
);
}
@Override
protected
void
layoutChildren
()
{
double
w
=
getWidth
();
double
h
=
getHeight
();
layoutInArea
(
browser
,
0
,
0
,
w
,
h
,
0
,
HPos
.
CENTER
,
VPos
.
CENTER
);
}
@Override
protected
double
computePrefWidth
(
double
height
)
{
return
900
;
}
@Override
protected
double
computePrefHeight
(
double
width
)
{
return
600
;
}
}
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