Skip to content

Commit c0583d1

Browse files
committed
Merging with master
2 parents 27af175 + f61392c commit c0583d1

File tree

54 files changed

+591
-321
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+591
-321
lines changed

Jenkinsfile.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@
1717
* under the License.
1818
*/
1919

20-
asfStandardBuild xvfb:true,cmdline:"clean install javadoc:aggregate site:jar"
20+
asfStandardBuild jdk:"jdk_11_latest",xvfb:true,cmdline:"clean install"
21+
asfStandardBuild jdk:"jdk_11_latest",xvfb:true,cmdline:"javadoc:aggregate site:jar"

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
In need of cross platform, client side interaction between Java and JavaScript?
44

55
[![Travis](https://travis-ci.org/apache/netbeans-html4j.svg?branch=master)](https://travis-ci.org/apache/netbeans-html4j)
6-
[![Linux](https://builds.apache.org/buildStatus/icon?job=netbeans-html4j-linux)](https://builds.apache.org/job/netbeans-html4j-linux/)
7-
[![Windows](https://builds.apache.org/buildStatus/icon?job=netbeans-html4j-windows)](https://builds.apache.org/job/netbeans-html4j-windows)
6+
[![Linux](https://ci-builds.apache.org/job/Netbeans/job/netbeans-html4j-linux/badge/icon)](https://ci-builds.apache.org/job/Netbeans/job/netbeans-html4j-linux/)
7+
[![Windows](https://ci-builds.apache.org/job/Netbeans/job/netbeans-html4j-windows/badge/icon)](https://ci-builds.apache.org/job/Netbeans/job/netbeans-html4j-windows/)
88

99
The HTML/Java library provides [basic building blocks](https://bits.netbeans.org/html+java/dev/net/java/html/js/package-summary.html)
1010
as well as advanced [high level concepts](https://bits.netbeans.org/html+java/dev/net/java/html/json/Model.html)
@@ -77,7 +77,7 @@ $ mvn clean install
7777
```
7878

7979
and create a pull request, which may then be merged into the
80-
official [Apache repository](https://gitbox.apache.org/repos/asf?p=netbeans-html4j.git).
80+
official [Apache repository](https://gitbox.apache.org/repos/asf/netbeans-html4j.git).
8181

8282
### Full History
8383

boot-agent-test/pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
<artifactId>boot-agent-test</artifactId>
3030
<packaging>jar</packaging>
3131
<name>Dynamic Boot Test</name>
32+
<properties>
33+
<skipTests>${skipJavaFXTests}</skipTests>
34+
</properties>
3235
<build>
3336
<plugins>
3437
<plugin>

boot-fx/pom.xml

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
<properties>
3636
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3737
<publicPackages>net.java.html.boot.fx</publicPackages>
38+
<skipTests>${skipJavaFXTests}</skipTests>
3839
</properties>
3940
<build>
4041
<plugins>
@@ -90,7 +91,28 @@
9091
<scope>test</scope>
9192
<type>jar</type>
9293
</dependency>
94+
<dependency>
95+
<artifactId>webswing-app-toolkit</artifactId>
96+
<groupId>org.webswing</groupId>
97+
<version>20.1.8</version>
98+
<scope>provided</scope>
99+
<exclusions>
100+
<exclusion>
101+
<groupId>jdk.jsobject.modpatch</groupId>
102+
<artifactId>jdk.jsobject.modpatch</artifactId>
103+
</exclusion>
104+
<exclusion>
105+
<groupId>java.desktop.modpatch</groupId>
106+
<artifactId>java.desktop.modpatch</artifactId>
107+
</exclusion>
108+
<exclusion>
109+
<groupId>org.webswing</groupId>
110+
<artifactId>webswing-api</artifactId>
111+
</exclusion>
112+
</exclusions>
113+
</dependency>
93114
</dependencies>
94-
<description>A presentation provider to show JavaFX WebView
95-
when a Java/HTML based application is about to boot.</description>
115+
<description>A presentation provider to show JavaFX WebView
116+
when a Java/HTML based application is about to boot.
117+
</description>
96118
</project>

boot-fx/src/main/java/org/netbeans/html/boot/fx/AbstractFXPresenter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ JSObject createPOJOWrapper(int hash, int id) {
233233
throw new IllegalStateException(ex);
234234
}
235235
}
236-
return (JSObject) newPOJOImpl.call("fxBrwsrId", hash, id);
236+
return (JSObject) newPOJOImpl.call("fxBrwsrId", new Object[] { hash, id });
237237
}
238238

239239
final Object undefined() {
@@ -244,13 +244,13 @@ final Object undefined() {
244244
}
245245

246246
private int getArrayLength(Object val) throws JSException {
247-
int length = ((Number) arraySizeFn().call("array", val, null)).intValue();
247+
int length = ((Number) arraySizeFn().call("array", new Object[] { val, null })).intValue();
248248
return length;
249249
}
250250

251251
private Object[] toArray(int length, Object val) throws JSException {
252252
Object[] arr = new Object[length];
253-
arraySizeFn().call("array", val, arr);
253+
arraySizeFn().call("array", new Object[] { val, arr });
254254
checkArray(arr);
255255
return arr;
256256
}
@@ -565,7 +565,7 @@ Object realValue(JSObject obj) {
565565
synchronized (this) {
566566
this.hash = -1;
567567
this.id = -1;
568-
obj.call("fxBrwsrId", this);
568+
obj.call("fxBrwsrId", new Object[] { this });
569569
assert this.hash != -1;
570570
assert this.id != -1;
571571
resultHash = this.hash;

boot-fx/src/main/java/org/netbeans/html/boot/fx/FXBrwsr.java

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ private WebView newView(final URL url, final AbstractFXPresenter onLoad) {
229229
}
230230

231231
attachHandlers(view, newStage);
232+
final FXConsole fxConsole = new FXConsole(view, newStage);
232233
bp.setCenter(view);
233234
final Worker<Void> w = view.getEngine().getLoadWorker();
234235
w.stateProperty().addListener(new ChangeListener<Worker.State>() {
@@ -238,7 +239,7 @@ private WebView newView(final URL url, final AbstractFXPresenter onLoad) {
238239
public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State newState) {
239240
if (newState.equals(Worker.State.SUCCEEDED)) {
240241
if (checkValid()) {
241-
FXConsole.register(view.getEngine());
242+
fxConsole.register(view.getEngine());
242243
onLoad.onPageLoad();
243244
}
244245
}
@@ -257,7 +258,7 @@ private boolean checkValid() {
257258
}
258259

259260
});
260-
Title.observeView(view, stage);
261+
fxConsole.observeWebViewTitle();
261262
return view;
262263
}
263264

@@ -361,7 +362,8 @@ public WebEngine call(PopupFeatures param) {
361362
stage.initOwner(owner);
362363
final WebView popUpView = new WebView();
363364
stage.setScene(new Scene(popUpView));
364-
Title.observeView(popUpView, stage);
365+
FXConsole fxConsole = new FXConsole(popUpView, stage);
366+
fxConsole.observeWebViewTitle();
365367
stage.show();
366368
return popUpView.getEngine();
367369
}
@@ -396,30 +398,4 @@ public void handle(ActionEvent t) {
396398
}
397399
}
398400
}
399-
private static class Title implements ChangeListener<String> {
400-
private String title;
401-
private final WebView view;
402-
private final Stage stage;
403-
404-
private Title(WebView view, Stage stage) {
405-
super();
406-
this.view = view;
407-
this.stage = stage;
408-
}
409-
410-
public static void observeView(WebView view, Stage stage) {
411-
Title t = new Title(view, stage);
412-
view.getEngine().titleProperty().addListener(t);
413-
t.changed(null, null, null);
414-
}
415-
416-
@Override
417-
public void changed(ObservableValue<? extends String> ov, String t, String t1) {
418-
title = view.getEngine().getTitle();
419-
if (title != null) {
420-
stage.setTitle(title);
421-
}
422-
}
423-
}
424-
425401
}

boot-fx/src/main/java/org/netbeans/html/boot/fx/FXConsole.java

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,15 @@
1818
*/
1919
package org.netbeans.html.boot.fx;
2020

21+
import java.util.ArrayList;
22+
import java.util.List;
2123
import java.util.logging.Level;
2224
import java.util.logging.Logger;
25+
import javafx.beans.value.ChangeListener;
26+
import javafx.beans.value.ObservableValue;
2327
import javafx.scene.web.WebEngine;
28+
import javafx.scene.web.WebView;
29+
import javafx.stage.Stage;
2430
import netscape.javascript.JSObject;
2531

2632
/** This is an implementation package - just
@@ -31,29 +37,52 @@
3137
*
3238
* @author Jaroslav Tulach
3339
*/
34-
public final class FXConsole {
40+
public final class FXConsole implements ChangeListener<String> {
3541
static final Logger LOG = Logger.getLogger(FXConsole.class.getName());
36-
37-
private FXConsole() {
42+
private String title;
43+
final WebView view;
44+
final Stage stage;
45+
46+
private static final List<FXConsole> all = new ArrayList<FXConsole>();
47+
48+
FXConsole(WebView view, Stage stage) {
49+
all.add(this);
50+
this.view = view;
51+
this.stage = stage;
3852
}
3953

40-
static void register(WebEngine eng) {
54+
void register(WebEngine eng) {
4155
JSObject fn = (JSObject) eng.executeScript(""
42-
+ "(function(attr, l, c) {"
43-
+ " window.console[attr] = function(msg) { c.log(l, msg); };"
56+
+ "(function(attr, l, FXConsole) {\n"
57+
+ " window.console[attr] = function(msg) {\n"
58+
+ " FXConsole.log(l, msg);\n"
59+
+ " };"
4460
+ "})"
4561
);
46-
FXConsole c = new FXConsole();
47-
c.registerImpl(fn, "log", Level.INFO);
48-
c.registerImpl(fn, "info", Level.INFO);
49-
c.registerImpl(fn, "warn", Level.WARNING);
50-
c.registerImpl(fn, "error", Level.SEVERE);
62+
registerImpl(fn, "log", Level.INFO);
63+
registerImpl(fn, "info", Level.INFO);
64+
registerImpl(fn, "warn", Level.WARNING);
65+
registerImpl(fn, "error", Level.SEVERE);
5166
}
52-
67+
5368
private void registerImpl(JSObject eng, String attr, Level l) {
54-
eng.call("call", null, attr, l, this);
69+
eng.call("call", new Object[] { null, attr, l, this });
70+
}
71+
72+
void observeWebViewTitle() {
73+
view.getEngine().titleProperty().addListener(this);
74+
this.changed(null, null, null);
75+
}
76+
77+
@Override
78+
public void changed(ObservableValue<? extends String> ov, String t, String t1) {
79+
title = view.getEngine().getTitle();
80+
if (title != null) {
81+
stage.setTitle(title);
82+
}
5583
}
56-
84+
85+
// called from JavaScript
5786
public void log(Level l, String msg) {
5887
LOG.log(l, msg);
5988
}

boot-fx/src/main/java/org/netbeans/html/boot/fx/FXGCPresenter.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,27 @@ public final class FXGCPresenter extends AbstractFXPresenter {
5454
}
5555
}
5656

57+
private final WebView[] lastWebView;
58+
public FXGCPresenter() {
59+
this(null);
60+
}
61+
62+
FXGCPresenter(WebView[] lastWebView) {
63+
this.lastWebView = lastWebView;
64+
}
65+
5766
@Override
5867
void waitFinished() {
5968
FXBrwsr.waitFinished();
6069
}
6170

6271
@Override
6372
WebView findView(final URL resource) {
64-
return FXBrwsr.findWebView(resource, this);
73+
WebView view = FXBrwsr.findWebView(resource, this);
74+
if (lastWebView != null) {
75+
lastWebView[0] = view;
76+
}
77+
return view;
6578
}
6679

6780
@Override

boot-fx/src/test/java/org/netbeans/html/boot/fx/PopupTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.concurrent.CountDownLatch;
2222
import java.util.concurrent.Executors;
2323
import java.util.concurrent.TimeUnit;
24+
import javafx.scene.web.WebView;
2425
import javafx.stage.Stage;
2526
import net.java.html.BrwsrCtx;
2627
import net.java.html.boot.BrowserBuilder;
@@ -65,7 +66,8 @@ public void run() {
6566
}
6667
WhenInitialized when = new WhenInitialized();
6768

68-
final BrowserBuilder bb = BrowserBuilder.newBrowser().loadClass(PopupTest.class).
69+
final WebView[] lastWebView = { null };
70+
final BrowserBuilder bb = BrowserBuilder.newBrowser(new FXGCPresenter(lastWebView)).loadClass(PopupTest.class).
6971
loadPage("empty.html").
7072
loadFinished(when);
7173

@@ -80,7 +82,8 @@ public void run() {
8082
when.cdl.await();
8183
if (arr[0] != null) throw arr[0];
8284

83-
Stage s = FXBrwsr.findStage();
85+
assertNotNull(lastWebView[0], "A WebView created");
86+
Stage s = (Stage) lastWebView[0].getScene().getWindow();
8487
assertEquals(s.getTitle(), "FX Presenter Harness");
8588

8689
final Object[] window = new Object[1];

0 commit comments

Comments
 (0)