@Override public void changed(ObservableValue<? extends State> observable, State oldState, State newState) { if (newState == Worker.State.SUCCEEDED) { try { //Determine the full url String favIconFullURL = getHostName(webEngine.getLocation()) + "favicon.ico"; //System.out.println(favIconFullURL) //Create HttpURLConnection HttpURLConnection httpcon = (HttpURLConnection) new URL(favIconFullURL).openConnection(); httpcon.addRequestProperty("User-Agent", "Mozilla/5.0"); List<BufferedImage> image = ICODecoder.read(httpcon.getInputStream()); //Set the favicon facIconImageView.setImage(SwingFXUtils.toFXImage(image.get(0), null)); } catch (Exception ex) { //ex.printStackTrace() facIconImageView.setImage(null); } } }
private void showSplash(final Stage initStage, Task<?> task, InitCompletionHandler initCompletionHandler) { progressText.textProperty().bind(task.messageProperty()); loadProgress.progressProperty().bind(task.progressProperty()); task.stateProperty().addListener((observableValue, oldState, newState) -> { if (newState == Worker.State.SUCCEEDED) { loadProgress.progressProperty().unbind(); loadProgress.setProgress(1); initStage.toFront(); FadeTransition fadeSplash = new FadeTransition(Duration.seconds(1.2), splashLayout); fadeSplash.setFromValue(1.0); fadeSplash.setToValue(0.0); fadeSplash.setOnFinished(actionEvent -> initStage.hide()); fadeSplash.play(); initCompletionHandler.complete(); } }); Scene splashScene = new Scene(splashLayout); initStage.initStyle(StageStyle.UNDECORATED); final Rectangle2D bounds = Screen.getPrimary().getBounds(); initStage.setScene(splashScene); initStage.setX(bounds.getMinX() + bounds.getWidth() / 2 - SPLASH_WIDTH / 2); initStage.setY(bounds.getMinY() + bounds.getHeight() / 2 - SPLASH_HEIGHT / 2); initStage.show(); }
private void showHisoty() { debug = new HistorySearch(cmboHistoryMonth.getValue(), cmboFilterList.getValue()); webEngine.getLoadWorker().stateProperty().addListener( new ChangeListener<Worker.State>() { @Override public void changed(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) { if (newValue == Worker.State.SUCCEEDED) { JSObject windowObject = (JSObject) webEngine.executeScript("window"); windowObject.setMember("HistorySearch", debug); // insert object windowObject.call("ready"); // execute callback } } } ); URL url = getClass().getResource("/html/index.html"); webEngine.load(url.toString()); }
@FXML private void btnGo(ActionEvent event) { historyByDate = new HistorySearchByDate(datePicker.getValue()); webEngine.getLoadWorker().stateProperty().addListener( new ChangeListener<Worker.State>() { @Override public void changed(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) { if (newValue == Worker.State.SUCCEEDED) { JSObject windowObject = (JSObject) webEngine.executeScript("window"); windowObject.setMember("HistorySearchByDate", historyByDate); // insert object windowObject.call("searchHistoryByDate"); // execute callback } } } ); URL url = getClass().getResource("/html/index.html"); webEngine.load(url.toString()); // String url = getClass().getResource("../html/index.html").toExternalForm(); // webEngine.load(url); }
private void styleWebView(){ webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> { Document doc = webEngine.getDocument(); if (newState == Worker.State.SUCCEEDED && doc.getDocumentElement().getElementsByTagName("head").item(0) != null) { Node head = doc.getDocumentElement().getElementsByTagName("head").item(0); // Google prettify if(prettifyCode.get() || Settings.ALWAYS_PRETTIFY_CODE_VIEW) { Element scriptNode = doc.createElement("script"); scriptNode.setAttribute("src", "https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"); head.appendChild(scriptNode); } // Inject css styles Element styleNode = doc.createElement("style"); Text styleContent = doc.createTextNode(Utils.getWebViewCss(prettifyCode.get() || Settings.ALWAYS_PRETTIFY_CODE_VIEW ? "#f2f2f2" : "#545454")); styleNode.appendChild(styleContent); head.appendChild(styleNode); currentHtmlWithStyle = webEngine.executeScript("document.documentElement.innerHTML").toString(); } }); }
protected void initialize(boolean sync) { addJavascriptInterface("console", console); addJavascriptInterface("NetkitGateway", gateway); AtomicBoolean done = new AtomicBoolean(false); engine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() { @Override public void changed(ObservableValue<? extends Worker.State> observableValue, Worker.State oldValue, Worker.State newValue) { if (newValue == Worker.State.SUCCEEDED) { done.set(true); } } }); String netkitView = IOUtils.convertStreamToString(Netkit.class.getResourceAsStream("/netkit-view.html")); engine.loadContent(netkitView); if (!done.get() && sync) { WebViewUtils.wait(view); } }
/** * Creates a UI display monitor for provided worker. * * Assumes the worker is reporting progress as work done on a scale from 0 to 100 (other values indicate indeterminate progress). * * @param worker the worker whose progress is to be monitored and displayed. */ public LoadingProgressDisplay(Worker worker) { setMaxWidth(Double.MAX_VALUE); ColorAdjust bleach = new ColorAdjust(); bleach.setSaturation(-0.6); setEffect(bleach); HBox.setHgrow(this, Priority.ALWAYS); visibleProperty().bind(worker.runningProperty()); // as the webview load progresses update progress. worker.workDoneProperty().addListener((observableValue, oldNumber, newNumber) -> { if (newNumber == null) newNumber = -1.0; final double newValue = newNumber.doubleValue(); if (newValue < 0.0 || newValue > 100.0) { setProgress(ProgressBar.INDETERMINATE_PROGRESS); } setProgress(newValue / 100.0); }); }
public void registerFunction( String namespace, Object theClass ) { log.debug( "Registering Java class whose methods can be called from javascript. Namespace: " + namespace + ", Java class: " + theClass ); Platform.runLater( new Runnable() { @Override public void run() { engine.getLoadWorker().stateProperty().addListener( new ChangeListener<State>() { @Override public void changed( ObservableValue<? extends Worker.State> ov, State oldState, State newState ) { if ( newState == Worker.State.SUCCEEDED ) { JSObject jsobj = (JSObject) engine.executeScript( "window" ); jsobj.setMember( namespace, theClass ); } } } ); } } ); }
public AsyncImageProperty(int width, int height) { imageLoadService.setSize(width, height); imageLoadService.stateProperty().addListener((observable, oldValue, value) -> { if (value == Worker.State.SUCCEEDED) set(imageLoadService.getValue()); if (value == Worker.State.FAILED) set(null); if (value == Worker.State.SUCCEEDED || value == Worker.State.CANCELLED || value == Worker.State.FAILED) { File handle = imageFile.get(); if (handle != null && !handle.equals(imageLoadService.imageFile)) loadImageInBackground(handle); } }); imageFile.addListener((observable, oldValue, value) -> { if(!imageLoadService.isRunning()) { loadImageInBackground(imageFile.getValue()); } }); }
@Override public void doAction(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) { if (newValue == Worker.State.SUCCEEDED) { NodeList nodeList = webEngine.getDocument().getElementsByTagName("code"); if (nodeList != null) { HTMLElementImpl htmlNode = (HTMLElementImpl) nodeList.item(0); if (htmlNode != null) { String authorizationCode = htmlNode.getInnerText(); save(new AuthorizationData(authorizationCode)); } } } }
@Test public void test() { AtomicBoolean passed = new AtomicBoolean(false); Platform.runLater(() -> { initViewWithEngine(); engine.getLoadWorker().stateProperty().addListener( (ov, old, now) -> { if (now == Worker.State.SUCCEEDED) { ((HTMLIFrameElement) engine.getDocument() .getElementsByTagName("iframe").item(0)).getId(); passed.set(true); } }); engine.loadContent("<html><body>" + "<iframe id='123' src='resource/example1.html'/>" + "</body></html>"); }); doWait(passed::get); }
/** * Test for javafx.scene.web.WebView.getLoadTask() method. Checks that a valid Task * is returned by WebEngine.getLoadTask() method while WebEngine is loading page. */ @Test(timeout=10000) public void test1() { gotException = null; Platform.runLater(new Runnable() { public void run() { try { initWebEngine(url1); Worker w = engine.getLoadWorker(); Assert.assertNotNull(w); } catch (Exception e) { gotException = Boolean.TRUE; } if (gotException == null) gotException = Boolean.FALSE; } }); doWait(exceptionOcurred); }
protected void doWaitPageLoading() { doWait(engineReady); loadWorker = engine.getLoadWorker(); final boolean[] b = new boolean[]{false}; while (!b[0]) { Platform.runLater(new Runnable() { public void run() { if ((loadWorker.getState() == Worker.State.SUCCEEDED) || (loadWorker.getState() == Worker.State.FAILED) || (loadWorker.getState() == Worker.State.CANCELLED)) { b[0] = true; } } }); try { Thread.sleep(100); } catch (InterruptedException ex) { Logger.getLogger(GenericTestClass.class.getName()).log(Level.SEVERE, null, ex); } } }
@Override public void start(Stage stage) { view = new WebView(); web = view.getEngine(); web.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() { public void changed(ObservableValue<? extends State> ov, State t, State t1) { if (t1.equals(Worker.State.SUCCEEDED)) { currIndex.setText("Current index: " + web.getHistory().getCurrentIndex()); currHistorySize.setText("Current number of entries: " + web.getHistory().getEntries().size()); } } }); String url = getParameters().getRaw().get(0); if (url != null) web.load(url); stage.setTitle("Launcher"); stage.setScene(new Scene(createContainer(), 800, 600)); stage.sizeToScene(); stage.show(); }
@Override public List<ITEM> getControls() { view.getEnvironment().getWaiter(WebViewWrap.PAGE_LOADING_TIMEOUT).ensureValue(Worker.State.SUCCEEDED, () -> new FutureAction<>(view.getEnvironment(), () -> view.getControl().getEngine().getLoadWorker().getState()).get()); return new FutureAction<>(view.getEnvironment(), () -> { List<ITEM> list = new ArrayList<>(); NodeList childNodes; if (node == null) { childNodes = view.getControl().getEngine().getDocument().getChildNodes(); } else { childNodes = node.getControl().getChildNodes(); } addToList(list, childNodes); return list; }).get(); }
/** * Creates and loads the HTML file in the proper JavaFX components. * This method is called in initComponents() */ private void createScene(){ Platform.runLater(() -> { StackPane root = new StackPane(); Scene scene = new Scene(root); webView = new WebView(); engine = webView.getEngine(); String htmlFileURL = this.getClass().getClassLoader().getResource("SearchToolWindow.html").toExternalForm(); engine.load(htmlFileURL); //Listener to make sure it is properly loaded engine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> { if(newState == Worker.State.SUCCEEDED) { window = (JSObject) engine.executeScript("window"); //Init window object window.setMember("JavaBridge", bridge); window.call("initialize"); //Initalizes Javascript logic. (Replacement for $(document).ready(...)) updateUISettings(); } }); root.getChildren().add(webView); jfxPanel.setScene(scene); }); }
public void onClick() { try { FileUtils.deleteQuietly(EXPORT_DIRECTORY); FileUtils.forceMkdir(EXPORT_DIRECTORY); } catch (IOException e) { LOGGER.error(String.format("Unable to clear export directory %s", EXPORT_DIRECTORY), e); } mediaConverterService.setSongFiles(getSelectedSongs()); mediaConverterService.setJadbDevice(devicesComboBox.getSelectionModel().getSelectedItem()); if (mediaConverterService.getState().equals(Worker.State.SUCCEEDED)) { mediaConverterService.restart(); } else { mediaConverterService.start(); } exportButton.setDisable(true); }
private Scene createScene() { WebView browser = new WebView(); webEngine = browser.getEngine(); setupPizzaURLLoader(); webEngine.load("pizza://pizza/testresults.html"); webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() { @Override public void changed(ObservableValue<? extends Worker.State> observableValue, Worker.State state, Worker.State newState) { if (newState.equals(Worker.State.SUCCEEDED)) { loaded.set(true); loadResults(); } } }); return new Scene(browser); }
public ProgressDialog(final Worker<?> worker) { if (worker == null) return; if (worker.getState() == State.CANCELLED || worker.getState() == State.FAILED || worker.getState() == State.SUCCEEDED) { return; } this.worker = worker; setResultConverter(dialogButton -> null); setTitle("Progress"); getDialogPane().setHeaderText("Operation in Progress"); initModality(Modality.APPLICATION_MODAL); createControls(); createLayout(); bindEvents(); }
public final void setWorker(final Worker<?> newWorker) { if (newWorker != worker) { if (worker != null) { worker.stateProperty().removeListener(stateListener); end(); } worker = newWorker; if (newWorker != null) { newWorker.stateProperty().addListener(stateListener); if (newWorker.getState() == Worker.State.RUNNING || newWorker.getState() == Worker.State.SCHEDULED) { // It is already running begin(); } } } }
public void adapt(WebView subject) throws IOException { // load external style sheet into webview subject.getEngine().setUserStyleSheetLocation(Resources.getExternalPath(githubCSSPath)); // disable existing context menu subject.setContextMenuEnabled(false); // disable javascript subject.getEngine().setJavaScriptEnabled(false); // need to bind the page load event in order to process link things subject.getEngine().getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> { // do this when the page load has finished if (newValue == Worker.State.SUCCEEDED) { this.adaptLoadedPage(subject); } }); subject.getEngine().setOnError(event -> QuickDialogs.exception(event.getException())); }
public void adapt(WebView subject) { // disable existing context menu subject.setContextMenuEnabled(false); // disable javascript subject.getEngine().setJavaScriptEnabled(false); // need to bind the page load event in order to process link things subject.getEngine().getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> { // do this when the page load has finished if (newValue == Worker.State.SUCCEEDED) { this.adaptLoadedPage(subject); } }); subject.getEngine().setOnError(event -> QuickDialogs.exception(event.getException())); }
public static <T> T runTaskWithBlockingDialog(IDialog dialog, Task<T> task) throws Exception { task.stateProperty().addListener( (observableValue, oldState, newState) -> { if (newState == Worker.State.SUCCEEDED || newState == Worker.State.FAILED || newState == Worker.State.CANCELLED) { dialog.close(); } }); new Thread(task).start(); dialog.showAndWait(); if (task.getException() != null) { throw new Exception(task.getException()); } return task.getValue(); }
/** * Fetches groupBy criteria from YouTrack */ private void startGetGroupByCategoriesTask() { LOGGER.info("Fetching GroupByCategories"); GetGroupByCategoriesTask task = new GetGroupByCategoriesTask(); task.setOnSucceeded(event -> { @SuppressWarnings("unchecked") Worker<List<GroupByCategory>> worker = event.getSource(); List<GroupByCategory> categoryList = worker.getValue(); LOGGER.info("{} succeeded with {} GroupByCategories", task.getTitle(), categoryList.size()); groupByCategoryComboBox.getItems().add(new NoSelectionGroupByCategory()); categoryList.forEach(groupByCategoryComboBox.getItems()::add); groupByCategoryComboBox.getSelectionModel().select(0); }); startTask(task); }
/** * Helper method to construct a splash screen and display it while preparing the main stage for the application. * * @param initStage the initial stage to display the splash screen on * @param mainStageTask the task that loads, constructs and displays the main app */ private void showSplashScreen(Stage initStage, Task<ObservableValue<Stage>> mainStageTask) { int SPLASH_WIDTH = 640; int SPLASH_HEIGHT = 640; Pane splashLayout = new VBox(); ImageView splash = new ImageView(new Image(getClass().getResourceAsStream(logoResourceLarge))); splashLayout.getChildren().add(splash); mainStageTask.stateProperty().addListener((observable, oldValue, newValue) -> { if (newValue == Worker.State.SUCCEEDED) { initStage.toFront(); FadeTransition fadeSplash = new FadeTransition(javafx.util.Duration.seconds(1.2), splashLayout); fadeSplash.setFromValue(1.0); fadeSplash.setToValue(0.0); fadeSplash.setOnFinished(actionEvent -> initStage.hide()); fadeSplash.play(); } }); Scene splashScene = new Scene(splashLayout, Color.TRANSPARENT); Rectangle2D bounds = Screen.getPrimary().getBounds(); initStage.setScene(splashScene); initStage.setX(bounds.getMinX() + bounds.getWidth() / 2 - SPLASH_WIDTH / 2); initStage.setY(bounds.getMinY() + bounds.getHeight() / 2 - SPLASH_HEIGHT / 2); initStage.initStyle(StageStyle.TRANSPARENT); initStage.show(); new Thread(mainStageTask).start(); }
@Override public void changed (ObservableValue<? extends State> ov, State oldState, State newState) { if (newState == Worker.State.SUCCEEDED) { EventListener listener = event -> { final String href = ((Element)event.getTarget()).getAttribute(HTML_LINK); if (href != null) { String domEventType = event.getType(); if (domEventType.equals(EVENT_CLICK)) { showPage(href); } else if (domEventType.equals(EVENT_MOUSEOVER)) { showStatus(href); } else if (domEventType.equals(EVENT_MOUSEOUT)) { showStatus(BLANK); } } }; Document doc = myPage.getEngine().getDocument(); NodeList nodes = doc.getElementsByTagName("a"); for (int i = 0; i < nodes.getLength(); i++) { EventTarget node = (EventTarget)nodes.item(i); node.addEventListener(EVENT_CLICK, listener, false); node.addEventListener(EVENT_MOUSEOVER, listener, false); node.addEventListener(EVENT_MOUSEOUT, listener, false); } } }
public void searchSisScenes(ActionEvent event) { final javafx.concurrent.Task<List<Actor>> searchTasksActor = new javafx.concurrent.Task<List<Actor>>() { protected List<Actor> call() throws Exception { return ProjectManager.getProject().getGlobalActorsUnmodifiable(); } }; searchTasksActor.stateProperty().addListener(new ChangeListener<Worker.State>() { public void changed(ObservableValue<? extends Worker.State> source, Worker.State oldState, Worker.State newState) { if (newState.equals(Worker.State.SUCCEEDED)) { actorList.getItems().setAll(searchTasksActor.getValue()); } } }); new Thread(searchTasksActor).start(); }
AbstractRichTextCodeEditor() { AnchorPane.setTopAnchor(codeArea, 0.0); AnchorPane.setLeftAnchor(codeArea, 0.0); AnchorPane.setBottomAnchor(codeArea, 0.0); AnchorPane.setRightAnchor(codeArea, 0.0); getChildren().add(codeArea); IntFunction<String> format = (digits -> " %" + digits + "d "); /* String stylesheet = AbstractRichTextCodeEditor.class.getResource("java-keywords.css").toExternalForm(); */ IntFunction<Node> factory = LineNumberFactory.get(codeArea, format); codeArea.setParagraphGraphicFactory(factory); codeArea.textProperty().addListener((obs, oldText, newText) -> { codeArea.setStyleSpans(0, computeHighlighting(newText)); }); Platform.runLater(() -> { state.setValue(Worker.State.SUCCEEDED); }); canUndo.bind(codeArea.getUndoManager().undoAvailableProperty()); canRedo.bind(codeArea.getUndoManager().redoAvailableProperty()); codeArea.fontProperty().set(Font.font("Source Code Pro", 14)); }
/** * Converts a given URL to an image which will be saved on /images/ folder. * It uses a WebView which basically renders the page in the browser. Once the rendering is complete the screenshot is taken. * @return the file location. */ public String getWebsiteSnapshot(){ String fileName = buildFileNameFromUrl(); webEngine.load(url); webEngine.getLoadWorker().stateProperty().addListener(new BrowserStatusChangeListener(fileName)); //Timeout for loading pages. If the page is still loading after 20 seconds we force it to stop. Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { Platform.runLater(new Runnable() { @Override public void run() { if (webEngine.getLoadWorker().getState() == Worker.State.RUNNING) { webEngine.load(null); urlStage.close(); } } }); } },30000); return fileName; }
@Override public void changed(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) { if (newValue.equals(Worker.State.SUCCEEDED)) { if(webEngine.getDocument().getBaseURI().equals("about:blank")) return; //If the page loads, let's take a snapshot of it. WritableImage snapshot = new WritableImage((int) screenSize.getWidth(), (int) screenSize.getHeight()); browser.snapshot(null, snapshot); BufferedImage renderedImage = SwingFXUtils.fromFXImage(snapshot, null); //Some math to get a little better thumbnail. Starting x is at 1/4 of the totale page. Goes for a width of half of the screen size to attempt and get the 'core' of the content. renderedImage = renderedImage.getSubimage((int)(screenSize.getWidth() /4),0,(int)( screenSize.getWidth() / 2 ),(int) screenSize.getHeight() / 2); saveImage(padPath, fileName, renderedImage); controller.refreshListView(); urlStage.close(); webEngine.load(null); } else if(newValue.equals(Worker.State.FAILED)){ //TODO: Send an error message somehow. urlStage.close(); } }
private void showSplash(final Stage initStage, Task<?> task, InitCompletionHandler initCompletionHandler) { task.stateProperty().addListener((observableValue, oldState, newState) -> { if (newState == Worker.State.SUCCEEDED) { initStage.toFront(); FadeTransition fadeSplash = new FadeTransition(Duration.seconds(0.8), splashLayout); fadeSplash.setFromValue(1.0); fadeSplash.setToValue(0.0); fadeSplash.setOnFinished(actionEvent -> initStage.hide()); fadeSplash.play(); initCompletionHandler.complete(); } }); Scene splashScene = new Scene(splashLayout, Color.TRANSPARENT); final Rectangle2D bounds = Screen.getPrimary().getBounds(); initStage.setScene(splashScene); initStage.setX(bounds.getMinX() + bounds.getWidth() / 2 - SPLASH_WIDTH / 2); initStage.setY(bounds.getMinY() + bounds.getHeight() / 2 - SPLASH_HEIGHT / 2); initStage.initStyle(StageStyle.TRANSPARENT); initStage.setAlwaysOnTop(true); initStage.show(); }
public void initEditor(WebView editor, File sourceFile, boolean isBlank) { this.editor = editor; targetFile = sourceFile; if (targetFile != null) { filename = targetFile.getName(); } editor.getEngine().getLoadWorker().stateProperty().addListener( (value, old, newState) -> { if (newState == Worker.State.SUCCEEDED) { JSObject document = (JSObject) editor.getEngine().executeScript("window"); document.setMember("java", this); Platform.runLater(()->createEditor(isBlank)); } }); editor.getEngine().setPromptHandler((PromptData prompt) -> { TextInputDialog dialog = new TextInputDialog(prompt.getDefaultValue()); dialog.setTitle("Jace IDE"); dialog.setHeaderText("Respond and press OK, or Cancel to abort"); dialog.setContentText(prompt.getMessage()); return dialog.showAndWait().orElse(null); }); editor.getEngine().load(getClass().getResource(CODEMIRROR_EDITOR).toExternalForm()); }
@Test public void testServiceUpdateWithSameLicense() throws Exception { CompletableFuture<ServiceTestResults<Release>> serviceStateDoneFuture = new CompletableFuture<>(); UpdateFinderService service = new UpdateFinderService(app, 10001, 1); service.stateProperty().addListener((observable, oldValue, newValue) -> { if (newValue == Worker.State.FAILED || newValue == Worker.State.SUCCEEDED) { serviceStateDoneFuture.complete(new ServiceTestResults<>(service.getState(), service.getValue(), service.getException())); } }); service.start(); ServiceTestResults<Release> result = serviceStateDoneFuture.get(200, TimeUnit.MILLISECONDS); assertNull(result.exception); assertEquals(Worker.State.SUCCEEDED, result.state); assertEquals(release10002SameLicense, result.serviceResult); }
@Test public void testServiceUpdateWithNewLicense() throws Exception { CompletableFuture<ServiceTestResults<Release>> serviceStateDoneFuture = new CompletableFuture<>(); UpdateFinderService service = new UpdateFinderService(app, 10002, 1); service.stateProperty().addListener((observable, oldValue, newValue) -> { if (newValue == Worker.State.FAILED || newValue == Worker.State.SUCCEEDED) { serviceStateDoneFuture.complete(new ServiceTestResults<>(service.getState(), service.getValue(), service.getException())); } }); service.start(); ServiceTestResults<Release> result = serviceStateDoneFuture.get(200, TimeUnit.MILLISECONDS); assertNull(result.exception); assertEquals(Worker.State.SUCCEEDED, result.state); assertEquals(releaseNewerLicense, result.serviceResult); }
@Test public void testServiceUpdateNoUpdate() throws Exception { CompletableFuture<ServiceTestResults<Release>> serviceStateDoneFuture = new CompletableFuture<>(); UpdateFinderService service = new UpdateFinderService(app, 20000, 2); service.stateProperty().addListener((observable, oldValue, newValue) -> { if (newValue == Worker.State.FAILED || newValue == Worker.State.SUCCEEDED) { serviceStateDoneFuture.complete(new ServiceTestResults<>(service.getState(), service.getValue(), service.getException())); } }); service.start(); ServiceTestResults<Release> result = serviceStateDoneFuture.get(200, TimeUnit.MILLISECONDS); assertThat(result.exception, instanceOf(NoUpdateException.class)); assertEquals(Worker.State.FAILED, result.state); assertNull(result.serviceResult); }
@Test public void testServiceBinaryFoundNoVerification() throws Exception { CompletableFuture<ServiceTestResults<Path>> serviceStateDoneFuture = new CompletableFuture<>(); UpdateDownloadService service = new UpdateDownloadService(releaseNoVerification); service.stateProperty().addListener((observable, oldValue, newValue) -> { if (newValue == Worker.State.FAILED || newValue == Worker.State.SUCCEEDED) { serviceStateDoneFuture.complete(new ServiceTestResults<>(service.getState(), service.getValue(), service.getException())); } }); service.start(); ServiceTestResults<Path> result = serviceStateDoneFuture.get(1000, TimeUnit.MILLISECONDS); assertNull(result.exception); assertEquals(Worker.State.SUCCEEDED, result.state); assertEquals(Paths.get(System.getProperty("java.io.tmpdir"), "updatefx.xml"), result.serviceResult); Files.delete(result.serviceResult); }
@Test public void testServiceBinaryNotFound() throws Exception { CompletableFuture<ServiceTestResults<Path>> serviceStateDoneFuture = new CompletableFuture<>(); UpdateDownloadService service = new UpdateDownloadService(emptyRelease); service.stateProperty().addListener((observable, oldValue, newValue) -> { if (newValue == Worker.State.FAILED || newValue == Worker.State.SUCCEEDED) { serviceStateDoneFuture.complete(new ServiceTestResults<>(service.getState(), service.getValue(), service.getException())); } }); service.start(); ServiceTestResults<Path> result = serviceStateDoneFuture.get(1000, TimeUnit.MILLISECONDS); assertThat(result.exception, instanceOf(IllegalArgumentException.class)); assertEquals(Worker.State.FAILED, result.state); assertNull(result.serviceResult); }
@Test public void testService() throws Throwable { CompletableFuture<ServiceTestResults<Application>> serviceStateDoneFuture = new CompletableFuture<>(); XMLRetrieverService service = new XMLRetrieverService(getClass().getResource("updatefx.xml")); service.stateProperty().addListener((observable, oldValue, newValue) -> { if (newValue == Worker.State.FAILED || newValue == Worker.State.SUCCEEDED) { serviceStateDoneFuture.complete(new ServiceTestResults<>(service.getState(), service.getValue(), service.getException())); } }); service.start(); ServiceTestResults<Application> result = serviceStateDoneFuture.get(1000, TimeUnit.MILLISECONDS); assertNull(result.exception); assertEquals(Worker.State.SUCCEEDED, result.state); assertNotNull(result.serviceResult); assertEquals("Example App", result.serviceResult.getName()); assertEquals(2, result.serviceResult.getReleases().size()); for (Release release : result.serviceResult.getReleases()) { assertEquals(result.serviceResult, release.getApplication()); } }