Merge pull request #458 from EduardoCopat/warning-when-pulling-db-changes

Warning when pulling db changes - Issue #296
This commit is contained in:
Lars Hvam 2016-11-23 16:32:34 +01:00 committed by GitHub
commit 8a5ee8d358
49 changed files with 576 additions and 17 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZABAPGIT_OBJECT_TABL_VALID</NAME>
<STATE>A</STATE>
<SQLX/>
<EDTX/>
<VARCL>X</VARCL>
<DBAPL/>
<DBNA/>
<CLAS/>
<TYPE/>
<OCCURS/>
<SUBC>I</SUBC>
<APPL/>
<SECU/>
<CNAM/>
<CDAT>0000-00-00</CDAT>
<UNAM/>
<UDAT>0000-00-00</UDAT>
<VERN/>
<LEVL/>
<RSTAT/>
<RMAND/>
<RLOAD>E</RLOAD>
<FIXPT/>
<SSET/>
<SDATE>0000-00-00</SDATE>
<STIME/>
<IDATE>0000-00-00</IDATE>
<ITIME/>
<LDBNAME/>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<TPOOL>
<item>
<ID>R</ID>
<KEY/>
<ENTRY>Include ZABAPGIT_OBJECT_TABL_VALID</ENTRY>
<LENGTH>34</LENGTH>
<SPLIT/>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
*----------------------------------------------------------------------*

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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: <ls_result> LIKE LINE OF lt_results,
FIELD-SYMBOLS: <ls_result> TYPE ty_result,
<ls_late> 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 = <ls_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