diff --git a/src/ui/zcl_abapgit_services_abapgit.clas.abap b/src/ui/zcl_abapgit_services_abapgit.clas.abap index 2e6ed8727..af2e6d503 100644 --- a/src/ui/zcl_abapgit_services_abapgit.clas.abap +++ b/src/ui/zcl_abapgit_services_abapgit.clas.abap @@ -42,6 +42,10 @@ CLASS zcl_abapgit_services_abapgit DEFINITION RAISING zcx_abapgit_exception. + CLASS-METHODS get_package_from_adt + RETURNING + VALUE(rv_package) TYPE devclass. + ENDCLASS. @@ -145,21 +149,24 @@ CLASS zcl_abapgit_services_abapgit IMPLEMENTATION. METHOD prepare_gui_startup. - DATA: lv_repo_key TYPE zif_abapgit_persistence=>ty_value, - lv_package TYPE devclass. + DATA: lv_repo_key TYPE zif_abapgit_persistence=>ty_value, + lv_package TYPE devclass, + lv_package_adt TYPE devclass. IF zcl_abapgit_persist_settings=>get_instance( )->read( )->get_show_default_repo( ) = abap_false. " Don't show the last seen repo at startup zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( || ). ENDIF. - " We have two special cases for gui startup + " We have three special cases for gui startup " - open a specific repo by repo key " - open a specific repo by package name + " - open a specific repo by package name provided by ADT " These overrule the last shown repo GET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD lv_repo_key. GET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_package FIELD lv_package. + lv_package_adt = get_package_from_adt( ). IF lv_repo_key IS NOT INITIAL. @@ -171,6 +178,10 @@ CLASS zcl_abapgit_services_abapgit IMPLEMENTATION. SET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_package FIELD ''. set_start_repo_from_package( lv_package ). + ELSEIF lv_package_adt IS NOT INITIAL. + + set_start_repo_from_package( lv_package_adt ). + ENDIF. ENDMETHOD. @@ -224,4 +235,56 @@ CLASS zcl_abapgit_services_abapgit IMPLEMENTATION. ENDMETHOD. + + METHOD get_package_from_adt. + + DATA: ls_item TYPE zif_abapgit_definitions=>ty_item, + lr_context TYPE REF TO data, + lt_fields TYPE tihttpnvp. + + + FIELD-SYMBOLS: TYPE any, + TYPE string, + LIKE LINE OF lt_fields. + + ls_item-obj_type = 'CLAS'. + ls_item-obj_name = 'CL_ADT_GUI_INTEGRATION_CONTEXT'. + + IF zcl_abapgit_objects=>exists( ls_item ) = abap_false. + " ADT is not supported in this NW release + RETURN. + ENDIF. + + TRY. + CREATE DATA lr_context TYPE ('CL_ADT_GUI_INTEGRATION_CONTEXT=>TY_CONTEXT_INFO'). + + ASSIGN lr_context->* TO . + ASSERT sy-subrc = 0. + + CALL METHOD ('CL_ADT_GUI_INTEGRATION_CONTEXT')=>read_context + RECEIVING + result = . + + ASSIGN COMPONENT 'PARAMETERS' + OF STRUCTURE + TO . + ASSERT sy-subrc = 0. + + lt_fields = cl_http_utility=>string_to_fields( + cl_http_utility=>unescape_url( + ) ). + + READ TABLE lt_fields ASSIGNING + WITH KEY name = 'p_package_name'. + IF sy-subrc = 0. + rv_package = -value. + ENDIF. + + CATCH cx_root. + " Some problems with dynamic ADT access. + " Let's ignore it for now and fail silently + ENDTRY. + + ENDMETHOD. + ENDCLASS.