sourceError.html 7.3 KB
Newer Older
1
<!-- can not use doctype -->
2
<!--
Thomas Mueller's avatar
Thomas Mueller committed
3
Copyright 2004-2009 H2 Group. Multiple-Licensed under the H2 License, Version 1.0,
4 5
and under the Eclipse Public License, Version 1.0
(http://h2database.com/html/license.html).
6 7
Initial Developer: H2 Group
-->
8 9 10 11
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Online Error Analyzer</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css" />
12
<style type="text/css">
13 14 15
body {
    max-width: none;
}
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
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;
}
31
input {
32
    vertical-align: middle;
33
}
34 35 36 37 38
</style>

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

39
function get(id) {
40
    return document.getElementById(id);
41 42
}

43 44 45
var lastError = '';
var hasData = false;
var errorCode = '0';
46
var build = 100;
47

48
function goDetails(code) {
49 50 51 52 53
    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');
54
    get('more').src = 'http://h2database.com/javadoc/org/h2/constant/ErrorCode.html#c' + code;
55 56
}

57
function go(file, line) {
58
    var url;
59
    if (get('rawSource').checked == true) {
60 61 62 63 64 65
        url = "source.html?file=";
        url += file;
        url += "&line=";
        url += line;
        url += "&build=";
        url += build;
66 67 68
    } else {
        var tag = 'trunk/h2';
        if (build == 64) {
69
            tag = 'tags/version-1.0.' + build;
70 71
        } else if (build >= 120) {
            tag = 'tags/version-1.2.' + build + '/h2';
72 73
        } else if (build >= 100) {
            tag = 'tags/version-1.1.' + build + '/h2';
74
        } else if (build >= 63) {
75 76 77 78 79 80 81 82 83
            tag = 'tags/version-1.0.' + build + '/h2';
        }
        url = 'http://code.google.com/p/h2database/source/browse/';
        url += tag;
        url += '/src/main/';
        url += file;
        url += '#';
        url += line;
    }
84 85
    get('file').innerHTML = file;
    get('code').src = url;
86 87 88
}

function convert() {
89
    try {
90
        var s = get('error').value;
91 92 93 94 95 96 97 98
        if(lastError == s) {
            return;
        }
        lastError = s;
        var result = '';
        hasData = false;
        var idx = s.lastIndexOf("[");
        if (idx >= 0) {
99
            get('message').innerHTML = s.substring(0, idx);
100 101 102 103
            var end = s.indexOf("]", idx);
            errorCode = s.substring(idx + 1, end);
            hasData = true;
            idx = errorCode.indexOf("-");
104
            build = parseInt(errorCode.substring(idx + 1));
105
            get('version').innerHTML = (build < 100 ? '1.0.' : (build < 120 ? '1.1.' : '1.2.')) + build;
106 107 108 109
            errorCode = errorCode.substring(0, idx);
            while (errorCode.length > 1 && errorCode.charAt(0) == '0') {
                errorCode = errorCode.substring(1);
            }
110
            get('errorCode').innerHTML = errorCode;
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
            goDetails(errorCode);
            s = s.substring(end + 1);
        }
        idx = 0;
        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;
145
            result += "<" + "/a>";
146 147 148 149 150
            hasData = true;
            idx = end + 1;
        }
        result = result.replace(/[\n\r]+/g, "<br/>");
        result = result.replace(/ at /g, "");
151
        get('links').innerHTML = result;
152
        select('input');
153
    } catch(e) {
154 155
        hasData = false;
        alert('Can not parse the stack trace: ' + e);
156 157 158 159 160
    }

}

function select(id) {
161 162 163 164 165 166 167 168
    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 = '';
169 170 171 172
    if(id=='details') {
        goDetails(errorCode);
    }
    sizeTextArea();
173 174 175 176
}

function sizeTextArea() {
    var height=document.body.clientHeight;
177
    var error = get('error');
178
    error.style.height = (height - error.offsetTop - 25) + 'px';
179
    var more = get('more');
180
    more.style.height = (height - more.offsetTop - 25) + 'px';
181 182
    var code = get('code');
    code.style.height = (height - get('sourceTable').offsetTop - code.offsetTop - 30) + 'px';
183 184 185 186 187
}

//-->
</script>

188 189 190 191
</head>
<body style="margin:20px" onresize="sizeTextArea();" onload="sizeTextArea();" >

<h1>Online Error Analyzer</h1>
192
<b><a href="../html/main.html">Home</a></b><br />
193
<h2>
Thomas Mueller's avatar
Thomas Mueller committed
194 195 196
    <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>
197 198
</h2>
<hr/>
Thomas Mueller's avatar
Thomas Mueller committed
199
<div id = "input">
200
    <p>Fill in the error message and stack trace and click on 'Details' or 'Source Code': </p>
Thomas Mueller's avatar
Thomas Mueller committed
201
    <textarea id = "error" cols="100" style="width: 100%; overflow: auto;" rows="20"
202 203 204 205 206 207 208 209
        onChange="convert()"
        onSelect="convert()"
        onKeyUp="convert()"
        onKeyPress="convert()"
        onFocus="convert()"
        onBlur="convert()"
    >
    </textarea>
210
</div>
Thomas Mueller's avatar
Thomas Mueller committed
211 212 213
<div id = "details">
    <p><b>Error Code: </b><span id = "errorCode"></span></p>
    <p><b>Product Version: </b><span id = "version"></span></p>
214
    <p><b>Message: </b></p>
Thomas Mueller's avatar
Thomas Mueller committed
215
    <p id = "message"></p>
216
    <p><b>More Information:</b></p>
Thomas Mueller's avatar
Thomas Mueller committed
217
    <iframe id = "more" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="100px" src="">
218
    </iframe>
219
</div>
Thomas Mueller's avatar
Thomas Mueller committed
220 221
<div id = "source">
    <table id = "sourceTable" style="border:0px" width="100%"><tr>
222 223
    <td style="border:0px" width="30px">
        <p><b>Stack Trace: </b></p>
Thomas Mueller's avatar
Thomas Mueller committed
224
        <p id = "links"></p>
225
    </td><td style="border:0px" width="90%">
Thomas Mueller's avatar
Thomas Mueller committed
226 227 228
        <p><b>Source File: </b><span id = "file"></span><br />
        Raw file <input type="checkbox" id = "rawSource" /> (fast; only Firefox)</p>
        <iframe id = "code" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="100px" src="">
229 230 231
        </iframe>
    </td>
    </tr></table>
232 233 234 235 236 237
</div>
<script type="text/javascript">
//<!--
select('input');
//-->
</script>
238 239
<!-- analytics -->
</body></html>