diff --git a/src/objects/zcl_abapgit_object_clas.clas.abap b/src/objects/zcl_abapgit_object_clas.clas.abap index 151d6d619..0034163d1 100644 --- a/src/objects/zcl_abapgit_object_clas.clas.abap +++ b/src/objects/zcl_abapgit_object_clas.clas.abap @@ -903,7 +903,28 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION. METHOD zif_abapgit_object~jump. - " Covered by ZCL_ABAPGIT_OBJECTS=>JUMP + + DATA ls_item TYPE zif_abapgit_definitions=>ty_item. + + ls_item-obj_type = 'PROG'. + + CASE iv_extra. + WHEN zif_abapgit_oo_object_fnc=>c_parts-locals_def. + ls_item-obj_name = cl_oo_classname_service=>get_ccdef_name( |{ ms_item-obj_name }| ). + WHEN zif_abapgit_oo_object_fnc=>c_parts-locals_imp. + ls_item-obj_name = cl_oo_classname_service=>get_ccimp_name( |{ ms_item-obj_name }| ). + WHEN zif_abapgit_oo_object_fnc=>c_parts-macros. + ls_item-obj_name = cl_oo_classname_service=>get_ccmac_name( |{ ms_item-obj_name }| ). + WHEN zif_abapgit_oo_object_fnc=>c_parts-testclasses. + ls_item-obj_name = cl_oo_classname_service=>get_ccau_name( |{ ms_item-obj_name }| ). + ENDCASE. + + IF ls_item-obj_name IS NOT INITIAL. + rv_exit = zcl_abapgit_ui_factory=>get_gui_jumper( )->jump( ls_item ). + ENDIF. + + " Otherwise covered by ZCL_ABAPGIT_OBJECTS=>JUMP + ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_fugr.clas.abap b/src/objects/zcl_abapgit_object_fugr.clas.abap index f8e6a2ed3..fb8c57570 100644 --- a/src/objects/zcl_abapgit_object_fugr.clas.abap +++ b/src/objects/zcl_abapgit_object_fugr.clas.abap @@ -1285,7 +1285,40 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION. METHOD zif_abapgit_object~jump. - " Covered by ZCL_ABAPGIT_OBJECTS=>JUMP + + DATA: + ls_item TYPE zif_abapgit_definitions=>ty_item, + lt_functions TYPE ty_rs38l_incl_tt, + lt_includes TYPE ty_sobj_name_tt. + + FIELD-SYMBOLS: + LIKE LINE OF lt_functions, + LIKE LINE OF lt_includes. + + ls_item-obj_type = 'PROG'. + ls_item-obj_name = to_upper( iv_extra ). + + lt_functions = functions( ). + + LOOP AT lt_functions ASSIGNING WHERE funcname = ls_item-obj_name. + ls_item-obj_name = -include. + rv_exit = zcl_abapgit_ui_factory=>get_gui_jumper( )->jump( ls_item ). + IF rv_exit = abap_true. + RETURN. + ENDIF. + ENDLOOP. + + lt_includes = includes( ). + + LOOP AT lt_includes ASSIGNING WHERE table_line = ls_item-obj_name. + rv_exit = zcl_abapgit_ui_factory=>get_gui_jumper( )->jump( ls_item ). + IF rv_exit = abap_true. + RETURN. + ENDIF. + ENDLOOP. + + " Otherwise covered by ZCL_ABAPGIT_OBJECTS=>JUMP + ENDMETHOD. diff --git a/src/objects/zcl_abapgit_objects.clas.abap b/src/objects/zcl_abapgit_objects.clas.abap index 79bf64e6b..e473368c0 100644 --- a/src/objects/zcl_abapgit_objects.clas.abap +++ b/src/objects/zcl_abapgit_objects.clas.abap @@ -50,6 +50,7 @@ CLASS zcl_abapgit_objects DEFINITION IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item !is_sub_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL + !iv_extra TYPE string OPTIONAL !iv_line_number TYPE i OPTIONAL RAISING zcx_abapgit_exception . @@ -57,6 +58,7 @@ CLASS zcl_abapgit_objects DEFINITION IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item !is_sub_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL + !iv_extra TYPE string OPTIONAL RETURNING VALUE(rv_user) TYPE syuname . CLASS-METHODS is_supported @@ -213,7 +215,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. li_obj = create_object( is_item = is_item iv_language = zif_abapgit_definitions=>c_english ). - rv_user = li_obj->changed_by( is_sub_item ). + rv_user = li_obj->changed_by( iv_extra ). CATCH zcx_abapgit_exception ##NO_HANDLER. " Ignore errors ENDTRY. @@ -1036,7 +1038,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. ENDIF. " First priority object-specific handler - lv_exit = li_obj->jump( is_sub_item ). + lv_exit = li_obj->jump( iv_extra ). IF lv_exit = abap_false. " Open object in new window with generic jumper diff --git a/src/objects/zif_abapgit_object.intf.abap b/src/objects/zif_abapgit_object.intf.abap index 78e9c6cfc..d5568f745 100644 --- a/src/objects/zif_abapgit_object.intf.abap +++ b/src/objects/zif_abapgit_object.intf.abap @@ -54,7 +54,7 @@ INTERFACE zif_abapgit_object METHODS changed_by IMPORTING - !is_sub_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL + !iv_extra TYPE string OPTIONAL RETURNING VALUE(rv_user) TYPE syuname RAISING @@ -62,7 +62,7 @@ INTERFACE zif_abapgit_object METHODS jump IMPORTING - !is_sub_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL + !iv_extra TYPE string OPTIONAL RETURNING VALUE(rv_exit) TYPE abap_bool RAISING diff --git a/src/ui/lib/zcl_abapgit_html_action_utils.clas.abap b/src/ui/lib/zcl_abapgit_html_action_utils.clas.abap index af764475d..5ea070153 100644 --- a/src/ui/lib/zcl_abapgit_html_action_utils.clas.abap +++ b/src/ui/lib/zcl_abapgit_html_action_utils.clas.abap @@ -38,6 +38,7 @@ CLASS zcl_abapgit_html_action_utils DEFINITION IMPORTING !iv_obj_type TYPE tadir-object !iv_obj_name TYPE tadir-obj_name + !iv_filename TYPE string OPTIONAL RETURNING VALUE(rv_string) TYPE string . CLASS-METHODS dir_encode @@ -223,6 +224,11 @@ CLASS zcl_abapgit_html_action_utils IMPLEMENTATION. add_field( EXPORTING iv_name = 'NAME' ig_field = iv_obj_name CHANGING ct_field = lt_fields ). + IF iv_filename IS NOT INITIAL. + add_field( EXPORTING iv_name = 'FILE' + ig_field = iv_filename CHANGING ct_field = lt_fields ). + ENDIF. + rv_string = cl_http_utility=>fields_to_string( lt_fields ). ENDMETHOD. diff --git a/src/ui/pages/zcl_abapgit_gui_page_diff.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_diff.clas.abap index 63428bf79..4fe459ef5 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_diff.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_diff.clas.abap @@ -911,6 +911,7 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION. METHOD render_diff_head. DATA: ls_stats TYPE zif_abapgit_definitions=>ty_count, + lv_jump TYPE string, lv_link TYPE string. CREATE OBJECT ri_html TYPE zcl_abapgit_html. @@ -939,10 +940,15 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION. IF NOT ( is_diff-lstate = zif_abapgit_definitions=>c_state-unchanged AND is_diff-rstate = zif_abapgit_definitions=>c_state-added ) AND NOT is_diff-lstate = zif_abapgit_definitions=>c_state-deleted. + + lv_jump = zcl_abapgit_html_action_utils=>jump_encode( + iv_obj_type = |{ is_diff-obj_type }| + iv_obj_name = |{ is_diff-obj_name }| + iv_filename = is_diff-filename ). + lv_link = ri_html->a( iv_txt = |{ is_diff-path }{ is_diff-filename }| - iv_typ = zif_abapgit_html=>c_action_type-sapevent - iv_act = |jump?TYPE={ is_diff-obj_type }&NAME={ is_diff-obj_name }| ). + iv_act = |{ zif_abapgit_definitions=>c_action-jump }?{ lv_jump }| ). ENDIF. IF lv_link IS NOT INITIAL. diff --git a/src/ui/routing/zcl_abapgit_gui_router.clas.abap b/src/ui/routing/zcl_abapgit_gui_router.clas.abap index a3dfaaaa3..058b88f6a 100644 --- a/src/ui/routing/zcl_abapgit_gui_router.clas.abap +++ b/src/ui/routing/zcl_abapgit_gui_router.clas.abap @@ -87,6 +87,13 @@ CLASS zcl_abapgit_gui_router DEFINITION VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable RAISING zcx_abapgit_exception . + CLASS-METHODS jump_object + IMPORTING + !iv_obj_type TYPE string + !iv_obj_name TYPE string + !iv_filename TYPE string + RAISING + zcx_abapgit_exception . CLASS-METHODS jump_display_transport IMPORTING !iv_transport TYPE trkorr @@ -119,7 +126,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION. +CLASS zcl_abapgit_gui_router IMPLEMENTATION. METHOD abapgit_services_actions. @@ -486,6 +493,45 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION. ENDMETHOD. + METHOD jump_object. + + DATA: + ls_item TYPE zif_abapgit_definitions=>ty_item, + lv_extra TYPE string, + lx_error TYPE REF TO zcx_abapgit_exception, + li_html_viewer TYPE REF TO zif_abapgit_html_viewer. + + ls_item-obj_type = cl_http_utility=>unescape_url( |{ iv_obj_type }| ). + ls_item-obj_name = cl_http_utility=>unescape_url( |{ iv_obj_name }| ). + + IF iv_filename IS NOT INITIAL. + FIND REGEX '\..*\.([\-a-z0-9_%]*)\.' IN iv_filename SUBMATCHES lv_extra. + lv_extra = cl_http_utility=>unescape_url( lv_extra ). + ENDIF. + + TRY. + li_html_viewer = zcl_abapgit_ui_factory=>get_html_viewer( ). + + " Hide HTML Viewer in dummy screen0 for direct CALL SCREEN to work + li_html_viewer->set_visiblity( abap_false ). + + IF ls_item-obj_type = zif_abapgit_data_config=>c_data_type-tabu. + zcl_abapgit_data_utils=>jump( ls_item ). + ELSE. + zcl_abapgit_objects=>jump( + is_item = ls_item + iv_extra = lv_extra ). + ENDIF. + + li_html_viewer->set_visiblity( abap_true ). + CATCH zcx_abapgit_exception INTO lx_error. + li_html_viewer->set_visiblity( abap_true ). + RAISE EXCEPTION lx_error. + ENDTRY. + + ENDMETHOD. + + METHOD main_page. DATA lt_repo_fav_list TYPE zif_abapgit_repo_srv=>ty_repo_list. @@ -617,31 +663,12 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION. METHOD sap_gui_actions. - DATA: ls_item TYPE zif_abapgit_definitions=>ty_item, - lx_ex TYPE REF TO zcx_abapgit_exception, - li_html_viewer TYPE REF TO zif_abapgit_html_viewer. - CASE ii_event->mv_action. WHEN zif_abapgit_definitions=>c_action-jump. " Open object editor - ls_item-obj_type = ii_event->query( )->get( 'TYPE' ). - ls_item-obj_name = ii_event->query( )->get( 'NAME' ). - ls_item-obj_name = cl_http_utility=>unescape_url( |{ ls_item-obj_name }| ). - - li_html_viewer = zcl_abapgit_ui_factory=>get_html_viewer( ). - - TRY. - " Hide HTML Viewer in dummy screen0 for direct CALL SCREEN to work - li_html_viewer->set_visiblity( abap_false ). - IF ls_item-obj_type = zif_abapgit_data_config=>c_data_type-tabu. - zcl_abapgit_data_utils=>jump( ls_item ). - ELSE. - zcl_abapgit_objects=>jump( ls_item ). - ENDIF. - li_html_viewer->set_visiblity( abap_true ). - CATCH zcx_abapgit_exception INTO lx_ex. - li_html_viewer->set_visiblity( abap_true ). - RAISE EXCEPTION lx_ex. - ENDTRY. + jump_object( + iv_obj_type = ii_event->query( )->get( 'TYPE' ) + iv_obj_name = ii_event->query( )->get( 'NAME' ) + iv_filename = ii_event->query( )->get( 'FILE' ) ). rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.