mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00
Implement deserialize steps and swap DDIC/ABAP order (#2449)
* Implement deserialize steps swap DDIC/ÁBAP order * fix for wapa and abaplint * bugfix in falback logic and type definition * fixed constant usage * fixed abaplint and constant usage * focus only on design change of deserialze * focus only on design change of deserialze * Bugfix for CI because of changes of the order * cleanup * cleanup * minor changes * move types to IF
This commit is contained in:
parent
a5de7a8769
commit
6b7b2ba5c5
|
@ -1,9 +1,22 @@
|
||||||
INTERFACE zif_abapgit_object
|
INTERFACE zif_abapgit_object
|
||||||
PUBLIC .
|
PUBLIC .
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
ty_deserialization_step TYPE string.
|
||||||
|
TYPES:
|
||||||
|
ty_deserialization_step_tt TYPE STANDARD TABLE OF ty_deserialization_step
|
||||||
|
WITH DEFAULT KEY .
|
||||||
|
|
||||||
DATA mo_files TYPE REF TO zcl_abapgit_objects_files .
|
DATA mo_files TYPE REF TO zcl_abapgit_objects_files .
|
||||||
|
|
||||||
|
CONSTANTS:
|
||||||
|
BEGIN OF gc_step_id,
|
||||||
|
abap TYPE zif_abapgit_object=>ty_deserialization_step VALUE `ABAP`,
|
||||||
|
ddic TYPE zif_abapgit_object=>ty_deserialization_step VALUE `DDIC`,
|
||||||
|
late TYPE zif_abapgit_object=>ty_deserialization_step VALUE `LATE`,
|
||||||
|
END OF gc_step_id.
|
||||||
|
|
||||||
|
|
||||||
METHODS serialize
|
METHODS serialize
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!io_xml TYPE REF TO zcl_abapgit_xml_output
|
!io_xml TYPE REF TO zcl_abapgit_xml_output
|
||||||
|
@ -13,6 +26,7 @@ INTERFACE zif_abapgit_object
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_package TYPE devclass
|
!iv_package TYPE devclass
|
||||||
!io_xml TYPE REF TO zcl_abapgit_xml_input
|
!io_xml TYPE REF TO zcl_abapgit_xml_input
|
||||||
|
!iv_step TYPE ty_deserialization_step
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS delete
|
METHODS delete
|
||||||
|
@ -49,4 +63,7 @@ INTERFACE zif_abapgit_object
|
||||||
VALUE(ri_comparator) TYPE REF TO zif_abapgit_comparator
|
VALUE(ri_comparator) TYPE REF TO zif_abapgit_comparator
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
METHODS get_deserialize_steps
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_steps) TYPE ty_deserialization_step_tt .
|
||||||
ENDINTERFACE.
|
ENDINTERFACE.
|
||||||
|
|
|
@ -21,6 +21,19 @@ CLASS zcl_abapgit_objects DEFINITION
|
||||||
item TYPE zif_abapgit_definitions=>ty_item,
|
item TYPE zif_abapgit_definitions=>ty_item,
|
||||||
END OF ty_serialization .
|
END OF ty_serialization .
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF ty_step_data,
|
||||||
|
step_id TYPE zif_abapgit_object=>ty_deserialization_step,
|
||||||
|
order TYPE i,
|
||||||
|
descr TYPE string,
|
||||||
|
is_ddic TYPE abap_bool,
|
||||||
|
syntax_check TYPE abap_bool,
|
||||||
|
objects TYPE ty_deserialization_tt,
|
||||||
|
END OF ty_step_data.
|
||||||
|
TYPES:
|
||||||
|
ty_step_data_tt TYPE STANDARD TABLE OF ty_step_data
|
||||||
|
WITH DEFAULT KEY.
|
||||||
|
|
||||||
CLASS-METHODS serialize
|
CLASS-METHODS serialize
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!is_item TYPE zif_abapgit_definitions=>ty_item
|
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||||
|
@ -173,9 +186,7 @@ CLASS zcl_abapgit_objects DEFINITION
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
CLASS-METHODS deserialize_objects
|
CLASS-METHODS deserialize_objects
|
||||||
IMPORTING
|
IMPORTING
|
||||||
it_objects TYPE ty_deserialization_tt
|
is_step TYPE ty_step_data
|
||||||
iv_ddic TYPE abap_bool DEFAULT abap_false
|
|
||||||
iv_descr TYPE string
|
|
||||||
CHANGING
|
CHANGING
|
||||||
ct_files TYPE zif_abapgit_definitions=>ty_file_signatures_tt
|
ct_files TYPE zif_abapgit_definitions=>ty_file_signatures_tt
|
||||||
RAISING
|
RAISING
|
||||||
|
@ -216,6 +227,9 @@ CLASS zcl_abapgit_objects DEFINITION
|
||||||
it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt.
|
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt.
|
||||||
|
CLASS-METHODS get_deserialize_steps
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_steps) TYPE ty_step_data_tt.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
@ -513,17 +527,19 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
lo_files TYPE REF TO zcl_abapgit_objects_files,
|
lo_files TYPE REF TO zcl_abapgit_objects_files,
|
||||||
lo_xml TYPE REF TO zcl_abapgit_xml_input,
|
lo_xml TYPE REF TO zcl_abapgit_xml_input,
|
||||||
lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
|
lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||||
lt_ddic TYPE TABLE OF ty_deserialization,
|
|
||||||
lt_rest TYPE TABLE OF ty_deserialization,
|
|
||||||
lt_late TYPE TABLE OF ty_deserialization,
|
|
||||||
li_progress TYPE REF TO zif_abapgit_progress,
|
li_progress TYPE REF TO zif_abapgit_progress,
|
||||||
lv_path TYPE string,
|
lv_path TYPE string,
|
||||||
lt_items TYPE zif_abapgit_definitions=>ty_items_tt.
|
lt_items TYPE zif_abapgit_definitions=>ty_items_tt,
|
||||||
|
lt_steps_id TYPE zif_abapgit_object=>ty_deserialization_step_tt,
|
||||||
|
lt_steps TYPE ty_step_data_tt.
|
||||||
DATA: lo_folder_logic TYPE REF TO zcl_abapgit_folder_logic.
|
DATA: lo_folder_logic TYPE REF TO zcl_abapgit_folder_logic.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_result> TYPE zif_abapgit_definitions=>ty_result,
|
FIELD-SYMBOLS: <ls_result> TYPE zif_abapgit_definitions=>ty_result,
|
||||||
<ls_deser> LIKE LINE OF lt_late.
|
<lv_step_id> TYPE LINE OF zif_abapgit_object=>ty_deserialization_step_tt,
|
||||||
|
<ls_step> TYPE LINE OF ty_step_data_tt,
|
||||||
|
<ls_deser> TYPE LINE OF ty_deserialization_tt.
|
||||||
|
|
||||||
|
lt_steps = get_deserialize_steps( ).
|
||||||
|
|
||||||
lv_package = io_repo->get_package( ).
|
lv_package = io_repo->get_package( ).
|
||||||
|
|
||||||
|
@ -591,33 +607,50 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
|
|
||||||
li_obj->mo_files = lo_files.
|
li_obj->mo_files = lo_files.
|
||||||
|
|
||||||
IF li_obj->get_metadata( )-late_deser = abap_true.
|
TRY.
|
||||||
APPEND INITIAL LINE TO lt_late ASSIGNING <ls_deser>.
|
* Get required steps for deserialize the object
|
||||||
ELSEIF li_obj->get_metadata( )-ddic = abap_true.
|
lt_steps_id = li_obj->get_deserialize_steps( ).
|
||||||
APPEND INITIAL LINE TO lt_ddic ASSIGNING <ls_deser>.
|
|
||||||
ELSE.
|
LOOP AT lt_steps_id ASSIGNING <lv_step_id>.
|
||||||
APPEND INITIAL LINE TO lt_rest ASSIGNING <ls_deser>.
|
READ TABLE lt_steps WITH KEY step_id = <lv_step_id> ASSIGNING <ls_step>.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF <ls_step>-is_ddic = abap_true AND li_obj->get_metadata( )-ddic = abap_false.
|
||||||
|
" DDIC only for DDIC objects
|
||||||
|
zcx_abapgit_exception=>raise( |Step { <lv_step_id> } is only for DDIC objects| ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
APPEND INITIAL LINE TO <ls_step>-objects ASSIGNING <ls_deser>.
|
||||||
<ls_deser>-item = ls_item.
|
<ls_deser>-item = ls_item.
|
||||||
<ls_deser>-obj = li_obj.
|
<ls_deser>-obj = li_obj.
|
||||||
<ls_deser>-xml = lo_xml.
|
<ls_deser>-xml = lo_xml.
|
||||||
<ls_deser>-package = lv_package.
|
<ls_deser>-package = lv_package.
|
||||||
|
|
||||||
CLEAR: lv_path, lv_package.
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
deserialize_objects( EXPORTING it_objects = lt_ddic
|
CATCH cx_sy_dyn_call_illegal_method.
|
||||||
iv_ddic = abap_true
|
" Fallback (can be removed if all objects implement the new IF method get_deserialize_steps)
|
||||||
iv_descr = 'DDIC'
|
IF li_obj->get_metadata( )-late_deser = abap_true.
|
||||||
CHANGING ct_files = rt_accessed_files ).
|
READ TABLE lt_steps WITH KEY step_id = zif_abapgit_object=>gc_step_id-late ASSIGNING <ls_step>.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
ELSEIF li_obj->get_metadata( )-ddic = abap_true.
|
||||||
|
READ TABLE lt_steps WITH KEY step_id = zif_abapgit_object=>gc_step_id-ddic ASSIGNING <ls_step>.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
ELSE.
|
||||||
|
READ TABLE lt_steps WITH KEY step_id = zif_abapgit_object=>gc_step_id-abap ASSIGNING <ls_step>.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
ENDIF.
|
||||||
|
APPEND INITIAL LINE TO <ls_step>-objects ASSIGNING <ls_deser>.
|
||||||
|
<ls_deser>-item = ls_item.
|
||||||
|
<ls_deser>-obj = li_obj.
|
||||||
|
<ls_deser>-xml = lo_xml.
|
||||||
|
<ls_deser>-package = lv_package.
|
||||||
|
ENDTRY.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
deserialize_objects( EXPORTING it_objects = lt_rest
|
* run deserialize for all step and it's objets
|
||||||
iv_descr = 'Objects'
|
SORT lt_steps BY order.
|
||||||
CHANGING ct_files = rt_accessed_files ).
|
LOOP AT lt_steps ASSIGNING <ls_step>.
|
||||||
|
deserialize_objects( EXPORTING is_step = <ls_step>
|
||||||
deserialize_objects( EXPORTING it_objects = lt_late
|
|
||||||
iv_descr = 'Late'
|
|
||||||
CHANGING ct_files = rt_accessed_files ).
|
CHANGING ct_files = rt_accessed_files ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
update_package_tree( io_repo->get_package( ) ).
|
update_package_tree( io_repo->get_package( ) ).
|
||||||
|
|
||||||
|
@ -658,24 +691,25 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: li_progress TYPE REF TO zif_abapgit_progress.
|
DATA: li_progress TYPE REF TO zif_abapgit_progress.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_obj> LIKE LINE OF it_objects.
|
FIELD-SYMBOLS: <ls_obj> LIKE LINE OF is_step-objects.
|
||||||
|
|
||||||
|
|
||||||
zcl_abapgit_objects_activation=>clear( ).
|
zcl_abapgit_objects_activation=>clear( ).
|
||||||
|
|
||||||
li_progress = zcl_abapgit_progress=>get_instance( lines( it_objects ) ).
|
li_progress = zcl_abapgit_progress=>get_instance( lines( is_step-objects ) ).
|
||||||
|
|
||||||
LOOP AT it_objects ASSIGNING <ls_obj>.
|
LOOP AT is_step-objects ASSIGNING <ls_obj>.
|
||||||
li_progress->show(
|
li_progress->show(
|
||||||
iv_current = sy-tabix
|
iv_current = sy-tabix
|
||||||
iv_text = |Deserialize { iv_descr } - { <ls_obj>-item-obj_name }| ) ##NO_TEXT.
|
iv_text = |Deserialize { is_step-descr } - { <ls_obj>-item-obj_name }| ) ##NO_TEXT.
|
||||||
|
|
||||||
<ls_obj>-obj->deserialize( iv_package = <ls_obj>-package
|
<ls_obj>-obj->deserialize( iv_package = <ls_obj>-package
|
||||||
io_xml = <ls_obj>-xml ).
|
io_xml = <ls_obj>-xml
|
||||||
|
iv_step = is_step-step_id ).
|
||||||
APPEND LINES OF <ls_obj>-obj->mo_files->get_accessed_files( ) TO ct_files.
|
APPEND LINES OF <ls_obj>-obj->mo_files->get_accessed_files( ) TO ct_files.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
zcl_abapgit_objects_activation=>activate( iv_ddic ).
|
zcl_abapgit_objects_activation=>activate( iv_ddic = is_step-is_ddic ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -724,6 +758,32 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_deserialize_steps.
|
||||||
|
FIELD-SYMBOLS: <ls_step> TYPE LINE OF ty_step_data_tt.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO rt_steps ASSIGNING <ls_step>.
|
||||||
|
<ls_step>-step_id = zif_abapgit_object=>gc_step_id-ddic.
|
||||||
|
<ls_step>-descr = 'Import DDIC objects'.
|
||||||
|
<ls_step>-is_ddic = abap_true.
|
||||||
|
<ls_step>-syntax_check = abap_false.
|
||||||
|
<ls_step>-order = 1.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO rt_steps ASSIGNING <ls_step>.
|
||||||
|
<ls_step>-step_id = zif_abapgit_object=>gc_step_id-abap.
|
||||||
|
<ls_step>-descr = 'Import objects main'.
|
||||||
|
<ls_step>-is_ddic = abap_false.
|
||||||
|
<ls_step>-syntax_check = abap_false.
|
||||||
|
<ls_step>-order = 2.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO rt_steps ASSIGNING <ls_step>.
|
||||||
|
<ls_step>-step_id = zif_abapgit_object=>gc_step_id-late.
|
||||||
|
<ls_step>-descr = 'Import late objects'.
|
||||||
|
<ls_step>-is_ddic = abap_false.
|
||||||
|
<ls_step>-syntax_check = abap_true.
|
||||||
|
<ls_step>-order = 3.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD is_active.
|
METHOD is_active.
|
||||||
|
|
||||||
DATA: li_object TYPE REF TO zif_abapgit_object.
|
DATA: li_object TYPE REF TO zif_abapgit_object.
|
||||||
|
|
|
@ -137,7 +137,7 @@ INTERFACE zif_abapgit_definitions
|
||||||
BEGIN OF ty_metadata,
|
BEGIN OF ty_metadata,
|
||||||
class TYPE string,
|
class TYPE string,
|
||||||
version TYPE string,
|
version TYPE string,
|
||||||
late_deser TYPE abap_bool,
|
late_deser TYPE abap_bool, " refactor: can be removed later. replaced by steps
|
||||||
delete_tadir TYPE abap_bool,
|
delete_tadir TYPE abap_bool,
|
||||||
ddic TYPE abap_bool,
|
ddic TYPE abap_bool,
|
||||||
END OF ty_metadata .
|
END OF ty_metadata .
|
||||||
|
|
Loading…
Reference in New Issue
Block a user