internal final class CIG_TabPageRunUtil
{
public static void runNewTabPage(str className, str staticMethodName, container taskValue)
{
str taskId = CIG_TabPageRunUtil::newTaskId();
CIG_TabPageTask taskTb;
taskTb.TaskId = taskId;
taskTb.ClassName = className;
taskTb.StaticMethodName = staticMethodName;
taskTb.Value = taskValue;
taskTb.insert();
str url = URLUtility::getUrl();
Map map = CIG_TabPageRunUtil::getQueryMap(url);
CIG_TabPageRunUtil::mapReplace(map, "mi", "CIG_TabPageRun");
CIG_TabPageRunUtil::mapReplace(map, "taskId", taskId);
url = CIG_TabPageRunUtil::genURL(url, map);
Browser browser = new Browser();
browser.navigate(url, true, false);
}
public static str queryValue(str url, str key)
{
str ret;
str pattern = strFmt(@"(?<=[?&]%1=)([^&]+)", key);
ret = new System.Text.RegularExpressions.Regex( pattern).Match( new System.Uri(url).Query ).Value;
return ret;
}
public static str newTaskId(int len = 5)
{
str chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
int mapLen = strLen(chars);;
str ret;
Random random = new Random();
for(int i = 0; i<len; i++)
{
ret += subStr(chars, (random.nextInt() mod mapLen)+1, 1);
}
return ret;
}
public static str genURL(str host, Map mapQuery)
{
str ret;
str query = "?";
MapEnumerator em = mapQuery.getEnumerator();
while(em.moveNext())
{
query += strFmt("&%1=%2", em.currentKey(), em.currentValue());
}
ret = "http://" + new System.Uri(host).Host + query;
return ret;
}
public static Map getQueryMap(str url)
{
str key,value;
container conCurrent;
str strQuery = new System.Uri(url).Query;
Map map = new Map(Types::String, Types::String);
if(strQuery)
{
strQuery = subStr( strQuery, 2, strLen(strQuery)-1);
List list = strSplit(strQuery,"&");
ListEnumerator em = list.getEnumerator();
while(em.moveNext())
{
conCurrent = str2con( em.current(), '=');
if(conLen(conCurrent) ==2)
{
map.add( any2Str(conPeek(conCurrent,1)), any2Str(conPeek(conCurrent,2)));
}
}
}
return map;
}
public static Map mapReplace(Map map, str key, str value)
{
if(map.exists(key))
{
map.remove(key);
}
map.add(key,value);
return map;
}
}