CLASS lcl_mapping_fields IMPLEMENTATION. "DEPRECATED METHOD constructor. DATA ls_mapping_field LIKE LINE OF mt_mapping_fields. LOOP AT it_mapping_fields INTO ls_mapping_field. ls_mapping_field-abap = to_upper( ls_mapping_field-abap ). INSERT ls_mapping_field INTO TABLE mt_mapping_fields. ENDLOOP. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_abap. DATA ls_mapping_field LIKE LINE OF mt_mapping_fields. READ TABLE mt_mapping_fields INTO ls_mapping_field WITH KEY json COMPONENTS json = iv_name. IF sy-subrc = 0. rv_result = ls_mapping_field-abap. ENDIF. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_json. DATA lv_field TYPE string. DATA ls_mapping_field LIKE LINE OF mt_mapping_fields. lv_field = to_upper( iv_name ). READ TABLE mt_mapping_fields INTO ls_mapping_field WITH KEY abap COMPONENTS abap = lv_field. IF sy-subrc = 0. rv_result = ls_mapping_field-json. ENDIF. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~rename_node. ENDMETHOD. ENDCLASS. CLASS lcl_rename IMPLEMENTATION. METHOD constructor. mt_rename_map = it_rename_map. mv_rename_by = iv_rename_by. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_abap. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_json. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~rename_node. DATA lv_full_path TYPE string. DATA lv_pair_found TYPE abap_bool. FIELD-SYMBOLS LIKE LINE OF mt_rename_map. CASE mv_rename_by. WHEN zcl_abapgit_ajson_mapping=>rename_by-attr_name. READ TABLE mt_rename_map ASSIGNING WITH TABLE KEY by_name COMPONENTS from = cv_name. lv_pair_found = boolc( sy-subrc = 0 ). WHEN zcl_abapgit_ajson_mapping=>rename_by-full_path. lv_full_path = is_node-path && cv_name. READ TABLE mt_rename_map ASSIGNING WITH TABLE KEY by_name COMPONENTS from = lv_full_path. lv_pair_found = boolc( sy-subrc = 0 ). WHEN zcl_abapgit_ajson_mapping=>rename_by-pattern. lv_full_path = is_node-path && cv_name. LOOP AT mt_rename_map ASSIGNING . IF lv_full_path CP -from. lv_pair_found = abap_true. EXIT. ENDIF. ENDLOOP. WHEN OTHERS. lv_pair_found = abap_false. " No rename ENDCASE. IF lv_pair_found = abap_true. cv_name = -to. ENDIF. ENDMETHOD. ENDCLASS. CLASS lcl_mapping_to_upper IMPLEMENTATION. METHOD constructor. mi_mapping_fields = zcl_abapgit_ajson_mapping=>create_field_mapping( it_mapping_fields ). ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_abap. rv_result = mi_mapping_fields->to_abap( iv_path = iv_path iv_name = iv_name ). ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_json. rv_result = mi_mapping_fields->to_json( iv_path = iv_path iv_name = iv_name ). IF rv_result IS NOT INITIAL. " Mapping found RETURN. ENDIF. rv_result = to_upper( iv_name ). ENDMETHOD. METHOD zif_abapgit_ajson_mapping~rename_node. cv_name = to_upper( cv_name ). ENDMETHOD. ENDCLASS. CLASS lcl_mapping_to_lower IMPLEMENTATION. METHOD constructor. mi_mapping_fields = zcl_abapgit_ajson_mapping=>create_field_mapping( it_mapping_fields ). ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_abap. rv_result = mi_mapping_fields->to_abap( iv_path = iv_path iv_name = iv_name ). ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_json. rv_result = mi_mapping_fields->to_json( iv_path = iv_path iv_name = iv_name ). IF rv_result IS NOT INITIAL. " Mapping found RETURN. ENDIF. rv_result = to_lower( iv_name ). ENDMETHOD. METHOD zif_abapgit_ajson_mapping~rename_node. cv_name = to_lower( cv_name ). ENDMETHOD. ENDCLASS. CLASS lcl_mapping_camel IMPLEMENTATION. "DEPRECATED METHOD constructor. mi_mapping_fields = zcl_abapgit_ajson_mapping=>create_field_mapping( it_mapping_fields ). mv_first_json_upper = iv_first_json_upper. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_abap. rv_result = mi_mapping_fields->to_abap( iv_path = iv_path iv_name = iv_name ). IF rv_result IS NOT INITIAL. " Mapping found RETURN. ENDIF. rv_result = iv_name. REPLACE ALL OCCURRENCES OF REGEX `([a-z])([A-Z])` IN rv_result WITH `$1_$2`. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_json. TYPES ty_token TYPE c LENGTH 255. DATA lt_tokens TYPE STANDARD TABLE OF ty_token. DATA lv_from TYPE i. FIELD-SYMBOLS LIKE LINE OF lt_tokens. rv_result = mi_mapping_fields->to_json( iv_path = iv_path iv_name = iv_name ). IF rv_result IS NOT INITIAL. " Mapping found RETURN. ENDIF. rv_result = iv_name. REPLACE ALL OCCURRENCES OF `__` IN rv_result WITH `*`. TRANSLATE rv_result TO LOWER CASE. TRANSLATE rv_result USING `/_:_~_`. IF mv_first_json_upper = abap_true. lv_from = 1. ELSE. lv_from = 2. ENDIF. SPLIT rv_result AT `_` INTO TABLE lt_tokens. LOOP AT lt_tokens ASSIGNING FROM lv_from. TRANSLATE (1) TO UPPER CASE. ENDLOOP. CONCATENATE LINES OF lt_tokens INTO rv_result. REPLACE ALL OCCURRENCES OF `*` IN rv_result WITH `_`. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~rename_node. ENDMETHOD. ENDCLASS. CLASS lcl_compound_mapper IMPLEMENTATION. METHOD constructor. mt_queue = it_queue. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~rename_node. DATA ls_node LIKE is_node. DATA li_mapper LIKE LINE OF mt_queue. ls_node = is_node. LOOP AT mt_queue INTO li_mapper. li_mapper->rename_node( EXPORTING is_node = ls_node CHANGING cv_name = cv_name ). ls_node-name = cv_name. ENDLOOP. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_abap. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_json. ENDMETHOD. ENDCLASS. CLASS lcl_to_snake IMPLEMENTATION. METHOD zif_abapgit_ajson_mapping~rename_node. REPLACE ALL OCCURRENCES OF REGEX `([a-z])([A-Z])` IN cv_name WITH `$1_$2`. cv_name = to_lower( cv_name ). ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_abap. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_json. ENDMETHOD. ENDCLASS. CLASS lcl_to_camel IMPLEMENTATION. METHOD constructor. mv_first_json_upper = iv_first_json_upper. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~rename_node. TYPES lty_token TYPE c LENGTH 255. CONSTANTS lc_forced_underscore_marker TYPE c LENGTH 1 VALUE cl_abap_char_utilities=>horizontal_tab. DATA lt_tokens TYPE STANDARD TABLE OF lty_token. DATA lv_from TYPE i. FIELD-SYMBOLS LIKE LINE OF lt_tokens. IF mv_first_json_upper = abap_true. lv_from = 1. ELSE. lv_from = 2. ENDIF. REPLACE ALL OCCURRENCES OF `__` IN cv_name WITH lc_forced_underscore_marker. " Force underscore SPLIT cv_name AT `_` INTO TABLE lt_tokens. DELETE lt_tokens WHERE table_line IS INITIAL. LOOP AT lt_tokens ASSIGNING FROM lv_from. TRANSLATE +0(1) TO UPPER CASE. ENDLOOP. CONCATENATE LINES OF lt_tokens INTO cv_name. REPLACE ALL OCCURRENCES OF lc_forced_underscore_marker IN cv_name WITH `_`. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_abap. ENDMETHOD. METHOD zif_abapgit_ajson_mapping~to_json. ENDMETHOD. ENDCLASS.