36 print("Usage:");
37 print("jdk9+: jjs -fx jrtfsviewer.js");
38 print("jdk8+: jjs -fx -cp <path-of jrt-fs.jar> jrtfsviewer.js");
39 exit(1);
40 }
41
42 if (! $OPTIONS._fx) {
43 usage();
44 }
45
46 // shows the jrt file system as a JavaFX tree view.
47
48 // Using JavaFX from Nashorn. See also:
49 // http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/javafx.html
50
51 // Java classes used
52 var FileSystems = Java.type("java.nio.file.FileSystems");
53 var Files = Java.type("java.nio.file.Files");
54 var System = Java.type("java.lang.System");
55 var URI = Java.type("java.net.URI");
56
57 // JavaFX classes used
58 var StackPane = Java.type("javafx.scene.layout.StackPane");
59 var Scene = Java.type("javafx.scene.Scene");
60 var TreeItem = Java.type("javafx.scene.control.TreeItem");
61 var TreeView = Java.type("javafx.scene.control.TreeView");
62
63 // Create a javafx TreeItem to view nio Path
64 function treeItemForPath(path) {
65 var item = new TreeItem(path.toString());
66
67 if (Files.isDirectory(path)) {
68 var stream = Files.newDirectoryStream(path);
69 try {
70 var itr = stream.iterator();
71 while (itr.hasNext()) {
72 var childPath = itr.next();
73 if (Files.isDirectory(childPath)) {
74 var subitem = treeItemForPath(childPath);
75 } else {
83 }
84 return item;
85 }
86
87 function getJrtFileSystem() {
88 var isJdk9 = System.getProperty("java.version").startsWith("1.9.0");
89 var uri = URI.create("jrt:/");
90
91 if (isJdk9) {
92 return FileSystems.getFileSystem(uri);
93 } else {
94 // pass jrt-fs.jar in -classpath but running on jdk8+
95 var cls;
96 try {
97 cls = Java.type("jdk.internal.jrtfs.JrtFileSystem").class;
98 } catch (e) {
99 print(e);
100 print("did you miss specifying jrt-fs.jar with -cp option?");
101 usage();
102 }
103 return FileSystems.newFileSystem(uri, null, cls.classLoader);
104 }
105 }
106
107 // JavaFX start method
108 function start(stage) {
109 var jrtfs = getJrtFileSystem();
110 var root = jrtfs.getPath('/');
111 stage.title = "jrt fs viewer";
112 var rootItem = treeItemForPath(root);
113 var tree = new TreeView(rootItem);
114 var root = new StackPane();
115 root.children.add(tree);
116 stage.scene = new Scene(root, 300, 450);
117 stage.show();
118 }
|
36 print("Usage:");
37 print("jdk9+: jjs -fx jrtfsviewer.js");
38 print("jdk8+: jjs -fx -cp <path-of jrt-fs.jar> jrtfsviewer.js");
39 exit(1);
40 }
41
42 if (! $OPTIONS._fx) {
43 usage();
44 }
45
46 // shows the jrt file system as a JavaFX tree view.
47
48 // Using JavaFX from Nashorn. See also:
49 // http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/javafx.html
50
51 // Java classes used
52 var FileSystems = Java.type("java.nio.file.FileSystems");
53 var Files = Java.type("java.nio.file.Files");
54 var System = Java.type("java.lang.System");
55 var URI = Java.type("java.net.URI");
56 var Collections = Java.type("java.util.Collections");
57
58 // JavaFX classes used
59 var StackPane = Java.type("javafx.scene.layout.StackPane");
60 var Scene = Java.type("javafx.scene.Scene");
61 var TreeItem = Java.type("javafx.scene.control.TreeItem");
62 var TreeView = Java.type("javafx.scene.control.TreeView");
63
64 // Create a javafx TreeItem to view nio Path
65 function treeItemForPath(path) {
66 var item = new TreeItem(path.toString());
67
68 if (Files.isDirectory(path)) {
69 var stream = Files.newDirectoryStream(path);
70 try {
71 var itr = stream.iterator();
72 while (itr.hasNext()) {
73 var childPath = itr.next();
74 if (Files.isDirectory(childPath)) {
75 var subitem = treeItemForPath(childPath);
76 } else {
84 }
85 return item;
86 }
87
88 function getJrtFileSystem() {
89 var isJdk9 = System.getProperty("java.version").startsWith("1.9.0");
90 var uri = URI.create("jrt:/");
91
92 if (isJdk9) {
93 return FileSystems.getFileSystem(uri);
94 } else {
95 // pass jrt-fs.jar in -classpath but running on jdk8+
96 var cls;
97 try {
98 cls = Java.type("jdk.internal.jrtfs.JrtFileSystem").class;
99 } catch (e) {
100 print(e);
101 print("did you miss specifying jrt-fs.jar with -cp option?");
102 usage();
103 }
104 return FileSystems.newFileSystem(uri, Collections.emptyMap(), cls.classLoader);
105 }
106 }
107
108 // JavaFX start method
109 function start(stage) {
110 var jrtfs = getJrtFileSystem();
111 var root = jrtfs.getPath('/');
112 stage.title = "jrt fs viewer";
113 var rootItem = treeItemForPath(root);
114 var tree = new TreeView(rootItem);
115 var root = new StackPane();
116 root.children.add(tree);
117 stage.scene = new Scene(root, 300, 450);
118 stage.show();
119 }
|