From 6e77e7d30c2791486e0fce1b4fa419412f07ce21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Tue, 7 Nov 2017 21:30:24 +0000 Subject: [PATCH 1/4] First working version DDLX --- src/zabapgit_object_ddlx.prog.abap | 163 ++++++++++++++++++++++ src/zabapgit_object_ddlx.prog.xml | 25 ++++ src/zabapgit_object_serializing.prog.abap | 1 + 3 files changed, 189 insertions(+) create mode 100644 src/zabapgit_object_ddlx.prog.abap create mode 100644 src/zabapgit_object_ddlx.prog.xml diff --git a/src/zabapgit_object_ddlx.prog.abap b/src/zabapgit_object_ddlx.prog.abap new file mode 100644 index 000000000..2b115c23b --- /dev/null +++ b/src/zabapgit_object_ddlx.prog.abap @@ -0,0 +1,163 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_object_ddlx +*&---------------------------------------------------------------------* + +CLASS lcl_object_ddlx DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + METHODS: + constructor + IMPORTING + is_item TYPE zif_abapgit_definitions=>ty_item + iv_language TYPE spras. + + DATA: mo_persistence TYPE REF TO if_wb_object_persist. + +ENDCLASS. + +CLASS lcl_object_ddlx IMPLEMENTATION. + + METHOD constructor. + + super->constructor( is_item = is_item + iv_language = iv_language ). + + mo_persistence = NEW cl_ddlx_adt_object_persist( ). + + ENDMETHOD. + + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. + + METHOD lif_object~changed_by. + rv_user = c_user_unknown. + ENDMETHOD. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + + rs_metadata-ddic = abap_true. + rs_metadata-delete_tadir = abap_true. + ENDMETHOD. + + METHOD lif_object~exists. + + rv_bool = abap_true. + + TRY. + mo_persistence->get( p_object_key = CONV #( ms_item-obj_name ) + p_version = 'A' + p_existence_check_only = abap_true ). + + CATCH cx_swb_exception. + rv_bool = abap_false. + ENDTRY. + + ENDMETHOD. + + METHOD lif_object~jump. + + TRY. + + jump_adt( i_obj_name = ms_item-obj_name + i_obj_type = ms_item-obj_type ). + + CATCH zcx_abapgit_exception. + zcx_abapgit_exception=>raise( 'DDLX Jump Error' ). + ENDTRY. + + ENDMETHOD. + + METHOD lif_object~delete. + + DATA: lo_data_model TYPE REF TO if_wb_object_data_model, + lv_text TYPE string, + lx_error TYPE REF TO cx_root. + + TRY. + lo_data_model = NEW cl_ddlx_wb_object_data( ). + + mo_persistence->delete( p_object_key = CONV #( ms_item-obj_name ) + p_version = 'A' ). + + CATCH cx_root INTO lx_error. + lv_text = lx_error->get_text( ). + zcx_abapgit_exception=>raise( lv_text ). + ENDTRY. + + ENDMETHOD. + + METHOD lif_object~serialize. + + DATA: lo_data_model TYPE REF TO if_wb_object_data_model, + ls_data TYPE cl_ddlx_wb_object_data=>ty_object_data, + lv_text TYPE string, + lx_error TYPE REF TO cx_root. + + TRY. + lo_data_model = NEW cl_ddlx_wb_object_data( ). + + mo_persistence->get( + EXPORTING + p_object_key = CONV #( ms_item-obj_name ) + p_version = 'A' + CHANGING + p_object_data = lo_data_model ). + + lo_data_model->get_data( + IMPORTING + p_data = ls_data ). + + CLEAR: ls_data-metadata-changed_at, + ls_data-metadata-changed_by, + ls_data-metadata-created_at, + ls_data-metadata-created_by, + ls_data-metadata-package_ref-name, + ls_data-metadata-container_ref-package_name. + + io_xml->add( iv_name = 'DDLX' + ig_data = ls_data ). + + CATCH cx_root INTO lx_error. + lv_text = lx_error->get_text( ). + zcx_abapgit_exception=>raise( lv_text ). + ENDTRY. + + ENDMETHOD. + + METHOD lif_object~deserialize. + + DATA: lo_data_model TYPE REF TO if_wb_object_data_model, + ls_data TYPE cl_ddlx_wb_object_data=>ty_object_data, + lv_text TYPE string, + lx_error TYPE REF TO cx_root. + + io_xml->read( + EXPORTING + iv_name = 'DDLX' + CHANGING + cg_data = ls_data ). + + TRY. + lo_data_model = NEW cl_ddlx_wb_object_data( ). + + lo_data_model->set_data( ls_data ). + + mo_persistence->save( lo_data_model ). + + CATCH cx_root INTO lx_error. + lv_text = lx_error->get_text( ). + zcx_abapgit_exception=>raise( lv_text ). + ENDTRY. + + ENDMETHOD. + + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_object_ddlx.prog.xml b/src/zabapgit_object_ddlx.prog.xml new file mode 100644 index 000000000..dda4bcec0 --- /dev/null +++ b/src/zabapgit_object_ddlx.prog.xml @@ -0,0 +1,25 @@ + + + + + + ZABAPGIT_OBJECT_DDLX + A + X + S + D$ + I + X + D$S + X + + + + R + ZABAPGIT_OBJECT_DDLX + 20 + + + + + diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index 24d511211..30eaedab9 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -12,6 +12,7 @@ INCLUDE zabapgit_object_clas_new. INCLUDE zabapgit_object_cmpt. INCLUDE zabapgit_object_dcls. INCLUDE zabapgit_object_ddls. +INCLUDE zabapgit_object_ddlx. INCLUDE zabapgit_object_devc. INCLUDE zabapgit_object_dial. INCLUDE zabapgit_object_doct. From 0576b8e7d101191508c064a20bea80351e5ad203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Tue, 7 Nov 2017 21:37:12 +0000 Subject: [PATCH 2/4] Downport Part I --- src/zabapgit_object_ddlx.prog.abap | 34 +++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/zabapgit_object_ddlx.prog.abap b/src/zabapgit_object_ddlx.prog.abap index 2b115c23b..decab839c 100644 --- a/src/zabapgit_object_ddlx.prog.abap +++ b/src/zabapgit_object_ddlx.prog.abap @@ -25,7 +25,8 @@ CLASS lcl_object_ddlx IMPLEMENTATION. super->constructor( is_item = is_item iv_language = iv_language ). - mo_persistence = NEW cl_ddlx_adt_object_persist( ). + CREATE OBJECT mo_persistence + TYPE ('CL_DDLX_ADT_OBJECT_PERSIST'). ENDMETHOD. @@ -46,10 +47,14 @@ CLASS lcl_object_ddlx IMPLEMENTATION. METHOD lif_object~exists. + DATA: lv_object_key TYPE seu_objkey. + + lv_object_key = ms_item-obj_name. + rv_bool = abap_true. TRY. - mo_persistence->get( p_object_key = CONV #( ms_item-obj_name ) + mo_persistence->get( p_object_key = lv_object_key p_version = 'A' p_existence_check_only = abap_true ). @@ -74,14 +79,18 @@ CLASS lcl_object_ddlx IMPLEMENTATION. METHOD lif_object~delete. - DATA: lo_data_model TYPE REF TO if_wb_object_data_model, + DATA: lv_object_key TYPE seu_objkey, + lo_data_model TYPE REF TO if_wb_object_data_model, lv_text TYPE string, lx_error TYPE REF TO cx_root. - TRY. - lo_data_model = NEW cl_ddlx_wb_object_data( ). + lv_object_key = ms_item-obj_name. - mo_persistence->delete( p_object_key = CONV #( ms_item-obj_name ) + TRY. + CREATE OBJECT lo_data_model + TYPE ('CL_DDLX_WB_OBJECT_DATA'). + + mo_persistence->delete( p_object_key = lv_object_key p_version = 'A' ). CATCH cx_root INTO lx_error. @@ -93,17 +102,21 @@ CLASS lcl_object_ddlx IMPLEMENTATION. METHOD lif_object~serialize. - DATA: lo_data_model TYPE REF TO if_wb_object_data_model, + DATA: lv_object_key TYPE seu_objkey, + lo_data_model TYPE REF TO if_wb_object_data_model, ls_data TYPE cl_ddlx_wb_object_data=>ty_object_data, lv_text TYPE string, lx_error TYPE REF TO cx_root. + lv_object_key = ms_item-obj_name. + TRY. - lo_data_model = NEW cl_ddlx_wb_object_data( ). + CREATE OBJECT lo_data_model + TYPE ('CL_DDLX_WB_OBJECT_DATA'). mo_persistence->get( EXPORTING - p_object_key = CONV #( ms_item-obj_name ) + p_object_key = lv_object_key p_version = 'A' CHANGING p_object_data = lo_data_model ). @@ -143,7 +156,8 @@ CLASS lcl_object_ddlx IMPLEMENTATION. cg_data = ls_data ). TRY. - lo_data_model = NEW cl_ddlx_wb_object_data( ). + CREATE OBJECT lo_data_model + TYPE ('CL_DDLX_WB_OBJECT_DATA'). lo_data_model->set_data( ls_data ). From 2d4c4cec85829df390fe68a76b6e345ed9b7a4d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 8 Nov 2017 19:16:49 +0000 Subject: [PATCH 3/4] Downport II --- src/zabapgit_object_ddlx.prog.abap | 156 +++++++++++++++++++++-------- 1 file changed, 115 insertions(+), 41 deletions(-) diff --git a/src/zabapgit_object_ddlx.prog.abap b/src/zabapgit_object_ddlx.prog.abap index decab839c..2ecdaa3b9 100644 --- a/src/zabapgit_object_ddlx.prog.abap +++ b/src/zabapgit_object_ddlx.prog.abap @@ -8,27 +8,30 @@ CLASS lcl_object_ddlx DEFINITION INHERITING FROM lcl_objects_super FINAL. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. - METHODS: - constructor - IMPORTING - is_item TYPE zif_abapgit_definitions=>ty_item - iv_language TYPE spras. - DATA: mo_persistence TYPE REF TO if_wb_object_persist. + PRIVATE SECTION. + METHODS: + get_persistence + RETURNING + VALUE(ri_persistence) TYPE REF TO if_wb_object_persist + RAISING + zcx_abapgit_exception, + + clear_fields + CHANGING + cs_data TYPE any, + + clear_field + IMPORTING + iv_fieldname TYPE csequence + CHANGING + cs_metadata TYPE any. + ENDCLASS. CLASS lcl_object_ddlx IMPLEMENTATION. - METHOD constructor. - - super->constructor( is_item = is_item - iv_language = iv_language ). - - CREATE OBJECT mo_persistence - TYPE ('CL_DDLX_ADT_OBJECT_PERSIST'). - - ENDMETHOD. METHOD lif_object~has_changed_since. rv_changed = abap_true. @@ -40,9 +43,7 @@ CLASS lcl_object_ddlx IMPLEMENTATION. METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). - - rs_metadata-ddic = abap_true. - rs_metadata-delete_tadir = abap_true. + rs_metadata-ddic = abap_true. ENDMETHOD. METHOD lif_object~exists. @@ -54,9 +55,9 @@ CLASS lcl_object_ddlx IMPLEMENTATION. rv_bool = abap_true. TRY. - mo_persistence->get( p_object_key = lv_object_key - p_version = 'A' - p_existence_check_only = abap_true ). + get_persistence( )->get( p_object_key = lv_object_key + p_version = 'A' + p_existence_check_only = abap_true ). CATCH cx_swb_exception. rv_bool = abap_false. @@ -90,8 +91,8 @@ CLASS lcl_object_ddlx IMPLEMENTATION. CREATE OBJECT lo_data_model TYPE ('CL_DDLX_WB_OBJECT_DATA'). - mo_persistence->delete( p_object_key = lv_object_key - p_version = 'A' ). + get_persistence( )->delete( p_object_key = lv_object_key + p_version = 'A' ). CATCH cx_root INTO lx_error. lv_text = lx_error->get_text( ). @@ -104,17 +105,23 @@ CLASS lcl_object_ddlx IMPLEMENTATION. DATA: lv_object_key TYPE seu_objkey, lo_data_model TYPE REF TO if_wb_object_data_model, - ls_data TYPE cl_ddlx_wb_object_data=>ty_object_data, + lr_data TYPE REF TO data, lv_text TYPE string, lx_error TYPE REF TO cx_root. + FIELD-SYMBOLS: TYPE any. + lv_object_key = ms_item-obj_name. TRY. + CREATE DATA lr_data + TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA'). + ASSIGN lr_data->* TO . + CREATE OBJECT lo_data_model TYPE ('CL_DDLX_WB_OBJECT_DATA'). - mo_persistence->get( + get_persistence( )->get( EXPORTING p_object_key = lv_object_key p_version = 'A' @@ -123,17 +130,12 @@ CLASS lcl_object_ddlx IMPLEMENTATION. lo_data_model->get_data( IMPORTING - p_data = ls_data ). + p_data = ). - CLEAR: ls_data-metadata-changed_at, - ls_data-metadata-changed_by, - ls_data-metadata-created_at, - ls_data-metadata-created_by, - ls_data-metadata-package_ref-name, - ls_data-metadata-container_ref-package_name. + clear_fields( CHANGING cs_data = ). io_xml->add( iv_name = 'DDLX' - ig_data = ls_data ). + ig_data = ). CATCH cx_root INTO lx_error. lv_text = lx_error->get_text( ). @@ -145,23 +147,29 @@ CLASS lcl_object_ddlx IMPLEMENTATION. METHOD lif_object~deserialize. DATA: lo_data_model TYPE REF TO if_wb_object_data_model, - ls_data TYPE cl_ddlx_wb_object_data=>ty_object_data, + lr_data TYPE REF TO data, lv_text TYPE string, lx_error TYPE REF TO cx_root. - io_xml->read( - EXPORTING - iv_name = 'DDLX' - CHANGING - cg_data = ls_data ). + FIELD-SYMBOLS: TYPE any. TRY. + CREATE DATA lr_data + TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA'). + ASSIGN lr_data->* TO . + + io_xml->read( + EXPORTING + iv_name = 'DDLX' + CHANGING + cg_data = ). + CREATE OBJECT lo_data_model TYPE ('CL_DDLX_WB_OBJECT_DATA'). - lo_data_model->set_data( ls_data ). + lo_data_model->set_data( ). - mo_persistence->save( lo_data_model ). + get_persistence( )->save( lo_data_model ). CATCH cx_root INTO lx_error. lv_text = lx_error->get_text( ). @@ -174,4 +182,70 @@ CLASS lcl_object_ddlx IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. + + METHOD get_persistence. + + TRY. + IF mo_persistence IS NOT BOUND. + + CREATE OBJECT mo_persistence + TYPE ('CL_DDLX_ADT_OBJECT_PERSIST'). + + ENDIF. + + CATCH cx_root. + zcx_abapgit_exception=>raise( `DDLX not supported` ). + ENDTRY. + + ri_persistence = mo_persistence. + + ENDMETHOD. + + + METHOD clear_fields. + + FIELD-SYMBOLS: TYPE any. + + ASSIGN COMPONENT 'METADATA' + OF STRUCTURE cs_data + TO . + ASSERT sy-subrc = 0. + + clear_field( EXPORTING iv_fieldname = 'CHANGED_AT' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'CHANGED_BY' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'CREATED_AT' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'CREATED_BY' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'RESPONSIBLE' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'PACKAGE_REF-NAME' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'CONTAINER_REF-PACKAGE_NAME' + CHANGING cs_metadata = ). + + ENDMETHOD. + + + METHOD clear_field. + + FIELD-SYMBOLS: TYPE data. + + ASSIGN COMPONENT iv_fieldname + OF STRUCTURE cs_metadata + TO . + ASSERT sy-subrc = 0. + + CLEAR: . + + ENDMETHOD. + ENDCLASS. From cf96ee6fbba6c8affaa920c6b66927a1ea9664be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 8 Nov 2017 19:28:50 +0000 Subject: [PATCH 4/4] Beautify --- src/zabapgit_object_ddlx.prog.abap | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/zabapgit_object_ddlx.prog.abap b/src/zabapgit_object_ddlx.prog.abap index 2ecdaa3b9..05ca0772d 100644 --- a/src/zabapgit_object_ddlx.prog.abap +++ b/src/zabapgit_object_ddlx.prog.abap @@ -32,7 +32,6 @@ ENDCLASS. CLASS lcl_object_ddlx IMPLEMENTATION. - METHOD lif_object~has_changed_since. rv_changed = abap_true. ENDMETHOD. @@ -56,7 +55,7 @@ CLASS lcl_object_ddlx IMPLEMENTATION. TRY. get_persistence( )->get( p_object_key = lv_object_key - p_version = 'A' + p_version = swbm_version_active p_existence_check_only = abap_true ). CATCH cx_swb_exception. @@ -68,7 +67,6 @@ CLASS lcl_object_ddlx IMPLEMENTATION. METHOD lif_object~jump. TRY. - jump_adt( i_obj_name = ms_item-obj_name i_obj_type = ms_item-obj_type ). @@ -92,7 +90,7 @@ CLASS lcl_object_ddlx IMPLEMENTATION. TYPE ('CL_DDLX_WB_OBJECT_DATA'). get_persistence( )->delete( p_object_key = lv_object_key - p_version = 'A' ). + p_version = swbm_version_active ). CATCH cx_root INTO lx_error. lv_text = lx_error->get_text( ). @@ -124,7 +122,7 @@ CLASS lcl_object_ddlx IMPLEMENTATION. get_persistence( )->get( EXPORTING p_object_key = lv_object_key - p_version = 'A' + p_version = swbm_version_active CHANGING p_object_data = lo_data_model ).