abapGit/src/zcl_abapgit_message_helper.clas.abap
Lars Hvam 48222ca050
indentation fixes (#2820)
* indentation fixes

* fixes
2019-07-31 00:49:10 -07:00

363 lines
8.2 KiB
ABAP

CLASS zcl_abapgit_message_helper DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CONSTANTS:
BEGIN OF gc_section_text,
cause TYPE string VALUE `Cause`,
system_response TYPE string VALUE `System response`,
what_to_do TYPE string VALUE `Procedure`,
sys_admin TYPE string VALUE `System administration`,
END OF gc_section_text,
BEGIN OF gc_section_token,
cause TYPE string VALUE `&CAUSE&`,
system_response TYPE string VALUE `&SYSTEM_RESPONSE&`,
what_to_do TYPE string VALUE `&WHAT_TO_DO&`,
sys_admin TYPE string VALUE `&SYS_ADMIN&`,
END OF gc_section_token.
CLASS-METHODS:
set_msg_vars_for_clike
IMPORTING
iv_text TYPE string.
METHODS:
constructor
IMPORTING
ii_t100_message TYPE REF TO if_t100_message,
get_t100_longtext
RETURNING
VALUE(rv_longtext) TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
DATA:
mi_t100_message TYPE REF TO if_t100_message.
METHODS:
itf_to_string
IMPORTING
it_itf TYPE tline_tab
RETURNING
VALUE(rv_result) TYPE string,
get_t100_longtext_itf
RETURNING
VALUE(rt_itf) TYPE tline_tab,
remove_empty_section
IMPORTING
iv_tabix_from TYPE i
iv_tabix_to TYPE i
CHANGING
ct_itf TYPE tline_tab,
replace_section_head_with_text
CHANGING
cs_itf TYPE tline,
set_single_msg_var
IMPORTING
iv_arg TYPE clike
EXPORTING
ev_target TYPE c,
set_single_msg_var_clike
IMPORTING
iv_arg TYPE clike
EXPORTING
ev_target TYPE c,
set_single_msg_var_numeric
IMPORTING
iv_arg TYPE numeric
EXPORTING
ev_target TYPE c,
set_single_msg_var_xseq
IMPORTING
iv_arg TYPE xsequence
EXPORTING
ev_target TYPE c.
ENDCLASS.
CLASS ZCL_ABAPGIT_MESSAGE_HELPER IMPLEMENTATION.
METHOD constructor.
mi_t100_message = ii_t100_message.
ENDMETHOD.
METHOD get_t100_longtext.
rv_longtext = itf_to_string( get_t100_longtext_itf( ) ).
ENDMETHOD.
METHOD get_t100_longtext_itf.
DATA: lv_docu_key TYPE doku_obj,
ls_itf LIKE LINE OF rt_itf.
lv_docu_key = mi_t100_message->t100key-msgid && mi_t100_message->t100key-msgno.
CALL FUNCTION 'DOCU_GET'
EXPORTING
id = 'NA'
langu = sy-langu
object = lv_docu_key
typ = 'E'
TABLES
line = rt_itf
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0.
set_single_msg_var(
EXPORTING
iv_arg = mi_t100_message->t100key-attr1
IMPORTING
ev_target = sy-msgv1 ).
REPLACE '&V1&' IN TABLE rt_itf
WITH sy-msgv1.
set_single_msg_var(
EXPORTING
iv_arg = mi_t100_message->t100key-attr2
IMPORTING
ev_target = sy-msgv2 ).
REPLACE '&V2&' IN TABLE rt_itf
WITH sy-msgv2.
set_single_msg_var(
EXPORTING
iv_arg = mi_t100_message->t100key-attr3
IMPORTING
ev_target = sy-msgv3 ).
REPLACE '&V3&' IN TABLE rt_itf
WITH sy-msgv3.
set_single_msg_var(
EXPORTING
iv_arg = mi_t100_message->t100key-attr4
IMPORTING
ev_target = sy-msgv4 ).
REPLACE '&V4&' IN TABLE rt_itf
WITH sy-msgv4.
ENDIF.
ENDMETHOD.
METHOD itf_to_string.
CONSTANTS: lc_format_section TYPE string VALUE 'U1' ##NO_TEXT.
DATA:
lt_stream TYPE TABLE OF tdline,
lt_string TYPE TABLE OF string,
ls_string LIKE LINE OF lt_string,
lt_itf TYPE tline_tab,
lv_has_content TYPE abap_bool,
lv_tabix_from TYPE syst-tabix,
lv_tabix_to TYPE syst-tabix.
FIELD-SYMBOLS: <ls_itf_section> TYPE tline,
<ls_itf_section_item> TYPE tline.
lt_itf = it_itf.
" You should remember that we replace the U1 format because
" that preserves the section header of longtexts.
LOOP AT lt_itf ASSIGNING <ls_itf_section>
WHERE tdformat = lc_format_section.
CLEAR:
lv_has_content,
lv_tabix_to.
lv_tabix_from = sy-tabix.
LOOP AT lt_itf ASSIGNING <ls_itf_section_item>
FROM sy-tabix + 1.
IF <ls_itf_section_item>-tdformat = lc_format_section.
lv_tabix_to = sy-tabix.
EXIT.
ELSEIF <ls_itf_section_item>-tdline IS NOT INITIAL.
lv_has_content = abap_true.
ENDIF.
ENDLOOP.
IF lv_has_content = abap_false.
remove_empty_section(
EXPORTING
iv_tabix_from = lv_tabix_from
iv_tabix_to = lv_tabix_to
CHANGING
ct_itf = lt_itf ).
CONTINUE.
ENDIF.
replace_section_head_with_text(
CHANGING
cs_itf = <ls_itf_section> ).
ENDLOOP.
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
EXPORTING
lf = 'X'
IMPORTING
stream_lines = lt_string
TABLES
itf_text = lt_itf
text_stream = lt_stream.
LOOP AT lt_string INTO ls_string.
IF sy-tabix = 1.
rv_result = ls_string.
ELSE.
CONCATENATE rv_result ls_string
INTO rv_result
SEPARATED BY cl_abap_char_utilities=>newline.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD remove_empty_section.
DELETE ct_itf FROM iv_tabix_from TO iv_tabix_to.
ENDMETHOD.
METHOD replace_section_head_with_text.
CASE cs_itf-tdline.
WHEN gc_section_token-cause.
cs_itf-tdline = zcl_abapgit_message_helper=>gc_section_text-cause.
WHEN gc_section_token-system_response.
cs_itf-tdline = zcl_abapgit_message_helper=>gc_section_text-system_response.
WHEN gc_section_token-what_to_do.
cs_itf-tdline = zcl_abapgit_message_helper=>gc_section_text-what_to_do.
WHEN gc_section_token-sys_admin.
cs_itf-tdline = zcl_abapgit_message_helper=>gc_section_text-sys_admin.
ENDCASE.
ENDMETHOD.
METHOD set_msg_vars_for_clike.
TYPES:
BEGIN OF ty_msg,
msgv1 TYPE symsgv,
msgv2 TYPE symsgv,
msgv3 TYPE symsgv,
msgv4 TYPE symsgv,
END OF ty_msg.
DATA: ls_msg TYPE ty_msg,
lv_dummy TYPE string.
ls_msg = iv_text.
" &1&2&3&4&5&6&7&8
MESSAGE e001(00) WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4
INTO lv_dummy.
ENDMETHOD.
METHOD set_single_msg_var.
FIELD-SYMBOLS <lv_arg> TYPE any.
CLEAR ev_target.
IF iv_arg IS INITIAL.
RETURN.
ENDIF.
ASSIGN me->(iv_arg) TO <lv_arg>.
IF sy-subrc <> 0.
CONCATENATE '&' iv_arg '&' INTO ev_target.
RETURN.
ENDIF.
TRY.
set_single_msg_var_clike(
EXPORTING
iv_arg = <lv_arg>
IMPORTING
ev_target = ev_target ).
RETURN.
CATCH cx_sy_dyn_call_illegal_type ##no_handler.
ENDTRY.
TRY.
set_single_msg_var_numeric(
EXPORTING
iv_arg = <lv_arg>
IMPORTING
ev_target = ev_target ).
RETURN.
CATCH cx_sy_dyn_call_illegal_type ##no_handler.
ENDTRY.
TRY.
set_single_msg_var_xseq(
EXPORTING
iv_arg = <lv_arg>
IMPORTING
ev_target = ev_target ).
RETURN.
CATCH cx_sy_dyn_call_illegal_type ##no_handler.
ENDTRY.
CONCATENATE '&' iv_arg '&' INTO ev_target.
ENDMETHOD.
METHOD set_single_msg_var_clike.
" a kind of MOVE where all conversion errors are signalled by exceptions
WRITE iv_arg LEFT-JUSTIFIED TO ev_target.
ENDMETHOD.
METHOD set_single_msg_var_numeric.
" a kind of MOVE where all conversion errors are signalled by exceptions
WRITE iv_arg LEFT-JUSTIFIED TO ev_target.
ENDMETHOD.
METHOD set_single_msg_var_xseq.
" a kind of MOVE where all conversion errors are signalled by exceptions
WRITE iv_arg LEFT-JUSTIFIED TO ev_target.
ENDMETHOD.
ENDCLASS.