source: tags/build-Alligator02/tools/ws.htm @ 30975

Last change on this file since 30975 was 1698, checked in by rvelices, 17 years ago

Web service first version.

  • Property svn:eol-style set to native
File size: 7.8 KB
Line 
1<html>
2<head>
3<title>PWG web service explorer</title>
4<script type="text/javascript" src="prototype.js" ></script>
5
6<script type="text/javascript">
7function setElementText(id, text)
8{
9  if (!text) text="";
10  var elt = document.getElementById(id);
11  if (!elt) alert('setElementText '+id);
12  elt.innerHTML = text;
13}
14
15function setVisibility(id, vis)
16{
17  document.getElementById(id).style.visibility = vis;
18}
19
20function clearError()
21{
22  setElementText("error", "");
23}
24
25function dumpError(err)
26{
27        var s= 'Error ';
28        if ('string' === typeof err )
29         s += err;
30        else
31        {
32    s += err.name+'<br/>';
33         s += err.message;
34         if (err.stack!=null)
35         {//mozilla only
36                s += '<br/><small><pre>'+ err.stack + '</pre></small>';
37         }
38        }
39        setElementText("error", s);
40}
41
42var gServiceUrl;
43
44Ajax.Responders.register({
45
46onException: function(req, err) {
47        try {
48                document.pwgError = err;
49                dumpError(err);
50        }
51        catch (e)
52        {
53                alert (err);
54                alert (err.message);
55        }
56},
57
58onComplete: function(req, transport) {
59        if (!req.responseIsSuccess())
60        {
61                var s = 'Completion failure\n' + transport.status + ' ' + transport.statusText;
62                if (transport.status>=300)
63                {
64                        s += '\n';
65                        s += transport.responseText.substr(0,1000);
66                }
67                dumpError(s);
68        }
69 }
70}
71);
72
73
74function pwgGetJsonResult(transport)
75{
76  var resp;
77  try {
78                eval('resp = ' + transport.responseText);
79        }
80        catch (e)
81        {
82                var s = e.message;
83                s += '\n' + transport.responseText.substr(0,1000).escapeHTML();
84                throw new Error( s );
85        }
86  if (resp==null || resp.result==null || resp.stat==null || resp.stat!='ok')
87  {
88    var s = 'JSON evaluation error';
89    if (resp)
90    {
91                        if (resp.stat!=null) s+= '\n'+resp.stat;
92      if (resp.message!=null) s+= '\n'+ resp.message;
93    }
94    throw new Error(s);
95  }
96  return resp.result;
97}
98
99function pwgChangeUrl()
100{
101  clearError();
102  setVisibility("methodListWrapper", "hidden");
103  setElementText("methodList", "");
104  setVisibility("methodWrapper", "hidden");
105
106  gServiceUrl = $F('ws_url');
107
108  try {
109                var ajaxReq = new Ajax.Request(
110                                gServiceUrl,
111                                {method:'get', parameters:'format=json&method=reflection.getMethodList',
112                                 onSuccess: function (r) { onSuccess_getMethodList(r); }
113                                }
114                        )
115  }catch (e)
116  {
117    dumpError(e);
118  }
119  return false;
120}
121
122function onSuccess_getMethodList(transport)
123{
124        var result = pwgGetJsonResult(transport);
125        var ml = '';
126        for (var i=0; i<result.methods.length; i++)
127        {
128                ml += '<li><a href="#" onclick="return pwgSelectMethod(this.innerHTML)">'+ result.methods[i]+'</a></li>';
129        }
130        setElementText("methodList", ml);
131        setVisibility("methodListWrapper", "visible");
132}
133
134function pwgSelectMethod(method)
135{
136  clearError();
137  setElementText("methodName", method);
138  setVisibility("methodDetailWrapper", "hidden");
139  setVisibility("methodWrapper", "visible");
140
141  try {
142
143                var ajaxReq = new Ajax.Request(
144                                gServiceUrl,
145                                {method:'get', parameters:'format=json&method=reflection.getMethodDetails&methodName='+method,
146                                 onSuccess: function (r) { onSuccess_getMethodDetails(r); }
147                                }
148                        )
149  }catch (e)
150  {
151    dumpError( e );
152  }
153  return false;
154}
155
156function onSuccess_getMethodDetails(transport)
157{
158        var result = pwgGetJsonResult(transport);
159        var methodParamsElt = $("methodParams");
160        while (methodParamsElt.tBodies[0].rows.length)
161                methodParamsElt.tBodies[0].deleteRow(methodParamsElt.tBodies[0].rows.length-1);
162
163        if (result.params && result.params.length>0)
164        {
165                for (var i=0; i<result.params.length; i++)
166                {
167                        var row = methodParamsElt.tBodies[0].insertRow(-1);
168                        var isOptional = result.params[i].optional;
169                        var defaultValue = result.params[i].defaultValue == null ? '' : result.params[i].defaultValue;
170
171                        row.insertCell(0).innerHTML = result.params[i].name;
172                        row.insertCell(1).innerHTML = (isOptional ? 'optional':'required');
173                        row.insertCell(2).innerHTML = '<input id="methodParameterSend_'+i+'" type="checkbox" '+(isOptional ? '':'checked="checked"')+'/>';
174                        row.insertCell(3).innerHTML = '<input id="methodParameterName_'+i+'" type="hidden" value="'+result.params[i].name+'"/>'
175          +'<input id="methodParameterValue_'+i+'"" value="'+defaultValue+'" style="width:99%" onchange="$(\'methodParameterSend_'+i+'\').checked=true;"/>';
176                }
177        }
178        setElementText("methodDescription", result.description);
179        setVisibility("methodDetailWrapper", "visible");
180}
181
182function pwgInvokeMethod()
183{
184        var method = document.getElementById('methodName').innerHTML;
185
186  var reqUrl = gServiceUrl;
187  reqUrl += "?format="+$F('responseFormat');
188
189  if (document.getElementById('requestFormat').value == 'get')
190  {
191    reqUrl += "&method="+method;
192    var i=0;
193    do
194    {
195      var elt = document.getElementById('methodParameterName_'+i);
196      if (!elt) break;
197      if (document.getElementById('methodParameterSend_'+i).checked)
198        reqUrl += '&'+elt.value+'='+$F('methodParameterValue_'+i);
199      i++;
200    }
201    while (1);
202    document.getElementById("invokeFrame").src = reqUrl;
203  }
204  else
205  {
206    var form = document.getElementById("invokeForm");
207    form.action = reqUrl;
208    var t = '<input type="hidden" name="'+'method'+'" value="'+method+'"/>';
209    var i=0;
210    do
211    {
212      var elt = document.getElementById('methodParameterName_'+i);
213      if (!elt) break;
214      if (document.getElementById('methodParameterSend_'+i).checked)
215        t += '<input type="hidden" name="'+elt.value+'" value="'+$F('methodParameterValue_'+i)+'"/>';
216      i++;
217    }
218    while (1);
219    form.innerHTML = t;
220    form.submit();
221  }
222  return false;
223}
224</script>
225
226
227<style>
228#methodListWrapper {
229  width: 16em;
230  float: left;
231  display: inline;
232  visibility: hidden;
233}
234
235#methodList {
236  padding-left: 15px;
237}
238
239#methodWrapper {
240  margin-left: 16.5em;
241  visibility: hidden;
242}
243
244#methodName {
245  margin-top: 0;
246  margin-bottom: 3px;
247}
248
249
250#error {
251  height: 90px;
252  overflow: scroll;
253  color: red;
254}
255
256#methodParams {
257  border-collapse: collapse;
258}
259</style>
260
261</head>
262
263
264<body>
265
266<div>
267 <label>PWG Web service url
268  <input name="ws_url" id="ws_url" size="64"/>
269<script type="text/javascript">
270  var match = document.location.toString().match(/^(https?.*\/)tools\/ws\.html?$/);
271  if (match!=null) $('ws_url').value = match[1]+'ws.php';
272</script>
273 </label>
274 <a href="#" onclick="return pwgChangeUrl();">Go!</a>
275</div>
276
277<div id="error">
278</div>
279
280<div>
281
282<div id="methodListWrapper">Methods
283  <ul id="methodList">
284    <li><a href="#" onclick="return pwgSelectMethod(this.innerHTML)">getVersion</a></li>
285  </ul>
286</div>
287
288<div id="methodWrapper">
289  <h2 id="methodName"></h2>
290  <div id="methodDetailWrapper">
291    <div id="methodDescription"></div>
292    <table>
293      <tr>
294        <td>Request format:</td>
295        <td>
296          <select id="requestFormat">
297            <option value="get" selected="selected">GET</option>
298            <option value="post">POST</option>
299          </select>
300        </td>
301      </tr>
302
303      <tr>
304        <td>Response format:</td>
305        <td>
306          <select id="responseFormat">
307            <option value="rest" selected="selected">REST (xml)</option>
308            <option value="json">JSON</option>
309            <option value="php">PHP serial</option>
310            <option value="xmlrpc">XML RPC</option>
311          </select>
312        </td>
313      </tr>
314    </table>
315
316    <div id="methodParamsWrapper">
317    <table id="methodParams"  border="1" cellspacing="0" cellpadding="2px">
318      <thead>
319        <tr>
320          <td style="width:150px">Parameter</td>
321          <td>Optional</td>
322          <td>Send</td>
323          <td style="width:160px">Value</td>
324        </tr>
325      </thead>
326      <tbody>
327      </tbody>
328    </table>
329    </div>
330    <a href="#" onclick="return pwgInvokeMethod()">Invoke</a>
331
332                <div style="display:none">
333                        <!-- hiddenForm for POST -->
334                        <form method="post" action="" target="invokeFrame" id="invokeForm">
335                                <input type="submit" value="submit"/>
336                        </form>
337                </div>
338
339    <iframe width="100%" height="400px" id="invokeFrame" name="invokeFrame"></iframe>
340  </div> <!-- methodDetailWrapper -->
341</div> <!-- methodWrapper -->
342
343</div>
344
345</body>
346</html>
Note: See TracBrowser for help on using the repository browser.