sourceError.html 7.3 KB
Newer Older
1
<!-- can not use doctype -->
2
<!--
3
Copyright 2004-2011 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">
//<!--

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

53
function get(id) {
54
    return document.getElementById(id);
55 56
}

57 58 59
var lastError = '';
var hasData = false;
var errorCode = '0';
60
var build = 100;
61

62
function goDetails(code) {
63 64 65 66 67
    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');
68
    get('more').src = 'http://h2database.com/javadoc/org/h2/constant/ErrorCode.html#c' + code;
69 70
}

71
function go(file, line) {
72
    var url;
73
    if (get('rawSource').checked == true) {
74 75 76 77 78 79
        url = "source.html?file=";
        url += file;
        url += "&line=";
        url += line;
        url += "&build=";
        url += build;
80
    } else {
Thomas Mueller's avatar
Thomas Mueller committed
81
        var tag = 'trunk/h2/tags/version-' + getVersion(build) + '/h2';
82 83 84 85 86 87 88
        url = 'http://code.google.com/p/h2database/source/browse/';
        url += tag;
        url += '/src/main/';
        url += file;
        url += '#';
        url += line;
    }
89 90
    get('file').innerHTML = file;
    get('code').src = url;
91 92 93
}

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

}

function select(id) {
168 169 170 171 172 173 174 175
    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 = '';
176 177 178 179
    if(id=='details') {
        goDetails(errorCode);
    }
    sizeTextArea();
180 181 182 183
}

function sizeTextArea() {
    var height=document.body.clientHeight;
184
    var error = get('error');
185
    error.style.height = (height - error.offsetTop - 25) + 'px';
186
    var more = get('more');
187
    more.style.height = (height - more.offsetTop - 25) + 'px';
188 189
    var code = get('code');
    code.style.height = (height - get('sourceTable').offsetTop - code.offsetTop - 30) + 'px';
190 191 192 193 194
}

//-->
</script>

195 196 197
</head>
<body style="margin:20px" onresize="sizeTextArea();" onload="sizeTextArea();" >

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