///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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_CSUIHandler_Definitions
//
// Purpose:
//   This TTCN-3 module contains generic data type definitions for EPTF
//   central scheduling UIHandler.
//
// Module Parameters:
//    -
//
//  Module depends on:
//    <EPTF_CLL_CS_Definitions>
//    <EPTF_CLL_Variable_Definitions>
//    <EPTF_CLL_ExecCtrlUIHandler_Definitions>
//    <EPTF_CLL_HostAdminUI_Definitions>
//    <EPTF_CLL_Logging_Definitions>
//    <EPTF_CLL_LoggingUI_Definitions>
// 
// Current Owner:
//    Gabor Tatarka (egbotat)
//
// Last Review Date:
//   -
//
//  Detailed Comments:
//   -
// 
///////////////////////////////////////////////////////////

module EPTF_CLL_CSUIHandler_Definitions
{

//=========================================================================
// Imports
//=======================================================================

import from EPTF_CLL_CS_Definitions all;
import from EPTF_CLL_Variable_Definitions all;
import from EPTF_CLL_ExecCtrlUIHandler_Definitions all;
import from EPTF_CLL_HostAdminUI_Definitions all;
import from EPTF_CLL_Logging_Definitions all;
import from EPTF_CLL_LoggingUI_Definitions all;

//===========================================================================
// Module parameters
//===========================================================================

modulepar charstring tsp_EPTF_CSUIHandler_loggingComponentMask := "EPTF_CSUIHandler";

/////////////////////////////////////////////////////////////////////////
//
//  Component: HostAdminList
//
//  Purpose:
//     List of component references to Host Admins for Load Balancing
//
//  Elements:
//    record of EPTF_HostAdminUI_CT
//
//  Detailed Comments:
//      -
/////////////////////////////////////////////////////////////////////////
type record of EPTF_HostAdminUI_CT HostAdminUIList;

/////////////////////////////////////////////////////////////////////////
//
//  Component: EPTF_CS_ApplAdminBase_UIHandler_CT
//
//  Purpose:
//     Base component type for central scheduling ApplAdmin UIHandler.
//
//  Elements:
//    v_hostAdminUIs - <HostAdminUIList> - list of HostAdmin component references for load balancing
//
//  Detailed Comments:
//      -
/////////////////////////////////////////////////////////////////////////
type component EPTF_CS_ApplAdminBase_UIHandler_CT extends EPTF_CS_ApplAdminBase_CT, EPTF_ExecCtrlClient_UIHandler_CT, EPTF_Var_CT, EPTF_LoggingUIClient_CT
{
  private var HostAdminUIList                     v_hostAdminUIs := {};
  // logging
  private var integer v_CSUIHandler_loggingMaskId := c_EPTF_Logging_invalidMaskId;
}


///////////////////////////////////////////////////////////////////
// Constants
///////////////////////////////////////////////////////////////////

} // module

