sourceError.html 7.1 KB
Newer Older
1
<!-- can not use doctype -->
2
<!--
3
Copyright 2004-2008 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 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
<style type="text/css">
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;
}
28
input {
29
    vertical-align: middle;
30
}
31 32 33 34 35
</style>

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

36
function get(id) {
37
    return document.getElementById(id);
38 39
}

40 41 42
var lastError = '';
var hasData = false;
var errorCode = '0';
43
var build = 100;
44

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

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

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

}

function select(id) {
156 157 158 159 160 161 162 163
    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 = '';
164 165 166 167
    if(id=='details') {
        goDetails(errorCode);
    }
    sizeTextArea();
168 169 170 171
}

function sizeTextArea() {
    var height=document.body.clientHeight;
172
    var error = get('error');
173
    error.style.height = (height - error.offsetTop - 25) + 'px';
174
    var more = get('more');
175
    more.style.height = (height - more.offsetTop - 25) + 'px';
176 177
    var code = get('code');
    code.style.height = (height - get('sourceTable').offsetTop - code.offsetTop - 30) + 'px';
178 179 180 181 182
}

//-->
</script>

183 184 185 186
</head>
<body style="margin:20px" onresize="sizeTextArea();" onload="sizeTextArea();" >

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