blob: a4cdde35cbb9df4fd30b6e29d082058edd7ae671 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2019 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Module: EPTF_StatHandler_Demo
//
// Purpose:
// This module contains the demo for the EPTF StatHandler feature.
//
// Module depends on:
// <EPTF_CLL_StatHandler_Definitions>
// <EPTF_CLL_StatHandler_Functions>
// <EPTF_CLL_StatHandlerClient_Definitions>
// <EPTF_CLL_StatHandlerClient_Functions>
// <EPTF_CLL_StatHandlerLogging_Definitions>
// <EPTF_CLL_StatHandlerLogging_Functions>
// <EPTF_CLL_StatHandlerUI_Definitions>
// <EPTF_CLL_StatHandlerUI_Functions>
// <EPTF_CLL_Base_Functions>
// <EPTF_CLL_Common_Definitions>
// <EPTF_CLL_UIHandler_Definitions>
// <EPTF_CLL_UIHandler_WidgetFunctions>
// <EPTF_CLL_UIHandlerClient_Definitions>
// <EPTF_CLL_UIHandlerClient_Functions>
// <EPTF_CLL_LoggingUI_Definitions>
// <EPTF_CLL_LoggingUI_Functions>
// <EPTF_CLL_Variable_Definitions>
// <EPTF_CLL_Variable_Functions>
// <XTDP_PDU_Defs>
//
// Module Parameters:
// tsp_demo_nofClients - *integer* - number of client components, default 2
// tsp_use_LoggingUI - *boolean* - whether to use LoggingUI, default true
//
// Current Owner:
// Gabor Tatarka (EGBOTAT)
//
// Last Review Date:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////
module EPTF_StatHandler_Demo {
import from EPTF_CLL_StatHandler_Definitions all;
import from EPTF_CLL_StatHandler_Functions all;
import from EPTF_CLL_StatHandlerClient_Definitions all;
import from EPTF_CLL_StatHandlerClient_Functions all;
import from EPTF_CLL_StatHandlerLogging_Definitions all;
import from EPTF_CLL_StatHandlerLogging_Functions all;
import from EPTF_CLL_StatHandlerUI_Definitions all;
import from EPTF_CLL_StatHandlerUI_Functions all;
import from EPTF_CLL_Base_Functions all;
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_UIHandler_Definitions all;
import from EPTF_CLL_UIHandler_WidgetFunctions all;
import from EPTF_CLL_UIHandlerClient_Definitions all;
import from EPTF_CLL_UIHandlerClient_Functions all;
import from EPTF_CLL_LoggingUI_Definitions all;
import from EPTF_CLL_LoggingUI_Functions all;
import from EPTF_CLL_Variable_Definitions all;
import from EPTF_CLL_Variable_Functions all;
import from XTDP_PDU_Defs all;
modulepar integer tsp_demo_nofClients := 2;
modulepar boolean tsp_use_LoggingUI := true;
group DemoDefinitions {
type component SYSTEM_CT extends EPTF_UIHandler_CT, EPTF_UIHandlerClient_CT, EPTF_LoggingUI_CT, EPTF_LoggingUIClient_CT
{
}
type component StatHandlerClientUI_TestCT extends EPTF_StatHandlerClientUI_CT
{
var integer v_intStat := 0;
var integer v_varIdx := -1;
}
// widget IDs
const charstring c_ExitButtonWidgetId := "exitButton";
const charstring c_ResetButtonWidgetId := "resetButton";
const charstring c_DemoTabWidgetId := "demoTab";
const charstring c_MiscHboxWidgetId := "miscHbox";
const charstring c_OuterHboxWidgetId := "outerHbox";
const charstring c_MainHboxWidgetId := "mainHbox";
const charstring c_ClientTreeWidgetId := "clientTree";
const charstring c_ClientValueWidgetId := "clientValue";
const charstring c_ClientDecrementWidgetId := "clientDecrement";
const charstring c_ClientIncrementWidgetId := "clientIncrement";
// var and stat names
const charstring c_ClientStat := "clientStat";
const charstring c_AggregateStat_Sum := "MySumStat";
const charstring c_AggregateStat_Min := "MyMinStat";
const charstring c_AggregateStat_Max := "MyMaxStat";
// prefixes
const charstring c_VarPrefix := "Var.";
const charstring c_GuiVarPrefix := "Gui.";
} // group DemoDefinitions
group Client {
function f_StatHandlerDemo_clientResetCallback()
runs on StatHandlerClientUI_TestCT
{
v_intStat := 0;
f_EPTF_Var_adjustContent(v_varIdx, {intVal:=v_intStat});
}
function f_StatHandlerDemo_clientBehavior(
in charstring pl_selfName,
in EPTF_StatHandler_CT pl_statHandler_compRef,
in EPTF_UIHandler_CT pl_uiHandler_compRef,
in EPTF_LoggingUI_CT pl_loggingUi_compRef := null)
runs on StatHandlerClientUI_TestCT
{
f_EPTF_StatHandlerClientUI_init_CT(pl_selfName, pl_statHandler_compRef, pl_uiHandler_compRef, pl_loggingUi_compRef);
f_EPTF_Var_newInt(c_ClientStat, v_intStat, v_varIdx);
f_StatHandlerDemo_clientInitGui();
v_intStat := 0;
f_EPTF_StatHandlerClient_registerResetFunction(refers(f_StatHandlerDemo_clientResetCallback));
f_EPTF_StatHandlerClient_declareStat(c_AggregateStat_Sum, c_EPTF_StatHandler_Method_Sum, {intVal:=0});
f_EPTF_StatHandlerClient_registerStat_IntSum(c_ClientStat,c_AggregateStat_Sum);
f_EPTF_StatHandlerClient_declareStat(c_AggregateStat_Min, c_EPTF_StatHandler_Method_Min, {intVal:=0});
f_EPTF_StatHandlerClient_registerStat_IntMin(c_ClientStat,c_AggregateStat_Min);
f_EPTF_StatHandlerClient_declareStat(c_AggregateStat_Max, c_EPTF_StatHandler_Method_Max, {intVal:=0});
f_EPTF_StatHandlerClient_registerStat_IntMax(c_ClientStat,c_AggregateStat_Max);
/* if(log2str(self)=="4") {
timer T:=5.0;
T.start;T.timeout;
f_EPTF_StatHandlerClient_deregisterStat(c_AggregateStat_Sum, -, -, {c_ClientStat});
}*/
f_EPTF_Base_wait4Shutdown();
}
function f_StatHandlerDemo_clientInitGui()
runs on StatHandlerClientUI_TestCT
{
var XTDP_XML_Tag vl_xul := {
xtdp_treeitem := {
{
{
id := omit,
textlabel := f_EPTF_Base_selfName(),
tooltiptext := "Name of the component"
},
{
id := c_ClientValueWidgetId&"."&log2str(self),
textlabel := "",
tooltiptext := "Stat value"
},
{
id := c_ClientDecrementWidgetId&"."&log2str(self),
textlabel := "-1",
tooltiptext := "Decrement"
},
{
id := c_ClientIncrementWidgetId&"."&log2str(self),
textlabel := "+1",
tooltiptext := "Increment"
}
}
}
}
if(sr_Fail == f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, c_ClientTreeWidgetId)) {
log(%definitionId, ": cannot add element to gui: ", vl_xul);
}
var integer vl_idx := f_StatHandlerDemo_createVarForButton(c_ClientDecrementWidgetId&"."&log2str(self));
f_EPTF_Var_addPostProcFn(vl_idx, {refers(f_StatHandlerDemo_clientDec),{}});
vl_idx := f_StatHandlerDemo_createVarForButton(c_ClientIncrementWidgetId&"."&log2str(self));
f_EPTF_Var_addPostProcFn(vl_idx, {refers(f_StatHandlerDemo_clientInc),{}});
f_EPTF_UIHandlerClient_subscribeMe(
c_ClientStat,
c_GuiVarPrefix&c_ClientValueWidgetId&"."&log2str(self),
c_ClientValueWidgetId&"."&log2str(self),
realtime);
}
function f_StatHandlerDemo_clientDec(in integer pl_idx, in EPTF_IntegerList pl_argList)
runs on StatHandlerClientUI_TestCT
{
v_intStat := v_intStat - 1;
f_EPTF_Var_adjustContent(v_varIdx, {intVal:=v_intStat});
}
function f_StatHandlerDemo_clientInc(in integer pl_idx, in EPTF_IntegerList pl_argList)
runs on StatHandlerClientUI_TestCT
{
v_intStat := v_intStat + 1;
f_EPTF_Var_adjustContent(v_varIdx, {intVal:=v_intStat});
}
} // group Client
group Server {
function f_StatHandlerDemo_statDeclared(
in charstring pl_statName,
in charstring pl_statMethod,
in integer pl_statVarIdx)
runs on EPTF_StatHandlerUI_CT
{
var charstring vl_widgetId := f_EPTF_Base_selfName()&"."&pl_statName;
var XTDP_XML_Tag vl_xul := {
xtdp_treeitem := {
{
{
id := omit,
textlabel := pl_statName,
tooltiptext := "Name of the statistics"
},
{
id := omit,
textlabel := pl_statMethod,
tooltiptext := "Methof of the statistics"
},
{
id := vl_widgetId,
textlabel := "",
tooltiptext := "Value of the statistics"
}
}
}
}
if(sr_Fail == f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, f_EPTF_Base_selfName()&"_tree")) {
log(%definitionId, ": cannot add element to gui: ", vl_xul);
}
f_EPTF_UIHandlerClient_subscribeMe(
f_EPTF_Var_getName(pl_statVarIdx),
c_GuiVarPrefix&f_EPTF_Base_selfName()&"."&f_EPTF_Var_getName(pl_statVarIdx),// gui var name
vl_widgetId, // widget name
realtime);
}
function f_StatHandlerDemo_initStatsGuiForServer(
in charstring pl_selfName, in charstring pl_parentWidgetId)
runs on EPTF_StatHandlerUI_CT
{
var EPTF_UIHandlerClient_SubsRet vl_addRet := sr_Fail;
var charstring vl_tree_id := pl_selfName&"_tree";
var XTDP_XML_Tag vl_xul :={
xtdp_tree :={
hidecolumnpicker := false,
id := vl_tree_id,
flex := omit,
disabled := omit,
rows := 0.0,
treecols := {
{
editable := false,
flex := 4.0,
id := omit,
columnlabel := "Statistics name",
widgetType := string
},
{
editable := false,
flex := 1.0,
id := omit,
columnlabel := "Method",
widgetType := string
},
{
editable := false,
flex := 1.0,
id := omit,
columnlabel := "Value",
widgetType := string//checkBox
}
},
treechildren := {}
}
}
vl_addRet := f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, pl_parentWidgetId);
if(sr_Success != vl_addRet) {
log(%definitionId, ": cannot add element to gui (", vl_addRet, "): ", vl_xul);
f_EPTF_Base_stop();
}
f_StatHandlerDemo_addSpacer(1.0, pl_parentWidgetId);
f_EPTF_StatHandler_registerStatDeclaredCallbackFn(refers(f_StatHandlerDemo_statDeclared));
}
function f_StatHandlerDemo_serverBehavior(
in charstring pl_selfName,
in charstring pl_uiParentWidgetId,
in EPTF_UIHandler_CT pl_uiHandler_compRef,
in EPTF_LoggingUI_CT pl_loggingUi_compRef := null,
in charstring pl_localResetButtonUIVarName := "")
runs on EPTF_StatHandlerUI_CT
{
f_EPTF_StatHandlerUI_init_CT(pl_selfName, pl_uiParentWidgetId, pl_uiHandler_compRef, pl_loggingUi_compRef, pl_localResetButtonUIVarName);
f_StatHandlerDemo_initStatsGuiForServer(pl_selfName,c_DemoTabWidgetId)
f_EPTF_Base_wait4Shutdown();
}
} // group Server
group Demo {
testcase tc_StatHandlerDemo()
runs on SYSTEM_CT
{
if(tsp_demo_nofClients < 1 or tsp_demo_nofClients > 10) {
log("tsp_demo_nofClients shall be between 1 and 10.");
stop;
}
f_EPTF_UIHandler_init_CT("MTC", true);
f_EPTF_UIHandler_clearGUI();
f_EPTF_UIHandler_addWindow();
f_EPTF_UIHandlerClient_init_CT("MTC", self);
f_StatHandlerDemo_initGui();
if(tsp_use_LoggingUI) {
f_EPTF_LoggingUI_init_CT("MTC", self, tsp_EPTF_GUI_Main_Tabbox_WidgetId);
}
//f_EPTF_LoggingUIClient_init_CT("MTC", self, self);
var EPTF_StatHandlerUI_CT vl_statHandler := EPTF_StatHandlerUI_CT.create;
if(tsp_use_LoggingUI) {
vl_statHandler.start(f_StatHandlerDemo_serverBehavior(
"StatHandlerUI_testGUI_Server1",
"", //tsp_EPTF_GUI_Main_Tabbox_WidgetId,
self,
self,
c_GuiVarPrefix&c_ResetButtonWidgetId
));
} else {
vl_statHandler.start(f_StatHandlerDemo_serverBehavior(
"StatHandlerUI_testGUI_Server1",
"", //tsp_EPTF_GUI_Main_Tabbox_WidgetId,
self,
null,
c_GuiVarPrefix&c_ResetButtonWidgetId
));
}
for(var integer i:=0; i<tsp_demo_nofClients; i:=i+1) {
var StatHandlerClientUI_TestCT vl_client := StatHandlerClientUI_TestCT.create;
if(tsp_use_LoggingUI) {
vl_client.start(f_StatHandlerDemo_clientBehavior("StatHandlerUI_testGUI_Client"&int2str(i+1), vl_statHandler, self, self));
} else {
vl_client.start(f_StatHandlerDemo_clientBehavior("StatHandlerUI_testGUI_Client"&int2str(i+1), vl_statHandler, self));
}
}
f_EPTF_Base_wait4Shutdown();
f_EPTF_Base_cleanup_CT();
setverdict(pass);
}
function f_StatHandlerDemo_initGui()
runs on SYSTEM_CT{
f_StatHandlerDemo_addEmptyHbox(c_OuterHboxWidgetId, -1.0, false, tsp_EPTF_GUI_Main_Window_WidgetId);
f_StatHandlerDemo_addEmptyHbox(c_MainHboxWidgetId, -1.0, false, c_OuterHboxWidgetId);
f_StatHandlerDemo_addEmptyTabbox(tsp_EPTF_GUI_Main_Tabbox_WidgetId,-1.0,true,c_MainHboxWidgetId);
f_StatHandlerDemo_addEmptyHbox(c_MiscHboxWidgetId, 0.0, true, c_OuterHboxWidgetId);
f_StatHandlerDemo_addSpacer(1.0, c_MiscHboxWidgetId);
f_StatHandlerDemo_addButton(c_ResetButtonWidgetId, "Reset stats", c_MiscHboxWidgetId);
f_StatHandlerDemo_addSpacer(0.0, c_MiscHboxWidgetId);
f_StatHandlerDemo_addButton(c_ExitButtonWidgetId, "Exit", c_MiscHboxWidgetId);
var integer vl_idx := f_StatHandlerDemo_createVarForButton(c_ExitButtonWidgetId);
f_EPTF_Var_addPostProcFn(vl_idx, {refers(f_StatHandlerDemo_exitButtonPressed),{}});
vl_idx := f_StatHandlerDemo_createVarForButton(c_ResetButtonWidgetId);
// the above Variable will be used as local reset button Var for the StatHandler
f_StatHandlerDemo_initDemoTab();
}
function f_StatHandlerDemo_initDemoTab()
runs on SYSTEM_CT
{
f_StatHandlerDemo_addTab(c_DemoTabWidgetId, "StatHandlerDemo", tsp_EPTF_GUI_Main_Tabbox_WidgetId);
f_StatHandlerDemo_addLabel("Client stats:", c_DemoTabWidgetId);
var XTDP_XML_Tag vl_xul :={
xtdp_tree :={
hidecolumnpicker := false,
id := c_ClientTreeWidgetId,
flex := omit,
disabled := omit,
rows := 0.0,
treecols := {
{
editable := false,
flex := 4.0,
id := omit,
columnlabel := "Client component",
widgetType := string
},
{
editable := false,
flex := 1.0,
id := omit,
columnlabel := "Stat value",
widgetType := integerField
},
{
editable := true,
flex := 1.0,
id := omit,
columnlabel := "Decrement",
widgetType := pushButton
},
{
editable := true,
flex := 1.0,
id := omit,
columnlabel := "Increment",
widgetType := pushButton
}
},
treechildren := {}
}
}
if(sr_Success != f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, c_DemoTabWidgetId)) {
log("Error: could not add element to GUI: ", vl_xul);
f_EPTF_Base_stop();
}
f_StatHandlerDemo_addSpacer(0.0, c_DemoTabWidgetId);
f_StatHandlerDemo_addLabel("Aggregated server stats:", c_DemoTabWidgetId);
// f_StatHandlerDemo_addSpacer(1.0, c_DemoTabWidgetId);
}
function f_StatHandlerDemo_exitButtonPressed(in integer pl_idx, in EPTF_IntegerList pl_argList)
runs on SYSTEM_CT
{
log("Exit button pressed. Stopping all components...");
f_EPTF_UIHandlerClient_disableGUIElement(c_ExitButtonWidgetId);
f_EPTF_UIHandlerClient_disableGUIElement(c_ResetButtonWidgetId);
f_StatHandlerDemo_wait(1.0);
f_EPTF_Base_stopAll(pass);
}
function f_StatHandlerDemo_wait(in float pl_sec)
{
timer Tl_wait := pl_sec;
Tl_wait.start;
Tl_wait.timeout;
}
} // group Demo
group GUIConvenienceFunctions {
function f_StatHandlerDemo_addSpacer(in float pl_flex, in charstring pl_parentWidgetId)
runs on EPTF_UIHandlerClient_CT
{
var XTDP_XML_Tag vl_xul := {
xtdp_spacer := {
flex := pl_flex,
id := omit
}
}
if(sr_Success != f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, pl_parentWidgetId)) {
log("Warning: could not add element to GUI: ", vl_xul);
// f_EPTF_Base_stop();
}
}
function f_StatHandlerDemo_addLabel(in charstring pl_text, in charstring pl_parentWidgetId)
runs on EPTF_UIHandlerClient_CT
{
var XTDP_XML_Tag vl_xul := {
xtdp_labeltype := {
id:= omit,
flex := omit,
disabled := omit,
style:= omit,
textvalue := pl_text
}
}
if(sr_Success != f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, pl_parentWidgetId)) {
log("Warning: could not add element to GUI: ", vl_xul);
// f_EPTF_Base_stop();
}
}
function f_StatHandlerDemo_addEmptyHbox(
in charstring pl_widgetId, // "" -> omit
in float pl_flex, // <0.0 -> omit
in boolean pl_horisontal,
in charstring pl_parentWidgetId)
runs on EPTF_UIHandlerClient_CT
{
var XTDP_XML_Tag vl_xul := {
xtdp_hbox := {
id := pl_widgetId,
flex := pl_flex,
disabled := omit,
orient := "vertical",
widgets := {
}
}
}
if(pl_widgetId == "") { vl_xul.xtdp_hbox.id := omit; }
if(pl_flex < 0.0) { vl_xul.xtdp_hbox.flex := omit; }
if(pl_horisontal) { vl_xul.xtdp_hbox.orient := "horisontal"; }
if(sr_Success != f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, pl_parentWidgetId)) {
log("Error: could not add element to GUI: ", vl_xul);
f_EPTF_Base_stop();
}
}
function f_StatHandlerDemo_addEmptyTabbox(
in charstring pl_widgetId,
in float pl_flex, // <0.0 -> omit
in boolean pl_listcard,
in charstring pl_parentWidgetId)
runs on EPTF_UIHandlerClient_CT
{
var XTDP_XML_Tag vl_xul := {
xtdp_tabbox := {
id := pl_widgetId,
flex := pl_flex,
disabled := omit,
layout := omit,
tabs := {},
tabpanels := {}
}
}
if(pl_flex < 0.0) { vl_xul.xtdp_tabbox.flex := omit; }
if(pl_listcard) { vl_xul.xtdp_tabbox.layout := listcard; }
if(sr_Success != f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, pl_parentWidgetId)) {
log("Error: could not add element to GUI: ", vl_xul);
f_EPTF_Base_stop();
}
}
function f_StatHandlerDemo_addTabpanel(
in charstring pl_widgetId,
in float pl_maxheight, // <0.0 -> omit
in boolean pl_horisontal,
in charstring pl_parentWidgetId)
runs on EPTF_UIHandlerClient_CT
{
var XTDP_XML_Tag vl_xul := {
xtdp_tabpanel := {
id := pl_widgetId,
maxheight := pl_maxheight,
orient := "vertical",
widgets := {}
}
}
if(pl_maxheight < 0.0) { vl_xul.xtdp_tabpanel.maxheight := omit; }
if(pl_horisontal) { vl_xul.xtdp_tabpanel.orient := "vertical"; }
if(sr_Success != f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, pl_parentWidgetId)) {
log("Error: could not add element to GUI: ", vl_xul);
f_EPTF_Base_stop();
}
}
function f_StatHandlerDemo_addTab(
in charstring pl_widgetId,
in charstring pl_label,
in charstring pl_parentWidgetId)
runs on EPTF_UIHandlerClient_CT
{
var XTDP_XML_Tag vl_xul := {
xtdp_tab := {
id := pl_widgetId,
tablabel := pl_label
}
}
if(sr_Success != f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, pl_parentWidgetId)) {
log("Error: could not add element to GUI: ", vl_xul);
f_EPTF_Base_stop();
}
}
function f_StatHandlerDemo_addButton(
in charstring pl_widgetId,
in charstring pl_label,
in charstring pl_parentWidgetId,
in float pl_flex := 0.0, // <0.0 -> omit
in boolean pl_checked := false,
in boolean pl_disabled := false,
in charstring pl_type := "", // "" -> omit
in charstring pl_imageId := "") // "" -> omit
runs on EPTF_UIHandlerClient_CT
{
var XTDP_XML_Tag vl_xul := {
xtdp_button := {
checked := pl_checked,
disabled := pl_disabled,
id := pl_widgetId,
flex := pl_flex,
buttonlabel := pl_label,
buttontype := pl_type,
imageId := pl_imageId
}
}
if(pl_flex < 0.0) { vl_xul.xtdp_button.flex := omit; }
if(pl_type == "") { vl_xul.xtdp_button.buttontype := omit; }
if(pl_imageId == "") { vl_xul.xtdp_button.imageId := omit; }
if(sr_Success != f_EPTF_UIHandlerClient_addElementToGUI(vl_xul, pl_parentWidgetId)) {
log("Error: could not add element to GUI: ", vl_xul);
f_EPTF_Base_stop();
}
}
function f_StatHandlerDemo_createVarForButton(
in charstring pl_widgetId)
runs on EPTF_UIHandlerClient_CT
return integer // variable index
{
var integer vl_idx := 0;
f_EPTF_Var_newInt(
c_VarPrefix&pl_widgetId,
0,
vl_idx);
f_EPTF_UIHandlerClient_subscribeMe(
c_VarPrefix&pl_widgetId,
c_GuiVarPrefix&pl_widgetId,
pl_widgetId,
realtime);
return vl_idx;
}
} // group GUIConvenienceFunctions
control
{
execute(tc_StatHandlerDemo());
}
} // end of module