sourceError.html 7.6 KB
Newer Older
1
<!-- can not use doctype -->
2
<!--
3
Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0, Version 1.0,
4
and under the Eclipse Public License, Version 1.0
5 6
Initial Developer: H2 Group
-->
7 8
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
9 10
<meta name=viewport content="width=device-width, initial-scale=1" />
<title>
11
<title>Error Analyzer</title>
12
<link rel="stylesheet" type="text/css" href="stylesheet.css" />
13
<style type="text/css">
14 15
body {
    max-width: none;
Thomas Mueller's avatar
Thomas Mueller committed
16
    width: inherit;
17
}
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
a {
    text-decoration: underline;
    font-weight: normal;
    color: #0000ff;
}
a.selected {
    text-decoration: none;
    font-weight: bold;
    color: #000000;
}
a.disabled {
    text-decoration: none;
    font-weight: normal;
    color: lightGray;
}
33
input {
34
    vertical-align: middle;
35
}
36 37 38 39 40
</style>

<script type="text/javascript">
//<!--

Thomas Mueller's avatar
Thomas Mueller committed
41 42
function getVersion(build) {
    if (build == 64) {
43
        return '1.0/version-1.0.' + build;
44 45
    } else if (build >= 177) {
        return '1.4.' + build;
Thomas Mueller's avatar
Thomas Mueller committed
46
    } else if (build >= 146 && build != 147) {
Thomas Mueller's avatar
Thomas Mueller committed
47
        return '1.3/version-1.3.' + build;
Thomas Mueller's avatar
Thomas Mueller committed
48
    } else if (build >= 120) {
49
        return '1.2/version-1.2.' + build;
Thomas Mueller's avatar
Thomas Mueller committed
50
    } else if (build >= 100) {
51
        return '1.1/version-1.1.' + build;
Thomas Mueller's avatar
Thomas Mueller committed
52 53 54 55
    }
    return '1.0.' + build;
}

56
function get(id) {
57
    return document.getElementById(id);
58 59
}

60 61 62
var lastError = '';
var hasData = false;
var errorCode = '0';
63
var build = 100;
64

65
function goDetails(code) {
66 67 68 69 70
    code = code.replace('21S', '210');
    code = code.replace('42S', '421');
    code = code.replace('HY', '50');
    code = code.replace('C', '1');
    code = code.replace('T', '2');
71
    get('more').src = 'http://h2database.com/javadoc/org/h2/constant/ErrorCode.html#c' + code;
72 73
}

74
function go(file, line) {
75
    var url;
76
    if (get('rawSource').checked == true) {
77 78 79 80 81 82
        url = "source.html?file=";
        url += file;
        url += "&line=";
        url += line;
        url += "&build=";
        url += build;
83
        get('file').innerHTML = file;
84
        get('code').src = url;
85
    } else {
86 87 88 89 90
        if (build && build > 0) {
            var tag = 'tags/version-' + getVersion(build) + '/h2';
        } else {
            var tag = 'trunk/h2';
        }
91 92 93 94 95 96
        url = 'http://code.google.com/p/h2database/source/browse/';
        url += tag;
        url += '/src/main/';
        url += file;
        url += '#';
        url += line;
97 98
        // X-Frame-Options is now 'SAMEORIGIN'
        window.open(url);
99
    }
100 101 102
}

function convert() {
103
    try {
104
        var s = get('error').value;
105 106 107 108 109 110 111 112
        if(lastError == s) {
            return;
        }
        lastError = s;
        var result = '';
        hasData = false;
        var idx = s.lastIndexOf("[");
        if (idx >= 0) {
113
            get('message').innerHTML = s.substring(0, idx);
114 115 116 117
            var end = s.indexOf("]", idx);
            errorCode = s.substring(idx + 1, end);
            hasData = true;
            idx = errorCode.indexOf("-");
118
            build = parseInt(errorCode.substring(idx + 1));
Thomas Mueller's avatar
Thomas Mueller committed
119
            get('version').innerHTML = getVersion(build);
120 121 122 123
            errorCode = errorCode.substring(0, idx);
            while (errorCode.length > 1 && errorCode.charAt(0) == '0') {
                errorCode = errorCode.substring(1);
            }
124
            get('errorCode').innerHTML = errorCode;
125 126 127
            goDetails(errorCode);
        }
        idx = 0;
128 129
        s = s.replace(/\t/g, " ");
        s = s.replace(/ +/g, " ");
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
        while (true) {
            var start = s.indexOf("at org.h2.", idx);
            if (start < 0) {
                result += s.substring(idx);
                break;
            }
            start += 3; // skip 'at '
            if (idx > 0) {
                result += s.substring(idx, start);
            }
            var end = s.indexOf(')', start);
            if (end < 0) {
                result += s.substring(idx);
                break;
            }
            var element = s.substring(start, end + 1);
            var open = element.lastIndexOf('(');
            var dotMethod = element.lastIndexOf('.', open - 1);
            var dotClass = element.lastIndexOf('.', dotMethod - 1);
            var packageName = element.substring(0, dotClass);
            var colon = element.lastIndexOf(':');
            var file = element.substring(open + 1, colon);
            var lineNumber = element.substring(colon + 1, element.length - 1);
            var fullFileName = packageName.replace(/\./g, '/') + "/" + file;
            result += "<a href='javascript:go(\"";
            result += fullFileName;
            result += "\",";
            result += lineNumber;
            result += ")'>";
            result += element;
160
            result += "<" + "/a>";
161 162 163 164 165
            hasData = true;
            idx = end + 1;
        }
        result = result.replace(/[\n\r]+/g, "<br/>");
        result = result.replace(/ at /g, "");
166
        get('links').innerHTML = result;
167
        select('input');
168
    } catch(e) {
169 170
        hasData = false;
        alert('Can not parse the stack trace: ' + e);
171 172 173 174 175
    }

}

