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 novaFactoryOpenLayer; public void processJob(Geometry poly, String productName, JSObject novaFactoryOpenLayer) throws InterruptedException { this.novaFactoryOpenLayer = novaFactoryOpenLayer; ExportJobDescription description = ExportJobDescription.getDefaultDescriptor(); description.setInitiator("2758"); description.setAccount("Bruse"); // description.setProduct("WU3"); description.setProduct(productName); description.setJobnumber("Bruse_0815"); //FIXME: Zipped GMLs coming from nF don't have any defined srsName ArrayList 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(productName); 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(); } } @Override public void jobStatusChanged(JobStatusEvent event) { JobStatus status = (JobStatus) event.getSource(); System.out.println(status); if (status == JobStatus.LOCAL) { novaFactoryOpenLayer.call("updateStatus", "REQUEST HAS BEEN PREPARED"); } else if (status == JobStatus.SENT) { novaFactoryOpenLayer.call("updateStatus", "REQUEST HAS BEEN SENT"); } else if (status == JobStatus.PENDING) { novaFactoryOpenLayer.call("updateStatus", "PENDING"); } else if (status == JobStatus.RUNNING) { novaFactoryOpenLayer.call("updateStatus", "SERVER IS BUSY"); } else if (status == JobStatus.FINISHED) { try { novaFactoryOpenLayer.call("updateStatus", "SERVER IS DONE"); job.downloadResult(); } catch (FailedTransmissionException ex) { ex.printStackTrace(); } } else if (status == JobStatus.DOWNLOAD) { try { File file = job.getResult(); novaFactoryOpenLayer.call("updateStatus", "DOWNLOADED AS ZIP"); novaFactoryOpenLayer.call("selectSaveFile", file.toString()); // System.out.println("CityGML at " + file.getAbsolutePath()); //TODO: Call downloadFinished if FAILED novaFactoryOpenLayer.call("downloadFinished"); } catch (FailedTransmissionException ex) { ex.printStackTrace(); } } } }