blob: 4403621720b4f5c359d47ed3bcef27192e5d2f8b [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_CLL_LoggingClient_Functions
//
// Purpose:
// This module contains the implementation of generic EPTF logging functions.
//
// Module depends on:
//
// Current Owner:
// ELSZSKU
//
// Last Review Date:
// 2010-xx-xx
//
// Detailed Comments:
// This module contains the interface functions for the EPTF_Logging client component.
//
///////////////////////////////////////////////////////////////
module EPTF_CLL_LoggingClient_Functions
// [.objid{ itu_t(0) identified_organization(4) etsi(0)
// identified_organization(127) ericsson(5) testing(0)
{
import from EPTF_CLL_Base_Definitions all;
import from EPTF_CLL_LoggingServer_Functions all;
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_DataSourceClient_Functions all;
import from EPTF_CLL_DataSource_Definitions all;
import from EPTF_CLL_DataSource_Functions all;
import from EPTF_CLL_Common_Functions all;
import from EPTF_CLL_Variable_Definitions all;
import from EPTF_CLL_Variable_Functions all;
import from EPTF_CLL_Logging_Functions all;
import from EPTF_CLL_Base_Functions all;
import from EPTF_CLL_LoggingServer_Definitions all;
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingClient_init_CT
//
// Purpose:
// Function to initialize loggingUI Client component.
//
// Parameters:
// pl_selfName - *in* *charstring* - name of LoggingUI client component
// pl_loggingServer - *in* <EPTF_LoggingServer_CT> - the main LoggingServer component
//
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
// The function initializes LoggingUI client component. Initializes Logging_CT, EPTF_Var_CT, UIHandlerClient_CT.
// After this sends out <EPTF_LoggingUI_Msg> type request and waits for the response. If the response arrives, the main
// window created and the component checkboxes can be put to the GUI.
//
///////////////////////////////////////////////////////////
public function f_EPTF_LoggingClient_init_CT(
in charstring pl_selfName,
in EPTF_LoggingServer_CT pl_loggingServer,
in EPTF_DataSource_CT pl_sourceCompRef := null)
runs on EPTF_LoggingClient_CT {
if (v_LoggingClient_initialized) {return;}
v_LoggingClient_initialized := true;
v_LoggingClient_main:=pl_loggingServer;
f_EPTF_Logging_init_CT(pl_selfName);
var charstring vl_selfName := f_EPTF_Base_selfName();
f_EPTF_Var_init_CT(pl_selfName);
connect(self:EPTF_LoggingClientPort_CP, pl_loggingServer:EPTF_LoggingServerPort_CP);
v_LoggingClient_portConnected := true;
//Register client
var EPTF_Logging_Msg vl_msg; vl_msg.Logging_Hello.compName := f_EPTF_Base_selfName();
EPTF_LoggingClientPort_CP.send(vl_msg);
EPTF_LoggingClientPort_CP.receive( tr_EPTF_Logging_clientAck ) -> value vl_msg;
v_LoggingClient_clientIdx := vl_msg.Logging_ClientAck.clientIdx;
v_LoggingClient_handleBy := activate(as_EPTF_LoggingClient_handle_Bye());
//Send the selection list
for (var integer i:=0, vl_size := sizeof(v_Logging_selectionList); i<vl_size; i:=i+1) {
f_EPTF_LoggingClient_loggingUpdateSelections(i);
}
//Send the list of classes
for (var integer i:=0, vl_size := sizeof(v_EPTF_Logging_ComponentMask_List); i<vl_size; i:=i+1) {
var EPTF_Logging_Msg vl_req:={
Logging_Req:={
Request:=Init,
clientIdx:=v_LoggingClient_clientIdx,
compType:=v_EPTF_Logging_ComponentMask_List[i].componentTypeName,
selectionInClient:=v_EPTF_Logging_ComponentMask_List[i].selection,
eventClassNames:=v_EPTF_Logging_ComponentMask_List[i].eventClassNames
}
}
EPTF_LoggingClientPort_CP.send(vl_req);
alt {
[] EPTF_LoggingClientPort_CP.receive(c_Logging_resp) {}
}
f_EPTF_LoggingClient_componentGlobalSubscribeToEPTFVar(i);
f_EPTF_LoggingClient_componentLocalBindToEPTFVar(i);
}
f_EPTF_LoggingClient_allComponentLocalBindToEPTFVar();
f_EPTF_LoggingClient_allComponentGlobalSubscribeToEPTFVar();
f_EPTF_Logging_registerGUICallbacks(
refers(f_EPTF_LoggingClient_loggingUpdate),
refers(f_EPTF_LoggingClient_refreshVar),
refers(f_EPTF_LoggingClient_loggingUpdateSelections));
f_EPTF_DataSourceClient_init_CT(vl_selfName, pl_sourceCompRef);
f_EPTF_DataSourceClient_registerData(c_LoggingClient_sourceId, vl_selfName, refers( f_EPTF_LoggingClient_DSProcessData ), pl_sourceCompRef)
f_EPTF_DataSourceClient_registerDataValue(c_LoggingClient_sourceId, vl_selfName, refers(f_EPTF_LoggingClient_DSProcessDataValue), pl_sourceCompRef);
f_EPTF_Base_registerCleanup(refers(f_EPTF_LoggingClient_cleanup_CT));
//log("----- LoggingUI init END -------");
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingClient_cleanup_CT
//
// Purpose:
// Function to shutdown logging client.
//
// Parameters:
// -
//
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_cleanup_CT() runs on EPTF_LoggingClient_CT {
//log("----- LoggingClient cleanup -------");
if (v_LoggingClient_initialized == false) {
return;
}
if(v_LoggingClient_portConnected){
EPTF_LoggingClientPort_CP.send(c_Logging_bye);
f_EPTF_LoggingClient_wait4ByeAck()
deactivate(v_LoggingClient_handleBy);
disconnect(self:EPTF_LoggingClientPort_CP, v_LoggingClient_main:EPTF_LoggingServerPort_CP);
}
v_LoggingClient_initialized := false;
}
modulepar float tsp_LoggingClient_timeout := 2.0;
private function f_EPTF_LoggingClient_wait4ByeAck()
runs on EPTF_LoggingClient_CT{
v_LoggingClient_byeAckReceived := false;
timer t_guard;
t_guard.start(tsp_LoggingClient_timeout);
alt
{
[] EPTF_LoggingClientPort_CP.receive(c_Logging_byeAck){
t_guard.stop;
}
[] t_guard.timeout{
f_EPTF_Logging_error(true, %definitionId&": Bye response not received in time.");
}
};
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingClient_componentLocalBindToEPTFVar
//
// Purpose:
// Binds boolean parameters to EPTF_variables.
//
// Parameters:
// pl_logMaskIdx - *in* *integer* - ID of the loggingMask
//
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
// Binds the boolean parameters to EPTF_variables. Binds <v_EPTF_Logging_ComponentMask_List.componentLocalMask> to EPTF_Var variables.
//
///////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_componentLocalBindToEPTFVar(
in integer pl_logMaskIdx) runs on EPTF_LoggingClient_CT {
//log("***********f_EPTF_LoggingUI_componentLocalBindToEPTFVar***************");
var charstring boolVarRef;
//var charstring vl_selection:=f_EPTF_Logging_Selection2Str(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].selection);
var charstring vl_compTypeName:=v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentTypeName;
// mask bindings
f_EPTF_Var_newBoolRef(
f_EPTF_LoggingClient_componentTypeLogVarName(vl_compTypeName),
v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentLocalEnable,
v_LoggingClient_componentLocalEnableIdx[pl_logMaskIdx]);
for(var integer i:=0; i<sizeof(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].eventClassNames); i:=i+1) {
//log("EPTF_componentLocalMask: ",v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentLocalMask[i]);
boolVarRef := f_EPTF_LoggingClient_componentTypeClassLogVarName(vl_compTypeName,i);
f_EPTF_Var_newBoolRef(boolVarRef, v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentLocalMask[i],v_LoggingClient_componentLocalMaskIdx[pl_logMaskIdx][i]);
}
}
private function f_EPTF_LoggingClient_componentTypeLogVarName(in charstring pl_compTypeName)
runs on EPTF_Base_CT
return charstring{
return "componentLocalEnable."&f_EPTF_Base_selfName()&"."&pl_compTypeName
}
private function f_EPTF_LoggingClient_componentTypeClassLogVarName(
in charstring pl_compTypeName,
in integer pl_classIdx)
runs on EPTF_Base_CT
return charstring{
return "componentLocalMask."&int2str(pl_classIdx)&f_EPTF_Base_selfName()&"."&pl_compTypeName;
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingUI_allComponentLocalBindToEPTFVar
//
// Purpose:
// Binds boolean parameters to EPTF_variables
//
// Parameters:
// -
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
// Binds the boolean parameters to EPTF_variables. Binds <v_EPTF_Logging_allComponentLocalEnable> to EPTF_Var variables.
//
///////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_allComponentLocalBindToEPTFVar() runs on EPTF_LoggingClient_CT {
//log("***********f_EPTF_LoggingUI_AllComponentLoggingBindToEPTFVar***************");
f_EPTF_Var_newBoolRef(
f_EPTF_LoggingClient_componentLogEnabledVarName(),
v_EPTF_Logging_allComponentLocalEnable,
v_LoggingClient_allComponentLocalEnableIdx);
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingUI_allComponentLocalBindToEPTFVar
//
// Purpose:
// Returns the name of the EPTF Var of component log enabled state
//////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_componentLogEnabledVarName()
runs on EPTF_LoggingClient_CT
return charstring{
return "allcomponentLocalEnable."&f_EPTF_Base_selfName();
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingClient_allComponentGlobalSubscribeToEPTFVar
//
// Purpose:
// Function to subscribe <allComponentGlobalEnable> variable to the global EPTF Variable.
//
// Parameters:
// -
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
// Main LoggingUI component creates an EPTF_Variable, and a checkbox to the GUI for this boolean variable.
// This function subscribes <allComponentGlobalEnable> variable to the EPTF Variable created by the main component.
//
///////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_allComponentGlobalSubscribeToEPTFVar() runs on EPTF_LoggingClient_CT {
var integer idx;
//allComponentGlobalEnable
f_EPTF_Var_subscribeRemoteBoolRef(v_EPTF_Logging_allComponentGlobalEnable,v_LoggingClient_main,"allComponentGlobalEnable",realtime,idx);
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingClient_componentGlobalSubscribeToEPTFVar
//
// Purpose:
// Function to subscribe <EPTF_Logging_ComponentMask.componentGlobalEnable> ,
// <EPTF_Logging_ComponentMask.componentGlobalMask> variables to an EPTF Variable.
//
// Parameters:
// pl_logMaskIdx - *in* *integer* - ID of the loggingMask
//
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
// Main LoggingUI component creates an EPTF_Variable, and a checkbox to the GUI for this boolean variable.
// This function subscribes <EPTF_Logging_ComponentMask.componentGlobalEnable> and
// <EPTF_Logging_ComponentMask.componentGlobalMask> variables to the EPTF Variable created by the main component.
//
///////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_componentGlobalSubscribeToEPTFVar(
in integer pl_logMaskIdx) runs on EPTF_LoggingClient_CT {
//var charstring vl_selection:=f_EPTF_Logging_Selection2Str(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].selection);
var charstring vl_compTypeName:=v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentTypeName;
var integer idx;
//componentGlobalEnable
f_EPTF_Var_subscribeRemoteBoolRef(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentGlobalEnable,
v_LoggingClient_main,
f_EPTF_LoggingServer_typeEnabledVarName(vl_compTypeName),
realtime,idx,
f_EPTF_LoggingClient_componentGlobalVarName(vl_compTypeName));
for(var integer i:=0; i<sizeof(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].eventClassNames); i:=i+1) {
//componentGlobalMask
f_EPTF_Var_subscribeRemoteBoolRef(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentGlobalMask[i],
v_LoggingClient_main,
f_EPTF_LoggingServer_typeClassEnabledVarName(
vl_compTypeName,
v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].eventClassNames[i]),
realtime,idx,
f_EPTF_LoggingClient_componentGlobalMaskVarName(i,vl_compTypeName));
}
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingClient_loggingUpdate
//
// Purpose:
// Callback function for Logging_CT
//
// Parameters:
// pl_logMaskIdx - *in* *integer* - the the mask ID to be updated
//
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
// After calling the function <f_EPTF_Logging_registerComponentMasks> EPTF_Logging_CT uses this callback function
// to put the new mask parameters to the GUI.
//
///////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_loggingUpdate(
in integer pl_logMaskIdx) runs on EPTF_LoggingClient_CT {
if(v_LoggingClient_portConnected){
//log("----- f_EPTF_LoggingUIClient_LogUpdate Callback -------");
var EPTF_Logging_Msg vl_req:={
Logging_Req:={
Request:=Init,
clientIdx:=v_LoggingClient_clientIdx,
compType:=v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentTypeName,
selectionInClient:=v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].selection,
eventClassNames:=v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].eventClassNames
}
}
EPTF_LoggingClientPort_CP.send(vl_req);
alt {
[] EPTF_LoggingClientPort_CP.receive(c_Logging_resp) {}
}
f_EPTF_LoggingClient_componentGlobalSubscribeToEPTFVar(pl_logMaskIdx);
f_EPTF_LoggingClient_componentLocalBindToEPTFVar(pl_logMaskIdx);
f_EPTF_LoggingClient_refreshAllRefs();
}
}
private function f_EPTF_LoggingClient_loggingUpdateSelections(in integer pl_idx)
runs on EPTF_LoggingClient_CT {
if(v_LoggingClient_portConnected){
var EPTF_Logging_Msg vl_req:={
Logging_NewSelection := {
name := v_Logging_selectionList[pl_idx],
selectionInClient := pl_idx,
clientIdx := v_LoggingClient_clientIdx
}
}
EPTF_LoggingClientPort_CP.send(vl_req);
EPTF_LoggingClientPort_CP.receive(c_Logging_resp);
}
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingUIClient_refreshAllRefs
//
// Purpose:
// Callback function for Logging_CT. Refreshes component references of all EPTF Variables.
//
// Parameters:
// -
//
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
// TITAN dynamically allocates memory for list elements. When the list become full memory reallocated.
// The allocated component references to EPTF Variables go wrong, so we need to refresh the component references.
// This function refreshes component references of all EPTF Variables.
//
///////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_refreshAllRefs() runs on EPTF_LoggingClient_CT {
var charstring vl_varName;
// do this for all comp variables:
//f_EPTF_Var_CT_LogAll("f_EPTF_LoggingUIClient_refreshAllRefs");
for (var integer pl_logMaskIdx:= 0; pl_logMaskIdx<sizeof(v_EPTF_Logging_ComponentMask_List); pl_logMaskIdx:=pl_logMaskIdx+1) {
//var charstring vl_selection:=f_EPTF_Logging_Selection2Str(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].selection);
var charstring vl_compTypeName:=v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentTypeName;
//componentGlobalEnable
vl_varName := f_EPTF_LoggingClient_componentGlobalVarName(vl_compTypeName);
f_EPTF_Var_updateRef(f_EPTF_Var_getId(vl_varName),f_EPTF_Var_getBoolRef(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentGlobalEnable));
for(var integer i:=0; i<sizeof(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].eventClassNames); i:=i+1) {
//componentGlobalMask
vl_varName := f_EPTF_LoggingClient_componentGlobalMaskVarName(i,vl_compTypeName);
f_EPTF_Var_updateRef(f_EPTF_Var_getId(vl_varName),f_EPTF_Var_getBoolRef(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentGlobalMask[i]));
}
// mask bindings
vl_varName := f_EPTF_LoggingClient_componentTypeLogVarName(vl_compTypeName);
f_EPTF_Var_updateRef(f_EPTF_Var_getId(vl_varName),f_EPTF_Var_getBoolRef(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentLocalEnable));
for(var integer i:=0; i<sizeof(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].eventClassNames); i:=i+1) {
//log("EPTF_componentLocalMask: ",v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentLocalMask[i]);
vl_varName := f_EPTF_LoggingClient_componentTypeClassLogVarName(vl_compTypeName, i);
f_EPTF_Var_updateRef(f_EPTF_Var_getId(vl_varName),f_EPTF_Var_getBoolRef(v_EPTF_Logging_ComponentMask_List[pl_logMaskIdx].componentLocalMask[i]));
}
} // for pl_logMaskIdx
//f_EPTF_Var_CT_LogAll("Updated f_EPTF_LoggingUIClient_refreshAllRefs");
}
private function f_EPTF_LoggingClient_componentGlobalMaskVarName(
in integer pl_classIdx,
in charstring pl_compTypeName
) runs on EPTF_LoggingClient_CT
return charstring{
return "clientComponentGlobalMask."&int2str(pl_classIdx)&"."&pl_compTypeName
}
private function f_EPTF_LoggingClient_componentGlobalVarName(
in charstring pl_compTypeName
) runs on EPTF_LoggingClient_CT
return charstring{
return "clientComponentGlobalEnable."&pl_compTypeName
}
//////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingClient_refreshVar
//
// Purpose:
// Callback function for Logging_CT. Refreshes a component variable value from the EPTF Variable.
//
// Parameters:
// pl_logVar - *inout* *boolean* - the reference of the component variable
//
// Return Value:
// -
//
// Errors:
// - (none)
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
private function f_EPTF_LoggingClient_refreshVar(
inout boolean pl_logVar) runs on EPTF_Var_CT {
if (f_EPTF_Var_boolCompRef2Id(pl_logVar)!=-1) {
f_EPTF_Var_adjustContent(f_EPTF_Var_boolCompRef2Id(pl_logVar),{boolVal:=pl_logVar});
} else {
f_EPTF_Common_user(log2str(%definitionId&"(",pl_logVar,") returned -1"));
}
}
///////////////////////////////////////////////////////////
// Function: as_EPTF_LoggingClient_handle_Bye
//
// Purpose:
// Handler for Bye message
///////////////////////////////////////////////////////////
private altstep as_EPTF_LoggingClient_handle_Bye() runs on EPTF_LoggingClient_CT {
//var EPTF_LoggingServer_CT vl_sender;
[] EPTF_LoggingClientPort_CP.receive({Logging_Bye:=?}){
EPTF_LoggingClientPort_CP.send(c_Logging_byeAck);
disconnect(self:EPTF_LoggingClientPort_CP, v_LoggingClient_main:EPTF_LoggingServerPort_CP);
v_LoggingClient_portConnected := false;
deactivate(v_LoggingClient_handleBy);
repeat;
}
}
private function f_EPTF_LoggingClient_getCTIdx(in charstring pl_cTypeName)
runs on EPTF_LoggingClient_CT return integer{
var integer vl_typeIdx := -1;
for(var integer i:=0; i<sizeof(v_EPTF_Logging_ComponentMask_List) and -1 == vl_typeIdx; i:=i+1) {
if(v_EPTF_Logging_ComponentMask_List[i].componentTypeName==pl_cTypeName){
vl_typeIdx := i;
}
}
if(-1 == vl_typeIdx){
f_EPTF_Logging_warning(true, "Parameter "&c_LoggingClient_paramNameComponentType&"=="&pl_cTypeName&" is invalid for data element "&c_LoggingClient_dataElementLogEnabled&
". There is no registered component type "&pl_cTypeName);
return -1;
}
return vl_typeIdx;
}
private function f_EPTF_LoggingClient_DSProcessData(out charstring pl_dataVarName,
in charstring pl_source,
in charstring pl_ptcName,
in charstring pl_element,
in EPTF_DataSource_Params pl_params)
runs on EPTF_LoggingClient_CT return integer{
select( pl_element ){
case ( c_LoggingClient_dataElementLogEnabled ){
const EPTF_CharstringList cl_neededParams := {
c_LoggingClient_paramNameComponentType,
c_LoggingClient_paramNameClass
}
var EPTF_CharstringList vl_params
if(0 != f_EPTF_DataSourceClient_extractParams(c_LoggingClient_dataElementLogEnabled,pl_params, cl_neededParams, vl_params)){
return -1;
}
var integer vl_mask := f_EPTF_LoggingServer_DSGetParamsMask(vl_params);
select( vl_mask ){
case ( 0 ){ //Client log enabled
pl_dataVarName := f_EPTF_LoggingClient_componentLogEnabledVarName();
return 0;
}
case ( 1 ){ //Component type log on client enabled
//Check component type name
var integer vl_typeIdx := f_EPTF_LoggingClient_getCTIdx(vl_params[0]);
if(0 > vl_typeIdx){
return -1;
}
pl_dataVarName := f_EPTF_LoggingClient_componentTypeLogVarName(vl_params[0]);
return 0;
}
case ( 3 ){ //LogClass of component type on client log enabled
var integer vl_typeIdx := f_EPTF_LoggingClient_getCTIdx(vl_params[0]);
if(0 > vl_typeIdx){
return -1;
}
var integer vl_classIdx := -1;
for(var integer i:=0; i<sizeof(v_EPTF_Logging_ComponentMask_List[vl_typeIdx].eventClassNames) and -1 == vl_classIdx; i:=i+1) {
if(v_EPTF_Logging_ComponentMask_List[vl_typeIdx].eventClassNames[i]==vl_params[1]){
vl_classIdx := i;
}
}
if(-1 == vl_classIdx){
f_EPTF_Logging_warning(true, "Parameter "&c_LoggingClient_paramNameClass&"=="&vl_params[1]&
" for "&c_LoggingClient_dataElementLogEnabled&" is invalid. There is no registered log class "&
vl_params[1]&" for component type "&vl_params[0]&
". Available classes: "&log2str(v_EPTF_Logging_ComponentMask_List[vl_typeIdx].eventClassNames)&
". Received parameters: "&log2str(pl_params));
return -1;
}
if(0 > vl_classIdx){
f_EPTF_Logging_warning(true, "Invalid parameter. There is no log class "&vl_params[1]&" for component type "&vl_params[0]&".");
}
pl_dataVarName := f_EPTF_LoggingClient_componentTypeClassLogVarName(vl_params[0], vl_classIdx);
return 0;
}
case ( 2 ){ //Class is set, but type not. Invalid.
f_EPTF_Logging_warning(true, "Parameter "&c_LoggingClient_paramNameComponentType&" must be set if you set "&c_LoggingClient_paramNameClass&" for "&c_LoggingClient_dataElementLogEnabled&".");
return -1;
}
case else{
f_EPTF_Logging_warning(true, "Invalid parameter set. Parametes can not be used in this combination. Received: "&log2str(pl_params));
return -1;
}
}
}
case else{
f_EPTF_Logging_warning(true, %definitionId&": Invalid external data element: "&pl_element&
". Available element: "&c_LoggingClient_dataElementLogEnabled)
//Just to avoid compiler warnings
v_LoggingClient_dummyCharstring := pl_source;
v_LoggingClient_dummyCharstring := pl_ptcName;
}
}
return -1;
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_LoggingClient_DSProcessDataValue
//
// Purpose:
// Processes the incoming DataValue requests - iterators and external data elements - and gives back the value.
// It should be registered in the EPTF_LoggingClient_CT. Type function fcb_EPTF_DataSourceClient_dataValueHandler
//
// Parameters:
// *out *<EPTF_Var_DirectContent>* pl_dataValue* - the value of the data or the iterator result
// *in charstring pl_source* - the name of the data source 'feature'
// *in charstring pl_ptcName* - the name of the ptc (ID of the PTC)
// *in charstring pl_element* - the name of the data element
// *in* <EPTF_DataSource_Params> *pl_params* - the parameters
// of the data for the dataElement
//
// Return Value:
// integer - error code (0 of OK, non zero if unsuccessful: e.g. invalid parameters given in pl_params)
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////
friend function f_EPTF_LoggingClient_DSProcessDataValue(out EPTF_Var_DirectContent pl_dataValue,
in charstring pl_source,
in charstring pl_ptcName,
in charstring pl_element,
in EPTF_DataSource_Params pl_params)
runs on EPTF_LoggingClient_CT return integer {
var integer vl_errorCode := -1;
pl_dataValue := {unknownVal := {omit}}; // set it to invalid
select( pl_element )
{
case(c_EPTF_DataSource_dataElement_Help) {
vl_errorCode := f_EPTF_DataSource_handleHelp(pl_dataValue, pl_source, pl_params, c_EPTF_LoggingClient_help);
}
case else
{
}
}
return vl_errorCode;
}
} // end of module