///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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_HostAdminUI_Definitions
// 
//  Purpose:
//    This module contains definitions of HostAdminUI extension for the EPTF_UIHandler.
//
// Module Parameters:
//    tsp_EPTF_HostAdminUI_loggingComponentMask - *charstring* - component-type mask for logging, default value: "EPTF_HostAdminUI"
// 
//  Module depends on:
//    <EPTF_CLL_UIHandler_Definitions>
//    <EPTF_CLL_Logging_Definitions>
//    <EPTF_CLL_LoggingUI_Definitions>
//
// 
//  Current Owner:
//    Zsolt Szalai (EZSOSZA)
// 
//  Last Review Date:
//    2007-xx-xx
//
//  Detailed Comments:
//    -
//
///////////////////////////////////////////////////////////////
module EPTF_CLL_HostAdminUI_Definitions
// [.objid{ itu_t(0) identified_organization(4) etsi(0) 
// identified_organization(127) ericsson(5) testing(0)
// <put further nodes here if needed>}]
{
  import from EPTF_CLL_HostAdmin_Definitions all;
  import from EPTF_CLL_UIHandler_Definitions all;
  import from EPTF_CLL_UIHandlerVariableUI_Definitions all;
  import from EPTF_CLL_Logging_Definitions all;
  import from EPTF_CLL_LoggingUI_Definitions all;

  modulepar charstring tsp_AdminHostUI_tabparent := "EPTF_Main_Tabbox";
  modulepar charstring tsp_EPTF_HostAdminUI_loggingComponentMask := "EPTF_HostAdminUI";

/////////////////////////////////////////////////////////////////////////
// Constants: c_HostAdminProcessTabboxId
//
// Purpose:
//    -
//
// Other values:
//    - 
/////////////////////////////////////////////////////////////////////////
  const charstring c_HostAdminProcessTabboxId := "HostAdminProcessTabboxId";

/////////////////////////////////////////////////////////////////////////
// Constants: c_HostAdminProcTabpanelID
//
// Purpose:
//    -
//
// Other values:
//    - 
/////////////////////////////////////////////////////////////////////////
  const charstring c_HostAdminProcTabpanelID := "HostAdminProcTabpanelID";

/////////////////////////////////////////////////////////////////////////
// Constants: c_HostAdminProcTabID
//
// Purpose:
//    -
//
// Other values:
//    - 
/////////////////////////////////////////////////////////////////////////
  const charstring c_HostAdminProcTabID := "HostAdminProcTabID";

/////////////////////////////////////////////////////////////////////////
// Constants: c_HostAdminTabID
//
// Purpose:
//    -
//
// Other values:
//    - 
/////////////////////////////////////////////////////////////////////////
  const charstring c_HostAdminTabID := "HostAdminTabId";

/////////////////////////////////////////////////////////////////////////
// Constants: c_HostAdminTreeId
//
// Purpose:
//    -
//
// Other values:
//    - 
/////////////////////////////////////////////////////////////////////////
  const charstring c_HostAdminTreeId := "HostAdminTreeId";

/////////////////////////////////////////////////////////////////////////
// Constants: c_HostAdminProcessTreeId
//
// Purpose:
//    -
//
// Other values:
//    - 
/////////////////////////////////////////////////////////////////////////
  const charstring c_HostAdminProcessTreeId := "HostAdminProcessTreeId";

/////////////////////////////////////////////////////////////////////////
// Constants: c_CPULoadWidgetID
//
// Purpose:
//    -
//
// Other values:
//    - 
/////////////////////////////////////////////////////////////////////////
  const charstring c_CPULoadWidgetID := "CPULoadWidgetID";

/////////////////////////////////////////////////////////////////////////
//
//  Component: EPTF_HostAdminUI_CT
//
//  Purpose:
//    Component type for EPTF_HostAdminUI
//
//  Elements:
//    v_HostAdminUI_initialized - *boolean* 
//    v_HostAdminUI_UIHandler - <EPTF_UIHandler_CT>
//    v_HostAdminUI_name - *charstring*
//    v_HostAdminUI_hostname - *charstring*
//    v_HostAdminUI_loggingMaskId - *integer*
//
//  Detailed Comments:
//    Extends EPTF_HostAdmin_CT and EPTF_UIHandler_VariableUI_CT and EPTF_LoggingUIClient_CT
/////////////////////////////////////////////////////////////////////////   
  type component EPTF_HostAdminUI_CT extends EPTF_HostAdmin_CT, EPTF_UIHandler_VariableUI_CT, EPTF_LoggingUIClient_CT{
    private var boolean v_HostAdminUI_initialized := false;
    private var EPTF_UIHandler_CT v_HostAdminUI_UIHandler;
    private var charstring v_HostAdminUI_name;
    private var charstring v_HostAdminUI_hostname;
    // logging
    private var integer v_HostAdminUI_loggingMaskId := c_EPTF_Logging_invalidMaskId;
  }
  
}
