launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 29 Apr 2014 14:28:52 +0200
branchclosure
changeset 1504 d058edd87424
parent 1492 e38025e9536a
child 1505 706b66d8c481
permissions -rw-r--r--
Use provided loader to load libraries
jaroslav@1033
     1
/**
jaroslav@1033
     2
 * Back 2 Browser Bytecode Translator
jaroslav@1033
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@1033
     4
 *
jaroslav@1033
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@1033
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@1033
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@1033
     8
 *
jaroslav@1033
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@1033
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@1033
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@1033
    12
 * GNU General Public License for more details.
jaroslav@1033
    13
 *
jaroslav@1033
    14
 * You should have received a copy of the GNU General Public License
jaroslav@1033
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@1033
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@1033
    17
 */
jaroslav@1033
    18
package org.apidesign.bck2brwsr.launcher;
jaroslav@1033
    19
jaroslav@1033
    20
import java.io.IOException;
jaroslav@1489
    21
import java.net.URL;
jaroslav@1489
    22
import java.util.jar.JarFile;
jaroslav@1033
    23
jaroslav@1033
    24
/**
jaroslav@1033
    25
 * Lightweight server to launch Bck2Brwsr applications and tests.
jaroslav@1033
    26
 * Supports execution in native browser as well as Java's internal 
jaroslav@1033
    27
 * execution engine.
jaroslav@1033
    28
 */
jaroslav@1088
    29
final class Bck2BrwsrLauncher extends BaseHTTPLauncher {
jaroslav@1033
    30
    
jaroslav@1033
    31
    public Bck2BrwsrLauncher(String cmd) {
jaroslav@1088
    32
        super(cmd);
jaroslav@1033
    33
    }
jaroslav@1033
    34
    
jaroslav@1033
    35
    @Override
jaroslav@1088
    36
    String harnessResource() {
jaroslav@1088
    37
        return "org/apidesign/bck2brwsr/launcher/harness.xhtml";
jaroslav@1033
    38
    }
jaroslav@1489
    39
jaroslav@1489
    40
    @Override
jaroslav@1489
    41
    String compileJar(JarFile jar) throws IOException {
jaroslav@1489
    42
        return CompileCP.compileJAR(jar);
jaroslav@1489
    43
    }
jaroslav@1489
    44
jaroslav@1504
    45
    @Override String compileFromClassPath(URL f, Res loader) {
jaroslav@1489
    46
        try {
jaroslav@1504
    47
            return CompileCP.compileFromClassPath(f, loader);
jaroslav@1489
    48
        } catch (Exception ex) {
jaroslav@1489
    49
            ex.printStackTrace();
jaroslav@1489
    50
            return null;
jaroslav@1489
    51
        }
jaroslav@1489
    52
    }
jaroslav@1033
    53
    
jaroslav@1033
    54
    @Override
jaroslav@1088
    55
    void generateBck2BrwsrJS(StringBuilder sb, final Res loader) throws IOException {
jaroslav@1492
    56
        CompileCP.compileVM(sb, loader);
jaroslav@1088
    57
        sb.append(
jaroslav@1088
    58
              "(function WrapperVM(global) {"
jaroslav@1088
    59
            + "  function ldCls(res) {\n"
jaroslav@1088
    60
            + "    var request = new XMLHttpRequest();\n"
jaroslav@1088
    61
            + "    request.open('GET', '/classes/' + res, false);\n"
jaroslav@1088
    62
            + "    request.send();\n"
jaroslav@1088
    63
            + "    if (request.status !== 200) return null;\n"
jaroslav@1489
    64
            + "    var arr = eval(request.responseText);\n"
jaroslav@1088
    65
            + "    return arr;\n"
jaroslav@1088
    66
            + "  }\n"
jaroslav@1088
    67
            + "  var prevvm = global.bck2brwsr;\n"
jaroslav@1088
    68
            + "  global.bck2brwsr = function() {\n"
jaroslav@1088
    69
            + "    var args = Array.prototype.slice.apply(arguments);\n"
jaroslav@1088
    70
            + "    args.unshift(ldCls);\n"
jaroslav@1088
    71
            + "    return prevvm.apply(null, args);\n"
jaroslav@1088
    72
            + "  };\n"
jaroslav@1489
    73
            + "  global.bck2brwsr.registerExtension = prevvm.registerExtension;\n"
jaroslav@1088
    74
            + "})(this);\n"
jaroslav@1088
    75
        );
jaroslav@1033
    76
    }
jaroslav@1033
    77
jaroslav@1033
    78
}