sourceError.html 6.9 KB
Newer Older
1
<!-- can not use doctype -->
2 3 4 5
<!--
Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group
-->
6 7 8 9
<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" />
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
<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;
}
26
input {
27
    vertical-align: middle;
28
}
29 30 31 32 33
</style>

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

34
function get(id) {
35
    return document.getElementById(id);
36 37
}

38 39 40 41 42
var lastError = '';
var hasData = false;
var errorCode = '0';
var build = '';

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

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

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

}

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

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

//-->
</script>

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

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