Commit abf9c2bd authored by duminil's avatar duminil
Browse files

NovaFactory download directly from RegionChooserFX

parent eb9862a4
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 * 3l; // 3 minutes maximum
long interval = 10000l;
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
......@@ -7,13 +7,11 @@
import java.nio.file.Files;
import java.nio.file.Path;
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.Pattern;
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;
......@@ -24,20 +22,14 @@
import javafx.scene.web.WebView;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javax.xml.stream.XMLStreamException;
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.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import de.hft.stuttgart.citydoctor.datastructure.Building;
import eu.simstadt.admin.SimStadtModel;
import eu.simstadt.admin.SimStadtProject;
import eu.simstadt.nf4j.ExportJobFromJavaFXRegionChooser;
public class RegionChooserFX extends Application
......@@ -70,8 +62,19 @@ public JavaScriptFXBridge() {
repo = Paths.get("../TestRepository");
}
public void downloadRegion(String wktPolygon) {
System.out.println("FROM JAVA : DO SOMETHING with " + wktPolygon);
public void downloadRegion(String wktPolygon, JSObject nfButton) 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, nfButton);
nfButton.call("downloadFinished");
return 0;
}
};
new Thread(task).start();
}
public void downloadRegionFromCityGML(String wktPolygon, String project, String citygml, JSObject featureOverlay)
......
......@@ -36,6 +36,7 @@ public void processJob() throws InterruptedException {
description.setJobnumber("Bruse_0815");
//FIXME: Zipped GMLs coming from nF don't have any defined srsName
//FIXME: Save files somewhere else
//NOTE: Unit is a predefined Map Region.
// 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 {
@Override
public void jobStatusChanged(JobStatusEvent event) {
System.out.println("BOOM BOOM");
JobStatus status = (JobStatus) event.getSource();
System.out.println(status);
if (status == JobStatus.LOCAL) {
......
......@@ -35,7 +35,7 @@
<div id="map" class="map" tabindex="0"></div>
<div id="side">
<input id="reset" value="Reset" type="button" class="navi" disabled/>
<input id="send" value="Send" type="button" class="navi" disabled/>
<input id="nfDownload" value="NovaFactory download" type="button" class="navi" disabled/>
<div id="dataPanel">
</div>
</div>
......
......@@ -2,7 +2,9 @@
//TODO: Try to leave everything in 4326
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"
+ " +ellps=bessel +datum=potsdam +units=m +no_defs"); // http://spatialreference.org/ref/epsg/31467/proj4js/
......@@ -206,7 +208,7 @@ function findIntersections() {
var jsonIntersection = turf.intersect(poly1, feature["geoJSON"]);
if (undefined != jsonIntersection) {
if (!intersection_found) {
$('#dataPanel').append("Intersection found with :<br/>\n");
dataPanel.append("Intersection found with :<br/>\n");
intersection_found = true;
}
var intersection = geoJSONformat.readFeature(jsonIntersection);
......@@ -223,11 +225,11 @@ function findIntersections() {
description = feature['description'];
}
$('#dataPanel').append(description + " (" + citygml_percentage + "%");
dataPanel.append(description + " (" + citygml_percentage + "%");
if (sketch_percentage == 100) {
$('#dataPanel').append(", all inside");
dataPanel.append(", all inside");
}
$('#dataPanel').append(")<br/>\n");
dataPanel.append(")<br/>\n");
}
} catch (err) {
......@@ -236,7 +238,7 @@ function findIntersections() {
i++;
})
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) {
console.log('DL Execution time: ' + time);
setTimeout(function() {
$("html").removeClass("wait");
$("#dataPanel").append("Done<br/>\n");
dataPanel.append("Done<br/>\n");
}, 100);
}, 100);
}
function displayInfo() {
var start = new Date().getTime();
$('#dataPanel').empty();
dataPanel.empty();
var geom = /** @type {ol.geom.Polygon} */
(sketch.getGeometry().clone().transform(sourceProj, 'EPSG:4326'));
var coordinates = geom.getLinearRing(0).getCoordinates();
......@@ -279,13 +281,13 @@ function displayInfo() {
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/>";
}
$('#dataPanel').append("WGS84 Coordinates<br/>");
$('#dataPanel').append(wgs84_coords + "<br/>\n");
$('#dataPanel').append("GSK3 Coordinates<br/>");
$('#dataPanel').append(gsk3_coords + "<br/>\n");
dataPanel.append("WGS84 Coordinates<br/>");
dataPanel.append(wgs84_coords + "<br/>\n");
dataPanel.append("GSK3 Coordinates<br/>");
dataPanel.append(gsk3_coords + "<br/>\n");
}
$('#dataPanel').append("Area" + "<br/>\n");
$('#dataPanel').append((Math.round(area / 1000) / 10).toString() + " ha<br/><br/>\n");
dataPanel.append("Area" + "<br/>\n");
dataPanel.append((Math.round(area / 1000) / 10).toString() + " ha<br/><br/>\n");
findIntersections();
var end = new Date().getTime();
var time = end - start;
......@@ -295,7 +297,7 @@ function displayInfo() {
draw.on('drawend', function(e) {
displayInfo();
if (fromJavaFX) {
send_btn.disabled = false;
novafactory_btn.disabled = false;
}
draw.setActive(false);
});
......@@ -304,26 +306,38 @@ $('#reset').click(function() {
try {
draw.finishDrawing();
} finally {
$('#dataPanel').empty();
dataPanel.empty();
$("html").removeClass("wait");
draw.setActive(true);
featureOverlay.getFeatures().clear();
intersections.clear();
reset_btn.disabled = true;
send_btn.disabled = true;
novafactory_btn.disabled = true;
focusOnMap();
}
});
$('#send').click(function() {
focusOnMap();
fxapp.downloadRegion(sketchAsWKT());
novafactory_btn.downloadFinished = function() {
//FIXME: Weird <br>s are inserted between lines
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();
return wktFormat.writeFeature(sketch, {
dataProjection : ol.proj.get('EPSG:31467'),
dataProjection : ol.proj.get('EPSG:'+epsgId),
featureProjection : ol.proj.get('EPSG:3857')
})
}
......
Markdown is supported
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