diff -r 06e7a74c72cf -r 265edcee24ed launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Tue May 28 21:49:38 2013 +0200 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Fri Jun 21 22:34:09 2013 +0200 @@ -177,20 +177,19 @@ server = initServer(".", true); final ServerConfiguration conf = server.getServerConfiguration(); - class DynamicResourceHandler extends HttpHandler { + class DynamicResourceHandler extends HttpHandler implements InvocationContext.RegisterResource { private final InvocationContext ic; public DynamicResourceHandler(InvocationContext ic) { - if (ic == null || ic.resources.isEmpty()) { - throw new NullPointerException(); - } this.ic = ic; for (Resource r : ic.resources) { conf.addHttpHandler(this, r.httpPath); } + InvocationContext.register(this); } public void close() { conf.removeHttpHandler(this); + InvocationContext.register(null); } @Override @@ -231,6 +230,15 @@ } } } + + @Override + public URI registerResource(Resource r) { + if (!ic.resources.contains(r)) { + ic.resources.add(r); + conf.addHttpHandler(this, r.httpPath); + } + return pageURL(server, r.httpPath); + } } conf.addHttpHandler(new Page(resources, harnessResource()), "/execute"); @@ -286,9 +294,7 @@ return; } - if (!mi.resources.isEmpty()) { - prev = new DynamicResourceHandler(mi); - } + prev = new DynamicResourceHandler(mi); cases.add(mi); final String cn = mi.clazz.getName(); @@ -381,10 +387,7 @@ private Object[] launchServerAndBrwsr(HttpServer server, final String page) throws IOException, URISyntaxException, InterruptedException { server.start(); - NetworkListener listener = server.getListeners().iterator().next(); - int port = listener.getPort(); - - URI uri = new URI("http://localhost:" + port + page); + URI uri = pageURL(server, page); return showBrwsr(uri); } private static String toUTF8(String value) throws UnsupportedEncodingException { @@ -496,6 +499,16 @@ abstract void generateBck2BrwsrJS(StringBuilder sb, Res loader) throws IOException; abstract String harnessResource(); + private static URI pageURL(HttpServer server, final String page) { + NetworkListener listener = server.getListeners().iterator().next(); + int port = listener.getPort(); + try { + return new URI("http://localhost:" + port + page); + } catch (URISyntaxException ex) { + throw new IllegalStateException(ex); + } + } + class Res { public InputStream get(String resource) throws IOException { URL u = null;