///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright (c) 2000-2018 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_UIHandlerClient_Definitions
// 
//  Purpose:
//    This module contains definitions of generic CLL_UIHandlerClient_CT component.
// 
//  Module depends on:
//    <EPTF_CLL_UIHandler_MsgDefinitions>
//    <EPTF_CLL_UIHandler_Definitions>
//    <EPTF_CLL_Variable_Definitions>
//    <EPTF_CLL_Logging_Definitions>
// 
//  Current Owner:
//    Laszlo Skumat (ELSZSKU)
// 
//  Last Review Date:
//    2007-xx-xx
//
//  Detailed Comments:
//    -
//
///////////////////////////////////////////////////////////////
module EPTF_CLL_UIHandlerClient_Definitions
// [.objid{ itu_t(0) identified_organization(4) etsi(0) 
// identified_organization(127) ericsson(5) testing(0)
// <put further nodes here if needed>}]
{

//=========================================================================
// Import Part
//=========================================================================
import from EPTF_CLL_UIHandler_MsgDefinitions all;
import from EPTF_CLL_UIHandler_Definitions all;
import from EPTF_CLL_Variable_Definitions all;
import from EPTF_CLL_Semaphore_Definitions all;
import from EPTF_CLL_Logging_Definitions all;
//=========================================================================
// Module Parameters
//=========================================================================
//modulepar float tsp_EPTF_CLL_UIHandlerClientTimeout := 5.0;
modulepar charstring tsp_EPTF_UIHandlerClient_loggingComponentMask := "EPTF_UIHandlerClient";
modulepar float tsp_EPTF_UIHandlerClient_maxKillTime := 30.0; // max time to wait for receiving all pending messages

//=========================================================================
// Data Types
//=========================================================================
///////////////////////////////////////////////////////////
//  Type: EPTF_UIHandlerClient_HangingConnection
//  Purpose:
//    Describes a sent subscription note
///////////////////////////////////////////////////////////
type record EPTF_UIHandlerClient_HangingConnection {
  EPTF_UIHandler_CT handler,
  charstring varName,
  integer messagId
};

type record of EPTF_UIHandlerClient_SubsRet EPTF_UIHandlerClient_SubsRetList;

type record of EPTF_UIHandler_HandledWidgetType EPTF_UIHandler_HandledWidgetTypeList;

///////////////////////////////////////////////////////////
//  Type: EPTF_UIHandlerClient_HangingConnections
//  Purpose:
//    The list of sent subscription notes
///////////////////////////////////////////////////////////
type record of EPTF_UIHandlerClient_HangingConnection EPTF_UIHandlerClient_HangingConnections;

///////////////////////////////////////////////////////////
//  Type: EPTF_UIHandlerClient_OpenUIConnections
//  Purpose:
//    The list of the connected handlers
///////////////////////////////////////////////////////////
type record of EPTF_UIHandler_CT EPTF_UIHandlerClient_OpenUIConnections;

///////////////////////////////////////////////////////////
//  Type: EPTF_UIHandlerClient_SubsRet
//  Purpose:
//    The type of the callback function called after a refusion message
///////////////////////////////////////////////////////////
type enumerated EPTF_UIHandlerClient_SubsRet {sr_Fail, sr_Success, sr_Exists};
//=========================================================================
//Component Types
//=========================================================================
///////////////////////////////////////////////////////////
//  Type: EPTF_UIHandlerClient_CT
// 
//  Purpose:
//    The component implements the provider part of the EPTF UI feature.
//    It extends the EPTF_Var_CT component, because the subscriber 
//    presumes it.
// 
//  Elements:
//    EPTF_UIHandlerClient_MgmtIf - <EPTF_CLL_UISubscMgmt_PT> - the management port
//
//  Detailed Comments:
//   Gives a surface for automatization of data handling in UIs.
//
///////////////////////////////////////////////////////////
type component EPTF_UIHandlerClient_CT extends EPTF_Var_CT, EPTF_Logging_CT, EPTF_Semaphore_CT {
  //port EPTF_CLL_UISubscMgmt_PT EPTF_CLL_UISubscMgmtIf; //management interface
  private port EPTF_adminPort_PT v_UIHandlerClient_adminPortIf; //Widget management interface
  private var EPTF_UIHandlerClient_HangingConnections v_UIHandlerClient_hangingConnections; //The actually notified subscriber who has not subscribed yet
  private var EPTF_UIHandlerClient_OpenUIConnections v_UIHandlerClient_openUIConnections;
  private var boolean v_UIHandlerClient_initialized := false;
  private var default v_UIHandlerClient_def;
  private var EPTF_UIHandler_CT v_UIHandlerClient_DefaultUIHandler;
  private var integer v_UIHandlerClient_lastRequest := 0;
  private var integer v_UIHandlerClient_pendingMsgCounter := 0;  // number of pending messages
  // logging
  private var integer v_UIHandlerClient_loggingMaskId := c_EPTF_Logging_invalidMaskId;
  private var EPTF_UIHandlerClient_SubsRetList v_UIHandlerClient_subsRetList := {}; // indexed by semaphore ID. Stores the return value of the AddElementToGUI response
  private var EPTF_UIHandler_HandledWidgetTypeList v_UIHandlerClient_widgetExistsRespList := {};// indexed by semaphore ID. Stores the return value of the WidgetExists response
  private var boolean v_UIHandlerClient_maxTimeoutReached := false;

}
}  // end of module
