| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| ;(function(){ |
| |
| window.addEventListener("load", onLoad, false) |
| |
| var Interfaces = {} |
| var Indent = "<span class='indent'> </span>" |
| var Indent2 = "<span class='indent'> </span>" |
| |
| var e_interfaceList |
| var e_interfaceName |
| var e_interfaceBody |
| var e_showIdl |
| var e_showJavaScript |
| var e_showJava |
| |
| var NativeTypes = "int any number boolean string void".split(" ") |
| |
| var IDLTools = require("weinre/common/IDLTools") |
| |
| if (!window.localStorage) { |
| window.localStorage = { |
| getItem: function() {}, |
| setItem: function() {} |
| } |
| } |
| |
| //----------------------------------------------------------------------------- |
| function onLoad() { |
| e_interfaceList = document.getElementById("interface-list") |
| e_interfaceName = document.getElementById("interface-name") |
| e_interfaceBody = document.getElementById("interface-body") |
| e_showIdl = document.getElementById("show-Idl") |
| e_showJavaScript = document.getElementById("show-JavaScript") |
| e_showJava = document.getElementById("show-Java") |
| |
| setUpShowCheckBoxes() |
| populateInterfacesList(IDLTools.getIDLsMatching(/.*/)) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function setUpShowCheckBoxes() { |
| setUpShowCheckBox(e_showIdl, "show-Idl") |
| setUpShowCheckBox(e_showJavaScript, "show-JavaScript") |
| setUpShowCheckBox(e_showJava, "show-Java") |
| } |
| |
| //----------------------------------------------------------------------------- |
| function setUpShowCheckBox(element, key) { |
| var value = localStorage.getItem(key) |
| if (null == value) |
| value = true |
| else |
| value = (value == "true") |
| |
| element.checked = value |
| element.storageKey = key |
| |
| element.addEventListener("click", el_showCheckBoxClicked, false) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function el_showCheckBoxClicked(event) { |
| var element = event.target |
| |
| localStorage.setItem(element.storageKey, element.checked) |
| |
| reapplyDisplayStyle("." + element.storageKey, element.checked) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function reapplyDisplayStyles() { |
| reapplyDisplayStyle(".show-Idl", e_showIdl.checked) |
| reapplyDisplayStyle(".show-JavaScript", e_showJavaScript.checked) |
| reapplyDisplayStyle(".show-Java", e_showJava.checked) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function reapplyDisplayStyle(className, value) { |
| value = value ? "block" : "none" |
| ;[].slice.call(document.querySelectorAll(className)).forEach(function(element) { |
| element.style.display = value |
| }) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function populateInterfacesList(intfs) { |
| e_interfaceList.innerHTML = "" |
| |
| fixedIntfs = [] |
| intfs.forEach(function(intf){ |
| fixedIntfs.push(intf.name) |
| Interfaces[intf.name] = intf |
| |
| if (!intf.methods) intf.methods = [] |
| if (!intf.attributes) intf.attributes = [] |
| }) |
| |
| intfs = fixedIntfs |
| |
| intfs.sort() |
| intfs.forEach(function(intf){ |
| var a = document.createElement("a") |
| a.href = "#" |
| a.innerHTML = intf |
| a.interfaceName = intf |
| a.addEventListener("click", el_interfaceClicked, false) |
| |
| var li = document.createElement("li") |
| li.appendChild(a) |
| e_interfaceList.appendChild(li) |
| }) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function el_interfaceClicked(event) { |
| event.preventDefault() |
| |
| showInterface(event.target.interfaceName) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function showInterface(interfaceName) { |
| var intf = Interfaces[interfaceName] |
| |
| e_interfaceName.innerHTML = interfaceName |
| |
| var html = [] |
| |
| showInterfaceIdl(intf, html) |
| showInterfaceJavaScript(intf, html) |
| showInterfaceJava(intf, html) |
| |
| e_interfaceBody.innerHTML = html.join("\n") |
| |
| reapplyDisplayStyles() |
| } |
| |
| window.showInterface = showInterface |
| |
| //----------------------------------------------------------------------------- |
| function showInterfaceIdl(intf, html) { |
| html.push("<div class='show-Idl'><h3>IDL</h3><pre>") |
| html.push("interface {") |
| |
| intf.methods.forEach(function(method){ |
| showInterfaceIdlMethod(method, html) |
| }) |
| |
| if (intf.attributes.length > 0) html.push("<table>") |
| intf.attributes.forEach(function(attribute){ |
| showInterfaceIdlAttribute(attribute, html) |
| }) |
| if (intf.attributes.length > 0) html.push("</table>") |
| |
| html.push("};") |
| html.push("</pre></div>") |
| } |
| |
| //----------------------------------------------------------------------------- |
| function showInterfaceIdlMethod(method, html) { |
| var line = "\n " |
| |
| var allParameters = method.parameters.concat(method.callbackParameters) |
| |
| line += getIdlType(method.returns) |
| line += " <span class='methodName'>" + method.name + "</span> (" + getIdlParameterList(allParameters) + ");" |
| html.push(line) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getIdlParameterList(parameters) { |
| var result = [] |
| |
| if (parameters.length == 0) return ""; |
| |
| result.push("<table>") |
| parameters.forEach(function(parameter, index, list){ |
| var comma = (index == list.length-1) ? "" : "," |
| result.push("<tr>") |
| result.push("<td>" + Indent2 + (parameter.out ? "out" : "in")) |
| result.push("<td>" + getIdlType(parameter.type)) |
| result.push("<td>" + "<span class='parameterName tdIndent'>" + parameter.name + comma + "</span>") |
| }) |
| |
| result.push("</table>") |
| return result.join("\n") + Indent |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getIdlType(type) { |
| var result |
| |
| |
| if (-1 == NativeTypes.indexOf(type.name)) { |
| result = "<a href='javascript:showInterface(\"" + type.name + "\"); void(0);'>" + type.name + "</a>" |
| } |
| else { |
| result = type.name |
| } |
| |
| for (var i=0; i<type.rank; i++) { |
| result += "[]" |
| } |
| |
| return "<span class='type'>" + result + "</span>" |
| } |
| |
| //----------------------------------------------------------------------------- |
| IDL2Java = { |
| string: "String", |
| any: "Object", |
| int: "Long", |
| boolean: "Boolean", |
| "": "?" |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getJavaType(type) { |
| var result |
| |
| |
| if (-1 == NativeTypes.indexOf(type.name)) { |
| result = "<a href='javascript:showInterface(\"" + type.name + "\"); void(0);'>" + type.name + "</a>" |
| } |
| else { |
| result = IDL2Java[type.name] |
| if (!result) { |
| result = "?" + type.name + "?" |
| console.log("Unable to translate IDL type to Java: " + type.name) |
| } |
| } |
| |
| for (var i=0; i<type.rank; i++) { |
| result += "[]" |
| } |
| |
| return "<span class='type'>" + result + "</span>" |
| } |
| |
| |
| //----------------------------------------------------------------------------- |
| function showInterfaceIdlAttribute(attribute, html) { |
| var line = "<tr><td>" + Indent + "attribute " |
| |
| line += getIdlType(attribute.type) |
| line += "<td><span class='attributeName tdIndent'>" + attribute.name + "</span>;" |
| html.push(line) |
| |
| } |
| |
| //----------------------------------------------------------------------------- |
| function showInterfaceJavaScript(intf, html) { |
| html.push("<div class='show-JavaScript'><h3>JavaScript</h3><pre>") |
| |
| var line = "" |
| |
| line += "\n//-----------------------------------------------------------------------------" |
| line += "\n<span class='interfaceName'>class " + intf.name + "</span>" |
| html.push(line) |
| |
| intf.methods.forEach(function(method){ |
| showInterfaceJavaScriptMethod(intf, method, html) |
| }) |
| |
| html.push("</pre></div>") |
| } |
| |
| //----------------------------------------------------------------------------- |
| function showInterfaceJavaScriptMethod(intf, method, html) { |
| var line = "" |
| |
| line += "\n//-----------------------------------------------------------------------------" |
| line += "\n<span class='methodName'>method " + method.name + "</span>(" + getJavaScriptParameterListSimple(method.parameters, method.returns) + ")" |
| line += "\n // callback: function(" + getJavaScriptCallbackParameterListSimple(method.callbackParameters) + ")" |
| line += "\n Weinre.notImplemented(arguments.callee.signature)" |
| line += "\n" |
| html.push(line) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getJavaScriptParameterList(parameters, returnType) { |
| var result = [] |
| |
| result.push("<table>") |
| parameters.forEach(function(parameter){ |
| result.push("<tr>") |
| result.push("<td>" + Indent2 + "<span class='parameterName'>" + parameter.name + ",</span>") |
| result.push("<td><span class='tdIndent'>// " + getIdlType(parameter.type) + "</span>") |
| }) |
| |
| result.push("<tr>") |
| result.push("<td>" + Indent2 + "<span class='parameterName'>callback</span>") |
| result.push("<td><span class='tdIndent'>// function(error, " + getIdlType(returnType) + ")</span>") |
| |
| result.push("</table>") |
| return result.join("\n") + Indent |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getJavaScriptParameterListSimple(parameters, returnType) { |
| var result = [] |
| |
| parameters.forEach(function(parameter){ |
| if (parameter.out) return |
| result.push("<span class='type'>/*" + getIdlType(parameter.type) + "*/ </span><span class='parameterName'>" + parameter.name + "</span>") |
| }) |
| |
| result.push("<span class='parameterName'>callback</span>") |
| return result.join(", ") |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getJavaScriptCallbackParameterListSimple(parameters) { |
| var result = [] |
| |
| parameters.forEach(function(parameter){ |
| if (!parameter.out) return |
| result.push("/*" + getIdlType(parameter.type) + "*/ "+ parameter.name) |
| }) |
| |
| return result.join(", ") |
| } |
| |
| //----------------------------------------------------------------------------- |
| function showInterfaceJava(intf, html) { |
| html.push("<div class='show-Java'><h3>Java</h3><pre>") |
| |
| intf.methods.forEach(function(method){ |
| showInterfaceJavaMethod(intf, method, html) |
| }) |
| |
| html.push("</pre></div>") |
| } |
| |
| //----------------------------------------------------------------------------- |
| function showInterfaceJavaMethod(intf, method, html) { |
| var line = "" |
| |
| line += "\n /**" |
| line += "\n * " |
| line += "\n */" |
| line += "\n <span class='methodName'>public void " + method.name + "</span>(" + getJavaParameterListSimple(method.parameters, method.returns) + ") throws IOException {" |
| line += "\n Main.warn(getClass().getName() + \"." + method.name + "() not implemented\");" |
| line += "\n" |
| line += "\n channel.sendCallback(\"" + intf.name + "\", callbackId" + getJavaCallbackParameterListSimple(method.callbackParameters) + ");" |
| line += "\n }" |
| line += "\n" |
| html.push(line) |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getJavaParameterList(parameters, returnType) { |
| var result = [] |
| |
| result.push("<table>") |
| parameters.forEach(function(parameter){ |
| result.push("<tr>") |
| result.push("<td>" + Indent2 + "<span class='parameterName'>" + parameter.name + ",</span>") |
| result.push("<td><span class='tdIndent'>// " + getIdlType(parameter.type) + "</span>") |
| }) |
| |
| result.push("<tr>") |
| result.push("<td>" + Indent2 + "<span class='parameterName'>callback</span>") |
| result.push("<td><span class='tdIndent'>// function(error, " + getIdlType(returnType) + ")</span>") |
| |
| result.push("</table>") |
| return result.join("\n") + Indent |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getJavaParameterListSimple(parameters, returnType) { |
| var result = [] |
| |
| result.push("<span class='type'>Channel</span> <span class='parameterName'>channel</span>") |
| |
| parameters.forEach(function(parameter){ |
| if (parameter.out) return |
| result.push("<span class='type'>" + getJavaType(parameter.type) + " </span><span class='parameterName'>" + parameter.name + "</span>") |
| }) |
| |
| result.push("<span class='type'>String</span> <span class='parameterName'>callbackId</span>") |
| return result.join(", ") |
| } |
| |
| //----------------------------------------------------------------------------- |
| function getJavaCallbackParameterListSimple(parameters) { |
| var result = [] |
| |
| parameters.forEach(function(parameter){ |
| if (!parameter.out) return |
| result.push("/*" + getJavaType(parameter.type) + " " + parameter.name + "*/ (Object) null") |
| }) |
| |
| result = result.join(", ") |
| |
| if (result != "") result = ", " + result |
| |
| return result |
| } |
| |
| //----------------------------------------------------------------------------- |
| function toArray(arrayLike) { |
| return [].slice.call(arrayLike) |
| } |
| |
| //----------------------------------------------------------------------------- |
| ExBreak = new Error("breaks out of loops") |
| |
| //----------------------------------------------------------------------------- |
| function exBreak() { |
| throw ExBreak |
| } |
| |
| //----------------------------------------------------------------------------- |
| function allowExBreak(func) { |
| try { |
| func.call() |
| } |
| catch(e) { |
| if (e == ExBreak) return |
| throw e |
| } |
| } |
| |
| //----------------------------------------------------------------------------- |
| })(); |
| |