sourceError.html 7.0 KB
Newer Older
1
<!-- can not use doctype -->
2
<!--
3 4 5
Copyright 2004-2008 H2 Group. Multiple-Licensed under the H2 License, Version 1.0,,
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 43 44
var lastError = '';
var hasData = false;
var errorCode = '0';
var build = '';

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
        } else if (build >= 63) {
68 69 70 71 72 73 74 75 76
            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;
    }
77 78
    get('file').innerHTML = file;
    get('code').src = url;
79 80 81
}

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

}

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

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

//-->
</script>

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

<h1>Online Error Analyzer</h1>
185
<b><a href="../html/main.html">Home</a></b><br />
186
<h2>
187 188 189
    <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>
190 191 192
</h2>
<hr/>
<div id="input">
193 194 195 196 197 198 199 200 201 202
    <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>
203 204
</div>
<div id="details">
205 206 207 208 209 210 211
    <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>
212 213
</div>
<div id="source">
214 215 216 217 218 219 220 221 222 223 224
    <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>
225 226 227 228 229 230
</div>
<script type="text/javascript">
//<!--
select('input');
//-->
</script>
231 232
<!-- analytics -->
</body></html>