///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright (c) 2000-2017 Ericsson Telecom AB                               //
//                                                                           //
// All rights reserved. This program and the accompanying materials          //
// are made available under the terms of the Eclipse Public License v1.0     //
// which accompanies this distribution, and is available at                  //
// http://www.eclipse.org/legal/epl-v10.html                                 //
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
//  Module: EPTF_CLL_LoggingUI_Definitions
// 
//  Purpose:
//    This module contains definitions of EPTF_CLL_LoggingUI.
//    
//  Module depends on:
//    <EPTF_CLL_Logging_Definitions>
//    <EPTF_CLL_Variable_Definitions>
//    <EPTF_CLL_Common_Definitions>
//    <EPTF_CLL_UIHandlerClient_Definitions>
//    <EPTF_CLL_HashMap_Definitions>
//
//  Current Owner:
//    Bence Molnar (EBENMOL)
// 
//  Last Review Date:
//    2008-01-29
//
//  Detailed Comments:
//    -
//
///////////////////////////////////////////////////////////

module EPTF_CLL_LoggingUI_Definitions

{
// if you use EPTF_Generic_Logger_CT you have to import these
import from EPTF_CLL_Logging_Definitions all
// if you use EPTF_Var_CT you have to import these
import from EPTF_CLL_Variable_Definitions all;
// if you use EPTF_IntegerList you have to import these
import from EPTF_CLL_Common_Definitions all;
// if you use UIHandler&XUL you have to import these
import from EPTF_CLL_UIHandlerClient_Definitions all;

import from EPTF_CLL_HashMap_Definitions all;

///////////////////////////////////////////////////////////
//  Constant: c_EPTF_LoggingUI_resp
//
//  Purpose:
//     <EPTF_LoggingUI_Resp_Type> type constant.
//    
///////////////////////////////////////////////////////////

const EPTF_LoggingUI_Msg c_EPTF_LoggingUI_resp:={
  LoggingUI_Resp:={
    Message:=OK
  }
}

///////////////////////////////////////////////////////////
//  Constant: c_EPTF_LoggingUI_hello
//
//  Purpose:
//     <EPTF_LoggingUI_Hello_Type> type constant.
//    
///////////////////////////////////////////////////////////

const EPTF_LoggingUI_Msg c_EPTF_LoggingUI_hello:={
  LoggingUI_Hello:={
    Message:=Hello
  }
}

///////////////////////////////////////////////////////////
//  Constant: c_EPTF_LoggingUI_bye 
//
//  Purpose:
//     <EPTF_LoggingUI_Bye_Type> type constant.
//    
///////////////////////////////////////////////////////////

const EPTF_LoggingUI_Msg c_EPTF_LoggingUI_bye:={
  LoggingUI_Bye:={
    Message:=Bye
  }
}

///////////////////////////////////////////////////////////
//  Template: tr_EPTF_LoggingUI_req template
//
//  Purpose:
//     <EPTF_LoggingUI_Req_Type> type template, for receiving request messages.
//    
///////////////////////////////////////////////////////////

template EPTF_LoggingUI_Msg tr_EPTF_LoggingUI_req:={
  LoggingUI_Req:={
    Request:=Init,
    compName:=?,
    compType:=?,
    selection:=?,
    eventClassNames:={*}
  }
}

///////////////////////////////////////////////////////////
//  Type: EPTF_LoggingUI_Req_Type 
//
//  Purpose:
//     Reqest Type message.
// 
//  Elements:
//     Request - <EPTF_LoggingUI_Msg_types> - The type of request
//     compName - *charstring* - The name of the component
//     compType - *charstring* - The type of the component
//     selection - *integer* - Core=0/User=1
//     eventClassNames - <EPTF_Logging_EventClassPrefixList> - The list of the logmask
// 
//  Detailed Comments:
//    Reqest Type message. The client sends this  messages to the main loggingUI component.
//    The client sends its name,type, and logmask. with the help of this message the main 
//    loggingUI component makes the component types tab.
//
///////////////////////////////////////////////////////////

type record EPTF_LoggingUI_Req_Type
{
  EPTF_LoggingUI_Msg_types Request,
  charstring compName,
  charstring compType,
  integer selection,
  EPTF_Logging_EventClassPrefixList eventClassNames
}

///////////////////////////////////////////////////////////
//  Type: EPTF_LoggingUI_Resp_Type
//
//  Purpose:
//     Response Type message.
// 
//  Elements:
//     Response - <EPTF_LoggingUI_Msg_types> - The response message
// 
//  Detailed Comments:
//    The response message. The loggingUI and loggingUI client components sends these  messages.
//    There are 3 types OK, Hello, Bye: 
//    OK is a response to a request message.
//    Hello is a client message for starting the connection. Bye is a client message for stopping connection. 
//    With the help of these messages main LoggingUI maintain the number of connected clients.
//    
//////////////////////////////////////////////////////////

type record EPTF_LoggingUI_Resp_Type
{
  EPTF_LoggingUI_Msg_types Message
} 

///////////////////////////////////////////////////////////
//  Type: EPTF_LoggingUI_Msg_types
// 
//  Purpose:
//     Enumerated type for chosing LoggingUI message types.
// 
//  Elements:
//    Hello - Hello type msg
//    Init - Init type msg
//    OK - OK type msg
//    Bye - Bye type msg
// 
//  Detailed Comments:
//    Enumerated type for chosing possible LoggingUI message types. 
///////////////////////////////////////////////////////////  

type enumerated EPTF_LoggingUI_Msg_types {Hello(0), Init(1), OK(2), Bye(3)}

///////////////////////////////////////////////////////////
//  Type: EPTF_LoggingUI_Msg 
//
//  Purpose:
//     The union of LoggingUI messages.
// 
//  Elements:
//     LoggingUI_Req - <EPTF_LoggingUI_Req_Type> - The request message
//     LoggingUI_Resp - <EPTF_LoggingUI_Resp_Type> - The response message
//     LoggingUI_Hello - <EPTF_LoggingUI_Resp_Type> - The Hello message
//     LoggingUI_Bye - <EPTF_LoggingUI_Resp_Type> - The Bye message
// 
//  Detailed Comments:
//    All loggingUI messages.
//    
///////////////////////////////////////////////////////////  

type union EPTF_LoggingUI_Msg
{
  EPTF_LoggingUI_Req_Type LoggingUI_Req,
  EPTF_LoggingUI_Resp_Type LoggingUI_Resp,
  EPTF_LoggingUI_Resp_Type LoggingUI_Hello,
  EPTF_LoggingUI_Resp_Type LoggingUI_Bye
}

///////////////////////////////////////////////////////////
//  Type: EPTF_LoggingUIPort_PT
// 
//  Purpose:
//     Internal message port type for exchanging configuration messages.
// 
//  Elements:
// 
//  Detailed Comments:
//    Can bothway send messages
///////////////////////////////////////////////////////////

type port EPTF_LoggingUIPort_PT message {
  inout EPTF_LoggingUI_Msg;
} with {extension "internal"}

///////////////////////////////////////////////////////////
//  Component: EPTF_LoggingUIClient_CT
// 
//  Purpose:
//     Component type for EPTF LoggingUI Client interface.
// 
//  Elements:
//    v_EPTF_LoggingUI_main - <EPTF_LoggingUI_CT> - the main loggingUI component
//    v_EPTF_LoggingUI_allComponentLocalEnableIdx - *integer* - the EPTF variable ID of v_EPTF_Logging_allComponentLocalEnable
//    v_EPTF_LoggingUI_componentLocalEnableIdx - <EPTF_IntegerList> - the EPTF variable ID of v_EPTF_componentLocalEnable, integerlist
//    v_EPTF_LoggingUI_componentLocalMaskIdx - <EPTF_IntegerArray2D> - the EPTF variable ID of v_EPTF_componentLocalMask, 2D integermatrix
//    v_EPTF_LoggingUIClient_initialized - *boolean* - true if loggingUI is initalized with its init function
//
//  Detailed Comments:
//    LoggingUI Client type component. Every component using LoggingUI have to extend this component type.
//     
/////////////////////////////////////////////////////////// 

type component EPTF_LoggingUIClient_CT extends EPTF_Logging_CT, EPTF_Var_CT, EPTF_UIHandlerClient_CT {
  private port EPTF_LoggingUIPort_PT EPTF_LoggingUIClientPort_CP;

  private var EPTF_LoggingUI_CT v_EPTF_LoggingUI_main;
  private var integer v_EPTF_LoggingUI_allComponentLocalEnableIdx;
  private var EPTF_IntegerList v_EPTF_LoggingUI_componentLocalEnableIdx;
  private var EPTF_IntegerArray2D v_EPTF_LoggingUI_componentLocalMaskIdx;
  private var boolean v_EPTF_LoggingUIClient_initialized := false;
}

///////////////////////////////////////////////////////////
//  Constant: c_EPTF_LoggingUI_typesLookupTable_HashName 
//
//  Purpose:
//     Constant for the name of the Hashmap used for a lookupTable for types.
//    
///////////////////////////////////////////////////////////
const charstring c_EPTF_LoggingUI_typesLookupTable_HashName := "typesLookupTable";

///////////////////////////////////////////////////////////
//  Component: EPTF_LoggingUI_CT
// 
//  Purpose:
//     Component type for EPTF main LoggingUI interface.
// 
//  Elements:
//    v_EPTF_LoggingUI_def - *default* - default altstep in main LoggingUI component
//    v_EPTF_LoggingUI_allComponentGlobalEnableIdx - *integer* - the EPTF variable ID of v_EPTF_allComponentGlobalEnable
//    v_EPTF_LoggingUI_componentGlobalEnableIdx - <EPTF_IntegerArray2D> - the EPTF variable id of <EPTF_Logging_LogMaskList> ComponentGlobalEnable
//    v_EPTF_LoggingUI_componentGlobalMaskIdx - <LoggingUI_IntegerArray3D> - the EPTF variable ID of <EPTF_Logging_LogMaskList> ComponentGlobalMask
//    v_EPTF_LoggingUI_typesLookupTableName - *charstring* - name of the component types lookup table HashMap
//    v_EPTF_LoggingUI_typesLookupTableID - *integer* - the returned ID of the component types lookup table HashMap
//    v_EPTF_LoggingUI_typesID - *integer* - the generated ID of the component types
//    v_EPTF_LoggingUI_tabboxName - *charstring* - name of the tabbox where the LoggingUI has to be created on the GUI
//    v_EPTF_LoggingUI_numberOfClients - *integer* - the number of connected clients
//    v_EPTF_LoggingUI_allowReq - *boolean* - true if new request message processing allowed
//    v_EPTF_LoggingUI_initialized - *boolean* - true if loggingUI is initalized with its init function
//
//  Detailed Comments:
//    LoggingUI main component. There always have to be one main component.
//     
/////////////////////////////////////////////////////////// 

type component EPTF_LoggingUI_CT extends EPTF_Logging_CT, EPTF_Var_CT, EPTF_UIHandlerClient_CT, EPTF_HashMap_CT {
  private port EPTF_LoggingUIPort_PT EPTF_LoggingUIPort_CP;

  private var default v_EPTF_LoggingUI_def := null;
  private var integer v_EPTF_LoggingUI_allComponentGlobalEnableIdx;
  private var EPTF_IntegerArray2D v_EPTF_LoggingUI_componentGlobalEnableIdx;
  private var LoggingUI_IntegerArray3D v_EPTF_LoggingUI_componentGlobalMaskIdx;
  private var charstring v_EPTF_LoggingUI_typesLookupTableName;
  private var integer v_EPTF_LoggingUI_typesLookupTableID;
  private var integer v_EPTF_LoggingUI_typesID;
  private var charstring v_EPTF_LoggingUI_tabboxName;
  private var integer v_EPTF_LoggingUI_numberOfClients;
  private var boolean v_EPTF_LoggingUI_allowReq := true;
  private var boolean v_EPTF_LoggingUI_initialized := false;

}

type record of EPTF_IntegerArray2D LoggingUI_IntegerArray3D;

}  // end of module
