From a73c67b846606c9daf0ef6f65e8d5a447f3dac3c Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Sun, 23 Jul 2017 15:26:12 +0000 Subject: [PATCH 1/6] add first operations for PRAG --- src/zabapgit_object_prag.prog.abap | 150 ++++++++++++++++++++++ src/zabapgit_object_prag.prog.xml | 25 ++++ src/zabapgit_object_serializing.prog.abap | 1 + 3 files changed, 176 insertions(+) create mode 100644 src/zabapgit_object_prag.prog.abap create mode 100644 src/zabapgit_object_prag.prog.xml diff --git a/src/zabapgit_object_prag.prog.abap b/src/zabapgit_object_prag.prog.abap new file mode 100644 index 000000000..1293e8384 --- /dev/null +++ b/src/zabapgit_object_prag.prog.abap @@ -0,0 +1,150 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_object_prag +*&---------------------------------------------------------------------* + +CLASS lcl_object_prag DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + +ENDCLASS. + +CLASS lcl_object_prag IMPLEMENTATION. + + METHOD lif_object~changed_by. + + lcx_exception=>raise( 'PRAG not implemented' ). + + ENDMETHOD. + + METHOD lif_object~compare_to_remote_version. + + lcx_exception=>raise( 'PRAG not implemented' ). + + ENDMETHOD. + + METHOD lif_object~delete. + + lcx_exception=>raise( 'PRAG not implemented' ). + + ENDMETHOD. + + METHOD lif_object~deserialize. + + lcx_exception=>raise( 'PRAG not implemented' ). + + ENDMETHOD. + + METHOD lif_object~exists. + + lcx_exception=>raise( 'PRAG not implemented' ). + + ENDMETHOD. + + METHOD lif_object~get_metadata. + + rs_metadata = get_metadata( ). + rs_metadata-delete_tadir = abap_true. + + ENDMETHOD. + + METHOD lif_object~has_changed_since. + + rv_changed = abap_true. + + ENDMETHOD. + + METHOD lif_object~jump. + + call function 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' " Operation + object_name = ms_item-obj_name " Object Name + object_type = ms_item-obj_type " Object Type +* enclosing_object = " Program Name +* position = SPACE +* devclass = +* include = +* version = SPACE " 'A': Active, 'I': Inactive, SPACE: Corresponds to Work List +* monitor_activation = 'X' +* wb_manager = +* in_new_window = +* with_objectlist = SPACE +* with_worklist = SPACE +* IMPORTING +* new_name = " New Program Name (After Rename) +* wb_todo_request = +* TABLES +* objlist = +* CHANGING +* p_request = SPACE " Request/Task +* EXCEPTIONS +* not_executed = 1 +* invalid_object_type = 2 +* others = 3 + . + IF sy-subrc <> 0. +* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno +* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + +* DATA: object_data TYPE REF TO if_wb_object_data_model. +* +* DATA(persist) = NEW cl_wb_abpr_persist( ). +* +* TRY. +* persist->if_wb_object_persist~get( +* EXPORTING +* p_object_key = |{ ms_item-obj_name }| " Object Key +* p_version = 'A' " Version (Active/Inactive) +** p_language = SY-LANGU " Language Key (Important: must not trigger exception) +** p_if_none_match = +** p_existence_check_only = ABAP_FALSE " Perform Existence Check Only (no existence -> exception) +** p_data_selection = C_ALL_DATA " Selection (or Filter) of Object Data +** p_wb_rest = +** IMPORTING +** p_langu_is_not_maintained = " 'X': No data exists in specified language +** p_etag = +** p_other_existing_versions = +* CHANGING +* p_object_data = object_data +* ). +* +* CATCH cx_swb_object_does_not_exist cx_swb_exception INTO DATA(error). +* MESSAGE error TYPE 'S' DISPLAY LIKE 'E'. +* RETURN. +* ENDTRY. +* +* DATA(ui) = NEW cl_wb_abpr_ui( ). +* +* DATA(tool) = NEW cl_wb_abpr_tool( +* p_ui = ui +* p_persist = persist +* ). +* +* DATA(tool_data) = NEW cl_wb_generic_tool_data( ). +* +* tool_data->if_wb_tool_data_model~set_edit_mode( 'EDIT' ). +* +* ui->if_wb_tool_ui~set_data( +* EXPORTING +* p_object_data = object_data " Object Data +* p_tool_data = tool_data +* ). +* +* ui->if_wb_tool_ui~start( +* EXPORTING +* p_tool_ref = tool " Reference to WB Tool +* EXCEPTIONS +* error_occurred = 1 +* OTHERS = 2 ). + + ENDMETHOD. + + METHOD lif_object~serialize. + + lcx_exception=>raise( 'PRAG not implemented' ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_object_prag.prog.xml b/src/zabapgit_object_prag.prog.xml new file mode 100644 index 000000000..04387e60c --- /dev/null +++ b/src/zabapgit_object_prag.prog.xml @@ -0,0 +1,25 @@ + + + + + + ZABAPGIT_OBJECT_PRAG + A + X + S + D$ + I + X + D$S + X + + + + R + ZABAPGIT_OBJECT_PRAG + 20 + + + + + diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index 786367e50..baed8652b 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -28,6 +28,7 @@ INCLUDE zabapgit_object_msag. INCLUDE zabapgit_object_nrob. INCLUDE zabapgit_object_para. INCLUDE zabapgit_object_pinf. +INCLUDE zabapgit_object_prag. INCLUDE zabapgit_object_prog. INCLUDE zabapgit_object_samc. INCLUDE zabapgit_object_sapc. From 86e21c868740a194aca2dac33ee27a3c4105bc52 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Sun, 23 Jul 2017 15:45:24 +0000 Subject: [PATCH 2/6] add 'exists' implementation for PRAG --- src/zabapgit_object_prag.prog.abap | 85 ++++++++++++++---------------- 1 file changed, 39 insertions(+), 46 deletions(-) diff --git a/src/zabapgit_object_prag.prog.abap b/src/zabapgit_object_prag.prog.abap index 1293e8384..351c762a2 100644 --- a/src/zabapgit_object_prag.prog.abap +++ b/src/zabapgit_object_prag.prog.abap @@ -37,56 +37,21 @@ CLASS lcl_object_prag IMPLEMENTATION. METHOD lif_object~exists. - lcx_exception=>raise( 'PRAG not implemented' ). + DATA(persist) = NEW cl_wb_abpr_persist( ). - ENDMETHOD. + TRY. + persist->if_wb_object_persist~get( p_object_key = |{ ms_item-obj_name }| " Object Key + p_version = 'A' " Version (Active/Inactive) + p_existence_check_only = abap_true " Perform Existence Check Only (no existence -> exception) + ). - METHOD lif_object~get_metadata. + CATCH cx_swb_exception INTO DATA(error). + rv_bool = abap_false. + RETURN. + ENDTRY. - rs_metadata = get_metadata( ). - rs_metadata-delete_tadir = abap_true. + rv_bool = abap_true. - ENDMETHOD. - - METHOD lif_object~has_changed_since. - - rv_changed = abap_true. - - ENDMETHOD. - - METHOD lif_object~jump. - - call function 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' " Operation - object_name = ms_item-obj_name " Object Name - object_type = ms_item-obj_type " Object Type -* enclosing_object = " Program Name -* position = SPACE -* devclass = -* include = -* version = SPACE " 'A': Active, 'I': Inactive, SPACE: Corresponds to Work List -* monitor_activation = 'X' -* wb_manager = -* in_new_window = -* with_objectlist = SPACE -* with_worklist = SPACE -* IMPORTING -* new_name = " New Program Name (After Rename) -* wb_todo_request = -* TABLES -* objlist = -* CHANGING -* p_request = SPACE " Request/Task -* EXCEPTIONS -* not_executed = 1 -* invalid_object_type = 2 -* others = 3 - . - IF sy-subrc <> 0. -* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno -* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. - ENDIF. * DATA: object_data TYPE REF TO if_wb_object_data_model. * @@ -141,6 +106,34 @@ CLASS lcl_object_prag IMPLEMENTATION. ENDMETHOD. + METHOD lif_object~get_metadata. + + rs_metadata = get_metadata( ). + rs_metadata-delete_tadir = abap_true. + + ENDMETHOD. + + METHOD lif_object~has_changed_since. + + rv_changed = abap_true. + + ENDMETHOD. + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' " Operation + object_name = ms_item-obj_name " Object Name + object_type = ms_item-obj_type " Object Type +* in_new_window = abap_true + EXCEPTIONS + not_executed = 1 + invalid_object_type = 2 + OTHERS = 3. + + ENDMETHOD. + METHOD lif_object~serialize. lcx_exception=>raise( 'PRAG not implemented' ). From 796529d3ef3c973abef43d03bef79d16ee07c4c6 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Sun, 23 Jul 2017 15:47:13 +0000 Subject: [PATCH 3/6] add implementation for compare_to_remote_version --- src/zabapgit_object_prag.prog.abap | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/zabapgit_object_prag.prog.abap b/src/zabapgit_object_prag.prog.abap index 351c762a2..18ab29bb6 100644 --- a/src/zabapgit_object_prag.prog.abap +++ b/src/zabapgit_object_prag.prog.abap @@ -19,7 +19,7 @@ CLASS lcl_object_prag IMPLEMENTATION. METHOD lif_object~compare_to_remote_version. - lcx_exception=>raise( 'PRAG not implemented' ). + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. @@ -126,7 +126,6 @@ CLASS lcl_object_prag IMPLEMENTATION. operation = 'SHOW' " Operation object_name = ms_item-obj_name " Object Name object_type = ms_item-obj_type " Object Type -* in_new_window = abap_true EXCEPTIONS not_executed = 1 invalid_object_type = 2 From 77922db475379b76e02374b324d431b01ec094bd Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Sun, 23 Jul 2017 21:29:29 +0000 Subject: [PATCH 4/6] add implementation of missing PRAG methods --- src/zabapgit_object_prag.prog.abap | 133 ++++++++++++++--------------- 1 file changed, 66 insertions(+), 67 deletions(-) diff --git a/src/zabapgit_object_prag.prog.abap b/src/zabapgit_object_prag.prog.abap index 18ab29bb6..ff42f2701 100644 --- a/src/zabapgit_object_prag.prog.abap +++ b/src/zabapgit_object_prag.prog.abap @@ -7,13 +7,21 @@ CLASS lcl_object_prag DEFINITION INHERITING FROM lcl_objects_super FINAL. PUBLIC SECTION. INTERFACES lif_object. + PRIVATE SECTION. + TYPES: BEGIN OF ty_pragma, + pragma TYPE c LENGTH 40, + extension TYPE c LENGTH 1, + signature TYPE c LENGTH 10, + description TYPE c LENGTH 255, + END OF ty_pragma. + ENDCLASS. CLASS lcl_object_prag IMPLEMENTATION. METHOD lif_object~changed_by. - lcx_exception=>raise( 'PRAG not implemented' ). + rv_user = sy-uname. ENDMETHOD. @@ -25,85 +33,61 @@ CLASS lcl_object_prag IMPLEMENTATION. METHOD lif_object~delete. - lcx_exception=>raise( 'PRAG not implemented' ). + TRY. + DATA(lo_pragma) = cl_abap_pragma=>get_ref( ms_item-obj_name ). + + lo_pragma->delete( ). + + CATCH cx_abap_pragma_not_exists + cx_abap_pragma_enqueue. + + lcx_exception=>raise( 'PRAG error' ). + + ENDTRY. ENDMETHOD. METHOD lif_object~deserialize. - lcx_exception=>raise( 'PRAG not implemented' ). + DATA: pragma TYPE ty_pragma. + + TRY. + io_xml->read( + EXPORTING + iv_name = 'PRAG' + CHANGING + cg_data = pragma ). + + DATA(lo_pragma) = cl_abap_pragma=>create( p_pragma = ms_item-obj_name + p_package = iv_package ). + + lo_pragma->set_info( p_description = pragma-description + p_signature = pragma-signature + p_extension = pragma-extension ). + + lo_pragma->save( ). + + CATCH cx_abap_pragma_not_exists + cx_abap_pragma_exists + cx_abap_pragma_enqueue. + + lcx_exception=>raise( 'PRAG error' ). + + ENDTRY. ENDMETHOD. METHOD lif_object~exists. - DATA(persist) = NEW cl_wb_abpr_persist( ). - TRY. - persist->if_wb_object_persist~get( p_object_key = |{ ms_item-obj_name }| " Object Key - p_version = 'A' " Version (Active/Inactive) - p_existence_check_only = abap_true " Perform Existence Check Only (no existence -> exception) - ). - - CATCH cx_swb_exception INTO DATA(error). + cl_abap_pragma=>get_ref( ms_item-obj_name ). + CATCH cx_abap_pragma_not_exists. rv_bool = abap_false. RETURN. ENDTRY. rv_bool = abap_true. - -* DATA: object_data TYPE REF TO if_wb_object_data_model. -* -* DATA(persist) = NEW cl_wb_abpr_persist( ). -* -* TRY. -* persist->if_wb_object_persist~get( -* EXPORTING -* p_object_key = |{ ms_item-obj_name }| " Object Key -* p_version = 'A' " Version (Active/Inactive) -** p_language = SY-LANGU " Language Key (Important: must not trigger exception) -** p_if_none_match = -** p_existence_check_only = ABAP_FALSE " Perform Existence Check Only (no existence -> exception) -** p_data_selection = C_ALL_DATA " Selection (or Filter) of Object Data -** p_wb_rest = -** IMPORTING -** p_langu_is_not_maintained = " 'X': No data exists in specified language -** p_etag = -** p_other_existing_versions = -* CHANGING -* p_object_data = object_data -* ). -* -* CATCH cx_swb_object_does_not_exist cx_swb_exception INTO DATA(error). -* MESSAGE error TYPE 'S' DISPLAY LIKE 'E'. -* RETURN. -* ENDTRY. -* -* DATA(ui) = NEW cl_wb_abpr_ui( ). -* -* DATA(tool) = NEW cl_wb_abpr_tool( -* p_ui = ui -* p_persist = persist -* ). -* -* DATA(tool_data) = NEW cl_wb_generic_tool_data( ). -* -* tool_data->if_wb_tool_data_model~set_edit_mode( 'EDIT' ). -* -* ui->if_wb_tool_ui~set_data( -* EXPORTING -* p_object_data = object_data " Object Data -* p_tool_data = tool_data -* ). -* -* ui->if_wb_tool_ui~start( -* EXPORTING -* p_tool_ref = tool " Reference to WB Tool -* EXCEPTIONS -* error_occurred = 1 -* OTHERS = 2 ). - ENDMETHOD. METHOD lif_object~get_metadata. @@ -123,9 +107,9 @@ CLASS lcl_object_prag IMPLEMENTATION. CALL FUNCTION 'RS_TOOL_ACCESS' EXPORTING - operation = 'SHOW' " Operation - object_name = ms_item-obj_name " Object Name - object_type = ms_item-obj_type " Object Type + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = ms_item-obj_type EXCEPTIONS not_executed = 1 invalid_object_type = 2 @@ -135,7 +119,22 @@ CLASS lcl_object_prag IMPLEMENTATION. METHOD lif_object~serialize. - lcx_exception=>raise( 'PRAG not implemented' ). + TRY. + DATA(lo_pragma) = cl_abap_pragma=>get_ref( ms_item-obj_name ). + + DATA(pragma) = VALUE ty_pragma( pragma = lo_pragma->pragma + extension = lo_pragma->extension + signature = lo_pragma->signature + description = lo_pragma->description ). + + io_xml->add( + EXPORTING + iv_name = 'PRAG' + ig_data = pragma ). + + CATCH cx_abap_pragma_not_exists. + RETURN. + ENDTRY. ENDMETHOD. From d7b872a8ebd120efdb04a10e50f28c720de802bf Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Mon, 24 Jul 2017 18:21:20 +0000 Subject: [PATCH 5/6] PRAG refactoring --- src/zabapgit_object_prag.prog.abap | 197 +++++++++++++++++------------ 1 file changed, 116 insertions(+), 81 deletions(-) diff --git a/src/zabapgit_object_prag.prog.abap b/src/zabapgit_object_prag.prog.abap index ff42f2701..e79b062ef 100644 --- a/src/zabapgit_object_prag.prog.abap +++ b/src/zabapgit_object_prag.prog.abap @@ -15,81 +15,35 @@ CLASS lcl_object_prag DEFINITION INHERITING FROM lcl_objects_super FINAL. description TYPE c LENGTH 255, END OF ty_pragma. + METHODS: + _raise_pragma_not_exists + RAISING + lcx_exception, + + _raise_pragma_exists + RAISING + lcx_exception, + + _raise_pragma_enqueue + RAISING + lcx_exception. + ENDCLASS. CLASS lcl_object_prag IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + rv_changed = abap_true. + + ENDMETHOD. + METHOD lif_object~changed_by. rv_user = sy-uname. ENDMETHOD. - METHOD lif_object~compare_to_remote_version. - - CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. - - ENDMETHOD. - - METHOD lif_object~delete. - - TRY. - DATA(lo_pragma) = cl_abap_pragma=>get_ref( ms_item-obj_name ). - - lo_pragma->delete( ). - - CATCH cx_abap_pragma_not_exists - cx_abap_pragma_enqueue. - - lcx_exception=>raise( 'PRAG error' ). - - ENDTRY. - - ENDMETHOD. - - METHOD lif_object~deserialize. - - DATA: pragma TYPE ty_pragma. - - TRY. - io_xml->read( - EXPORTING - iv_name = 'PRAG' - CHANGING - cg_data = pragma ). - - DATA(lo_pragma) = cl_abap_pragma=>create( p_pragma = ms_item-obj_name - p_package = iv_package ). - - lo_pragma->set_info( p_description = pragma-description - p_signature = pragma-signature - p_extension = pragma-extension ). - - lo_pragma->save( ). - - CATCH cx_abap_pragma_not_exists - cx_abap_pragma_exists - cx_abap_pragma_enqueue. - - lcx_exception=>raise( 'PRAG error' ). - - ENDTRY. - - ENDMETHOD. - - METHOD lif_object~exists. - - TRY. - cl_abap_pragma=>get_ref( ms_item-obj_name ). - CATCH cx_abap_pragma_not_exists. - rv_bool = abap_false. - RETURN. - ENDTRY. - - rv_bool = abap_true. - - ENDMETHOD. - METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). @@ -97,9 +51,87 @@ CLASS lcl_object_prag IMPLEMENTATION. ENDMETHOD. - METHOD lif_object~has_changed_since. + METHOD lif_object~exists. - rv_changed = abap_true. + TRY. + cl_abap_pragma=>get_ref( ms_item-obj_name ). + + CATCH cx_abap_pragma_not_exists. + rv_bool = abap_false. + RETURN. + ENDTRY. + + rv_bool = abap_true. + + ENDMETHOD. + + METHOD lif_object~serialize. + + DATA: lo_pragma TYPE REF TO cl_abap_pragma, + pragma TYPE lcl_object_prag=>ty_pragma. + + TRY. + lo_pragma = cl_abap_pragma=>get_ref( ms_item-obj_name ). + + pragma-pragma = lo_pragma->pragma. + pragma-extension = lo_pragma->extension. + pragma-signature = lo_pragma->signature. + pragma-description = lo_pragma->description. + + io_xml->add( iv_name = 'PRAG' + ig_data = pragma ). + + CATCH cx_abap_pragma_not_exists. + _raise_pragma_not_exists( ). + ENDTRY. + + ENDMETHOD. + + METHOD lif_object~deserialize. + + DATA: pragma TYPE ty_pragma, + lo_pragma TYPE REF TO cl_abap_pragma. + + TRY. + io_xml->read( + EXPORTING + iv_name = 'PRAG' + CHANGING + cg_data = pragma ). + + lo_pragma = cl_abap_pragma=>create( p_pragma = ms_item-obj_name + p_package = iv_package ). + + lo_pragma->set_info( p_description = pragma-description + p_signature = pragma-signature + p_extension = pragma-extension ). + + lo_pragma->save( ). + + CATCH cx_abap_pragma_not_exists. + _raise_pragma_not_exists( ). + CATCH cx_abap_pragma_exists. + _raise_pragma_exists( ). + CATCH cx_abap_pragma_enqueue. + _raise_pragma_enqueue( ). + ENDTRY. + + ENDMETHOD. + + METHOD lif_object~delete. + + DATA: lo_pragma TYPE REF TO cl_abap_pragma. + + TRY. + lo_pragma = cl_abap_pragma=>get_ref( ms_item-obj_name ). + + lo_pragma->delete( ). + + CATCH cx_abap_pragma_not_exists. + _raise_pragma_not_exists( ). + CATCH cx_abap_pragma_enqueue. + _raise_pragma_enqueue( ). + ENDTRY. ENDMETHOD. @@ -117,24 +149,27 @@ CLASS lcl_object_prag IMPLEMENTATION. ENDMETHOD. - METHOD lif_object~serialize. + METHOD lif_object~compare_to_remote_version. - TRY. - DATA(lo_pragma) = cl_abap_pragma=>get_ref( ms_item-obj_name ). + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. - DATA(pragma) = VALUE ty_pragma( pragma = lo_pragma->pragma - extension = lo_pragma->extension - signature = lo_pragma->signature - description = lo_pragma->description ). + ENDMETHOD. - io_xml->add( - EXPORTING - iv_name = 'PRAG' - ig_data = pragma ). + METHOD _raise_pragma_enqueue. - CATCH cx_abap_pragma_not_exists. - RETURN. - ENDTRY. + lcx_exception=>raise( |Pragma { ms_item-obj_name } enqueue error| ). + + ENDMETHOD. + + METHOD _raise_pragma_exists. + + lcx_exception=>raise( |Pragma { ms_item-obj_name } exists| ). + + ENDMETHOD. + + METHOD _raise_pragma_not_exists. + + lcx_exception=>raise( |Pragma { ms_item-obj_name } doesn't exist| ). ENDMETHOD. From 30c6b9dbfafe92123aefc83eb25911fa99912ab2 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Tue, 25 Jul 2017 05:47:33 +0000 Subject: [PATCH 6/6] change 'changed_by' to user_unknown --- src/zabapgit_object_prag.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_object_prag.prog.abap b/src/zabapgit_object_prag.prog.abap index e79b062ef..326d836ee 100644 --- a/src/zabapgit_object_prag.prog.abap +++ b/src/zabapgit_object_prag.prog.abap @@ -40,7 +40,7 @@ CLASS lcl_object_prag IMPLEMENTATION. METHOD lif_object~changed_by. - rv_user = sy-uname. + rv_user = c_user_unknown. ENDMETHOD.