///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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_DsRestAPI_Definitions
// 
//  Purpose:
//    This module contains type definitions of the DsRestAPI feature.
//
//    The DsRestAPI feature provides functions to:
//      - DsRestAPI serves UI related HTTP requests, like normal file requests, and JSON based data requests
//
//  Module depends on:
//    <EPTF_CLL_Base_Definitions>
//    <EPTF_CLL_Logging_Definitions>
//    <EPTF_CLL_DsRestAPI_HTTPServer_Definitions>
//
//  Current Owner:
//    Tamas Kis (ekistam)
// 
//  Last Review Date:
//    -
//
//  Detailed Comments:
//    -
//
///////////////////////////////////////////////////////////////

module EPTF_CLL_DsRestAPI_Definitions {

import from EPTF_CLL_Base_Definitions all;
import from EPTF_CLL_Logging_Definitions all;
import from EPTF_CLL_DsRestAPI_HTTPServer_Definitions all;
import from EPTF_CLL_DsRestAPI_Timeline_Definitions all;

modulepar charstring tsp_EPTF_DsRestAPI_loggingComponentMask := "EPTF_DsRestAPI";

///////////////////////////////////////////////////////////
//  Constant: c_EPTF_DsRestAPI_loggingEventClasses
// 
//  Purpose:
//    list of logging event class names used on DsRestAPI
// 
//  Detailed Comments:
//    <EPTF_Logging_EventClassPrefixList> { "Warning", "Debug" }
///////////////////////////////////////////////////////////
const EPTF_Logging_EventClassPrefixList c_EPTF_DsRestAPI_loggingEventClasses := { "Warning", "Debug" };

///////////////////////////////////////////////////////////
//  Constant: cg_EPTF_DsRestAPI_loggingClassIdx_Warning
// 
//  Purpose:
//    logging class index for Warning
// 
//  Detailed Comments:
//    *0*
///////////////////////////////////////////////////////////
const integer cg_EPTF_DsRestAPI_loggingClassIdx_Warning := 0;

///////////////////////////////////////////////////////////
//  Constant: cg_EPTF_DsRestAPI_loggingClassIdx_Debug
// 
//  Purpose:
//    logging class index for Debug
// 
//  Detailed Comments:
//    *1*
///////////////////////////////////////////////////////////
const integer cg_EPTF_DsRestAPI_loggingClassIdx_Debug := 1;

///////////////////////////////////////////////////////////
//  Component: EPTF_DsRestAPI_CT
// 
//  Purpose:
//    The component that implements the EPTF DsRestAPI feature
// 
//  Elements:
//    v_EPTF_DsRestAPI_initialized - *boolean* - prevents multiple init by calling <f_EPTF_DsRestAPI_init_CT> several times
//    v_DsRestAPI_loggingMaskId - *integer* - logging component mask ID
//    v_EPTF_DsRestAPI_started - *boolean* - true if DsRestAPI HTTP server was launched by f_EPTF_DsRestAPI_start function
//    v_customApp_dir_symlink - *charstring* - stores the absolute path of symlink for App specific directory
//    v_API_dir_symlink - *charstring* - stores the absolute path of symlink for DsRestAPI API directory
//
//  Detailed Comments:
//   To use the any EPTF DsRestAPI Feature, extend your component with <EPTF_DsRestAPI_CT>
//
///////////////////////////////////////////////////////////
public type component EPTF_DsRestAPI_CT extends EPTF_DsRestAPI_HTTPServer_CT, EPTF_Base_CT, EPTF_Logging_CT, EPTF_DsRestAPI_Timeline_CT {
  private var boolean v_EPTF_DsRestAPI_initialized := false;
  private var integer v_DsRestAPI_loggingMaskId := c_EPTF_Logging_invalidMaskId;
  private var boolean v_EPTF_DsRestAPI_started := false;
  private var charstring v_config_symlink := "";
  private var charstring v_customApp_dir_symlink := "";
  private var charstring v_API_dir_symlink := "";
}

} // ~ module EPTF_CLL_DsRestAPI_Definitions
