diff --git a/src/zabapgit_object_acid.prog.abap b/src/zabapgit_object_acid.prog.abap index 10607a865..efc47f9e1 100644 --- a/src/zabapgit_object_acid.prog.abap +++ b/src/zabapgit_object_acid.prog.abap @@ -146,4 +146,8 @@ CLASS lcl_object_acid IMPLEMENTATION. ENDMETHOD. "lif_object~jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_acid IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_auth.prog.abap b/src/zabapgit_object_auth.prog.abap index b0a07c348..f772b72ce 100644 --- a/src/zabapgit_object_auth.prog.abap +++ b/src/zabapgit_object_auth.prog.abap @@ -119,4 +119,8 @@ CLASS lcl_object_auth IMPLEMENTATION. ENDMETHOD. "lif_object~jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_auth IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 1561da156..755b52a00 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -987,4 +987,8 @@ CLASS lcl_object_clas IMPLEMENTATION. ENDMETHOD. + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_CLAS IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_doct.prog.abap b/src/zabapgit_object_doct.prog.abap index 93558019a..76ed284a4 100644 --- a/src/zabapgit_object_doct.prog.abap +++ b/src/zabapgit_object_doct.prog.abap @@ -151,4 +151,8 @@ CLASS lcl_object_doct IMPLEMENTATION. ENDMETHOD. "serialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_msag IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_docv.prog.abap b/src/zabapgit_object_docv.prog.abap index b5a316fba..c54655a2e 100644 --- a/src/zabapgit_object_docv.prog.abap +++ b/src/zabapgit_object_docv.prog.abap @@ -155,4 +155,8 @@ CLASS lcl_object_docv IMPLEMENTATION. ENDMETHOD. "serialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_msag IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap index ab38f2049..5f570f60a 100644 --- a/src/zabapgit_object_doma.prog.abap +++ b/src/zabapgit_object_doma.prog.abap @@ -343,4 +343,8 @@ CLASS lcl_object_doma IMPLEMENTATION. ENDMETHOD. "deserialize_texts + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_doma IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index 628fbae27..311c887d7 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -306,4 +306,8 @@ CLASS lcl_object_dtel IMPLEMENTATION. ENDMETHOD. + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_dtel IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 63137394a..95ba504f9 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -416,4 +416,8 @@ CLASS lcl_object_enho IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_enho IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap index 4ff8fcec2..e3e021e3a 100644 --- a/src/zabapgit_object_enhs.prog.abap +++ b/src/zabapgit_object_enhs.prog.abap @@ -211,4 +211,8 @@ CLASS lcl_object_enhs IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_enhs \ No newline at end of file diff --git a/src/zabapgit_object_enqu.prog.abap b/src/zabapgit_object_enqu.prog.abap index 802845b5f..617f5402b 100644 --- a/src/zabapgit_object_enqu.prog.abap +++ b/src/zabapgit_object_enqu.prog.abap @@ -173,4 +173,8 @@ CLASS lcl_object_enqu IMPLEMENTATION. ENDMETHOD. "deserialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_enqu IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_ensc.prog.abap b/src/zabapgit_object_ensc.prog.abap index 730d7a48c..3434d3c3f 100644 --- a/src/zabapgit_object_ensc.prog.abap +++ b/src/zabapgit_object_ensc.prog.abap @@ -191,4 +191,8 @@ CLASS lcl_object_ensc IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_ensc \ No newline at end of file diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index bfbe8a399..3d68aba65 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -654,4 +654,8 @@ CLASS lcl_object_fugr IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_fugr IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_iarp.prog.abap b/src/zabapgit_object_iarp.prog.abap index 66ae8b2f3..9d6fb5bed 100644 --- a/src/zabapgit_object_iarp.prog.abap +++ b/src/zabapgit_object_iarp.prog.abap @@ -188,4 +188,8 @@ CLASS lcl_object_iarp IMPLEMENTATION. lcx_exception=>raise( 'todo, IARP, jump' ). ENDMETHOD. "lif_object~jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_iarp IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_iasp.prog.abap b/src/zabapgit_object_iasp.prog.abap index f1a345829..30ee4e5f7 100644 --- a/src/zabapgit_object_iasp.prog.abap +++ b/src/zabapgit_object_iasp.prog.abap @@ -188,4 +188,8 @@ CLASS lcl_object_iasp IMPLEMENTATION. lcx_exception=>raise( 'todo, IASP, jump' ). ENDMETHOD. "lif_object~jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_iasp IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_iatu.prog.abap b/src/zabapgit_object_iatu.prog.abap index f0b5a4a7e..2373edf40 100644 --- a/src/zabapgit_object_iatu.prog.abap +++ b/src/zabapgit_object_iatu.prog.abap @@ -205,4 +205,8 @@ CLASS lcl_object_iatu IMPLEMENTATION. lcx_exception=>raise( 'todo, IATU, jump' ). ENDMETHOD. "lif_object~jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_iatu IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_msag.prog.abap b/src/zabapgit_object_msag.prog.abap index c846270d1..1e030e260 100644 --- a/src/zabapgit_object_msag.prog.abap +++ b/src/zabapgit_object_msag.prog.abap @@ -179,6 +179,11 @@ CLASS lcl_object_msag IMPLEMENTATION. io_xml->add( ig_data = lt_source iv_name = 'T100' ). + ENDMETHOD. "serialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_msag IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_nrob.prog.abap b/src/zabapgit_object_nrob.prog.abap index b1aa46c79..47edb4254 100644 --- a/src/zabapgit_object_nrob.prog.abap +++ b/src/zabapgit_object_nrob.prog.abap @@ -268,4 +268,8 @@ CLASS lcl_object_nrob IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_nrob IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_para.prog.abap b/src/zabapgit_object_para.prog.abap index 4523cc560..585093d68 100644 --- a/src/zabapgit_object_para.prog.abap +++ b/src/zabapgit_object_para.prog.abap @@ -147,4 +147,8 @@ CLASS lcl_object_para IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_para IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_pinf.prog.abap b/src/zabapgit_object_pinf.prog.abap index 857d750f2..873c19355 100644 --- a/src/zabapgit_object_pinf.prog.abap +++ b/src/zabapgit_object_pinf.prog.abap @@ -348,4 +348,8 @@ CLASS lcl_object_pinf IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_PINF IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap index d04c51d5b..d3b29e3c8 100644 --- a/src/zabapgit_object_prog.prog.abap +++ b/src/zabapgit_object_prog.prog.abap @@ -161,4 +161,8 @@ CLASS lcl_object_prog IMPLEMENTATION. ENDMETHOD. "lif_serialize~deserialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_prog IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index d40ed907b..0536d687c 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -36,6 +36,7 @@ INCLUDE zabapgit_object_ssfo. INCLUDE zabapgit_object_ssst. INCLUDE zabapgit_object_susc. INCLUDE zabapgit_object_suso. +INCLUDE zabapgit_object_tabl_valid. INCLUDE zabapgit_object_tabl. INCLUDE zabapgit_object_tobj. INCLUDE zabapgit_object_tran. diff --git a/src/zabapgit_object_sfbf.prog.abap b/src/zabapgit_object_sfbf.prog.abap index 4af733532..5caaf627a 100644 --- a/src/zabapgit_object_sfbf.prog.abap +++ b/src/zabapgit_object_sfbf.prog.abap @@ -233,4 +233,8 @@ CLASS lcl_object_sfbf IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_SFBF IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_sfbs.prog.abap b/src/zabapgit_object_sfbs.prog.abap index e3e4c28da..4bbd85222 100644 --- a/src/zabapgit_object_sfbs.prog.abap +++ b/src/zabapgit_object_sfbs.prog.abap @@ -207,4 +207,10 @@ CLASS lcl_object_sfbs IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + + + ENDCLASS. "lcl_object_SFBS IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_sfsw.prog.abap b/src/zabapgit_object_sfsw.prog.abap index cff1206f2..33e9c21ff 100644 --- a/src/zabapgit_object_sfsw.prog.abap +++ b/src/zabapgit_object_sfsw.prog.abap @@ -201,4 +201,8 @@ CLASS lcl_object_sfsw IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_sfsw IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap index e1b2bce82..d7789e964 100644 --- a/src/zabapgit_object_shi3.prog.abap +++ b/src/zabapgit_object_shi3.prog.abap @@ -330,4 +330,8 @@ CLASS lcl_object_shi3 IMPLEMENTATION. ENDMETHOD. "deserialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_shi3 IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_shlp.prog.abap b/src/zabapgit_object_shlp.prog.abap index ba905258f..9d32eb6db 100644 --- a/src/zabapgit_object_shlp.prog.abap +++ b/src/zabapgit_object_shlp.prog.abap @@ -203,4 +203,8 @@ CLASS lcl_object_shlp IMPLEMENTATION. ENDMETHOD. "deserialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_shlp IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap index 343a4e4f4..3ff67774b 100644 --- a/src/zabapgit_object_sicf.prog.abap +++ b/src/zabapgit_object_sicf.prog.abap @@ -418,4 +418,8 @@ CLASS lcl_object_sicf IMPLEMENTATION. lcx_exception=>raise( 'todo, SICF, jump' ). ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_sicf IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_smim.prog.abap b/src/zabapgit_object_smim.prog.abap index ce83ec3be..b03edb856 100644 --- a/src/zabapgit_object_smim.prog.abap +++ b/src/zabapgit_object_smim.prog.abap @@ -317,4 +317,8 @@ CLASS lcl_object_smim IMPLEMENTATION. lcx_exception=>raise( 'todo, SMIM, jump' ). ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_smim IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_splo.prog.abap b/src/zabapgit_object_splo.prog.abap index 784192728..c8a958482 100644 --- a/src/zabapgit_object_splo.prog.abap +++ b/src/zabapgit_object_splo.prog.abap @@ -127,4 +127,8 @@ CLASS lcl_object_splo IMPLEMENTATION. lcx_exception=>raise( 'todo, jump, SPLO' ). ENDMETHOD. "lif_object~jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_splo IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_ssfo.prog.abap b/src/zabapgit_object_ssfo.prog.abap index fc0c3b8cd..efef1e0c8 100644 --- a/src/zabapgit_object_ssfo.prog.abap +++ b/src/zabapgit_object_ssfo.prog.abap @@ -238,4 +238,8 @@ CLASS lcl_object_ssfo IMPLEMENTATION. ENDMETHOD. "deserialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_ssfo IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_ssst.prog.abap b/src/zabapgit_object_ssst.prog.abap index 97a64a3c9..40dced694 100644 --- a/src/zabapgit_object_ssst.prog.abap +++ b/src/zabapgit_object_ssst.prog.abap @@ -203,4 +203,8 @@ CLASS lcl_object_ssst IMPLEMENTATION. lcx_exception=>raise( 'todo' ). ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_ssst IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap index 165a100f0..1583f08fe 100644 --- a/src/zabapgit_object_susc.prog.abap +++ b/src/zabapgit_object_susc.prog.abap @@ -122,4 +122,8 @@ CLASS lcl_object_susc IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_susc IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_suso.prog.abap b/src/zabapgit_object_suso.prog.abap index 208c75eb8..09eace64a 100644 --- a/src/zabapgit_object_suso.prog.abap +++ b/src/zabapgit_object_suso.prog.abap @@ -169,4 +169,8 @@ CLASS lcl_object_suso IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_suso IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 75dfaa72d..fcd1c4dac 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -7,6 +7,7 @@ *----------------------------------------------------------------------* * *----------------------------------------------------------------------* + CLASS lcl_object_tabl DEFINITION INHERITING FROM lcl_objects_super FINAL. PUBLIC SECTION. @@ -379,4 +380,32 @@ CLASS lcl_object_tabl IMPLEMENTATION. ENDMETHOD. "deserialize + METHOD lif_object~compare_to_remote_version. + DATA: lo_table_validation TYPE REF TO lcl_object_tabl_validation, + lo_local_version_output TYPE REF TO lcl_xml_output, + lo_local_version_input TYPE REF TO lcl_xml_input, + lv_validation_text TYPE string. + + CREATE OBJECT lo_local_version_output. + me->lif_object~serialize( lo_local_version_output ). + + CREATE OBJECT lo_local_version_input + EXPORTING + iv_xml = lo_local_version_output->render( ). + + CREATE OBJECT lo_table_validation. + + lv_validation_text = lo_table_validation->validate( + io_remote_version = io_remote_version_xml + io_local_version = lo_local_version_input ). + IF lv_validation_text IS NOT INITIAL. + lv_validation_text = |Database Table { ms_item-obj_name }: { lv_validation_text }|. + CREATE OBJECT ro_comparison_result TYPE lcl_tabl_validation_dialog + EXPORTING + iv_message = lv_validation_text. + ELSE. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDIF. + ENDMETHOD. + ENDCLASS. "lcl_object_TABL IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_tabl_valid.prog.abap b/src/zabapgit_object_tabl_valid.prog.abap new file mode 100644 index 000000000..0247006be --- /dev/null +++ b/src/zabapgit_object_tabl_valid.prog.abap @@ -0,0 +1,227 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_object_tabl_valid +*&---------------------------------------------------------------------* + +CLASS lcl_object_tabl_validation DEFINITION. + PUBLIC SECTION. + METHODS validate + IMPORTING + io_remote_version TYPE REF TO lcl_xml_input + io_local_version TYPE REF TO lcl_xml_input + RETURNING + VALUE(rv_message) TYPE string + RAISING + lcx_exception. +ENDCLASS. + +CLASS lcl_tabl_validation_dialog DEFINITION. + PUBLIC SECTION. + METHODS: + constructor + IMPORTING + iv_message TYPE string. + INTERFACES: lif_object_comparison_result. + PRIVATE SECTION. + DATA mv_message TYPE string. + DATA mv_halt TYPE string. + +ENDCLASS. + +CLASS lcl_object_tabl_validation IMPLEMENTATION. + + METHOD validate. + DATA: lt_previous_table_fields TYPE TABLE OF dd03p, + ls_previous_table_field LIKE LINE OF lt_previous_table_fields, + lt_current_table_fields TYPE TABLE OF dd03p, + ls_current_table_field LIKE LINE OF lt_current_table_fields. + io_remote_version->read( + EXPORTING + iv_name = 'DD03P_TABLE' + CHANGING + cg_data = lt_previous_table_fields ). + io_local_version->read( + EXPORTING + iv_name = 'DD03P_TABLE' + CHANGING + cg_data = lt_current_table_fields ). + + LOOP AT lt_previous_table_fields INTO ls_previous_table_field. + READ TABLE lt_current_table_fields WITH KEY fieldname = ls_previous_table_field-fieldname + INTO ls_current_table_field. + IF sy-subrc = 0. + IF ls_current_table_field-rollname <> ls_previous_table_field-rollname. + rv_message = 'Fields were changed. This may lead to inconsistencies.'. + ENDIF. + ELSE. + rv_message = 'Fields were changed. This may lead to inconsistencies.'. + ENDIF. + ENDLOOP. + ENDMETHOD. + +ENDCLASS. + +CLASS lcl_tabl_validation_dialog IMPLEMENTATION. + METHOD constructor. + mv_message = iv_message. + ENDMETHOD. + METHOD lif_object_comparison_result~is_result_complete_halt. + rv_response = mv_halt. + ENDMETHOD. + + METHOD lif_object_comparison_result~show_confirmation_dialog. + DATA lv_answer TYPE string. + TRY. + lv_answer = lcl_popups=>popup_to_confirm( + titlebar = 'Warning' + text_question = mv_message + text_button_1 = 'Abort' + icon_button_1 = 'ICON_CANCEL' + text_button_2 = 'Pull anyway' + icon_button_2 = 'ICON_OKAY' + default_button = '2' + display_cancel_button = abap_false ). + CATCH lcx_exception. + mv_halt = abap_true. + ENDTRY. + + IF lv_answer = 1. + mv_halt = abap_true. + ENDIF. + ENDMETHOD. +ENDCLASS. + + +CLASS lct_table_validation DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. + PRIVATE SECTION. + METHODS: + setup, + type_changed FOR TESTING RAISING lcx_exception, + no_type_changes FOR TESTING RAISING lcx_exception, + field_not_found FOR TESTING RAISING lcx_exception, + no_fields_no_message FOR TESTING RAISING lcx_exception, + create_xmls + RAISING + lcx_exception. + DATA: mo_table_validator TYPE REF TO lcl_object_tabl_validation, + mo_previous_version_out_xml TYPE REF TO lcl_xml_output, + mo_previous_version_input_xml TYPE REF TO lcl_xml_input, + mo_current_version_out_xml TYPE REF TO lcl_xml_output, + mo_current_version_input_xml TYPE REF TO lcl_xml_input, + mt_previous_table_fields TYPE TABLE OF dd03p, + mt_current_table_fields TYPE TABLE OF dd03p, + mv_validation_message TYPE string. + +ENDCLASS. + +CLASS lct_table_validation IMPLEMENTATION. + METHOD setup. + CREATE OBJECT mo_table_validator. + ENDMETHOD. + METHOD type_changed. + DATA: + ls_previous_table_field LIKE LINE OF mt_previous_table_fields, + ls_current_table_field LIKE LINE OF mt_current_table_fields. + + ls_previous_table_field-fieldname = 'FIELD1'. + ls_previous_table_field-rollname = 'INT4'. + APPEND ls_previous_table_field TO mt_previous_table_fields. + + ls_current_table_field-fieldname = 'FIELD1'. + ls_current_table_field-rollname = 'CHAR30'. + APPEND ls_current_table_field TO mt_current_table_fields. + + create_xmls( ). + + mv_validation_message = mo_table_validator->validate( + io_remote_version = mo_previous_version_input_xml + io_local_version = mo_current_version_input_xml ). + + cl_abap_unit_assert=>assert_equals( + act = mv_validation_message + exp = 'Fields were changed. This may lead to inconsistencies.' ). + ENDMETHOD. + + METHOD no_type_changes. + DATA: + ls_previous_table_field LIKE LINE OF mt_previous_table_fields, + ls_current_table_field LIKE LINE OF mt_current_table_fields. + + ls_previous_table_field-fieldname = 'FIELD1'. + ls_previous_table_field-rollname = 'INT4'. + APPEND ls_previous_table_field TO mt_previous_table_fields. + + mt_current_table_fields = mt_previous_table_fields. + + create_xmls( ). + + mv_validation_message = mo_table_validator->validate( + io_remote_version = mo_previous_version_input_xml + io_local_version = mo_current_version_input_xml ). + + cl_abap_unit_assert=>assert_equals( + act = mv_validation_message + exp = '' ). + ENDMETHOD. + + METHOD field_not_found. + DATA: + ls_previous_table_field LIKE LINE OF mt_previous_table_fields, + ls_current_table_field LIKE LINE OF mt_current_table_fields. + + ls_previous_table_field-fieldname = 'FIELD1'. + ls_previous_table_field-rollname = 'INT4'. + APPEND ls_previous_table_field TO mt_previous_table_fields. + + ls_current_table_field-fieldname = 'ANOTHER_FIELD'. + ls_current_table_field-rollname = 'CHAR30'. + APPEND ls_current_table_field TO mt_current_table_fields. + + create_xmls( ). + + mv_validation_message = mo_table_validator->validate( + io_remote_version = mo_previous_version_input_xml + io_local_version = mo_current_version_input_xml ). + + cl_abap_unit_assert=>assert_equals( + act = mv_validation_message + exp = 'Fields were changed. This may lead to inconsistencies.' ). + ENDMETHOD. + + METHOD no_fields_no_message. + DATA: + ls_previous_table_field LIKE LINE OF mt_previous_table_fields, + ls_current_table_field LIKE LINE OF mt_current_table_fields. + + create_xmls( ). + + mv_validation_message = mo_table_validator->validate( + io_remote_version = mo_previous_version_input_xml + io_local_version = mo_current_version_input_xml ). + + cl_abap_unit_assert=>assert_initial( mv_validation_message ). + ENDMETHOD. + + + METHOD create_xmls. + CREATE OBJECT mo_previous_version_out_xml. + mo_previous_version_out_xml->add( + iv_name = 'DD03P_TABLE' + ig_data = mt_previous_table_fields ). + + CREATE OBJECT mo_previous_version_input_xml + EXPORTING + iv_xml = mo_previous_version_out_xml->render( ). + + CREATE OBJECT mo_current_version_out_xml. + mo_current_version_out_xml->add( + iv_name = 'DD03P_TABLE' + ig_data = mt_current_table_fields ). + + CREATE OBJECT mo_current_version_input_xml + EXPORTING + iv_xml = mo_current_version_out_xml->render( ). + ENDMETHOD. + + + +ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_object_tabl_valid.prog.xml b/src/zabapgit_object_tabl_valid.prog.xml new file mode 100644 index 000000000..0a56f24a3 --- /dev/null +++ b/src/zabapgit_object_tabl_valid.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_TABL_VALID + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_TABL_VALID + 34 + + + + + + diff --git a/src/zabapgit_object_tobj.prog.abap b/src/zabapgit_object_tobj.prog.abap index 39198e726..3319bbee6 100644 --- a/src/zabapgit_object_tobj.prog.abap +++ b/src/zabapgit_object_tobj.prog.abap @@ -183,4 +183,8 @@ CLASS lcl_object_tobj IMPLEMENTATION. lcx_exception=>raise( 'todo, TOBJ jump' ). ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_tobj IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap index a483192f2..5f4b9cbff 100644 --- a/src/zabapgit_object_tran.prog.abap +++ b/src/zabapgit_object_tran.prog.abap @@ -413,4 +413,8 @@ CLASS lcl_object_tran IMPLEMENTATION. ENDMETHOD. "serialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_tran IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap index ec2421f99..b85104ebc 100644 --- a/src/zabapgit_object_ttyp.prog.abap +++ b/src/zabapgit_object_ttyp.prog.abap @@ -182,4 +182,8 @@ CLASS lcl_object_ttyp IMPLEMENTATION. ENDMETHOD. "deserialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_ttyp IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_type.prog.abap b/src/zabapgit_object_type.prog.abap index 5a47d8ed9..8c7273888 100644 --- a/src/zabapgit_object_type.prog.abap +++ b/src/zabapgit_object_type.prog.abap @@ -205,4 +205,8 @@ CLASS lcl_object_type IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_type IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_vcls.prog.abap b/src/zabapgit_object_vcls.prog.abap index e6ad172aa..0fad2048b 100644 --- a/src/zabapgit_object_vcls.prog.abap +++ b/src/zabapgit_object_vcls.prog.abap @@ -189,4 +189,8 @@ CLASS lcl_object_vcls IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_vcls IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index b8b773741..31481e426 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -217,4 +217,8 @@ CLASS lcl_object_view IMPLEMENTATION. ENDMETHOD. "deserialize + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_view IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap index 89b99283b..1fb7f5c5a 100644 --- a/src/zabapgit_object_w3xx.prog.abap +++ b/src/zabapgit_object_w3xx.prog.abap @@ -361,6 +361,10 @@ CLASS lcl_object_w3super IMPLEMENTATION. ENDMETHOD. " get_ext. + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION *----------------------------------------------------------------------* diff --git a/src/zabapgit_object_wdya.prog.abap b/src/zabapgit_object_wdya.prog.abap index 954f78795..3d1defc49 100644 --- a/src/zabapgit_object_wdya.prog.abap +++ b/src/zabapgit_object_wdya.prog.abap @@ -211,4 +211,8 @@ CLASS lcl_object_wdya IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_wdya IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_wdyn.prog.abap b/src/zabapgit_object_wdyn.prog.abap index 42f603e28..5f9763e4c 100644 --- a/src/zabapgit_object_wdyn.prog.abap +++ b/src/zabapgit_object_wdyn.prog.abap @@ -647,4 +647,8 @@ CLASS lcl_object_wdyn IMPLEMENTATION. ENDMETHOD. "jump + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_wdyn IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_webi.prog.abap b/src/zabapgit_object_webi.prog.abap index d74dc4d56..e3a690dbb 100644 --- a/src/zabapgit_object_webi.prog.abap +++ b/src/zabapgit_object_webi.prog.abap @@ -443,4 +443,8 @@ CLASS lcl_object_webi IMPLEMENTATION. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_webi IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_xslt.prog.abap b/src/zabapgit_object_xslt.prog.abap index 26eaf6905..dc359b965 100644 --- a/src/zabapgit_object_xslt.prog.abap +++ b/src/zabapgit_object_xslt.prog.abap @@ -188,4 +188,8 @@ CLASS lcl_object_xslt IMPLEMENTATION. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_object_xslt IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 7b1e4085c..16a01b499 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -231,14 +231,14 @@ CLASS lcl_objects_files DEFINITION FINAL. add IMPORTING is_file TYPE ty_file, add_raw - IMPORTING iv_extra TYPE clike OPTIONAL - iv_ext TYPE string - iv_data TYPE xstring + IMPORTING iv_extra TYPE clike OPTIONAL + iv_ext TYPE string + iv_data TYPE xstring RAISING lcx_exception, read_raw - IMPORTING iv_extra TYPE clike OPTIONAL - iv_ext TYPE string - RETURNING VALUE(rv_data) TYPE xstring + IMPORTING iv_extra TYPE clike OPTIONAL + iv_ext TYPE string + RETURNING VALUE(rv_data) TYPE xstring RAISING lcx_exception, get_files RETURNING VALUE(rt_files) TYPE ty_files_tt, @@ -265,6 +265,31 @@ CLASS lcl_objects_files DEFINITION FINAL. ENDCLASS. "lcl_objects_files DEFINITION +INTERFACE lif_object_comparison_result. + METHODS: + show_confirmation_dialog, + is_result_complete_halt + RETURNING VALUE(rv_response) TYPE abap_bool. + +ENDINTERFACE. + +"Null Object Pattern +CLASS lcl_null_comparison_result DEFINITION FINAL. + PUBLIC SECTION. + INTERFACES lif_object_comparison_result. +ENDCLASS. +CLASS lcl_null_comparison_result IMPLEMENTATION. + + METHOD lif_object_comparison_result~is_result_complete_halt. + rv_response = abap_false. + ENDMETHOD. + + METHOD lif_object_comparison_result~show_confirmation_dialog. + RETURN. + ENDMETHOD. + +ENDCLASS. + *----------------------------------------------------------------------* * INTERFACE lif_object DEFINITION *----------------------------------------------------------------------* @@ -296,6 +321,11 @@ INTERFACE lif_object. IMPORTING iv_timestamp TYPE timestamp RETURNING VALUE(rv_changed) TYPE abap_bool RAISING lcx_exception. + METHODS: + compare_to_remote_version + IMPORTING io_remote_version_xml TYPE REF TO lcl_xml_input + RETURNING VALUE(ro_comparison_result) TYPE REF TO lif_object_comparison_result + RAISING lcx_exception. DATA: mo_files TYPE REF TO lcl_objects_files. @@ -763,6 +793,10 @@ CLASS lcl_objects_bridge IMPLEMENTATION. ENDMETHOD. "class_constructor + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + ENDCLASS. "lcl_objects_bridge IMPLEMENTATION ********************************************************************** @@ -827,7 +861,7 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super. TYPES: ty_spaces_tt TYPE STANDARD TABLE OF i WITH DEFAULT KEY. TYPES: BEGIN OF ty_tpool. - INCLUDE TYPE textpool. + INCLUDE TYPE textpool. TYPES: split TYPE c LENGTH 8. TYPES: END OF ty_tpool. @@ -1701,4 +1735,12 @@ CLASS lcl_objects DEFINITION FINAL. IMPORTING is_item TYPE ty_item RAISING lcx_exception. + CLASS-METHODS compare_remote_to_local + IMPORTING + io_object TYPE REF TO lif_object + it_remote TYPE ty_files_tt + is_result TYPE ty_result + RAISING + lcx_exception. + ENDCLASS. "lcl_object DEFINITION \ No newline at end of file diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index c79517970..77130a3af 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -589,17 +589,18 @@ CLASS lcl_objects IMPLEMENTATION. METHOD deserialize. - DATA: ls_item TYPE ty_item, - lv_cancel TYPE abap_bool, - li_obj TYPE REF TO lif_object, - lt_remote TYPE ty_files_tt, - lv_package TYPE devclass, - lo_files TYPE REF TO lcl_objects_files, - lo_xml TYPE REF TO lcl_xml_input, - lt_results TYPE ty_results_tt, - lt_late TYPE TABLE OF ty_late. + DATA: ls_item TYPE ty_item, + lv_cancel TYPE abap_bool, + li_obj TYPE REF TO lif_object, + lt_remote TYPE ty_files_tt, + ls_remote_file TYPE ty_file, + lv_package TYPE devclass, + lo_files TYPE REF TO lcl_objects_files, + lo_xml TYPE REF TO lcl_xml_input, + lt_results TYPE ty_results_tt, + lt_late TYPE TABLE OF ty_late. - FIELD-SYMBOLS: LIKE LINE OF lt_results, + FIELD-SYMBOLS: TYPE ty_result, LIKE LINE OF lt_late. @@ -655,6 +656,11 @@ CLASS lcl_objects IMPLEMENTATION. iv_language = io_repo->get_master_language( ) is_metadata = lo_xml->get_metadata( ) ). + compare_remote_to_local( + io_object = li_obj + it_remote = lt_remote + is_result = ). + li_obj->mo_files = lo_files. IF li_obj->get_metadata( )-late_deser = abap_true. @@ -665,6 +671,7 @@ CLASS lcl_objects IMPLEMENTATION. CONTINUE. ENDIF. + li_obj->deserialize( iv_package = lv_package io_xml = lo_xml ). @@ -686,4 +693,34 @@ CLASS lcl_objects IMPLEMENTATION. ENDMETHOD. "deserialize + + METHOD compare_remote_to_local. + + DATA ls_remote_file TYPE ty_file. + + DATA: + lo_remote_version TYPE REF TO lcl_xml_input, + lo_comparison_result TYPE REF TO lif_object_comparison_result. + + IF is_result-filename CS '.XML'. + READ TABLE it_remote WITH KEY filename = is_result-filename INTO ls_remote_file. + + "if file does not exist in remote, we don't need to validate + IF sy-subrc = 0. + CREATE OBJECT lo_remote_version + EXPORTING + iv_xml = lcl_convert=>xstring_to_string_utf8( ls_remote_file-data ). + lo_comparison_result = io_object->compare_to_remote_version( lo_remote_version ). + lo_comparison_result->show_confirmation_dialog( ). + + IF lo_comparison_result->is_result_complete_halt( ) = abap_true. + RAISE EXCEPTION TYPE lcx_exception + EXPORTING + iv_text = 'Deserialization aborted by user'. + ENDIF. + ENDIF. + ENDIF. + + ENDMETHOD. + ENDCLASS. "lcl_objects IMPLEMENTATION \ No newline at end of file