function select(id) {
176 177 178 179 180 181 182 183
    get('input').style.display = 'none';
    get('details').style.display = 'none';
    get('source').style.display = 'none';
    get('inputTab').className = '';
    get('detailsTab').className = hasData ? '' : 'disabled';
    get('sourceTab').className = hasData ? '' : 'disabled';
    get(id + 'Tab').className = 'selected';
    get(id).style.display = '';
184 185 186 187
    if(id=='details') {
        goDetails(errorCode);
    }
    sizeTextArea();
188 189 190 191
}

function sizeTextArea() {
    var height=document.body.clientHeight;
192
    var error = get('error');
193
    error.style.height = (height - error.offsetTop - 25) + 'px';
194
    var more = get('more');
195
    more.style.height = (height - more.offsetTop - 25) + 'px';
196 197
    var code = get('code');
    code.style.height = (height - get('sourceTable').offsetTop - code.offsetTop - 30) + 'px';
198 199 200 201 202
}

//-->
</script>

203 204 205
</head>
<body style="margin:20px" onresize="sizeTextArea();" onload="sizeTextArea();" >

206
<h1>Error Analyzer</h1>
207
<b><a href="../html/main.html">Home</a></b><br />
208
<h2>
Thomas Mueller's avatar
Thomas Mueller committed
209 210 211
    <a href="javascript:select('input')" id = "inputTab">Input</a>&nbsp;
    <a href="javascript:select('details')" id = "detailsTab">Details</a>&nbsp;
    <a href="javascript:select('source')" id = "sourceTab">Source Code</a>
212 213
</h2>
<hr/>
Thomas Mueller's avatar
Thomas Mueller committed
214
<div id = "input">
215
    <p>Paste the error message and stack trace below and click on 'Details' or 'Source Code': </p>
Thomas Mueller's avatar
Thomas Mueller committed
216
    <textarea id = "error" cols="100" style="width: 100%; overflow: auto;" rows="20"
217 218 219 220 221 222 223 224
        onChange="convert()"
        onSelect="convert()"
        onKeyUp="convert()"
        onKeyPress="convert()"
        onFocus="convert()"
        onBlur="convert()"
    >
    </textarea>
225
</div>
Thomas Mueller's avatar
Thomas Mueller committed
226 227 228
<div id = "details">
    <p><b>Error Code: </b><span id = "errorCode"></span></p>
    <p><b>Product Version: </b><span id = "version"></span></p>
229
    <p><b>Message: </b></p>
Thomas Mueller's avatar
Thomas Mueller committed
230
    <p id = "message"></p>
231
    <p><b>More Information:</b></p>
Thomas Mueller's avatar
Thomas Mueller committed
232
    <iframe id = "more" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="100px" src="">
233
    </iframe>
234
</div>
Thomas Mueller's avatar
Thomas Mueller committed
235 236
<div id = "source">
    <table id = "sourceTable" style="border:0px" width="100%"><tr>
237 238
    <td style="border:0px" width="30px">
        <p><b>Stack Trace: </b></p>
Thomas Mueller's avatar
Thomas Mueller committed
239
        <p id = "links"></p>
240
    </td><td style="border:0px" width="90%">
Thomas Mueller's avatar
Thomas Mueller committed
241
        <p><b>Source File: </b><span id = "file"></span><br />
242 243
        Inline <input type="checkbox" id = "rawSource" checked="checked" /></p>
        <iframe id = "code" frameborder="0" marginwidth="0" marginheight="0" width="4000px" height="100px" src="">
244 245 246
        </iframe>
    </td>
    </tr></table>
247 248 249 250 251 252
</div>
<script type="text/javascript">
//<!--
select('input');
//-->
</script>
253 254
<!-- analytics -->
</body></html>