abapGit/src/utils/zcl_abapgit_adt_link.clas.abap
2020-09-27 09:24:31 +02:00

201 lines
5.9 KiB
ABAP

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: <lv_uri> 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 <lv_uri>.
ASSERT sy-subrc = 0.
CONCATENATE 'adt://' sy-sysid <lv_uri> 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 <lv_uri> 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 <lv_uri>.
ASSERT sy-subrc = 0.
CALL METHOD eo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_OBJREF_TO_INCLUDE')
EXPORTING
uri = <lv_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.