abapGit/src/ui/lib/zcl_abapgit_html_action_utils.clas.abap
2023-11-30 08:39:01 +01:00

210 lines
5.1 KiB
ABAP

CLASS zcl_abapgit_html_action_utils DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS jump_encode
IMPORTING
!iv_obj_type TYPE tadir-object
!iv_obj_name TYPE tadir-obj_name
!iv_filename TYPE string OPTIONAL
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS dir_encode
IMPORTING
!iv_path TYPE string
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS file_encode
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!ig_file TYPE any
!iv_extra TYPE clike OPTIONAL
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS obj_encode
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!ig_object TYPE any
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS dbkey_encode
IMPORTING
!is_key TYPE zif_abapgit_persistence=>ty_content
RETURNING
VALUE(rv_string) TYPE string .
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ty_name_value,
name TYPE string,
value TYPE string,
END OF ty_name_value.
TYPES ty_name_value_tt TYPE STANDARD TABLE OF ty_name_value WITH DEFAULT KEY.
CLASS-METHODS add_field
IMPORTING
!iv_name TYPE string
!ig_field TYPE any
CHANGING
!ct_field TYPE ty_name_value_tt .
CLASS-METHODS fields_to_string
IMPORTING
!it_fields TYPE ty_name_value_tt
RETURNING
VALUE(rv_string) TYPE string.
ENDCLASS.
CLASS zcl_abapgit_html_action_utils IMPLEMENTATION.
METHOD add_field.
DATA ls_field LIKE LINE OF ct_field.
FIELD-SYMBOLS <lg_src> TYPE any.
ls_field-name = iv_name.
CASE cl_abap_typedescr=>describe_by_data( ig_field )->kind.
WHEN cl_abap_typedescr=>kind_elem.
ls_field-value = ig_field.
WHEN cl_abap_typedescr=>kind_struct.
ASSIGN COMPONENT iv_name OF STRUCTURE ig_field TO <lg_src>.
ASSERT <lg_src> IS ASSIGNED.
ls_field-value = <lg_src>.
WHEN OTHERS.
ASSERT 0 = 1.
ENDCASE.
APPEND ls_field TO ct_field.
ENDMETHOD.
METHOD dbkey_encode.
DATA lt_fields TYPE ty_name_value_tt.
add_field( EXPORTING iv_name = 'TYPE'
ig_field = is_key-type CHANGING ct_field = lt_fields ).
add_field( EXPORTING iv_name = 'VALUE'
ig_field = is_key-value CHANGING ct_field = lt_fields ).
rv_string = fields_to_string( lt_fields ).
ENDMETHOD.
METHOD dir_encode.
DATA lt_fields TYPE ty_name_value_tt.
add_field( EXPORTING iv_name = 'PATH'
ig_field = iv_path CHANGING ct_field = lt_fields ).
rv_string = fields_to_string( lt_fields ).
ENDMETHOD.
METHOD fields_to_string.
* There is no equivalent to cl_http_utility=>fields_to_string released in ABAP Cloud,
* see cl_web_http_utility
DATA lt_tab TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
DATA lv_str TYPE string.
DATA ls_field LIKE LINE OF it_fields.
LOOP AT it_fields INTO ls_field.
ls_field-value = cl_http_utility=>escape_url( ls_field-value ).
lv_str = ls_field-name && '=' && ls_field-value.
APPEND lv_str TO lt_tab.
ENDLOOP.
rv_string = concat_lines_of(
table = lt_tab
sep = '&' ).
ENDMETHOD.
METHOD file_encode.
DATA lt_fields TYPE ty_name_value_tt.
add_field(
EXPORTING
iv_name = 'KEY'
ig_field = iv_key
CHANGING
ct_field = lt_fields ).
add_field(
EXPORTING
iv_name = 'PATH'
ig_field = ig_file
CHANGING
ct_field = lt_fields ).
add_field(
EXPORTING
iv_name = 'FILENAME'
ig_field = ig_file
CHANGING
ct_field = lt_fields ).
IF iv_extra IS SUPPLIED.
add_field(
EXPORTING
iv_name = 'EXTRA'
ig_field = iv_extra
CHANGING
ct_field = lt_fields ).
ENDIF.
rv_string = fields_to_string( lt_fields ).
ENDMETHOD.
METHOD jump_encode.
DATA lt_fields TYPE ty_name_value_tt.
add_field( EXPORTING iv_name = 'TYPE'
ig_field = iv_obj_type CHANGING ct_field = lt_fields ).
add_field( EXPORTING iv_name = 'NAME'
ig_field = iv_obj_name CHANGING ct_field = lt_fields ).
IF iv_filename IS NOT INITIAL.
add_field( EXPORTING iv_name = 'FILE'
ig_field = iv_filename CHANGING ct_field = lt_fields ).
ENDIF.
rv_string = fields_to_string( lt_fields ).
ENDMETHOD.
METHOD obj_encode.
DATA lt_fields TYPE ty_name_value_tt.
add_field( EXPORTING iv_name = 'KEY'
ig_field = iv_key CHANGING ct_field = lt_fields ).
add_field( EXPORTING iv_name = 'OBJ_TYPE'
ig_field = ig_object CHANGING ct_field = lt_fields ).
add_field( EXPORTING iv_name = 'OBJ_NAME'
ig_field = ig_object CHANGING ct_field = lt_fields ).
rv_string = fields_to_string( lt_fields ).
ENDMETHOD.
ENDCLASS.