abapGit/src/objects/enh/zcl_abapgit_object_enho_clif.clas.abap
Marc Bernard a23c1d6d58
Fix extended check issues - Part 3 (#7088)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-05 17:35:53 +01:00

215 lines
7.0 KiB
ABAP

CLASS zcl_abapgit_object_enho_clif DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS deserialize
IMPORTING
!io_xml TYPE REF TO zif_abapgit_xml_input
!io_clif TYPE REF TO cl_enh_tool_clif
RAISING
zcx_abapgit_exception
cx_enh_root .
CLASS-METHODS serialize
IMPORTING
!io_xml TYPE REF TO zif_abapgit_xml_output
!io_clif TYPE REF TO cl_enh_tool_clif
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_abapgit_object_enho_clif IMPLEMENTATION.
METHOD deserialize.
DATA: lt_tab_attributes TYPE enhclasstabattrib,
lt_tab_types TYPE enhtype_tab,
lt_tab_methods TYPE enhnewmeth_tab,
ls_type_line TYPE vseotype,
ls_header TYPE vseomethod,
ls_param TYPE vseomepara,
ls_exc TYPE vseoexcep,
lt_tab_eventdata TYPE enhevent_tab,
ls_event_line TYPE vseoevent,
ls_event_param TYPE vseoeparam.
FIELD-SYMBOLS: <ls_type> LIKE LINE OF lt_tab_types,
<ls_method> LIKE LINE OF lt_tab_methods,
<ls_param> LIKE LINE OF <ls_method>-meth_param,
<ls_event> LIKE LINE OF lt_tab_eventdata,
<ls_exc> LIKE LINE OF <ls_method>-meth_exc,
<ls_event_param> LIKE LINE OF <ls_event>-event_param.
io_xml->read( EXPORTING iv_name = 'TAB_ATTRIBUTES'
CHANGING cg_data = lt_tab_attributes ).
io_xml->read( EXPORTING iv_name = 'TAB_TYPES'
CHANGING cg_data = lt_tab_types ).
io_xml->read( EXPORTING iv_name = 'TAB_METHODS'
CHANGING cg_data = lt_tab_methods ).
io_xml->read( EXPORTING iv_name = 'TAB_EVENTDATA'
CHANGING cg_data = lt_tab_eventdata ).
LOOP AT lt_tab_types ASSIGNING <ls_type>.
MOVE-CORRESPONDING <ls_type> TO ls_type_line.
TRY.
io_clif->add_change_enha_type( type_line = ls_type_line ).
CATCH cx_enh_mod_not_allowed
cx_enh_is_not_enhanceable ##NO_HANDLER.
" TODO
ENDTRY.
ENDLOOP.
io_clif->set_enhattributes( lt_tab_attributes ).
* SAP standard SET_ENH_NEW_METHOS does not work
LOOP AT lt_tab_methods ASSIGNING <ls_method>.
MOVE-CORRESPONDING <ls_method>-meth_header TO ls_header.
io_clif->add_change_new_enh_method(
methkey = <ls_method>-methkey
method_header = ls_header ).
* parameters
LOOP AT <ls_method>-meth_param ASSIGNING <ls_param>.
MOVE-CORRESPONDING <ls_param> TO ls_param.
io_clif->add_change_enh_methparam(
methname = <ls_method>-methkey-cmpname
param_line = ls_param ).
ENDLOOP.
* exceptions
LOOP AT <ls_method>-meth_exc ASSIGNING <ls_exc>.
MOVE-CORRESPONDING <ls_exc> TO ls_exc.
io_clif->add_change_enh_methexc(
methname = <ls_method>-methkey-cmpname
except_line = ls_exc ).
ENDLOOP.
ENDLOOP.
" events are renumbered based on
LOOP AT lt_tab_eventdata ASSIGNING <ls_event>.
MOVE-CORRESPONDING <ls_event>-event_header TO ls_event_line.
io_clif->add_change_enha_event(
event_key = <ls_event>-eventkey
event_line = ls_event_line ).
* parameters
LOOP AT <ls_event>-event_param ASSIGNING <ls_event_param>.
MOVE-CORRESPONDING <ls_event_param> TO ls_event_param.
io_clif->add_change_enh_eventparam(
eventname = <ls_event>-eventkey-cmpname
event_param = ls_event_param ).
ENDLOOP.
ENDLOOP.
ENDMETHOD.
METHOD serialize.
DATA: lt_tab_attributes TYPE enhclasstabattrib,
lt_tab_types TYPE enhtype_tab,
lt_tab_methods TYPE enhnewmeth_tab,
lt_tab_eventdata TYPE enhevent_tab,
lv_editorder TYPE i.
FIELD-SYMBOLS: <ls_attr> LIKE LINE OF lt_tab_attributes,
<ls_type> LIKE LINE OF lt_tab_types,
<ls_meth> LIKE LINE OF lt_tab_methods,
<ls_param> LIKE LINE OF <ls_meth>-meth_param,
<ls_exc> LIKE LINE OF <ls_meth>-meth_exc,
<ls_event> LIKE LINE OF lt_tab_eventdata,
<ls_event_param> LIKE LINE OF <ls_event>-event_param.
io_clif->get_enhattributes( IMPORTING tab_attributes = lt_tab_attributes ).
io_clif->get_enhatypes( IMPORTING tab_types = lt_tab_types ).
io_clif->get_enh_new_methodes( IMPORTING tab_methodes = lt_tab_methods ).
io_clif->get_enhevents( IMPORTING tab_eventdata = lt_tab_eventdata ).
LOOP AT lt_tab_attributes ASSIGNING <ls_attr>.
CLEAR: <ls_attr>-author,
<ls_attr>-createdon,
<ls_attr>-changedby,
<ls_attr>-changedon,
<ls_attr>-descript_id.
ENDLOOP.
LOOP AT lt_tab_types ASSIGNING <ls_type>.
CLEAR: <ls_type>-author,
<ls_type>-createdon,
<ls_type>-changedby,
<ls_type>-changedon,
<ls_type>-descript_id.
ENDLOOP.
lv_editorder = 0.
SORT lt_tab_methods BY meth_header-editorder.
LOOP AT lt_tab_methods ASSIGNING <ls_meth>.
CLEAR: <ls_meth>-meth_header-author,
<ls_meth>-meth_header-createdon,
<ls_meth>-meth_header-changedby,
<ls_meth>-meth_header-changedon,
<ls_meth>-meth_header-descript_id.
lv_editorder = lv_editorder + 1.
<ls_meth>-meth_header-editorder = lv_editorder.
LOOP AT <ls_meth>-meth_param ASSIGNING <ls_param>.
CLEAR: <ls_param>-author,
<ls_param>-createdon,
<ls_param>-changedby,
<ls_param>-changedon,
<ls_param>-descript_id.
ENDLOOP.
LOOP AT <ls_meth>-meth_exc ASSIGNING <ls_exc>.
CLEAR: <ls_exc>-author,
<ls_exc>-createdon,
<ls_exc>-changedby,
<ls_exc>-changedon,
<ls_exc>-descript_id.
ENDLOOP.
ENDLOOP.
LOOP AT lt_tab_eventdata ASSIGNING <ls_event>.
CLEAR: <ls_event>-event_header-author,
<ls_event>-event_header-createdon,
<ls_event>-event_header-changedby,
<ls_event>-event_header-changedon,
<ls_event>-event_header-descript_id.
LOOP AT <ls_event>-event_param ASSIGNING <ls_event_param>.
CLEAR: <ls_event_param>-author,
<ls_event_param>-createdon,
<ls_event_param>-changedby,
<ls_event_param>-changedon,
<ls_event_param>-descript_id.
ENDLOOP.
ENDLOOP.
io_xml->add( iv_name = 'TAB_ATTRIBUTES'
ig_data = lt_tab_attributes ).
io_xml->add( iv_name = 'TAB_TYPES'
ig_data = lt_tab_types ).
io_xml->add( iv_name = 'TAB_METHODS'
ig_data = lt_tab_methods ).
io_xml->add( iv_name = 'TAB_EVENTDATA'
ig_data = lt_tab_eventdata ).
ENDMETHOD.
ENDCLASS.