Rosetta Code/Count examples: Difference between revisions

Line 328:
[[File:Catcount.PNG|thumb|right|Graphical client implementation]]
A graphical implementation with a grid showing the number of implementations for each category as well as total category and implementation counts. Uses the latest (as of October, 2012) MediaWiki API call formats.
 
<lang EGL>package com.dandarnell.client;
Client: RosettaCodeHandler.egl
<lang EGL>package com.dandarnelleglexamples.client;
 
import org.eclipse.edt.rui.widgets.*;
import com.dandarnell.common.*;
import com.dandarnell.server.*;
 
handler RosettaCodeHandler type RUIhandler{initialUI =[ui], title = "Rosetta Code Categories and Counts"}
Line 339:
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?;
allCategories Category[];
restBindingCategories 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 restBindingCategories
returning to listTasksCallBack onException myExceptionHandlerexceptionHandler;
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 myExceptionHandlerexceptionHandler;
end
 
function pageDetailCallBack(pageResults string in)
count int = countSubstring("=={{header", pageResults);
allCategories.appendElement(new Category { 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 restBindingCategories
returning to listTasksCallBack onException myExceptionHandlerexceptionHandler;
else
dg1.data = allCategories as any[];
end
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 myExceptionHandler(exp AnyException in)
end
end
function myExceptionHandlerexceptionHandler(exp AnyException in)
end
 
end
Line 405:
title string;
count int;
end</lang>
 
Service Interface: ProxyFunctions.egl
<lang EGL>package com.eglexamples.client;
 
library ProxyFunctions
function listTasks(continueLocation String in) returns (RosettaCodeJSON) {
@Rest{method = _GET, uriTemplate = "&cmcontinue={continueLocation}",
requestFormat = None, responseFormat = JSON}
}
end
 
function fetchPageDetail(title String in) returns (String) {
@Rest{method = _GET, uriTemplate = "?title={title}&action=raw",
requestFormat = None, responseFormat = None}
}
end
end
 
record RosettaCodeJSON
query Query;
queryContinue QueryContinue{JSONName = "query-continue"};
end
 
record Query
categorymembers Categorymembers[];
end
 
record Categorymembers
cmcontinue string?;
pageid int?;
ns int?;
title string?;
end
 
record QueryContinue
</lang>
categorymembers Categorymembers;
end</lang>
 
=={{header|F Sharp|F#}}==
Anonymous user