launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java
branchclassloader
changeset 1184 ccf2447021f6
parent 1183 29302b4c0776
child 1187 ce6327094088
     1.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java	Mon Jun 17 19:55:31 2013 +0200
     1.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java	Thu Jun 20 10:22:50 2013 +0200
     1.3 @@ -17,17 +17,21 @@
     1.4   */
     1.5  package org.apidesign.bck2brwsr.launcher.fximpl;
     1.6  
     1.7 +import org.apidesign.html.boot.spi.Fn;
     1.8  import java.net.URL;
     1.9  import java.util.ArrayList;
    1.10  import java.util.Arrays;
    1.11 +import java.util.Collection;
    1.12  import java.util.Collections;
    1.13  import java.util.Enumeration;
    1.14  import java.util.List;
    1.15  import java.util.TooManyListenersException;
    1.16  import javafx.beans.value.ChangeListener;
    1.17  import javafx.scene.web.WebEngine;
    1.18 -import javax.script.Invocable;
    1.19 +import net.java.html.boot.BrowserBuilder;
    1.20  import netscape.javascript.JSObject;
    1.21 +import org.apidesign.html.boot.impl.FindResources;
    1.22 +import org.apidesign.html.boot.impl.FnUtils;
    1.23  
    1.24  /**
    1.25   *
    1.26 @@ -35,14 +39,16 @@
    1.27   */
    1.28  public final class JVMBridge {
    1.29      private final WebEngine engine;
    1.30 -    private final WebClassLoader cl;
    1.31 +    private final ClassLoader cl;
    1.32      
    1.33      private static ClassLoader[] ldrs;
    1.34      private static ChangeListener<Void> onBck2BrwsrLoad;
    1.35      
    1.36      JVMBridge(WebEngine eng) {
    1.37          this.engine = eng;
    1.38 -        this.cl = new WebClassLoader(JVMBridge.class.getClassLoader().getParent());
    1.39 +        final ClassLoader p = JVMBridge.class.getClassLoader().getParent();
    1.40 +        WebClassLoader wcl = new WebClassLoader(p);
    1.41 +        this.cl = FnUtils.newLoader(wcl, wcl, p);
    1.42      }
    1.43          
    1.44      public static void registerClassLoaders(ClassLoader[] loaders) {
    1.45 @@ -67,38 +73,25 @@
    1.46          return Class.forName(name, true, cl);
    1.47      }
    1.48      
    1.49 -    private final class WebClassLoader extends JsClassLoader {
    1.50 +    private final class WebClassLoader implements FindResources, Fn.Presenter {
    1.51 +        private final ClassLoader cl;
    1.52 +        
    1.53          public WebClassLoader(ClassLoader parent) {
    1.54 -            super(parent);
    1.55 +            this.cl = parent;
    1.56          }
    1.57  
    1.58          @Override
    1.59 -        protected URL findResource(String name) {
    1.60 +        public void findResources(String name, Collection<? super URL> results, boolean oneIsEnough) {
    1.61              if (ldrs != null) for (ClassLoader l : ldrs) {
    1.62                  URL u = l.getResource(name);
    1.63                  if (u != null) {
    1.64 -                    return u;
    1.65 +                    results.add(u);
    1.66                  }
    1.67              }
    1.68 -            return null;
    1.69 -        }
    1.70 -        
    1.71 -        @Override
    1.72 -        protected Enumeration<URL> findResources(String name) {
    1.73 -            List<URL> arr = new ArrayList<URL>();
    1.74 -            if (ldrs != null) {
    1.75 -                for (ClassLoader l : ldrs) {
    1.76 -                    URL u = l.getResource(name);
    1.77 -                    if (u != null) {
    1.78 -                        arr.add(u);
    1.79 -                    }
    1.80 -                }
    1.81 -            }
    1.82 -            return Collections.enumeration(arr);
    1.83          }
    1.84  
    1.85          @Override
    1.86 -        protected Fn defineFn(String code, String... names) {
    1.87 +        public Fn defineFn(String code, String... names) {
    1.88              StringBuilder sb = new StringBuilder();
    1.89              sb.append("(function() {");
    1.90              sb.append("  return function(");
    1.91 @@ -115,6 +108,11 @@
    1.92              JSObject x = (JSObject) engine.executeScript(sb.toString());
    1.93              return new JSFn(x);
    1.94          }
    1.95 +
    1.96 +        @Override
    1.97 +        public void displayPage(URL page, Runnable onPageLoad) {
    1.98 +            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    1.99 +        }
   1.100      }
   1.101      
   1.102      private static final class JSFn extends Fn {