mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 21:08:01 +08:00

* add global classes for objects * fix metadata * comment old code fix serializer class move missing interfaces * keep objects and bridge as local * fix syntax errors and remove SICF -> tadir dependency, instead tadir -> SICF * remove dependency TABL -> lcl_popups * fix indentation * remove old includes * fix parser errors * fix deserializing
196 lines
7.0 KiB
ABAP
196 lines
7.0 KiB
ABAP
CLASS zcl_abapgit_object_enho_hook 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.
|
|
TYPES: BEGIN OF ty_spaces,
|
|
full_name TYPE string.
|
|
TYPES: spaces TYPE STANDARD TABLE OF i WITH DEFAULT KEY,
|
|
END OF ty_spaces.
|
|
|
|
TYPES: ty_spaces_tt TYPE STANDARD TABLE OF ty_spaces WITH DEFAULT KEY.
|
|
|
|
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
|
|
DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
|
|
|
|
METHODS hook_impl_deserialize
|
|
IMPORTING it_spaces TYPE ty_spaces_tt
|
|
CHANGING ct_impl TYPE enh_hook_impl_it
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
METHODS hook_impl_serialize
|
|
EXPORTING et_spaces TYPE ty_spaces_tt
|
|
CHANGING ct_impl TYPE enh_hook_impl_it
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
ENDCLASS.
|
|
|
|
CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
|
|
|
METHOD constructor.
|
|
ms_item = is_item.
|
|
mo_files = io_files.
|
|
ENDMETHOD. "constructor
|
|
|
|
METHOD zif_abapgit_object_enho~serialize.
|
|
|
|
DATA: lv_shorttext TYPE string,
|
|
lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl,
|
|
ls_original_object TYPE enh_hook_admin,
|
|
lt_spaces TYPE ty_spaces_tt,
|
|
lt_enhancements TYPE enh_hook_impl_it.
|
|
|
|
|
|
lo_hook_impl ?= ii_enh_tool.
|
|
|
|
lv_shorttext = lo_hook_impl->if_enh_object_docu~get_shorttext( ).
|
|
lo_hook_impl->get_original_object(
|
|
IMPORTING
|
|
pgmid = ls_original_object-pgmid
|
|
obj_name = ls_original_object-org_obj_name
|
|
obj_type = ls_original_object-org_obj_type
|
|
main_type = ls_original_object-org_main_type
|
|
main_name = ls_original_object-org_main_name
|
|
program = ls_original_object-programname ).
|
|
ls_original_object-include_bound = lo_hook_impl->get_include_bound( ).
|
|
lt_enhancements = lo_hook_impl->get_hook_impls( ).
|
|
|
|
hook_impl_serialize(
|
|
IMPORTING et_spaces = lt_spaces
|
|
CHANGING ct_impl = lt_enhancements ).
|
|
|
|
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( ig_data = ls_original_object
|
|
iv_name = 'ORIGINAL_OBJECT' ).
|
|
io_xml->add( iv_name = 'ENHANCEMENTS'
|
|
ig_data = lt_enhancements ).
|
|
io_xml->add( iv_name = 'SPACES'
|
|
ig_data = lt_spaces ).
|
|
|
|
ENDMETHOD. "zif_abapgit_object_enho~serialize
|
|
|
|
METHOD hook_impl_serialize.
|
|
* handle normalization of XML values
|
|
* i.e. remove leading spaces
|
|
|
|
FIELD-SYMBOLS: <ls_impl> LIKE LINE OF ct_impl,
|
|
<ls_space> LIKE LINE OF et_spaces,
|
|
<lv_space> TYPE i,
|
|
<lv_line> TYPE string.
|
|
|
|
|
|
LOOP AT ct_impl ASSIGNING <ls_impl>.
|
|
APPEND INITIAL LINE TO et_spaces ASSIGNING <ls_space>.
|
|
<ls_space>-full_name = <ls_impl>-full_name.
|
|
LOOP AT <ls_impl>-source ASSIGNING <lv_line>.
|
|
APPEND INITIAL LINE TO <ls_space>-spaces ASSIGNING <lv_space>.
|
|
WHILE strlen( <lv_line> ) >= 1 AND <lv_line>(1) = ` `.
|
|
<lv_line> = <lv_line>+1.
|
|
<lv_space> = <lv_space> + 1.
|
|
ENDWHILE.
|
|
ENDLOOP.
|
|
ENDLOOP.
|
|
ENDMETHOD. "hook_impl_serialize
|
|
|
|
METHOD hook_impl_deserialize.
|
|
|
|
FIELD-SYMBOLS: <ls_impl> LIKE LINE OF ct_impl,
|
|
<lv_line> TYPE string,
|
|
<lv_space> TYPE i,
|
|
<ls_spaces> LIKE LINE OF it_spaces.
|
|
|
|
|
|
LOOP AT ct_impl ASSIGNING <ls_impl>.
|
|
READ TABLE it_spaces ASSIGNING <ls_spaces> WITH KEY full_name = <ls_impl>-full_name.
|
|
IF sy-subrc = 0.
|
|
LOOP AT <ls_impl>-source ASSIGNING <lv_line>.
|
|
READ TABLE <ls_spaces>-spaces ASSIGNING <lv_space> INDEX sy-tabix.
|
|
IF sy-subrc = 0 AND <lv_space> > 0.
|
|
DO <lv_space> TIMES.
|
|
CONCATENATE space <lv_line> INTO <lv_line> RESPECTING BLANKS.
|
|
ENDDO.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD. "hook_impl_deserialize
|
|
|
|
METHOD zif_abapgit_object_enho~deserialize.
|
|
|
|
DATA: lv_shorttext TYPE string,
|
|
lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl,
|
|
li_tool TYPE REF TO if_enh_tool,
|
|
lv_enhname TYPE enhname,
|
|
lv_package TYPE devclass,
|
|
ls_original_object TYPE enh_hook_admin,
|
|
lt_spaces TYPE ty_spaces_tt,
|
|
lt_enhancements TYPE enh_hook_impl_it.
|
|
|
|
FIELD-SYMBOLS: <ls_enhancement> LIKE LINE OF lt_enhancements.
|
|
|
|
|
|
io_xml->read( EXPORTING iv_name = 'SHORTTEXT'
|
|
CHANGING cg_data = lv_shorttext ).
|
|
io_xml->read( EXPORTING iv_name = 'ORIGINAL_OBJECT'
|
|
CHANGING cg_data = ls_original_object ).
|
|
io_xml->read( EXPORTING iv_name = 'ENHANCEMENTS'
|
|
CHANGING cg_data = lt_enhancements ).
|
|
io_xml->read( EXPORTING iv_name = 'SPACES'
|
|
CHANGING cg_data = lt_spaces ).
|
|
|
|
hook_impl_deserialize( EXPORTING it_spaces = lt_spaces
|
|
CHANGING ct_impl = lt_enhancements ).
|
|
|
|
lv_enhname = ms_item-obj_name.
|
|
lv_package = iv_package.
|
|
TRY.
|
|
cl_enh_factory=>create_enhancement(
|
|
EXPORTING
|
|
enhname = lv_enhname
|
|
enhtype = cl_abstract_enh_tool_redef=>credefinition
|
|
enhtooltype = cl_enh_tool_hook_impl=>tooltype
|
|
IMPORTING
|
|
enhancement = li_tool
|
|
CHANGING
|
|
devclass = lv_package ).
|
|
lo_hook_impl ?= li_tool.
|
|
|
|
lo_hook_impl->if_enh_object_docu~set_shorttext( lv_shorttext ).
|
|
lo_hook_impl->set_original_object(
|
|
pgmid = ls_original_object-pgmid
|
|
obj_name = ls_original_object-org_obj_name
|
|
obj_type = ls_original_object-org_obj_type
|
|
program = ls_original_object-programname
|
|
main_type = ls_original_object-org_main_type
|
|
main_name = ls_original_object-org_main_name ).
|
|
lo_hook_impl->set_include_bound( ls_original_object-include_bound ).
|
|
|
|
LOOP AT lt_enhancements ASSIGNING <ls_enhancement>.
|
|
lo_hook_impl->add_hook_impl(
|
|
overwrite = <ls_enhancement>-overwrite
|
|
method = <ls_enhancement>-method
|
|
enhmode = <ls_enhancement>-enhmode
|
|
full_name = <ls_enhancement>-full_name
|
|
source = <ls_enhancement>-source
|
|
spot = <ls_enhancement>-spotname
|
|
parent_full_name = <ls_enhancement>-parent_full_name ).
|
|
ENDLOOP.
|
|
lo_hook_impl->if_enh_object~save( ).
|
|
lo_hook_impl->if_enh_object~unlock( ).
|
|
CATCH cx_enh_root.
|
|
zcx_abapgit_exception=>raise( 'error deserializing ENHO hook' ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD. "zif_abapgit_object_enho~deserialize
|
|
|
|
ENDCLASS. "zcl_abapgit_object_enho_hook IMPLEMENTATION
|