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 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(); } } } }