CLASS zcl_abapgit_object_enho_class DEFINITION PUBLIC. PUBLIC SECTION. METHODS: constructor IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item io_files TYPE REF TO zcl_abapgit_objects_files. INTERFACES: zif_abapgit_object_enho. PRIVATE SECTION. METHODS: serialize_includes IMPORTING io_class TYPE REF TO cl_enh_tool_class RAISING zcx_abapgit_exception, deserialize_includes IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input io_class TYPE REF TO cl_enh_tool_class RAISING zcx_abapgit_exception. DATA: ms_item TYPE zif_abapgit_definitions=>ty_item. DATA: mo_files TYPE REF TO zcl_abapgit_objects_files. ENDCLASS. CLASS zcl_abapgit_object_enho_class IMPLEMENTATION. METHOD constructor. ms_item = is_item. mo_files = io_files. ENDMETHOD. METHOD zif_abapgit_object_enho~serialize. DATA: lo_enh_class TYPE REF TO cl_enh_tool_class, lt_owr TYPE enhmeth_tabkeys, lt_pre TYPE enhmeth_tabkeys, lt_post TYPE enhmeth_tabkeys, lt_source TYPE rswsourcet, lv_class TYPE seoclsname, lv_shorttext TYPE string. lo_enh_class ?= ii_enh_tool. lv_shorttext = lo_enh_class->if_enh_object_docu~get_shorttext( ). lt_owr = lo_enh_class->get_owr_methods( ). lt_pre = lo_enh_class->get_pre_methods( ). lt_post = lo_enh_class->get_post_methods( ). lt_source = lo_enh_class->get_eimp_include( ). lo_enh_class->get_class( IMPORTING class_name = lv_class ). io_xml->add( iv_name = 'TOOL' ig_data = ii_enh_tool->get_tool( ) ). io_xml->add( ig_data = lv_shorttext iv_name = 'SHORTTEXT' ). io_xml->add( iv_name = 'CLASS' ig_data = lv_class ). io_xml->add( iv_name = 'OWR_METHODS' ig_data = lt_owr ). io_xml->add( iv_name = 'PRE_METHODS' ig_data = lt_pre ). io_xml->add( iv_name = 'POST_METHODS' ig_data = lt_post ). mo_files->add_abap( lt_source ). zcl_abapgit_object_enho_clif=>serialize( io_xml = io_xml io_files = mo_files io_clif = lo_enh_class ). serialize_includes( lo_enh_class ). ENDMETHOD. METHOD zif_abapgit_object_enho~deserialize. DATA: lo_enh_class TYPE REF TO cl_enh_tool_class, lt_owr TYPE enhmeth_tabkeys, lt_pre TYPE enhmeth_tabkeys, lt_post TYPE enhmeth_tabkeys, lt_source TYPE rswsourcet, li_tool TYPE REF TO if_enh_tool, lv_shorttext TYPE string, lv_class TYPE seoclsname, lv_enhname TYPE enhname, lv_package TYPE devclass. io_xml->read( EXPORTING iv_name = 'SHORTTEXT' CHANGING cg_data = lv_shorttext ). io_xml->read( EXPORTING iv_name = 'OWR_METHODS' CHANGING cg_data = lt_owr ). io_xml->read( EXPORTING iv_name = 'PRE_METHODS' CHANGING cg_data = lt_pre ). io_xml->read( EXPORTING iv_name = 'POST_METHODS' CHANGING cg_data = lt_post ). io_xml->read( EXPORTING iv_name = 'CLASS' CHANGING cg_data = lv_class ). lt_source = mo_files->read_abap( ). lv_enhname = ms_item-obj_name. lv_package = iv_package. TRY. cl_enh_factory=>create_enhancement( EXPORTING enhname = lv_enhname enhtype = '' enhtooltype = cl_enh_tool_class=>tooltype IMPORTING enhancement = li_tool CHANGING devclass = lv_package ). lo_enh_class ?= li_tool. lo_enh_class->if_enh_object_docu~set_shorttext( lv_shorttext ). lo_enh_class->set_class( lv_class ). lo_enh_class->set_owr_methods( version = 'I' owr_methods = lt_owr ). lo_enh_class->set_pre_methods( version = 'I' pre_methods = lt_pre ). lo_enh_class->set_post_methods( version = 'I' post_methods = lt_post ). lo_enh_class->set_eimp_include( version = 'I' eimp_source = lt_source ). zcl_abapgit_object_enho_clif=>deserialize( io_xml = io_xml io_clif = lo_enh_class ). deserialize_includes( io_xml = io_xml io_class = lo_enh_class ). lo_enh_class->if_enh_object~save( run_dark = abap_true ). lo_enh_class->if_enh_object~unlock( ). CATCH cx_enh_root. zcx_abapgit_exception=>raise( 'error deserializing ENHO class' ). ENDTRY. ENDMETHOD. METHOD serialize_includes. DATA: lt_includes TYPE enhnewmeth_tabincl_plus_enha, lt_source TYPE TABLE OF abaptxt255, lv_include TYPE programm. FIELD-SYMBOLS: LIKE LINE OF lt_includes. lt_includes = io_class->get_enh_method_includes( ). LOOP AT lt_includes ASSIGNING . lv_include = io_class->if_enh_tool~get_name( ). TRANSLATE lv_include USING ' ='. lv_include+30 = 'EM'. lv_include+32(8) = -includenr. CALL FUNCTION 'RPY_PROGRAM_READ' EXPORTING program_name = lv_include with_lowercase = abap_true TABLES source_extended = lt_source EXCEPTIONS cancelled = 1 not_found = 2 permission_error = 3 OTHERS = 4. IF sy-subrc = 0. mo_files->add_abap( iv_extra = |EM{ -includenr }| it_abap = lt_source ). ENDIF. ENDLOOP. ENDMETHOD. METHOD deserialize_includes. DATA: lt_tab_methods TYPE enhnewmeth_tab, lv_editorder TYPE n LENGTH 3, lv_methname TYPE seocpdname, lt_abap TYPE rswsourcet, lx_enh TYPE REF TO cx_enh_root. FIELD-SYMBOLS: LIKE LINE OF lt_tab_methods. io_xml->read( EXPORTING iv_name = 'TAB_METHODS' CHANGING cg_data = lt_tab_methods ). LOOP AT lt_tab_methods ASSIGNING . lv_editorder = -meth_header-editorder. lv_methname = -methkey-cmpname. lt_abap = mo_files->read_abap( iv_extra = 'em' && lv_editorder ). TRY. io_class->add_change_new_method_source( clsname = -methkey-clsname methname = lv_methname methsource = lt_abap ). CATCH cx_enh_mod_not_allowed cx_enh_is_not_enhanceable INTO lx_enh. zcx_abapgit_exception=>raise( iv_text = 'Error deserializing ENHO method include' ix_previous = lx_enh ). ENDTRY. ENDLOOP. ENDMETHOD. ENDCLASS.