sourceError.html 7.3 KB
Newer Older
1
<!-- can not use doctype -->
2
<!--
3
Copyright 2004-2010 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
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
10
<title>Error Analyzer</title>
11
<link rel="stylesheet" type="text/css" href="stylesheet.css" />
12
<style type="text/css">
13 14
body {
    max-width: none;
Thomas Mueller's avatar
Thomas Mueller committed
15
    width: inherit;
16
}
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
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;
}
32
input {
33
    vertical-align: middle;
34
}
35 36 37 38 39
</style>

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

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

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

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

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

function convert() {
90
    try {
91
        var s = get('error').value;
92 93 94 95 96 97 98 99
        if(lastError == s) {
            return;
        }
        lastError = s;
        var result = '';
        hasData = false;
        var idx = s.lastIndexOf("[");
        if (idx >= 0) {
100
            get('message').innerHTML = s.substring(0, idx);
101 102 103 104
            var end = s.indexOf("]", idx);
            errorCode = s.substring(idx + 1, end);
            hasData = true;
            idx = errorCode.indexOf("-");
105
            build = parseInt(errorCode.substring(idx + 1));
106
            get('version').innerHTML = (build < 100 ? '1.0.' : (build < 120 ? '1.1.' : '1.2.')) + build;
107 108 109 110
            errorCode = errorCode.substring(0, idx);
            while (errorCode.length > 1 && errorCode.charAt(0) == '0') {
                errorCode = errorCode.substring(1);
            }
111
            get('errorCode').innerHTML = errorCode;
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 145
            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;
146
            result += "<" + "/a>";
147 148 149 150 151
            hasData = true;
            idx = end + 1;
        }
        result = result.replace(/[\n\r]+/g, "<br/>");
        result = result.replace(/ at /g, "");
152
        get('links').innerHTML = result;
153
        select('input');
154
    } catch(e) {
155 156
        hasData = false;
        alert('Can not parse the stack trace: ' + e);
157 158 159 160 161
    }

}

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

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

//-->
</script>

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

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