CLASS zcl_abapgit_adt_link DEFINITION PUBLIC FINAL CREATE PUBLIC . PUBLIC SECTION. CLASS-METHODS generate IMPORTING !iv_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name !iv_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type !iv_sub_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name OPTIONAL !iv_line_number TYPE i OPTIONAL RETURNING VALUE(rv_result) TYPE string RAISING zcx_abapgit_exception . PROTECTED SECTION. PRIVATE SECTION. CLASS-METHODS: get_adt_objects_and_names IMPORTING iv_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name iv_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type EXPORTING eo_adt_uri_mapper TYPE REF TO object eo_adt_objectref TYPE REF TO object ev_program TYPE progname ev_include TYPE progname RAISING zcx_abapgit_exception. CLASS-METHODS: is_adt_jump_possible IMPORTING io_object TYPE REF TO cl_wb_object io_adt TYPE REF TO object RETURNING VALUE(rv_is_adt_jump_possible) TYPE abap_bool RAISING zcx_abapgit_exception. ENDCLASS. CLASS ZCL_ABAPGIT_ADT_LINK IMPLEMENTATION. METHOD generate. DATA: lv_adt_link TYPE string. DATA: lo_adt_uri_mapper TYPE REF TO object ##needed. DATA: lo_adt_objref TYPE REF TO object ##needed. DATA: lo_adt_sub_objref TYPE REF TO object ##needed. DATA: lv_program TYPE progname. DATA: lv_include TYPE progname. FIELD-SYMBOLS: TYPE string. get_adt_objects_and_names( EXPORTING iv_obj_name = iv_obj_name iv_obj_type = iv_obj_type IMPORTING eo_adt_uri_mapper = lo_adt_uri_mapper eo_adt_objectref = lo_adt_objref ev_program = lv_program ev_include = lv_include ). TRY. IF iv_sub_obj_name IS NOT INITIAL. IF ( lv_program <> iv_obj_name AND lv_include IS INITIAL ) OR ( lv_program = lv_include AND iv_sub_obj_name IS NOT INITIAL ). lv_include = iv_sub_obj_name. ENDIF. CALL METHOD lo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_INCLUDE_TO_OBJREF') EXPORTING program = lv_program include = lv_include line = iv_line_number line_offset = 0 end_line = iv_line_number end_offset = 1 RECEIVING result = lo_adt_sub_objref. IF lo_adt_sub_objref IS NOT INITIAL. lo_adt_objref = lo_adt_sub_objref. ENDIF. ENDIF. ASSIGN ('LO_ADT_OBJREF->REF_DATA-URI') TO . ASSERT sy-subrc = 0. CONCATENATE 'adt://' sy-sysid INTO lv_adt_link. rv_result = lv_adt_link. CATCH cx_root. zcx_abapgit_exception=>raise( 'ADT Jump Error' ). ENDTRY. ENDMETHOD. METHOD get_adt_objects_and_names. DATA lv_obj_type TYPE trobjtype. DATA lv_obj_name TYPE trobj_name. DATA lo_object TYPE REF TO cl_wb_object. DATA lo_adt TYPE REF TO object. FIELD-SYMBOLS TYPE string. lv_obj_name = iv_obj_name. lv_obj_type = iv_obj_type. TRY. cl_wb_object=>create_from_transport_key( EXPORTING p_object = lv_obj_type p_obj_name = lv_obj_name RECEIVING p_wb_object = lo_object EXCEPTIONS OTHERS = 1 ). IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'ADT Jump Error' ). ENDIF. CALL METHOD ('CL_ADT_TOOLS_CORE_FACTORY')=>('GET_INSTANCE') RECEIVING result = lo_adt. IF is_adt_jump_possible( io_object = lo_object io_adt = lo_adt ) = abap_false. zcx_abapgit_exception=>raise( 'ADT Jump Error' ). ENDIF. CALL METHOD lo_adt->('IF_ADT_TOOLS_CORE_FACTORY~GET_URI_MAPPER') RECEIVING result = eo_adt_uri_mapper. CALL METHOD eo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_WB_OBJECT_TO_OBJREF') EXPORTING wb_object = lo_object RECEIVING result = eo_adt_objectref. ASSIGN ('EO_ADT_OBJECTREF->REF_DATA-URI') TO . ASSERT sy-subrc = 0. CALL METHOD eo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_OBJREF_TO_INCLUDE') EXPORTING uri = IMPORTING program = ev_program include = ev_include. CATCH cx_root. zcx_abapgit_exception=>raise( 'ADT Jump Error' ). ENDTRY. ENDMETHOD. METHOD is_adt_jump_possible. DATA: lo_wb_request TYPE REF TO cl_wb_request, lo_adt_uri_mapper_vit TYPE REF TO object, lv_vit_wb_request TYPE abap_bool. cl_wb_request=>create_from_object_ref( EXPORTING p_wb_object = io_object RECEIVING p_wb_request = lo_wb_request EXCEPTIONS illegal_operation = 1 cancelled = 2 OTHERS = 3 ). IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'ADT Jump Error' ). ENDIF. TRY. CALL METHOD io_adt->('IF_ADT_TOOLS_CORE_FACTORY~GET_URI_MAPPER_VIT') RECEIVING result = lo_adt_uri_mapper_vit. CALL METHOD lo_adt_uri_mapper_vit->('IF_ADT_URI_MAPPER_VIT~IS_VIT_WB_REQUEST') EXPORTING wb_request = lo_wb_request RECEIVING result = lv_vit_wb_request. rv_is_adt_jump_possible = boolc( NOT lv_vit_wb_request = abap_true ). CATCH cx_root. zcx_abapgit_exception=>raise( 'ADT Jump Error' ). ENDTRY. ENDMETHOD. ENDCLASS.