?? biwsdlbiappcodegen.py
字號:
self.emitIndentedCommentLine("// Add title for operation controls") self.emitIndentedLine("var lTitle=new BiDlgSep(\"" + aName + " \");") self.emitIndentedLine("lTitle.setLocation(0, lCurrentY);") self.emitIndentedLine("lTitle.setRight(0);") self.emitIndentedLine("this.add(lTitle);") self.emitIndentedLine("lCurrentY += lTitle.getHeight()+5;") # Emit input controls for operation arguments: for lArg in itertools.izip(aArgs, aArgTypes): lArgName = lArg[0] lArgType = lArg[1] self.emitIndentedLine("") self.emitIndentedCommentLine("// Add label and text area for inputing parameter " + lArgName) self.emitIndentedLine("var lLabel = new BiLabel(\"" + lArgName + ":\");") self.emitIndentedLine("lLabel.setLocation(8, lCurrentY+3);") self.emitIndentedLine("lLabel.setWidth(122);") self.emitIndentedLine("this.add(lLabel);") self.emitIndentedLine("this._ctlParam_" + lArgName + " = new BiTextField(\"Enter an expression of type " + lArgType + "\");") self.emitIndentedLine("this._ctlParam_" + lArgName + ".setLocation(140, lCurrentY);") self.emitIndentedLine("this._ctlParam_" + lArgName + ".setRight(0);") self.emitIndentedLine("this._ctlParam_" + lArgName + ".setHeight(20);") self.emitIndentedLine("this.add(this._ctlParam_" + lArgName + ");") self.emitIndentedLine("lCurrentY += this._ctlParam_" + lArgName + ".getHeight()+5;") self.emitIndentedLine("") self.emitIndentedLine("lCurrentY += 10;") self.emitIndentedLine("") # Emit construction code for buttons that allow actual invocation of operations self.emitIndentedCommentLine("// Add invocation buttons for operation " + aName) lButtonRightMargin = 5 # Prepare list of argument value expressions; this includes an expression per each parameter of the operation, # ordered by parameters order. lArgValsList = list(itertools.imap((lambda lArgName: "eval(this._ctlParam_" + lArgName + ".getText())"), aArgs)) if self.__genAsyncCalls: self.emitIndentedLine("this._ctlAsyncInvokeBtn = new BiButton(\"Invoke async\");") self.emitIndentedLine("this._ctlAsyncInvokeBtn.setRight(" + str(lButtonRightMargin) + ")") self.emitIndentedLine("this._ctlAsyncInvokeBtn.setTop(lCurrentY);") self.emitIndentedLine("this._ctlAsyncInvokeBtn.setWidth(80);") self.emitIndentedLine("this._ctlAsyncInvokeBtn.setHeight(25);") self.emitIndentedLine("this._ctlAsyncInvokeBtn.addEventListener(\"action\", ") self.indent() self.emitIndentedLine("function (aEvt)") self.startBlock() self.emitIndentedLine("try") self.startBlock() self.emitIndentedLine("aBiWs." + BiWsdlBiJsStubCodeGen.getStubMethodName(self.getCurrentService(), self.getCurrentPort(), aName, True) + "(" + string.join(itertools.chain(["this.handleAsyncResult", "this"], lArgValsList), ", ") + ");") self.endBlock() self.emitIndentedLine("catch(e)") self.startBlock() self.emitIndentedLine("alert(\"Error: \" + e.message);") self.endBlock() self.endBlock() self.emitIndentedLine(", this);") self.outdent() self.emitIndentedLine("this.add(this._ctlAsyncInvokeBtn);") self.emitIndentedLine("") lButtonRightMargin += 85; if self.__genSyncCalls: self.emitIndentedLine("this._ctlSyncInvokeBtn = new BiButton(\"Invoke sync\");") self.emitIndentedLine("this._ctlSyncInvokeBtn.setRight(" + str(lButtonRightMargin) + ")") self.emitIndentedLine("this._ctlSyncInvokeBtn.setTop(lCurrentY);") self.emitIndentedLine("this._ctlSyncInvokeBtn.setWidth(80);") self.emitIndentedLine("this._ctlSyncInvokeBtn.setHeight(25);") self.emitIndentedLine("this._ctlSyncInvokeBtn.addEventListener(\"action\", ") self.indent() self.emitIndentedLine("function (aEvt)") self.startBlock() self.emitIndentedLine("try") self.startBlock() self.emitIndentedLine("var lRes = aBiWs." + BiWsdlBiJsStubCodeGen.getStubMethodName(self.getCurrentService(), self.getCurrentPort(), aName, False) + "(" + string.join(lArgValsList, ", ") + ");") self.emitIndentedLine("this.showMethodResult(lRes);") self.endBlock() self.emitIndentedLine("catch(e)") self.startBlock() self.emitIndentedLine("alert(\"Error: \" + e.message);") self.endBlock() self.endBlock() self.emitIndentedLine(", this);") self.outdent() self.emitIndentedLine("this.add(this._ctlSyncInvokeBtn);") self.emitIndentedLine("") lButtonRightMargin += 85; self.emitIndentedLine("lCurrentY += 30;") self.emitIndentedLine("") self.emitIndentedLine("this.setHeight(lCurrentY);") self.endClassCtor() # Record method invoker in list of method invoker classes for current generated port self.__portMethodInvokerClasses.append(lClassName) def genAdfFile(self): lAdfFileHandle = file(self.getAdfFilePath(), "w+") lAdfFileHandle.write("<?xml version=\"1.0\"?>\n" + "<application>\n"+ " <window caption=\"Test WS\" width=\"600\" height=\"440\"/>\n"+ " <resources>\n" + " <script src=\"" + os.path.basename(self.__stubPath) + "\"/>\n" + " <script src=\"" + os.path.basename(self.getOutput()) + "\"/>\n" + " </resources>\n" + "</application>") lAdfFileHandle.close() def genHtmlFile(self): lHtmlFileHandle = file(self.getHtmlFilePath(), "w+") lHtmlFileHandle.write( """<html xmlns:v> <head> <title>Web Service Test Application</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="MsThemeCompatible" content="yes"/> <meta http-equiv="ImageToolBar" content="no"/> <link type="text/css" rel="StyleSheet" href=""" + "\"" + os.path.abspath(os.path.join(self.__bindowsPath, "html/css/bimain.css")) + "\"" + """/> <script type=\"text/javascript\" src=""" + "\"" + os.path.abspath(os.path.join(self.__bindowsPath, "html/js/application.js")) + "\"" +"""></script> </head> <body> <script type=\"text/javascript\"> application.start(""" + "\"file:" + self.escapeJsString(os.path.join(os.path.abspath(self.__bindowsPath), "html")) + "\", \"" + self.escapeJsString(os.path.basename(self.getAdfFilePath())) + "\");" + """ </script> </body> </html>""") lHtmlFileHandle.close() def genDlgSep(self): self.startClassCtor("BiDlgSep", [ ("aText", "Label of separator") ], "BiComponent", "BiDlgSep is a separator component in a dialog. Basically it's a label with a horizontal etch to its right.") self.emitIndentedLine('''BiComponent.call(this);''') self.emitIndentedLine("") self.emitIndentedCommentLine("// Set default height for component") self.emitIndentedLine('''this.setHeight(16);''') self.emitIndentedLine("") self.emitIndentedCommentLine("// Create separating line -- this is a component occupying vertical lines 7 and 8 of this component.") self.emitIndentedCommentLine("// It has a 3d looking etched border.") self.emitIndentedLine('''this._sepLine = new BiComponent();''') self.emitIndentedLine('''this._sepLine.setLocation(0,7);''') self.emitIndentedLine('''this._sepLine.setRight(0);''') self.emitIndentedLine('''this._sepLine.setHeight(2);''') self.emitIndentedLine('''var lSepBorder = new BiBorder();''') self.emitIndentedLine('''lSepBorder.setTopWidth(1);''') self.emitIndentedLine('''lSepBorder.setTopStyle("solid");''') self.emitIndentedLine('''lSepBorder.setTopColor("ThreeDShadow");''') self.emitIndentedLine('''lSepBorder.setBottomWidth(1);''') self.emitIndentedLine('''lSepBorder.setBottomStyle("solid");''') self.emitIndentedLine('''lSepBorder.setBottomColor("ThreeDHighlight");''') self.emitIndentedLine('''this._sepLine.setBorder(lSepBorder);''') self.emitIndentedLine('''this.add(this._sepLine);''') self.emitIndentedLine("") self.emitIndentedCommentLine("// Create separator label") self.emitIndentedLine('''this._sepTitle = new BiLabel(aText);''') self.emitIndentedLine('''this._sepTitle.setBackColor("ThreeDFace");''') self.emitIndentedLine('''this._sepTitle.setLocation(0,0);''') self.emitIndentedLine('''this.add(this._sepTitle);''') self.endClassCtor() def genWsPortTabPage(self): # Generate WsPortTabPage superclass self.startClassCtor("WsPortTabPage", [ ("aPortName", "Name of port for this tab page is shown"), ("aBiWs", "WebService stub to be used for method invocations") ], "BiTabPage", "WsPortTabPage is a BiTabPage derivative specialized to implement tab pages allowing "+ "service port method invocations.") self.emitIndentedCommentLine("BiTabPage.call(this, aPortName);") self.emitIndentedLine("") self.emitIndentedLine("this._webService = aBiWs;") self.emitIndentedLine("this._currentY = 10;") self.emitIndentedLine("this.setOverflowY(\"scroll\");") self.endClassCtor() self.startClassMethod("addMethodInvoker", [ ( "aMethodInvoker", "Method invoker to add." ) ], "Add a method invoker component to the tab page. Method invokers are layed out vertically") self.emitIndentedLine("aMethodInvoker.setTop(this._currentY);") self.emitIndentedLine("aMethodInvoker.setRight(5);") self.emitIndentedLine("aMethodInvoker.setLeft(5);") self.emitIndentedLine("this.add(aMethodInvoker);") self.emitIndentedLine("this._currentY += aMethodInvoker.getHeight();") self.endClassMethod() self.startClassMethod("getWebServiceStub", [], "Retrieve the WebService stub for use to invoke operations.") self.emitIndentedLine("return this._webService;") self.endClassMethod() def genWsOpInvoker(self): # Generate WsOpInvoker superclass self.startClassCtor("WsOpInvoker", [], "BiComponent", "WsOpInvoker is a base class for components that encapsulate MMI for invoking a web service " + "operation") self.emitIndentedLine("BiComponent.call(this);") self.endClassCtor() self.startClassMethod("showMethodResult", [ ("aResult", "Method result to display.") ], "Display the result of a method invocation.") self.emitIndentedLine("var lResStr=\"\";") self.emitIndentedLine("if(typeof(aResult)!=\"object\")") self.startBlock() self.emitIndentedLine("lResStr=aResult;") self.endBlock() self.emitIndentedLine("else") self.startBlock() self.emitIndentedLine("for(lPropName in aResult) lResStr = lResStr + \"\\n\" + lPropName + \"=\" + aResult[lPropName];") self.endBlock() self.emitIndentedLine("") self.emitIndentedLine("alert(\"Result: \" + lResStr);") self.endClassMethod() self.startClassMethod("handleAsyncResult", [ ("aResult", "Async result to handle.") ], "Handle an async method invocation's result object.") self.emitIndentedLine("if(aResult.error)") self.startBlock() self.emitIndentedLine("alert(\"Error: \" + aResult.errorDetail.code + \" / \" + aResult.errorDetail.string);") self.endBlock() self.emitIndentedLine("else") self.startBlock() self.emitIndentedLine("this.showMethodResult(aResult.value);") self.endBlock() self.endClassMethod() """ <summary> Set generated call type -- to sync, async or both. </summary> <param name="aCallType">Type of call to generate. sync for synchronous calls, async for asynchronous calls, both for both </param> """ def setCalltype(self, aCallType): if aCallType not in ["async", "sync", "both"]: raise Exception("Invalid callType value: " + aCallType) self.__genAsyncCalls = aCallType in ["async", "both"] self.__genSyncCalls = aCallType in ["sync", "both"] def setBindowspath(self, aPath): self.__bindowsPath = aPath def getAdfFilePath(self): return self.getAppFilePath("xml") def getHtmlFilePath(self): return self.getAppFilePath("html") def getAppFilePath(self, aExtension): lPathComps = os.path.split(self.getOutput()) lNewFileName = string.split(lPathComps[1], ".")[0] + "." + aExtension lNewFilePath = os.path.join(lPathComps[0], lNewFileName) return lNewFilePath def getLaunchTarget(self): return self.getHtmlFilePath()
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -