class /HEC1/CL_CONFIG_ACT_DEL_HELPER definition
  public
  final
  create public .

public section.

  interfaces /HEC1/IF_BOPF_ACT_DEL_HELPER .
protected section.
private section.

  class-methods DELETE_ADDITIONAL_SERVICE
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_SOLUTION type /BOBF/T_FRW_KEY
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_APP_SERVER_INSTANCE
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_TIER type /HEC1/T_ACT_UPDATE_TIER
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_APP_SERV_PERF_CAT
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_APP_SERV_PC type /HEC1/T_ACT_UPDATE_APP_SERV_PC
      !ET_ACT_PARAM_APP_NODE type /BOBF/T_FRW_KEY
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_APP_STORAGE_AMOUNT
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_APP_STORAGE type /BOBF/T_FRW_KEY
      !ET_ACT_PARAM_APP_STORAGE_QTY type /HEC1/T_ACT_UPDATE_APP_STRGQTY
      !ET_ACT_PARAM_APP_SERV_PC type /HEC1/T_ACT_UPDATE_APP_SERV_PC
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_APP_STORAGE_BACKUP
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_APP_STORAGE type /BOBF/T_FRW_KEY
      !ET_ACT_PARAM_APP_BACKUP type /HEC1/T_ACT_UPDATE_APP_BACKUP
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_CONNECTIVITY
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_DATACENTER
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_DB_SERVER_INSTANCE
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_TIER type /HEC1/T_ACT_UPDATE_TIER
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_DB_SERV_PERF_CAT
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_DB_SERV_PC type /HEC1/T_ACT_UPDATE_DB_SERV_PC
      !ET_ACT_PARAM_DB_NODE type /BOBF/T_FRW_KEY
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_DB_STORAGE_AMOUNT
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_DB_STORAGE_QTY type /HEC1/T_ACT_UPDATE_DB_STRG_QTY
      !ET_ACT_PARAM_DB_STORAGE type /BOBF/T_FRW_KEY
      !ET_ACT_PARAM_DB_SERV_PC type /HEC1/T_ACT_UPDATE_DB_SERV_PC
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_DB_STORAGE_BACKUP
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_DB_STORAGE type /BOBF/T_FRW_KEY
      !ET_ACT_PARAM_DB_BACKUP type /HEC1/T_ACT_UPDATE_APP_BACKUP
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_INSTANCE_DB
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_TIER type /HEC1/T_ACT_UPDATE_TIER
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_NETWORK_SEGMENT
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_PHASE
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_PHASE type /HEC1/T_ACT_UPDATE_PHASE
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_SOLUTION
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods DELETE_TIER
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
      !IS_PARAMETERS type /HEC1/S_ACT_DELETE_NODE
    exporting
      !ET_ACT_PARAM_SOLUTION type /BOBF/T_FRW_KEY
    changing
      !CT_MODIFICATION type /BOBF/T_FRW_MODIFICATION .
  class-methods GET_CONTACT_NODES
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
    returning
      value(RT_CONTACT_REFERENCE) type /HEC1/T_DATA_CONTACT_REF_CT .
  class-methods GET_MULTITENANCY_NODES
    importing
      !IO_READ type ref to /BOBF/IF_FRW_READ
      !IT_ROOT_KEY type /BOBF/T_FRW_KEY
    exporting
      !ET_SOLUTION type /HEC1/T_DATA_SOLUTION_CT
      !ET_TIER type /HEC1/T_DATA_TIER_CT
      !ET_DB_SERVER_INSTANCE type /HEC1/T_DATA_DB_SERVER_INST_CT
      !ET_INSTANCE_DB type /HEC1/T_DATA_DB_INST_CT .
ENDCLASS.



CLASS /HEC1/CL_CONFIG_ACT_DEL_HELPER IMPLEMENTATION.


  METHOD /hec1/if_bopf_act_del_helper~delete_helper.

    DATA: lt_modification              TYPE /bobf/t_frw_modification,

          lt_root                      TYPE /hec1/t_config_root_ct,
          lr_act_param_phase           TYPE REF TO data,
          lr_act_param_tier            TYPE REF TO data,
          lr_act_param_db_serv_pc      TYPE REF TO data,
          lr_act_param_db_storage_qty  TYPE REF TO data,
          lr_act_param_db_backup       TYPE REF TO data,
          lr_act_param_app_serv_pc     TYPE REF TO data,
          lr_act_param_app_storage_qty TYPE REF TO data,
          lr_act_param_app_backup      TYPE REF TO data.

    FIELD-SYMBOLS:  <fs_parameters>      TYPE /hec1/s_act_delete_node.

    " ***************************************************************************
    " Process
    "  1) check for generated phases and add those to the delete table
    "  2) get data specific to the node
    "  3) run specific node logic
    " ***************************************************************************

    ASSIGN is_parameters->* TO <fs_parameters>.

    DATA(lv_node) = /hec1/cl_config_utilities=>get_node_key_by_object_type( iv_object_type = <fs_parameters>-node ).

    " Check for generated phases. Those phases need to be deleted with the objects
    "  Those objects are added to the modification table
    lt_modification = /hec1/cl_config_helper=>delete_generated_phases( iv_node_key         = is_ctx-node_key
                                                                       it_key              = it_key
                                                                       io_read             = io_read
                                                                       it_param_child_list = VALUE #( ( CORRESPONDING #( <fs_parameters> ) ) ) ).

    io_read->get_root_key( EXPORTING iv_node = is_ctx-node_key
                                     it_key  = it_key
                           IMPORTING et_target_key = DATA(lt_root_key) ).

    CASE lv_node.

      WHEN /hec1/if_configuration_c=>sc_node-phase.

        delete_phase( EXPORTING io_read            = io_read
                                it_root_key        = lt_root_key
                                is_parameters      = <fs_parameters>
                      IMPORTING et_act_param_phase = DATA(lt_act_param_phase)
                      CHANGING  ct_modification    = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-datacenter.

        delete_datacenter( EXPORTING io_read            = io_read
                                     it_root_key        = lt_root_key
                                     is_parameters      = <fs_parameters>
                           CHANGING  ct_modification    = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-network_segment.

        delete_network_segment( EXPORTING io_read            = io_read
                                          it_root_key        = lt_root_key
                                          is_parameters      = <fs_parameters>
                                CHANGING  ct_modification    = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-connectivity.

        delete_connectivity( EXPORTING io_read            = io_read
                                       it_root_key        = lt_root_key
                                       is_parameters      = <fs_parameters>
                             CHANGING  ct_modification    = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-add_service.

        delete_additional_service( EXPORTING io_read               = io_read
                                             it_root_key           = lt_root_key
                                             is_parameters         = <fs_parameters>
                                   IMPORTING et_act_param_solution = DATA(lt_act_param_solution)
                                   CHANGING  ct_modification       = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-solution.

        delete_solution( EXPORTING io_read            = io_read
                                   it_root_key        = lt_root_key
                                   is_parameters      = <fs_parameters>
                         CHANGING  ct_modification    = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-tier.

        delete_tier( EXPORTING io_read               = io_read
                               it_root_key           = lt_root_key
                               is_parameters         = <fs_parameters>
                     IMPORTING et_act_param_solution = lt_act_param_solution
                     CHANGING  ct_modification       = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-db_server_instance.

        delete_db_server_instance( EXPORTING io_read               = io_read
                                             it_root_key           = lt_root_key
                                             is_parameters         = <fs_parameters>
                                   IMPORTING et_act_param_tier     = DATA(lt_act_param_tier)
                                   CHANGING  ct_modification       = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-instance_db.

        delete_instance_db( EXPORTING io_read               = io_read
                                      it_root_key           = lt_root_key
                                      is_parameters         = <fs_parameters>
                            IMPORTING et_act_param_tier     = lt_act_param_tier
                            CHANGING  ct_modification       = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-db_server_perform_cat.

        delete_db_serv_perf_cat( EXPORTING io_read                 = io_read
                                           it_root_key             = lt_root_key
                                           is_parameters           = <fs_parameters>
                                 IMPORTING et_act_param_db_node    = DATA(lt_act_param_db_node)
                                           et_act_param_db_serv_pc = DATA(lt_act_param_db_serv_pc)
                                 CHANGING  ct_modification         = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-db_storage_amount.

        delete_db_storage_amount( EXPORTING io_read                     = io_read
                                            it_root_key                 = lt_root_key
                                            is_parameters               = <fs_parameters>
                                  IMPORTING et_act_param_db_serv_pc     = lt_act_param_db_serv_pc
                                            et_act_param_db_storage_qty = DATA(lt_act_param_db_storage_qty)
                                            et_act_param_db_storage     = DATA(lt_act_param_db_storage)
                                  CHANGING  ct_modification             = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-db_storage_backup.

        delete_db_storage_backup( EXPORTING io_read                     = io_read
                                            it_root_key                 = lt_root_key
                                            is_parameters               = <fs_parameters>
                                  IMPORTING et_act_param_db_storage     = lt_act_param_db_storage
                                            et_act_param_db_backup      = DATA(lt_act_param_db_backup)
                                  CHANGING  ct_modification             = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-app_server_instance.

        delete_app_server_instance( EXPORTING io_read                     = io_read
                                              it_root_key                 = lt_root_key
                                              is_parameters               = <fs_parameters>
                                    IMPORTING et_act_param_tier           = lt_act_param_tier
                                    CHANGING  ct_modification             = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-app_server_perform_cat.

        delete_app_serv_perf_cat( EXPORTING io_read                     = io_read
                                            it_root_key                 = lt_root_key
                                            is_parameters               = <fs_parameters>
                                  IMPORTING et_act_param_app_node       = DATA(lt_act_param_app_node)
                                            et_act_param_app_serv_pc    = DATA(lt_act_param_app_serv_pc)
                                  CHANGING  ct_modification             = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-app_storage_amount.

        delete_app_storage_amount( EXPORTING io_read                      = io_read
                                             it_root_key                  = lt_root_key
                                             is_parameters                = <fs_parameters>
                                   IMPORTING et_act_param_app_serv_pc     = lt_act_param_app_serv_pc
                                             et_act_param_app_storage_qty = DATA(lt_act_param_app_storage_qty)
                                             et_act_param_app_storage     = DATA(lt_act_param_app_storage)
                                   CHANGING  ct_modification              = lt_modification ).

      WHEN /hec1/if_configuration_c=>sc_node-app_storage_backup.

        delete_app_storage_backup( EXPORTING io_read                      = io_read
                                             it_root_key                  = lt_root_key
                                             is_parameters                = <fs_parameters>
                                   IMPORTING et_act_param_app_storage     = lt_act_param_app_storage
                                             et_act_param_app_backup      = DATA(lt_act_param_app_backup)
                                   CHANGING  ct_modification              = lt_modification ).

      WHEN OTHERS.

        " check if the selected node exists and if it can be deleted.
        io_read->retrieve( EXPORTING iv_node       = lv_node
                                     it_key        = VALUE #( ( key = <fs_parameters>-key ) )
                                     iv_fill_data  = abap_false
                           IMPORTING et_failed_key = DATA(lt_failed_key) ).

        IF lt_failed_key IS INITIAL.
          INSERT VALUE #( node        = lv_node
                          change_mode = /bobf/if_frw_c=>sc_modify_delete
                          key         = <fs_parameters>-key ) INTO TABLE lt_modification.
        ENDIF.

    ENDCASE.

    "-----------------------------------
    " Set Follow-Up to GENERAL - Phase
    "-----------------------------------
    IF lt_act_param_phase IS NOT INITIAL.
      lr_act_param_phase = NEW /hec1/t_act_update_phase( lt_act_param_phase ).

      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-phase )
          it_key          = CORRESPONDING #( lt_act_param_phase )
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_phase )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation
          ir_act_param    =  lr_act_param_phase ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - Solution
    "-----------------------------------
    IF lt_act_param_solution IS NOT INITIAL.
      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-solution )
          it_key          = lt_act_param_solution
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_solution )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - Tier
    "-----------------------------------
    IF lt_act_param_tier IS NOT INITIAL.
      lr_act_param_tier = NEW /hec1/t_act_update_tier( lt_act_param_tier ).

      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-tier )
          it_key          = VALUE #( FOR param_tier IN lt_act_param_tier
                                     ( key = param_tier-key ) )
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_tier )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation
          ir_act_param    = lr_act_param_tier ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - DB Node
    "-----------------------------------
    IF lt_act_param_db_node IS NOT INITIAL.
      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-db_node )
          it_key          = lt_act_param_db_node
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_db_node )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - DB Serv PC
    "-----------------------------------
    IF lt_act_param_db_serv_pc IS NOT INITIAL.
      lr_act_param_db_serv_pc = NEW /hec1/t_act_update_db_serv_pc( lt_act_param_db_serv_pc ).

      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-db_server_perform_cat )
          it_key          = VALUE #( FOR db_spc IN lt_act_param_db_serv_pc
                                   ( key = db_spc-key ) )
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_db_server_perf_cat )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation
          ir_act_param    = lr_act_param_db_serv_pc ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - DB Storage Qty
    "-----------------------------------
    IF lt_act_param_db_storage_qty IS NOT INITIAL.
      lr_act_param_db_storage_qty = NEW /hec1/t_act_update_db_strg_qty( lt_act_param_db_storage_qty ).

      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-db_storage_amount )
          it_key          = VALUE #( FOR db_strg_qty IN lt_act_param_db_storage_qty
                                   ( key = db_strg_qty-key ) )
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_db_storage_amount )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation
          ir_act_param    = lr_act_param_db_storage_qty ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - DB Storage
    "-----------------------------------
    IF lt_act_param_db_storage IS NOT INITIAL.
      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-db_storage )
          it_key          = lt_act_param_db_storage
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_db_storage )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - DB Storage Backup
    "-----------------------------------
    IF lt_act_param_db_backup IS NOT INITIAL.
      lr_act_param_db_backup = NEW /hec1/t_act_update_db_backup( lt_act_param_db_backup ).

      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-db_storage_backup )
          it_key          = VALUE #( FOR db_backup IN lt_act_param_db_backup
                                   ( key = db_backup-key ) )
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_db_storage_backup )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation
          ir_act_param    = lr_act_param_db_backup ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - App Node
    "-----------------------------------
    IF lt_act_param_app_node IS NOT INITIAL.
      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-app_node )
          it_key          = lt_act_param_app_node
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_app_node )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - App Serv PC
    "-----------------------------------
    IF lt_act_param_app_serv_pc IS NOT INITIAL.
      lr_act_param_app_serv_pc = NEW /hec1/t_act_update_app_serv_pc( lt_act_param_app_serv_pc ).

      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-app_server_perform_cat )
          it_key          = VALUE #( FOR app_spc IN lt_act_param_app_serv_pc
                                   ( key = app_spc-key ) )
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_app_server_perf_cat )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation
          ir_act_param    = lr_act_param_app_serv_pc ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - App Storage Qty
    "-----------------------------------
    IF lt_act_param_app_storage_qty IS NOT INITIAL.
      lr_act_param_app_storage_qty = NEW /hec1/t_act_update_app_strgqty( lt_act_param_app_storage_qty ).

      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-app_storage_amount )
          it_key          = VALUE #( FOR app_strg_qty IN lt_act_param_app_storage_qty
                                   ( key = app_strg_qty-key ) )
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_app_storage_amount )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation
          ir_act_param    = lr_act_param_app_storage_qty ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - App Storage
    "-----------------------------------
    IF lt_act_param_app_storage IS NOT INITIAL.
      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-app_storage )
          it_key          = lt_act_param_app_storage
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_app_storage )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation ).
    ENDIF.

    "-----------------------------------
    " Set Follow-Up to GENERAL - App Storage Backup
    "-----------------------------------
    IF lt_act_param_app_backup IS NOT INITIAL.
      lr_act_param_app_backup = NEW /hec1/t_act_update_app_backup( lt_act_param_app_backup ).

      /hec1/cl_config_det_general=>/hec1/if_config_det_general~set_act_node_keys(
          is_ctx          = VALUE #( BASE CORRESPONDING #( is_ctx )
                                     node_key = /hec1/if_configuration_c=>sc_node-app_storage_backup )
          it_key          = VALUE #( FOR app_backup IN lt_act_param_app_backup
                                   ( key = app_backup-key ) )
          iv_action       = /hec1/cl_config_det_general=>/hec1/if_config_det_general~get_act_key( /hec1/if_config_constant=>gc_act_method-update_app_storage_backup )
          iv_act_exectime = /bobf/if_conf_c=>sc_time_after_validation
          ir_act_param    = lr_act_param_app_backup ).
    ENDIF.

    "-----------------------------------
    " Execute Modification ( = Delete)
    "-----------------------------------
    IF lt_modification IS NOT INITIAL.
      io_modify->do_modify( lt_modification ).

      io_modify->end_modify( EXPORTING iv_process_immediately = abap_true
                             IMPORTING eo_message             = DATA(lo_message)
                                       eo_change              = DATA(lo_change)  ).
    ENDIF.

    " **************************************************************************************************************************************************
    " Attention!!!!!!
    " This is only a temporary solution, because this is
    " a mix between UI logic and BOPF logic. Normally no
    " UI logic has to be set into a BOPF object. But at
    " the moment there is the problem, that the Application
    " is not running with FBI, therefore we can't control
    " the tree about the FBI feeder class

    " Switch to FBI, this part can be deleted
    LOOP AT lt_modification INTO DATA(ls_modification).
      IF ls_modification-node = /hec1/if_configuration_c=>sc_node-phase.
        /hec1/cl_bopf_config_ui_tree_h=>get_instance( )->/hec1/if_bopf_config_ui_tree_h~delete( iv_tree_type = /hec1/if_config_constants=>gc_tree_type-phasing
                                                                                                iv_node_key  = ls_modification-key ).
      ELSE.
        /hec1/cl_bopf_config_ui_tree_h=>get_instance( )->/hec1/if_bopf_config_ui_tree_h~delete( iv_node_key = ls_modification-key ).
      ENDIF.
    ENDLOOP.


    CLEAR:    <fs_parameters>,
              lt_modification,
              lt_root.

  ENDMETHOD.


  METHOD delete_additional_service.

    DATA: lt_solution         TYPE /hec1/t_data_solution_ct,
          lt_tier             TYPE /hec1/t_data_tier_ct,
          lt_add_service      TYPE /hec1/t_data_add_services_ct,
          lt_tier_add_service TYPE /hec1/t_data_tier_add_serv_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-add_service.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_add_service ).

    " Get Tier Services
    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-root
                                                it_key         = it_root_key
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-root-solution
                                      IMPORTING et_data        = lt_solution
                                                et_target_key  = DATA(lt_solution_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-solution
                                                it_key         = lt_solution_key
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-solution-tier
                                      IMPORTING et_data        = lt_tier
                                                et_target_key  = DATA(lt_tier_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-tier
                                                it_key         = lt_tier_key
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-tier-tier_add_service
                                      IMPORTING et_target_key  = DATA(lt_tier_service_key)
                                                et_data        = lt_tier_add_service ).

    " Run Delete Logic

    " Add Node to Delete List
    TRY.
        DATA(ls_add_service) = lt_add_service[ 1 ].

        INSERT VALUE #( node = /hec1/if_configuration_c=>sc_node-add_service
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key  = ls_add_service-key ) INTO TABLE ct_modification.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " Add corresponding tier services to delete list
    LOOP AT lt_tier_add_service INTO DATA(ls_tier_add_service)
      WHERE hec_tas_service_ref_guid = ls_add_service-hec_node_service.

      INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-tier_add_service
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = ls_tier_add_service-key ) INTO TABLE ct_modification.
    ENDLOOP.

  ENDMETHOD.


  METHOD delete_app_server_instance.

    DATA: lt_app_serv_inst TYPE /hec1/t_data_app_serv_inst_ct,
          lt_db_storage    TYPE /hec1/t_data_db_storage_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-app_server_instance.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_app_serv_inst ).
    " Run Delete Logic
    " Add Node to Delete List
    TRY.
        DATA(ls_app_serv_inst) = lt_app_serv_inst[ 1 ].

        INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-app_server_instance
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key         = ls_app_serv_inst-key ) INTO TABLE ct_modification.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " Add Parent Node to Update List
    INSERT VALUE #( key           = ls_app_serv_inst-parent_key
                    do_update_qty = abap_true ) INTO TABLE et_act_param_tier.

  ENDMETHOD.


  METHOD delete_app_serv_perf_cat.

    DATA: lt_app_serv_pc     TYPE /hec1/t_data_app_serv_pc_ct,
          lt_app_serv_pc_all TYPE /hec1/t_data_app_serv_pc_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-app_server_perform_cat.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_app_serv_pc ).

    io_read->retrieve_by_association( EXPORTING iv_node        = lv_node
                                                it_key         = VALUE #( ( key = is_parameters-key ) )
                                                iv_association = /hec1/if_configuration_c=>sc_association-app_server_perform_cat-to_parent
                                      IMPORTING et_target_key  = DATA(lt_app_node_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-app_node
                                                it_key         = lt_app_node_key
                                                iv_association = /hec1/if_configuration_c=>sc_association-app_node-app_server_perform_cat
                                                iv_fill_data   = abap_true
                                      IMPORTING et_data        = lt_app_serv_pc_all ).
    " Run Delete Logic

    " Add Node to Delete List
    TRY.
        DATA(ls_app_serv_pc) = lt_app_serv_pc[ 1 ].

        INSERT VALUE #( node = /hec1/if_configuration_c=>sc_node-app_server_perform_cat
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key  = ls_app_serv_pc-key ) INTO TABLE ct_modification.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " Add Parent Node to Update List
    INSERT VALUE #( key  = ls_app_serv_pc-parent_key ) INTO TABLE et_act_param_app_node.

    " the Phasing needs to be adjusted for the predecessor and ALL successors

    " modify predecessor
    TRY.
        DATA(ls_app_serv_pc_pred) = lt_app_serv_pc_all[ key = ls_app_serv_pc-hec_predecessor_guid ].

        INSERT VALUE #( key        = ls_app_serv_pc_pred-key
                        parent_key = ls_app_serv_pc_pred-parent_key
                        do_clear_phasing    = abap_true
                        ) INTO TABLE et_act_param_app_serv_pc.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    DATA(ls_app_serv_pc_succ) = ls_app_serv_pc.

    " modify successors
    TRY.
        DO.
          ls_app_serv_pc_succ = lt_app_serv_pc_all[ key = ls_app_serv_pc_succ-hec_successor_guid ].

          INSERT VALUE #( key        = ls_app_serv_pc_succ-key
                          parent_key = ls_app_serv_pc_succ-parent_key
                          do_clear_phasing    = abap_true
                          ) INTO TABLE et_act_param_app_serv_pc.
        ENDDO.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

  ENDMETHOD.


  METHOD delete_app_storage_amount.

    DATA: lt_app_storage_qty     TYPE /hec1/t_data_app_storageqty_ct,
          lt_app_storage_qty_all TYPE /hec1/t_data_app_storageqty_ct,
          lt_app_serv_pc         TYPE /hec1/t_data_app_serv_pc_ct,
          lt_app_serv_pc_all     TYPE /hec1/t_data_app_serv_pc_ct,
          lt_app_storage         TYPE /hec1/t_data_app_storage_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-app_storage_amount.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_app_storage_qty ).

    io_read->retrieve_by_association( EXPORTING iv_node        = lv_node
                                                it_key         = VALUE #( ( key = is_parameters-key ) )
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-app_storage_amount-to_parent
                                      IMPORTING et_target_key  = DATA(lt_app_serv_pc_key)
                                                et_data        = lt_app_serv_pc ).
    " Get all storage amounts
    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-app_server_perform_cat
                                                it_key         = lt_app_serv_pc_key
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-app_server_perform_cat-app_storage_amount
                                      IMPORTING et_data        = lt_app_storage_qty_all ).

    " Get server
    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-app_server_perform_cat
                                                it_key         = lt_app_serv_pc_key
                                                iv_association = /hec1/if_configuration_c=>sc_association-app_server_perform_cat-app_server
                                      IMPORTING et_target_key  = DATA(lt_app_server_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-app_server
                                                it_key         = lt_app_server_key
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-app_server-app_storage
                                      IMPORTING et_data        = lt_app_storage ).
    " Run Delete Logic
    " Add Node to Delete List
    TRY.
        DATA(ls_app_storage_qty) = lt_app_storage_qty[ 1 ].

        INSERT VALUE #( node = /hec1/if_configuration_c=>sc_node-app_storage_amount
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key  = ls_app_storage_qty-key ) INTO TABLE ct_modification.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " Get corresponding storage node
    LOOP AT lt_app_storage INTO DATA(ls_app_storage).
      " add to general parameters
      IF ls_app_storage-hec_storage_qty_ref_guid = ls_app_storage_qty-hec_node_app_storage_qty.
        "Add Storage to delete table
        INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-app_storage
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key         = ls_app_storage-key ) INTO TABLE ct_modification.
      ELSE.
        INSERT VALUE #( key  = ls_app_storage-key ) INTO TABLE et_act_param_app_storage.
      ENDIF.
    ENDLOOP.

    " Add Parent Node to Update List
    TRY.
        DATA(ls_app_serv_pc) = lt_app_serv_pc[ key = ls_app_storage_qty-parent_key ].

        INSERT VALUE #( key          = ls_app_serv_pc-key
                        parent_key   = ls_app_serv_pc-parent_key
                        do_update_storage_qty = abap_true
                        ) INTO TABLE et_act_param_app_serv_pc.

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " the Phasing needs to be adjusted for the predecessor and ALL successors

    " modify predecessor
    TRY.
        DATA(ls_app_storage_qty_pred) = lt_app_storage_qty_all[ key = ls_app_storage_qty-hec_predecessor_guid ].

        INSERT VALUE #( key              = ls_app_storage_qty_pred-key
                        parent_key       = ls_app_storage_qty_pred-parent_key
                        do_clear_phasing = abap_true
                        ) INTO TABLE et_act_param_app_storage_qty.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    DATA(ls_app_storage_qty_succ) = ls_app_storage_qty.

    " modify successors
    TRY.
        DO.
          ls_app_storage_qty_succ = lt_app_storage_qty_all[ key = ls_app_storage_qty_succ-hec_successor_guid ].

          INSERT VALUE #( key              = ls_app_storage_qty_succ-key
                          parent_key       = ls_app_storage_qty_succ-parent_key
                          do_clear_phasing = abap_true
                          ) INTO TABLE et_act_param_app_storage_qty.
        ENDDO.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

  ENDMETHOD.


  METHOD delete_app_storage_backup.

    DATA: lt_app_backup     TYPE /hec1/t_data_app_backup_ct,
          lt_app_backup_all TYPE /hec1/t_data_app_backup_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-app_storage_backup.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_app_backup ).

    io_read->retrieve_by_association( EXPORTING iv_node        = lv_node
                                                it_key         = VALUE #( ( key = is_parameters-key ) )
                                                iv_association = /hec1/if_configuration_c=>sc_association-app_storage_backup-to_parent
                                      IMPORTING et_target_key  = DATA(lt_app_storage_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-app_storage
                                                it_key         = lt_app_storage_key
                                                iv_association = /hec1/if_configuration_c=>sc_association-app_storage-app_storage_backup
                                                iv_fill_data   = abap_true
                                      IMPORTING et_data        = lt_app_backup_all ).

    " Run Delete Logic

    " Add Node to Delete List
    TRY.
        DATA(ls_app_backup) = lt_app_backup[ 1 ].

        INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-app_storage_backup
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key         = ls_app_backup-key ) INTO TABLE ct_modification.

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " Add Parent Node to Update List
    INSERT VALUE #( key  = ls_app_backup-parent_key ) INTO TABLE et_act_param_app_storage.

    " the Phasing needs to be adjusted for the predecessor and ALL successors

    " modify predecessor
    TRY.
        DATA(ls_app_backup_pred) = lt_app_backup_all[ key = ls_app_backup-hec_predecessor_guid ].

        INSERT VALUE #( key        = ls_app_backup_pred-key
                        parent_key = ls_app_backup_pred-parent_key
                        do_clear_phasing    = abap_true
                        ) INTO TABLE et_act_param_app_backup.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    DATA(ls_app_backup_succ) = ls_app_backup.

    " modify successors
    TRY.
        DO.
          ls_app_backup_succ = lt_app_backup_all[ key = ls_app_backup_succ-hec_successor_guid ].

          INSERT VALUE #( key        = ls_app_backup_succ-key
                          parent_key = ls_app_backup_succ-parent_key
                          do_clear_phasing    = abap_true
                          ) INTO TABLE et_act_param_app_backup.
        ENDDO.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

  ENDMETHOD.


  METHOD delete_connectivity.

    DATA: lt_connectivity    TYPE /hec1/t_data_connectivity_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-connectivity.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_connectivity ).

    " Get Contacts
    DATA(lt_contact_reference) = get_contact_nodes( io_read     = io_read
                                                    it_root_key = it_root_key ).

    " Run Delete Logic
    LOOP AT VALUE /bobf/t_frw_key( FOR conn     IN lt_connectivity
                                   FOR cont_ref IN lt_contact_reference WHERE ( hec_contact_ref_node_key = conn-hec_node_connectivity )
                                   ( key = cont_ref-key ) ) INTO DATA(ls_key).

      INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-contact_reference
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = ls_key-key ) INTO TABLE ct_modification.

    ENDLOOP.

    " add the current selection to delete
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                                 iv_fill_data  = abap_false
                       IMPORTING et_failed_key = DATA(lt_failed_key) ).

    IF lt_failed_key IS INITIAL.
      INSERT VALUE #( node        = lv_node
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = is_parameters-key ) INTO TABLE ct_modification.
    ENDIF.

  ENDMETHOD.


  METHOD delete_datacenter.

    DATA: lt_datacenter      TYPE /hec1/t_data_datacenter_ct,
          lt_inf_baseline    TYPE /hec1/t_data_if_baseline_ct,
          lt_network_segment TYPE /hec1/t_data_network_segm_ct,
          lt_connectivity    TYPE /hec1/t_data_connectivity_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-datacenter.

    " Get Data
    io_read->retrieve( EXPORTING iv_node        = lv_node
                                 it_key         = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data        = lt_datacenter ).

    io_read->retrieve_by_association( EXPORTING iv_node         = lv_node
                                                it_key          = VALUE #( ( key = is_parameters-key ) )
                                                iv_association  = /hec1/if_configuration_c=>sc_association-datacenter-infrastructure_baseline
                                      IMPORTING et_target_key   = DATA(lt_if_baseline_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node         = /hec1/if_configuration_c=>sc_node-infrastructure_baseline
                                                it_key          = lt_if_baseline_key
                                                iv_fill_data    = abap_true
                                                iv_association  = /hec1/if_configuration_c=>sc_association-infrastructure_baseline-network_segment
                                      IMPORTING et_data         = lt_network_segment ).

    io_read->retrieve_by_association( EXPORTING iv_node         = lv_node
                                                it_key          = VALUE #( ( key = is_parameters-key ) )
                                                iv_fill_data    = abap_true
                                                iv_association  = /hec1/if_configuration_c=>sc_association-datacenter-connectivity
                                      IMPORTING et_data         = lt_connectivity ).

    " Get Contacts
    DATA(lt_contact_reference) = get_contact_nodes( io_read     = io_read
                                                    it_root_key = it_root_key ).

    " Run Delete Logic
    LOOP AT VALUE /bobf/t_frw_key( FOR conn     IN lt_connectivity
                                   FOR cont_ref IN lt_contact_reference WHERE ( hec_contact_ref_node_key = conn-hec_node_connectivity )
                                   ( key = cont_ref-key ) ) INTO DATA(ls_key).

      INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-contact_reference
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = ls_key-key ) INTO TABLE ct_modification.

    ENDLOOP.

    LOOP AT VALUE /bobf/t_frw_key( FOR nw_segm  IN lt_network_segment
                                   FOR cont_ref IN lt_contact_reference WHERE ( hec_contact_ref_node_key = nw_segm-hec_node_network_segment )
                                   ( key = cont_ref-key ) ) INTO ls_key.

      INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-contact_reference
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = ls_key-key ) INTO TABLE ct_modification.

    ENDLOOP.

    " add the current selection to delete
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                                 iv_fill_data  = abap_false
                       IMPORTING et_failed_key = DATA(lt_failed_key) ).

    IF lt_failed_key IS INITIAL.
      INSERT VALUE #( node        = lv_node
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = is_parameters-key ) INTO TABLE ct_modification.
    ENDIF.

    CLEAR: lt_datacenter,
           lt_contact_reference,
           lt_connectivity,
           lt_inf_baseline,
           lt_network_segment.

  ENDMETHOD.


  METHOD delete_db_server_instance.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-db_server_instance.

    " Get Data

    " Get Multitenancy nodes
    get_multitenancy_nodes( EXPORTING io_read               = io_read
                                      it_root_key           = it_root_key
                            IMPORTING et_solution           = DATA(lt_solution_all)
                                      et_tier               = DATA(lt_tier_all)
                                      et_db_server_instance = DATA(lt_db_serv_inst_all)
                                      et_instance_db        = DATA(lt_inst_db_all) ).

    " Get Contacts
    DATA(lt_contact_reference) = get_contact_nodes( io_read     = io_read
                                                    it_root_key = it_root_key ).

    " Run Delete Logic

    " Add Node to Delete List
    TRY.
        DATA(ls_db_serv_inst) = lt_db_serv_inst_all[ key = is_parameters-key ].

        INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-db_server_instance
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key         = ls_db_serv_inst-key ) INTO TABLE ct_modification.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " Add Parent Node to Update List
    INSERT VALUE #( key           = ls_db_serv_inst-parent_key
                    do_update_qty = abap_true ) INTO TABLE et_act_param_tier.

    " TODO: Multitenancy

  ENDMETHOD.


  METHOD delete_db_serv_perf_cat.

    DATA: lt_db_serv_pc     TYPE /hec1/t_data_db_serv_pc_ct,
          lt_db_serv_pc_all TYPE /hec1/t_data_db_serv_pc_ct,
          lt_db_node        TYPE /hec1/t_data_db_node_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-db_server_perform_cat.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_db_serv_pc ).

    io_read->retrieve_by_association( EXPORTING iv_node        = lv_node
                                                it_key         = VALUE #( ( key = is_parameters-key ) )
                                                iv_association = /hec1/if_configuration_c=>sc_association-db_server_perform_cat-to_parent
                                      IMPORTING et_target_key  = DATA(lt_db_node_key)
                                                et_data        = lt_db_node ).

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-db_node
                                                it_key         = lt_db_node_key
                                                iv_association = /hec1/if_configuration_c=>sc_association-db_node-db_server_perform_cat
                                                iv_fill_data   = abap_true
                                      IMPORTING et_data        = lt_db_serv_pc_all ).

    " Run Delete Logic

    " Add Node to Delete List
    TRY.
        DATA(ls_db_serv_pc) = lt_db_serv_pc[ key = is_parameters-key ].

        INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-db_server_perform_cat
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key         = ls_db_serv_pc-key ) INTO TABLE ct_modification.

        " Add Parent Node to Update List
        INSERT VALUE #( key  = ls_db_serv_pc-parent_key ) INTO TABLE et_act_param_db_node.

        " ********************************
        " Adjust Phasing
        " ********************************
        " the Phasing needs to be cleared for the predecessor and ALL successors

        " modify predecessor
        TRY.
            DATA(ls_db_serv_pc_pred) = lt_db_serv_pc_all[ key = ls_db_serv_pc-hec_predecessor_guid ].

            INSERT VALUE #( key              = ls_db_serv_pc_pred-key
                            parent_key       = ls_db_serv_pc_pred-parent_key
                            do_clear_phasing = abap_true
                            ) INTO TABLE et_act_param_db_serv_pc.
          CATCH cx_sy_itab_line_not_found.
        ENDTRY.

        DATA(ls_db_serv_pc_succ) = ls_db_serv_pc.

        " modify successors
        TRY.
            DO.
              ls_db_serv_pc_succ = lt_db_serv_pc_all[ key = ls_db_serv_pc_succ-hec_successor_guid ].

              INSERT VALUE #( key              = ls_db_serv_pc_succ-key
                              parent_key       = ls_db_serv_pc_succ-parent_key
                              do_clear_phasing = abap_true
                              ) INTO TABLE et_act_param_db_serv_pc.
            ENDDO.
          CATCH cx_sy_itab_line_not_found.
        ENDTRY.

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

  ENDMETHOD.


  METHOD delete_db_storage_amount.

    DATA: lt_db_serv_pc         TYPE /hec1/t_data_db_serv_pc_ct,
          lt_db_serv_pc_all     TYPE /hec1/t_data_db_serv_pc_ct,
          lt_db_storage_qty     TYPE /hec1/t_data_db_storage_qty_ct,
          lt_db_storage_qty_all TYPE /hec1/t_data_db_storage_qty_ct,
          lt_db_storage         TYPE /hec1/t_data_db_storage_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-db_storage_amount.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_db_storage_qty ).

    io_read->retrieve_by_association( EXPORTING iv_node        = lv_node
                                                it_key         = VALUE #( ( key = is_parameters-key ) )
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-db_storage_amount-to_parent
                                      IMPORTING et_target_key  = DATA(lt_db_serv_pc_key)
                                                et_data        = lt_db_serv_pc ).

    " Get all storage amounts
    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-db_server_perform_cat
                                                it_key         = lt_db_serv_pc_key
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-db_server_perform_cat-db_storage_amount
                                      IMPORTING et_data        = lt_db_storage_qty_all ).

    " Get Server
    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-db_server_perform_cat
                                                it_key         = lt_db_serv_pc_key
                                                iv_association = /hec1/if_configuration_c=>sc_association-db_server_perform_cat-db_server
                                      IMPORTING et_target_key  = DATA(lt_db_server_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-db_server
                                                it_key         = lt_db_server_key
                                                iv_fill_data   = abap_true
                                                iv_association = /hec1/if_configuration_c=>sc_association-db_server-db_storage
                                      IMPORTING et_data        = lt_db_storage ).

    " Run Delete Logic
    " Add Node to Delete List
    TRY.
        DATA(ls_db_storage_qty) = lt_db_storage_qty[ 1 ].

        INSERT VALUE #( node = /hec1/if_configuration_c=>sc_node-db_storage_amount
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key  = ls_db_storage_qty-key ) INTO TABLE ct_modification.

        " Get corresponding storage node
        LOOP AT lt_db_storage INTO DATA(ls_db_storage).
          " add to general parameters
          IF ls_db_storage-hec_storage_qty_ref_guid = ls_db_storage_qty-hec_node_db_storage_qty.
            "Add Storage to delete table
            INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-app_storage
                            change_mode = /bobf/if_frw_c=>sc_modify_delete
                            key         = ls_db_storage-key ) INTO TABLE ct_modification.
          ELSE.
            INSERT VALUE #( key  = ls_db_storage-key ) INTO TABLE et_act_param_db_storage.
          ENDIF.
        ENDLOOP.

        " Add Parent Node to Update List
        TRY.
            DATA(ls_db_serv_pc) = lt_db_serv_pc[ key = ls_db_storage_qty-parent_key ].

            INSERT VALUE #( key                   = ls_db_serv_pc-key
                            parent_key            = ls_db_serv_pc-parent_key
                            do_update_storage_qty = abap_true
                            ) INTO TABLE et_act_param_db_serv_pc.

          CATCH cx_sy_itab_line_not_found.
        ENDTRY.

        " the Phasing needs to be adjusted for the predecessor and ALL successors

        " modify predecessor
        TRY.
            DATA(ls_db_storage_qty_pred) = lt_db_storage_qty_all[ key = ls_db_storage_qty-hec_predecessor_guid ].

            INSERT VALUE #( key              = ls_db_storage_qty_pred-key
                            parent_key       = ls_db_storage_qty_pred-parent_key
                            do_clear_phasing = abap_true
                            ) INTO TABLE et_act_param_db_storage_qty.
          CATCH cx_sy_itab_line_not_found.
        ENDTRY.

        DATA(ls_db_storage_qty_succ) = ls_db_storage_qty.

        " modify successors
        TRY.
            DO.
              ls_db_storage_qty_succ = lt_db_storage_qty_all[ key = ls_db_storage_qty_succ-hec_successor_guid ].

              INSERT VALUE #( key              = ls_db_storage_qty_succ-key
                              parent_key       = ls_db_storage_qty_succ-parent_key
                              do_clear_phasing = abap_true
                              ) INTO TABLE et_act_param_db_storage_qty.
            ENDDO.
          CATCH cx_sy_itab_line_not_found.
        ENDTRY.

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

  ENDMETHOD.


  METHOD delete_db_storage_backup.

    DATA: lt_db_backup     TYPE /hec1/t_data_db_backup_ct,
          lt_db_backup_all TYPE /hec1/t_data_db_backup_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-db_storage_backup.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_db_backup ).

    io_read->retrieve_by_association( EXPORTING iv_node        = lv_node
                                                it_key         = VALUE #( ( key = is_parameters-key ) )
                                                iv_association = /hec1/if_configuration_c=>sc_association-db_storage_backup-to_parent
                                      IMPORTING et_target_key  = DATA(lt_db_storage_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-db_storage
                                                it_key         = lt_db_storage_key
                                                iv_association = /hec1/if_configuration_c=>sc_association-db_storage-db_storage_backup
                                                iv_fill_data   = abap_true
                                      IMPORTING et_data        = lt_db_backup_all ).

    " Run Delete Logic

    " Add Node to Delete List
    TRY.
        DATA(ls_db_backup) = lt_db_backup[ 1 ].

        INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-db_storage_backup
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key         = ls_db_backup-key ) INTO TABLE ct_modification.

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " Add Parent Node to Update List
    INSERT VALUE #( key  = ls_db_backup-parent_key ) INTO TABLE et_act_param_db_storage.

    " the Phasing needs to be adjusted for the predecessor and ALL successors

    " modify predecessor
    TRY.
        DATA(ls_db_backup_pred) = lt_db_backup_all[ key = ls_db_backup-hec_predecessor_guid ].

        INSERT VALUE #( key        = ls_db_backup_pred-key
                        parent_key = ls_db_backup_pred-parent_key
                        do_clear_phasing    = abap_true
                        ) INTO TABLE et_act_param_db_backup.

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    DATA(ls_db_backup_succ) = ls_db_backup.

    " modify successors
    TRY.
        DO.
          ls_db_backup_succ = lt_db_backup_all[ key = ls_db_backup_succ-hec_successor_guid ].

          INSERT VALUE #( key                 = ls_db_backup_succ-key
                          parent_key          = ls_db_backup_succ-parent_key
                          do_clear_phasing    = abap_true
                          ) INTO TABLE et_act_param_db_backup.
        ENDDO.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

  ENDMETHOD.


  METHOD delete_instance_db.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-instance_db.

    " Get Data

    " Get Multitenancy nodes
    get_multitenancy_nodes( EXPORTING io_read               = io_read
                                      it_root_key           = it_root_key
                            IMPORTING et_solution           = DATA(lt_solution_all)
                                      et_tier               = DATA(lt_tier_all)
                                      et_db_server_instance = DATA(lt_db_serv_inst_all)
                                      et_instance_db        = DATA(lt_inst_db_all) ).

    " Get Contacts
    DATA(lt_contact_reference) = get_contact_nodes( io_read     = io_read
                                                    it_root_key = it_root_key ).

    " Run Delete Logic
    " Add Node to Delete List
    TRY.
        DATA(ls_instance_db) = lt_inst_db_all[ 1 ].

        INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-instance_db
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key         = ls_instance_db-key ) INTO TABLE ct_modification.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " TODO Multitenancy

  ENDMETHOD.


  METHOD delete_network_segment.

    DATA: lt_network_segment TYPE /hec1/t_data_network_segm_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-network_segment.

    " Get Data
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                       IMPORTING et_data       = lt_network_segment ).

    " Get Contacts
    DATA(lt_contact_reference) = get_contact_nodes( io_read     = io_read
                                                    it_root_key = it_root_key ).

    " Run Delete Logic
    LOOP AT VALUE /bobf/t_frw_key( FOR nw_segm  IN lt_network_segment
                                   FOR cont_ref IN lt_contact_reference WHERE ( hec_contact_ref_node_key = nw_segm-hec_node_network_segment )
                                   ( key = cont_ref-key ) ) INTO DATA(ls_key).

      INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-contact_reference
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = ls_key-key ) INTO TABLE ct_modification.

    ENDLOOP.

    " add the current selection to delete
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                                 iv_fill_data  = abap_false
                       IMPORTING et_failed_key = DATA(lt_failed_key) ).

    IF lt_failed_key IS INITIAL.
      INSERT VALUE #( node        = lv_node
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = is_parameters-key ) INTO TABLE ct_modification.
    ENDIF.

  ENDMETHOD.


  METHOD delete_phase.

    DATA: lt_phase TYPE /hec1/t_data_phase_ct.

    io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-root
                                                it_key         = it_root_key
                                                iv_association = /hec1/if_configuration_c=>sc_association-root-phase
                                                iv_fill_data   = abap_true
                                      IMPORTING et_data        = lt_phase ).

    TRY.
        DATA(ls_phase) = lt_phase[ key = is_parameters-key ].

        INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-phase
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key         = ls_phase-key )
                        INTO TABLE ct_modification.

        IF ls_phase-hec_phase_predecessor_guid IS NOT INITIAL.
          " Add Predecessor Phase to Update List
          INSERT VALUE #( key              = lt_phase[ key = ls_phase-hec_phase_predecessor_guid ]-key
                          do_clear_phasing = abap_true
                          ) INTO TABLE et_act_param_phase.
        ENDIF.

        IF ls_phase-hec_phase_successor_guid IS NOT INITIAL.
          DO.
            ls_phase = lt_phase[ key = ls_phase-hec_phase_successor_guid ].

            INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-phase
                            change_mode = /bobf/if_frw_c=>sc_modify_delete
                            key         = ls_phase-key )
                            INTO TABLE ct_modification.
          ENDDO.
        ENDIF.

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    CLEAR: lt_phase,
           ls_phase.

  ENDMETHOD.


  METHOD delete_solution.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-solution.

    " Get Data

    " Get Multitenancy nodes
    get_multitenancy_nodes( EXPORTING io_read               = io_read
                                      it_root_key           = it_root_key
                            IMPORTING et_solution           = DATA(lt_solution_all)
                                      et_tier               = DATA(lt_tier_all)
                                      et_db_server_instance = DATA(lt_db_serv_inst_all)
                                      et_instance_db        = DATA(lt_inst_db_all) ).

    " Get Contacts
    DATA(lt_contact_reference) = get_contact_nodes( io_read     = io_read
                                                    it_root_key = it_root_key ).

    " Run Delete Logic

    " add tier-contacts to delete list
    " Tier-Contacts are not located under the tier, but only contain a reference to the tier!!
    LOOP AT VALUE /bobf/t_frw_key( FOR tier     IN lt_tier_all WHERE ( parent_key = is_parameters-key )
                                   FOR cont_ref IN lt_contact_reference WHERE ( hec_contact_ref_node_key = tier-hec_node_tier )
                                   ( key = cont_ref-key ) ) INTO DATA(ls_key).

      INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-contact_reference
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = ls_key-key ) INTO TABLE ct_modification.

    ENDLOOP.

    " add the current selection to delete
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                                 iv_fill_data  = abap_false
                       IMPORTING et_failed_key = DATA(lt_failed_key) ).

    IF lt_failed_key IS INITIAL.
      INSERT VALUE #( node        = lv_node
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = is_parameters-key ) INTO TABLE ct_modification.
    ENDIF.

  ENDMETHOD.


  METHOD delete_tier.

    DATA: lt_connectivity    TYPE /hec1/t_data_connectivity_ct.

    DATA(lv_node) = /hec1/if_configuration_c=>sc_node-tier.

    " Get Data

    " Get Multitenancy nodes
    get_multitenancy_nodes( EXPORTING io_read               = io_read
                                      it_root_key           = it_root_key
                            IMPORTING et_solution           = DATA(lt_solution_all)
                                      et_tier               = DATA(lt_tier_all)
                                      et_db_server_instance = DATA(lt_db_serv_inst_all)
                                      et_instance_db        = DATA(lt_inst_db_all) ).

    " Get Contacts
    DATA(lt_contact_reference) = get_contact_nodes( io_read     = io_read
                                                    it_root_key = it_root_key ).

    " Run Delete Logic

    " add tier-contacts to delete list
    " Tier-Contacts are not located under the tier, but only contain a reference to the tier!!
    LOOP AT VALUE /bobf/t_frw_key( FOR tier     IN lt_tier_all WHERE ( key = is_parameters-key )
                                   FOR cont_ref IN lt_contact_reference WHERE ( hec_contact_ref_node_key = tier-hec_node_tier )
                                   ( key = cont_ref-key ) ) INTO DATA(ls_key).

      INSERT VALUE #( node        = /hec1/if_configuration_c=>sc_node-contact_reference
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = ls_key-key ) INTO TABLE ct_modification.

    ENDLOOP.

    " Get node that needs to be deleted
    TRY.
        DATA(ls_tier) = lt_tier_all[ key = is_parameters-key ].

        INSERT VALUE #( node = /hec1/if_configuration_c=>sc_node-tier
                        change_mode = /bobf/if_frw_c=>sc_modify_delete
                        key  = ls_tier-key ) INTO TABLE ct_modification.

        " 1. Delete Related Tier
        IF ls_tier-hec_related_stack_guid IS NOT INITIAL.
          io_read->retrieve_by_association( EXPORTING iv_node        = /hec1/if_configuration_c=>sc_node-solution
                                                      it_key         = VALUE #( ( key = ls_tier-parent_key ) )
                                                      iv_fill_data   = abap_true
                                                      iv_association = /hec1/if_configuration_c=>sc_association-solution-tier
                                            IMPORTING et_data        = lt_tier_all ).

          LOOP AT lt_tier_all ASSIGNING FIELD-SYMBOL(<fs_tier_all>)
            WHERE hec_related_stack_guid = ls_tier-hec_related_stack_guid.

            INSERT VALUE #( node = /hec1/if_configuration_c=>sc_node-tier
                            change_mode = /bobf/if_frw_c=>sc_modify_delete
                            key  = <fs_tier_all>-key ) INTO TABLE ct_modification.

          ENDLOOP.

        ENDIF. "related stack guid not initial.

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    " Add Parent Node to Update List
    INSERT VALUE #( key  = ls_tier-parent_key ) INTO TABLE et_act_param_solution.

    " add the current selection to delete
    io_read->retrieve( EXPORTING iv_node       = lv_node
                                 it_key        = VALUE #( ( key = is_parameters-key ) )
                                 iv_fill_data  = abap_false
                       IMPORTING et_failed_key = data(lt_failed_key) ).

    IF lt_failed_key IS INITIAL.
      INSERT VALUE #( node        = lv_node
                      change_mode = /bobf/if_frw_c=>sc_modify_delete
                      key         = is_parameters-key ) INTO TABLE ct_modification.
    ENDIF.

  ENDMETHOD.


  METHOD get_contact_nodes.

    io_read->retrieve_by_association( EXPORTING iv_node         = /hec1/if_configuration_c=>sc_node-root
                                                it_key          = it_root_key
                                                iv_association  = /hec1/if_configuration_c=>sc_association-root-contact
                                      IMPORTING et_target_key   = DATA(lt_contact_key) ).

    io_read->retrieve_by_association( EXPORTING iv_node         = /hec1/if_configuration_c=>sc_node-contact
                                                it_key          = lt_contact_key
                                                iv_fill_data    = abap_true
                                                iv_association  = /hec1/if_configuration_c=>sc_association-contact-contact_reference
                                      IMPORTING et_data         = rt_contact_reference ).

  ENDMETHOD.


  METHOD get_multitenancy_nodes.

    "all solutions (needed for multitenancy)
    io_read->retrieve_by_association( EXPORTING iv_node         = /hec1/if_configuration_c=>sc_node-root
                                                it_key          = it_root_key
                                                iv_fill_data    = abap_true
                                                iv_association  = /hec1/if_configuration_c=>sc_association-root-solution
                                      IMPORTING et_data         = et_solution
                                                et_target_key   = DATA(lt_solution_key) ).
    "all tiers
    io_read->retrieve_by_association( EXPORTING iv_node         = /hec1/if_configuration_c=>sc_node-solution
                                                it_key          = lt_solution_key
                                                iv_fill_data    = abap_true
                                                iv_association  = /hec1/if_configuration_c=>sc_association-solution-tier
                                      IMPORTING et_data         = et_tier
                                                et_target_key   = DATA(lt_tier_key) ).

    "all DB Server Instance
    io_read->retrieve_by_association( EXPORTING iv_node         = /hec1/if_configuration_c=>sc_node-tier
                                                it_key          = lt_tier_key
                                                iv_fill_data    = abap_true
                                                iv_association  = /hec1/if_configuration_c=>sc_association-tier-db_server_instance
                                      IMPORTING et_data         = et_db_server_instance
                                                et_target_key   = DATA(lt_db_si_key) ).

    "all Instance DBs
    io_read->retrieve_by_association( EXPORTING iv_node         = /hec1/if_configuration_c=>sc_node-db_server_instance
                                                it_key          = lt_db_si_key
                                                iv_fill_data    = abap_true
                                                iv_association  = /hec1/if_configuration_c=>sc_association-db_server_instance-instance_db
                                      IMPORTING et_data         = et_instance_db ).

  ENDMETHOD.
ENDCLASS.
