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
abf9c2bd
Commit
abf9c2bd
authored
May 22, 2015
by
duminil
Browse files
NovaFactory download directly from RegionChooserFX
parent
eb9862a4
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/eu/simstadt/nf4j/ExportJobFromJavaFXRegionChooser.java
0 → 100644
View file @
abf9c2bd
package
eu.simstadt.nf4j
;
import
java.io.File
;
import
java.util.ArrayList
;
import
netscape.javascript.JSObject
;
import
com.vividsolutions.jts.geom.Coordinate
;
import
com.vividsolutions.jts.geom.Geometry
;
import
eu.simstadt.nf4j.async.AsyncExportJob
;
import
eu.simstadt.nf4j.async.Coord
;
import
eu.simstadt.nf4j.async.ExportJobDescription
;
import
eu.simstadt.nf4j.async.HTTPConnection
;
import
eu.simstadt.nf4j.async.JobStatusEvent
;
import
eu.simstadt.nf4j.async.JobStatusListener
;
import
eu.simstadt.nf4j.async.Layer
;
/**
* This class contains client oriented export job tests. It will send an export job and listens to status updates. Every
* of the subsequent status' LOCAL, SENT, PENDING, RUNNING, FINISHED and DOWNLOAD have to be signaled to this test
* class.
*
* @author Marcel Bruse
*/
//TODO: DRY with SuccessfulExportJob
public
class
ExportJobFromJavaFXRegionChooser
implements
JobStatusListener
{
public
AsyncExportJob
job
;
private
JSObject
nfButton
;
public
void
processJob
(
Geometry
poly
,
JSObject
nfButton
)
throws
InterruptedException
{
this
.
nfButton
=
nfButton
;
ExportJobDescription
description
=
ExportJobDescription
.
getDefaultDescriptor
();
description
.
setInitiator
(
"2758"
);
description
.
setAccount
(
"Bruse"
);
description
.
setProduct
(
"WU3"
);
description
.
setJobnumber
(
"Bruse_0815"
);
//FIXME: Zipped GMLs coming from nF don't have any defined srsName
//FIXME: Save files somewhere else
ArrayList
<
Coord
>
regionPolygon
=
new
ArrayList
<>();
for
(
Coordinate
point
:
poly
.
getCoordinates
())
{
regionPolygon
.
add
(
new
Coord
(
point
.
y
,
point
.
x
));
}
description
.
setRegionPolygon
(
regionPolygon
);
Layer
layer
=
Layer
.
getDefaultLayer
();
layer
.
setProduct
(
"WU3"
);
layer
.
setName
(
"GML"
);
description
.
addLayer
(
layer
);
job
=
new
AsyncExportJob
(
description
,
new
HTTPConnection
(
"193.196.136.164"
));
job
.
addJobStatusListener
(
this
);
try
{
job
.
send
();
}
catch
(
FailedTransmissionException
ex
)
{
ex
.
printStackTrace
();
}
catch
(
InvalidJobDescriptorException
ex
)
{
ex
.
printStackTrace
();
}
// Wait for timeout, failure or that all tests pass
long
timeout
=
1000
*
60
*
3
l
;
// 3 minutes maximum
long
interval
=
10000
l
;
while
(!
job
.
hasFinished
()
&&
!
job
.
hasFailed
()
&&
timeout
>
0
)
{
Thread
.
sleep
(
interval
);
timeout
-=
interval
;
System
.
out
.
println
(
"+"
);
}
}
@Override
public
void
jobStatusChanged
(
JobStatusEvent
event
)
{
JobStatus
status
=
(
JobStatus
)
event
.
getSource
();
System
.
out
.
println
(
status
);
if
(
status
==
JobStatus
.
LOCAL
)
{
nfButton
.
call
(
"updateStatus"
,
"Local"
);
}
else
if
(
status
==
JobStatus
.
SENT
)
{
nfButton
.
call
(
"updateStatus"
,
"SENT"
);
}
else
if
(
status
==
JobStatus
.
PENDING
)
{
nfButton
.
call
(
"updateStatus"
,
"PENDING"
);
}
else
if
(
status
==
JobStatus
.
RUNNING
)
{
nfButton
.
call
(
"updateStatus"
,
"RUNNING"
);
}
else
if
(
status
==
JobStatus
.
FINISHED
)
{
try
{
nfButton
.
call
(
"updateStatus"
,
"FINISHED"
);
job
.
downloadResult
();
}
catch
(
FailedTransmissionException
ex
)
{
ex
.
printStackTrace
();
}
}
else
if
(
status
==
JobStatus
.
DOWNLOAD
)
{
try
{
File
file
=
job
.
getResult
();
nfButton
.
call
(
"updateStatus"
,
"DOWNLOAD"
);
System
.
out
.
println
(
"CityGML at "
+
file
.
getAbsolutePath
());
}
catch
(
FailedTransmissionException
ex
)
{
ex
.
printStackTrace
();
}
}
}
}
\ No newline at end of file
src/eu/simstadt/regionchooser/RegionChooserFX.java
View file @
abf9c2bd
...
@@ -7,13 +7,11 @@
...
@@ -7,13 +7,11 @@
import
java.nio.file.Files
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.nio.file.Paths
;
import
java.time.Duration
;
import
java.time.Instant
;
import
java.util.List
;
import
java.util.regex.Matcher
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
java.util.regex.Pattern
;
import
javafx.application.Application
;
import
javafx.application.Application
;
import
javafx.beans.value.ObservableValue
;
import
javafx.beans.value.ObservableValue
;
import
javafx.concurrent.Task
;
import
javafx.concurrent.Worker.State
;
import
javafx.concurrent.Worker.State
;
import
javafx.geometry.HPos
;
import
javafx.geometry.HPos
;
import
javafx.geometry.VPos
;
import
javafx.geometry.VPos
;
...
@@ -24,20 +22,14 @@
...
@@ -24,20 +22,14 @@
import
javafx.scene.web.WebView
;
import
javafx.scene.web.WebView
;
import
javafx.stage.FileChooser
;
import
javafx.stage.FileChooser
;
import
javafx.stage.Stage
;
import
javafx.stage.Stage
;
import
javax.xml.stream.XMLStreamException
;
import
netscape.javascript.JSObject
;
import
netscape.javascript.JSObject
;
import
org.citygml4j.model.gml.feature.BoundingShape
;
import
org.citygml4j.model.gml.geometry.primitives.Envelope
;
import
org.xml.sax.SAXParseException
;
import
com.vividsolutions.jts.geom.Coordinate
;
import
com.vividsolutions.jts.geom.Coordinate
;
import
com.vividsolutions.jts.geom.Geometry
;
import
com.vividsolutions.jts.geom.Geometry
;
import
com.vividsolutions.jts.geom.GeometryFactory
;
import
com.vividsolutions.jts.geom.GeometryFactory
;
import
com.vividsolutions.jts.geom.Point
;
import
com.vividsolutions.jts.geom.Point
;
import
com.vividsolutions.jts.io.ParseException
;
import
com.vividsolutions.jts.io.ParseException
;
import
com.vividsolutions.jts.io.WKTReader
;
import
com.vividsolutions.jts.io.WKTReader
;
import
de.hft.stuttgart.citydoctor.datastructure.Building
;
import
eu.simstadt.nf4j.ExportJobFromJavaFXRegionChooser
;
import
eu.simstadt.admin.SimStadtModel
;
import
eu.simstadt.admin.SimStadtProject
;
public
class
RegionChooserFX
extends
Application
public
class
RegionChooserFX
extends
Application
...
@@ -70,8 +62,19 @@ public JavaScriptFXBridge() {
...
@@ -70,8 +62,19 @@ public JavaScriptFXBridge() {
repo
=
Paths
.
get
(
"../TestRepository"
);
repo
=
Paths
.
get
(
"../TestRepository"
);
}
}
public
void
downloadRegion
(
String
wktPolygon
)
{
public
void
downloadRegion
(
String
wktPolygon
,
JSObject
nfButton
)
throws
InterruptedException
{
System
.
out
.
println
(
"FROM JAVA : DO SOMETHING with "
+
wktPolygon
);
//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
,
nfButton
);
nfButton
.
call
(
"downloadFinished"
);
return
0
;
}
};
new
Thread
(
task
).
start
();
}
}
public
void
downloadRegionFromCityGML
(
String
wktPolygon
,
String
project
,
String
citygml
,
JSObject
featureOverlay
)
public
void
downloadRegionFromCityGML
(
String
wktPolygon
,
String
project
,
String
citygml
,
JSObject
featureOverlay
)
...
...
test/eu/simstadt/nf4j/async/test/SuccessfulExportJob.java
View file @
abf9c2bd
...
@@ -36,6 +36,7 @@ public void processJob() throws InterruptedException {
...
@@ -36,6 +36,7 @@ public void processJob() throws InterruptedException {
description
.
setJobnumber
(
"Bruse_0815"
);
description
.
setJobnumber
(
"Bruse_0815"
);
//FIXME: Zipped GMLs coming from nF don't have any defined srsName
//FIXME: Zipped GMLs coming from nF don't have any defined srsName
//FIXME: Save files somewhere else
//NOTE: Unit is a predefined Map Region.
//NOTE: Unit is a predefined Map Region.
// Some of those units are empty. 821 (Finsterrot) and 824 (Neulautern) are available on HFT nF Server.
// Some of those units are empty. 821 (Finsterrot) and 824 (Neulautern) are available on HFT nF Server.
...
@@ -118,7 +119,6 @@ public void processJob() throws InterruptedException {
...
@@ -118,7 +119,6 @@ public void processJob() throws InterruptedException {
@Override
@Override
public
void
jobStatusChanged
(
JobStatusEvent
event
)
{
public
void
jobStatusChanged
(
JobStatusEvent
event
)
{
System
.
out
.
println
(
"BOOM BOOM"
);
JobStatus
status
=
(
JobStatus
)
event
.
getSource
();
JobStatus
status
=
(
JobStatus
)
event
.
getSource
();
System
.
out
.
println
(
status
);
System
.
out
.
println
(
status
);
if
(
status
==
JobStatus
.
LOCAL
)
{
if
(
status
==
JobStatus
.
LOCAL
)
{
...
...
website/index.html
View file @
abf9c2bd
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
<div
id=
"map"
class=
"map"
tabindex=
"0"
></div>
<div
id=
"map"
class=
"map"
tabindex=
"0"
></div>
<div
id=
"side"
>
<div
id=
"side"
>
<input
id=
"reset"
value=
"Reset"
type=
"button"
class=
"navi"
disabled
/>
<input
id=
"reset"
value=
"Reset"
type=
"button"
class=
"navi"
disabled
/>
<input
id=
"
sen
d"
value=
"
Sen
d"
type=
"button"
class=
"navi"
disabled
/>
<input
id=
"
nfDownloa
d"
value=
"
NovaFactory downloa
d"
type=
"button"
class=
"navi"
disabled
/>
<div
id=
"dataPanel"
>
<div
id=
"dataPanel"
>
</div>
</div>
</div>
</div>
...
...
website/script/simstadt_openlayers.js
View file @
abf9c2bd
...
@@ -2,7 +2,9 @@
...
@@ -2,7 +2,9 @@
//TODO: Try to leave everything in 4326
//TODO: Try to leave everything in 4326
var
reset_btn
=
$
(
'
#reset
'
)[
0
];
var
reset_btn
=
$
(
'
#reset
'
)[
0
];
var
send_btn
=
$
(
'
#send
'
)[
0
];
var
novafactory_btn
=
$
(
'
#nfDownload
'
)[
0
];
var
dataPanel
=
$
(
'
#dataPanel
'
);
var
br
=
document
.
createElement
(
'
br
'
);
proj4
.
defs
(
"
EPSG:31467
"
,
"
+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0
"
proj4
.
defs
(
"
EPSG:31467
"
,
"
+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0
"
+
"
+ellps=bessel +datum=potsdam +units=m +no_defs
"
);
// http://spatialreference.org/ref/epsg/31467/proj4js/
+
"
+ellps=bessel +datum=potsdam +units=m +no_defs
"
);
// http://spatialreference.org/ref/epsg/31467/proj4js/
...
@@ -206,7 +208,7 @@ function findIntersections() {
...
@@ -206,7 +208,7 @@ function findIntersections() {
var
jsonIntersection
=
turf
.
intersect
(
poly1
,
feature
[
"
geoJSON
"
]);
var
jsonIntersection
=
turf
.
intersect
(
poly1
,
feature
[
"
geoJSON
"
]);
if
(
undefined
!=
jsonIntersection
)
{
if
(
undefined
!=
jsonIntersection
)
{
if
(
!
intersection_found
)
{
if
(
!
intersection_found
)
{
$
(
'
#
dataPanel
'
)
.
append
(
"
Intersection found with :<br/>
\n
"
);
dataPanel
.
append
(
"
Intersection found with :<br/>
\n
"
);
intersection_found
=
true
;
intersection_found
=
true
;
}
}
var
intersection
=
geoJSONformat
.
readFeature
(
jsonIntersection
);
var
intersection
=
geoJSONformat
.
readFeature
(
jsonIntersection
);
...
@@ -223,11 +225,11 @@ function findIntersections() {
...
@@ -223,11 +225,11 @@ function findIntersections() {
description
=
feature
[
'
description
'
];
description
=
feature
[
'
description
'
];
}
}
$
(
'
#
dataPanel
'
)
.
append
(
description
+
"
(
"
+
citygml_percentage
+
"
%
"
);
dataPanel
.
append
(
description
+
"
(
"
+
citygml_percentage
+
"
%
"
);
if
(
sketch_percentage
==
100
)
{
if
(
sketch_percentage
==
100
)
{
$
(
'
#
dataPanel
'
)
.
append
(
"
, all inside
"
);
dataPanel
.
append
(
"
, all inside
"
);
}
}
$
(
'
#
dataPanel
'
)
.
append
(
"
)<br/>
\n
"
);
dataPanel
.
append
(
"
)<br/>
\n
"
);
}
}
}
catch
(
err
)
{
}
catch
(
err
)
{
...
@@ -236,7 +238,7 @@ function findIntersections() {
...
@@ -236,7 +238,7 @@ function findIntersections() {
i
++
;
i
++
;
})
})
if
(
!
intersection_found
)
{
if
(
!
intersection_found
)
{
$
(
'
#
dataPanel
'
)
.
append
(
"
No intersection found with any CityGML<br/>
\n
"
);
dataPanel
.
append
(
"
No intersection found with any CityGML<br/>
\n
"
);
}
}
}
}
...
@@ -253,14 +255,14 @@ function downloadRegionFromCityGML(i) {
...
@@ -253,14 +255,14 @@ function downloadRegionFromCityGML(i) {
console
.
log
(
'
DL Execution time:
'
+
time
);
console
.
log
(
'
DL Execution time:
'
+
time
);
setTimeout
(
function
()
{
setTimeout
(
function
()
{
$
(
"
html
"
).
removeClass
(
"
wait
"
);
$
(
"
html
"
).
removeClass
(
"
wait
"
);
$
(
"
#
dataPanel
"
)
.
append
(
"
Done<br/>
\n
"
);
dataPanel
.
append
(
"
Done<br/>
\n
"
);
},
100
);
},
100
);
},
100
);
},
100
);
}
}
function
displayInfo
()
{
function
displayInfo
()
{
var
start
=
new
Date
().
getTime
();
var
start
=
new
Date
().
getTime
();
$
(
'
#
dataPanel
'
)
.
empty
();
dataPanel
.
empty
();
var
geom
=
/** @type {ol.geom.Polygon} */
var
geom
=
/** @type {ol.geom.Polygon} */
(
sketch
.
getGeometry
().
clone
().
transform
(
sourceProj
,
'
EPSG:4326
'
));
(
sketch
.
getGeometry
().
clone
().
transform
(
sourceProj
,
'
EPSG:4326
'
));
var
coordinates
=
geom
.
getLinearRing
(
0
).
getCoordinates
();
var
coordinates
=
geom
.
getLinearRing
(
0
).
getCoordinates
();
...
@@ -279,13 +281,13 @@ function displayInfo() {
...
@@ -279,13 +281,13 @@ function displayInfo() {
var
gsk3_coord
=
ol
.
proj
.
transform
(
coords
[
i
],
ol
.
proj
.
get
(
'
EPSG:4326
'
),
ol
.
proj
.
get
(
'
EPSG:31467
'
))
var
gsk3_coord
=
ol
.
proj
.
transform
(
coords
[
i
],
ol
.
proj
.
get
(
'
EPSG:4326
'
),
ol
.
proj
.
get
(
'
EPSG:31467
'
))
gsk3_coords
+=
"
(
"
+
gsk3_coord
[
0
]
+
"
,
"
+
gsk3_coord
[
1
]
+
"
)<br/>
"
;
gsk3_coords
+=
"
(
"
+
gsk3_coord
[
0
]
+
"
,
"
+
gsk3_coord
[
1
]
+
"
)<br/>
"
;
}
}
$
(
'
#
dataPanel
'
)
.
append
(
"
WGS84 Coordinates<br/>
"
);
dataPanel
.
append
(
"
WGS84 Coordinates<br/>
"
);
$
(
'
#
dataPanel
'
)
.
append
(
wgs84_coords
+
"
<br/>
\n
"
);
dataPanel
.
append
(
wgs84_coords
+
"
<br/>
\n
"
);
$
(
'
#
dataPanel
'
)
.
append
(
"
GSK3 Coordinates<br/>
"
);
dataPanel
.
append
(
"
GSK3 Coordinates<br/>
"
);
$
(
'
#
dataPanel
'
)
.
append
(
gsk3_coords
+
"
<br/>
\n
"
);
dataPanel
.
append
(
gsk3_coords
+
"
<br/>
\n
"
);
}
}
$
(
'
#
dataPanel
'
)
.
append
(
"
Area
"
+
"
<br/>
\n
"
);
dataPanel
.
append
(
"
Area
"
+
"
<br/>
\n
"
);
$
(
'
#
dataPanel
'
)
.
append
((
Math
.
round
(
area
/
1000
)
/
10
).
toString
()
+
"
ha<br/><br/>
\n
"
);
dataPanel
.
append
((
Math
.
round
(
area
/
1000
)
/
10
).
toString
()
+
"
ha<br/><br/>
\n
"
);
findIntersections
();
findIntersections
();
var
end
=
new
Date
().
getTime
();
var
end
=
new
Date
().
getTime
();
var
time
=
end
-
start
;
var
time
=
end
-
start
;
...
@@ -295,7 +297,7 @@ function displayInfo() {
...
@@ -295,7 +297,7 @@ function displayInfo() {
draw
.
on
(
'
drawend
'
,
function
(
e
)
{
draw
.
on
(
'
drawend
'
,
function
(
e
)
{
displayInfo
();
displayInfo
();
if
(
fromJavaFX
)
{
if
(
fromJavaFX
)
{
send
_btn
.
disabled
=
false
;
novafactory
_btn
.
disabled
=
false
;
}
}
draw
.
setActive
(
false
);
draw
.
setActive
(
false
);
});
});
...
@@ -304,26 +306,38 @@ $('#reset').click(function() {
...
@@ -304,26 +306,38 @@ $('#reset').click(function() {
try
{
try
{
draw
.
finishDrawing
();
draw
.
finishDrawing
();
}
finally
{
}
finally
{
$
(
'
#
dataPanel
'
)
.
empty
();
dataPanel
.
empty
();
$
(
"
html
"
).
removeClass
(
"
wait
"
);
$
(
"
html
"
).
removeClass
(
"
wait
"
);
draw
.
setActive
(
true
);
draw
.
setActive
(
true
);
featureOverlay
.
getFeatures
().
clear
();
featureOverlay
.
getFeatures
().
clear
();
intersections
.
clear
();
intersections
.
clear
();
reset_btn
.
disabled
=
true
;
reset_btn
.
disabled
=
true
;
send
_btn
.
disabled
=
true
;
novafactory
_btn
.
disabled
=
true
;
focusOnMap
();
focusOnMap
();
}
}
});
});
$
(
'
#send
'
).
click
(
function
()
{
novafactory_btn
.
downloadFinished
=
function
()
{
focusOnMap
();
//FIXME: Weird <br>s are inserted between lines
fxapp
.
downloadRegion
(
sketchAsWKT
());
dataPanel
.
append
(
"
NovaFactory : DONE <br/>
\n
"
);
this
.
disabled
=
false
;
}
novafactory_btn
.
updateStatus
=
function
(
status
)
{
dataPanel
.
append
(
"
NovaFactory :
"
+
status
+
"
<br/>
\n
"
);
}
$
(
'
#nfDownload
'
).
click
(
function
()
{
novafactory_btn
.
disabled
=
true
;
dataPanel
.
append
(
"
NovaFactory BEGIN <br/>
\n
"
);
fxapp
.
downloadRegion
(
sketchAsWKT
(
'
4326
'
),
novafactory_btn
);
});
});
function
sketchAsWKT
()
{
function
sketchAsWKT
(
epsgId
)
{
var
epsgId
=
(
typeof
epsgId
===
'
undefined
'
)
?
'
31467
'
:
epsgId
;
var
wktFormat
=
new
ol
.
format
.
WKT
();
var
wktFormat
=
new
ol
.
format
.
WKT
();
return
wktFormat
.
writeFeature
(
sketch
,
{
return
wktFormat
.
writeFeature
(
sketch
,
{
dataProjection
:
ol
.
proj
.
get
(
'
EPSG:
31467
'
),
dataProjection
:
ol
.
proj
.
get
(
'
EPSG:
'
+
epsgId
),
featureProjection
:
ol
.
proj
.
get
(
'
EPSG:3857
'
)
featureProjection
:
ol
.
proj
.
get
(
'
EPSG:3857
'
)
})
})
}
}
...
...
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