package com.eglexamples.client; import org.eclipse.edt.rui.widgets.*; handler RosettaCodeHandler type RUIhandler{initialUI =[ui], title = "Rosetta Code Tasks and Counts"} ui GridLayout{columns = 3, rows = 4, cellPadding = 4, children = [ b1, dg1, l1, l2, l3, l4 ]}; b1 Button{ layoutData = new GridLayoutData{ row = 1, column = 1 }, text = "Go!", onClick ::= b1_onClick }; l1 TextLabel{ layoutData = new GridLayoutData{ row = 1, column = 2 }, text = "Total Tasks:" }; l2 TextLabel{ layoutData = new GridLayoutData{ row = 1, column = 3 }, text = "0" }; l3 TextLabel{ layoutData = new GridLayoutData{ row = 2, column = 2 }, text = "Total Implementations:" }; l4 TextLabel{ layoutData = new GridLayoutData{ row = 2, column = 3 }, text = "0" }; dg1 DataGrid{ layoutData = new GridLayoutData{ row = 3, column = 1, horizontalSpan = 3 }, pageSize = 10, showScrollbar = true, columns = [ new DataGridColumn{name = "title", displayName = "Task", width=220}, new DataGridColumn{name = "count", displayName = "Count", width=100} ] }; cmcontinue string?; title string?; allTasks Task[]; restBindingTasks IHttp? = new HttpRest{ restType = eglx.rest.ServiceType.TrueRest, request.uri = "http://rosettacode.org/mw/api.php?action=query&list=categorymembers&cmtitle=Category:Programming_Tasks&cmlimit=1&format=json"}; restBindingPageDetail IHttp? = new HttpRest{ restType = eglx.rest.ServiceType.TrueRest, request.uri = "http://rosettacode.org/mw/index.php"}; function b1_onClick(event Event in) call ProxyFunctions.listTasks("") using restBindingTasks returning to listTasksCallBack onException exceptionHandler; end function listTasksCallBack(retResult RosettaCodeJSON in) title = retResult.query.categorymembers[1].title; cmcontinue = retResult.queryContinue.categorymembers.cmcontinue; call ProxyFunctions.fetchPageDetail(title) using restBindingPageDetail returning to pageDetailCallBack onException exceptionHandler; end function pageDetailCallBack(pageResults string in) count int = countSubstring("=={{header", pageResults); allTasks.appendElement(new Task { title = title, count = count }); l2.text = l2.text as int + 1; l4.text = l4.text as int + count; if(cmcontinue != null) call ProxyFunctions.listTasks(cmcontinue) using restBindingTasks returning to listTasksCallBack onException exceptionHandler; else dg1.data = allTasks as any[]; end end function countSubstring(substr string in, str string in) returns(int) if(str.length() > 0 and substr.length() > 0) return (str.length() - str.replaceStr(subStr, "").length()) / subStr.length(); else return 0; end end function exceptionHandler(exp AnyException in) end end record Task title string; count int; end