CLASS zcl_abapgit_object_enho_class DEFINITION PUBLIC CREATE PUBLIC. PUBLIC SECTION. INTERFACES zif_abapgit_object_enho. METHODS constructor IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item !io_files TYPE REF TO zcl_abapgit_objects_files. PROTECTED SECTION. PRIVATE SECTION. CLASS-METHODS adjust_generated_comments CHANGING ct_source TYPE rswsourcet. METHODS: serialize_includes IMPORTING io_class TYPE REF TO cl_enh_tool_class RAISING zcx_abapgit_exception, deserialize_includes IMPORTING ii_xml TYPE REF TO zif_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 adjust_generated_comments. FIELD-SYMBOLS LIKE LINE OF ct_source. " Enhancements contain comments that end in '.' or ' .' depending on release " This routine replaces the space-dot with just dot LOOP AT ct_source ASSIGNING . IF strlen( ) > 2. = replace( val = regex = '^(\*".*) \.$' with = '$1.' ). ENDIF. ENDLOOP. ENDMETHOD. METHOD constructor. ms_item = is_item. mo_files = io_files. 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_root TYPE REF TO cx_enh_root, lv_new_em TYPE abap_bool, lt_files TYPE zif_abapgit_git_definitions=>ty_files_tt. FIELD-SYMBOLS: LIKE LINE OF lt_tab_methods, TYPE zif_abapgit_git_definitions=>ty_file. ii_xml->read( EXPORTING iv_name = 'TAB_METHODS' CHANGING cg_data = lt_tab_methods ). lv_new_em = abap_false. lt_files = mo_files->get_files( ). LOOP AT lt_files ASSIGNING WHERE filename CS 'enho.em_'. lv_new_em = abap_true. EXIT. ENDLOOP. SORT lt_tab_methods BY meth_header-editorder. LOOP AT lt_tab_methods ASSIGNING . lv_methname = -methkey-cmpname. IF lv_new_em = abap_true. lt_abap = mo_files->read_abap( iv_extra = 'em_' && lv_methname ). ELSE. " old way lv_editorder = -meth_header-editorder. lt_abap = mo_files->read_abap( iv_extra = 'em' && lv_editorder ). ENDIF. TRY. io_class->add_change_new_method_source( clsname = -methkey-clsname methname = lv_methname methsource = lt_abap ). CATCH cx_enh_root INTO lx_enh_root. zcx_abapgit_exception=>raise_with_text( lx_enh_root ). ENDTRY. ENDLOOP. ENDMETHOD. METHOD serialize_includes. DATA: lt_includes TYPE enhnewmeth_tabincl_plus_enha, lt_source TYPE TABLE OF abaptxt255, lv_include TYPE syrepid. 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_includelist = abap_false 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_{ -cpdname }| it_abap = lt_source ). ENDIF. ENDLOOP. 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, lx_enh_root TYPE REF TO cx_enh_root. ii_xml->read( EXPORTING iv_name = 'SHORTTEXT' CHANGING cg_data = lv_shorttext ). ii_xml->read( EXPORTING iv_name = 'OWR_METHODS' CHANGING cg_data = lt_owr ). ii_xml->read( EXPORTING iv_name = 'PRE_METHODS' CHANGING cg_data = lt_pre ). ii_xml->read( EXPORTING iv_name = 'POST_METHODS' CHANGING cg_data = lt_post ). ii_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 = ii_xml io_clif = lo_enh_class ). deserialize_includes( ii_xml = ii_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 INTO lx_enh_root. TRY. lo_enh_class->if_enh_object~unlock( ). CATCH cx_sy_ref_is_initial cx_enh_mod_not_allowed ##NO_HANDLER. ENDTRY. zcx_abapgit_exception=>raise_with_text( lx_enh_root ). ENDTRY. 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 ). ii_xml->add( iv_name = 'TOOL' ig_data = ii_enh_tool->get_tool( ) ). ii_xml->add( ig_data = lv_shorttext iv_name = 'SHORTTEXT' ). ii_xml->add( iv_name = 'CLASS' ig_data = lv_class ). ii_xml->add( iv_name = 'OWR_METHODS' ig_data = lt_owr ). ii_xml->add( iv_name = 'PRE_METHODS' ig_data = lt_pre ). ii_xml->add( iv_name = 'POST_METHODS' ig_data = lt_post ). adjust_generated_comments( CHANGING ct_source = lt_source ). mo_files->add_abap( lt_source ). zcl_abapgit_object_enho_clif=>serialize( io_xml = ii_xml io_clif = lo_enh_class ). serialize_includes( lo_enh_class ). ENDMETHOD. ENDCLASS.