mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
372 lines
9.2 KiB
ABAP
372 lines
9.2 KiB
ABAP
CLASS zcl_abapgit_object_smim DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
|
|
|
|
PUBLIC SECTION.
|
|
INTERFACES zif_abapgit_object.
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
METHODS get_filename
|
|
IMPORTING iv_url TYPE string
|
|
RETURNING VALUE(rv_filename) TYPE string.
|
|
|
|
METHODS find_content
|
|
IMPORTING iv_url TYPE string
|
|
RETURNING VALUE(rv_content) TYPE xstring
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
METHODS build_filename
|
|
IMPORTING iv_filename TYPE string
|
|
RETURNING VALUE(rv_filename) TYPE string.
|
|
|
|
METHODS get_url_for_io
|
|
EXPORTING ev_url TYPE string
|
|
ev_is_folder TYPE abap_bool
|
|
RAISING zcx_abapgit_not_found
|
|
zcx_abapgit_exception.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_object_smim IMPLEMENTATION.
|
|
|
|
|
|
METHOD build_filename.
|
|
|
|
CONCATENATE ms_item-obj_name ms_item-obj_type iv_filename
|
|
INTO rv_filename SEPARATED BY '.'.
|
|
TRANSLATE rv_filename TO LOWER CASE.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD find_content.
|
|
|
|
DATA: lv_filename TYPE string,
|
|
lt_files TYPE zif_abapgit_git_definitions=>ty_files_tt.
|
|
|
|
FIELD-SYMBOLS: <ls_file> LIKE LINE OF lt_files.
|
|
|
|
|
|
lv_filename = get_filename( iv_url ).
|
|
|
|
lv_filename = build_filename( lv_filename ).
|
|
|
|
lt_files = zif_abapgit_object~mo_files->get_files( ).
|
|
|
|
READ TABLE lt_files ASSIGNING <ls_file>
|
|
WITH KEY file
|
|
COMPONENTS filename = lv_filename.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'SMIM, file not found' ).
|
|
ENDIF.
|
|
|
|
rv_content = <ls_file>-data.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_filename.
|
|
|
|
DATA: lv_lines TYPE i,
|
|
lt_strings TYPE TABLE OF string.
|
|
|
|
|
|
SPLIT iv_url AT '/' INTO TABLE lt_strings.
|
|
lv_lines = lines( lt_strings ).
|
|
ASSERT lv_lines > 0.
|
|
READ TABLE lt_strings INDEX lv_lines INTO rv_filename.
|
|
ASSERT sy-subrc = 0.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_url_for_io.
|
|
|
|
DATA: ls_io TYPE skwf_io,
|
|
lv_url TYPE skwf_url,
|
|
ls_smimloio TYPE smimloio,
|
|
lv_loio TYPE sdok_docid.
|
|
|
|
|
|
lv_loio = ms_item-obj_name.
|
|
|
|
CLEAR ev_url.
|
|
CLEAR ev_is_folder.
|
|
|
|
SELECT SINGLE * FROM smimloio INTO ls_smimloio
|
|
WHERE loio_id = lv_loio. "#EC CI_GENBUFF
|
|
IF sy-subrc <> 0.
|
|
RAISE EXCEPTION TYPE zcx_abapgit_not_found.
|
|
ENDIF.
|
|
|
|
IF ls_smimloio-lo_class = wbmr_c_skwf_folder_class.
|
|
ev_is_folder = abap_true.
|
|
ls_io-objtype = skwfc_obtype_folder.
|
|
ELSE.
|
|
ls_io-objtype = skwfc_obtype_loio.
|
|
ENDIF.
|
|
ls_io-class = ls_smimloio-lo_class.
|
|
ls_io-objid = ls_smimloio-loio_id.
|
|
|
|
CALL FUNCTION 'SKWF_NMSPC_IO_ADDRESS_GET'
|
|
EXPORTING
|
|
io = ls_io
|
|
IMPORTING
|
|
url = lv_url.
|
|
|
|
ev_url = lv_url.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~changed_by.
|
|
|
|
DATA: lv_loio TYPE sdok_docid.
|
|
|
|
|
|
lv_loio = ms_item-obj_name.
|
|
|
|
SELECT SINGLE chng_user FROM smimloio INTO rv_user
|
|
WHERE loio_id = lv_loio. "#EC CI_GENBUFF
|
|
IF sy-subrc <> 0 OR rv_user IS INITIAL.
|
|
SELECT SINGLE chng_user FROM smimphio INTO rv_user
|
|
WHERE loio_id = lv_loio. "#EC CI_GENBUFF
|
|
IF sy-subrc <> 0 OR rv_user IS INITIAL.
|
|
rv_user = c_user_unknown.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~delete.
|
|
|
|
DATA: li_api TYPE REF TO if_mr_api,
|
|
lv_url TYPE string.
|
|
|
|
|
|
TRY.
|
|
get_url_for_io( IMPORTING ev_url = lv_url ).
|
|
CATCH zcx_abapgit_not_found.
|
|
" Deleted already (maybe by "folder with children") but record deletion in transport
|
|
corr_insert( iv_package ).
|
|
RETURN.
|
|
ENDTRY.
|
|
|
|
li_api = cl_mime_repository_api=>if_mr_api~get_api( ).
|
|
li_api->delete(
|
|
EXPORTING
|
|
i_url = lv_url
|
|
i_delete_children = abap_true
|
|
EXCEPTIONS
|
|
parameter_missing = 1
|
|
error_occured = 2
|
|
cancelled = 3
|
|
permission_failure = 4
|
|
not_found = 5
|
|
OTHERS = 6 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~deserialize.
|
|
|
|
DATA: lv_url TYPE string,
|
|
lv_folder TYPE abap_bool,
|
|
lv_content TYPE xstring,
|
|
lv_filename TYPE skwf_filnm,
|
|
lv_io TYPE sdok_docid,
|
|
lv_class TYPE smimloio-lo_class,
|
|
ls_skwf_io TYPE skwf_io,
|
|
li_api TYPE REF TO if_mr_api.
|
|
|
|
|
|
li_api = cl_mime_repository_api=>if_mr_api~get_api( ).
|
|
lv_io = ms_item-obj_name.
|
|
|
|
io_xml->read( EXPORTING iv_name = 'URL'
|
|
CHANGING cg_data = lv_url ).
|
|
io_xml->read( EXPORTING iv_name = 'FOLDER'
|
|
CHANGING cg_data = lv_folder ).
|
|
io_xml->read( EXPORTING iv_name = 'CLASS'
|
|
CHANGING cg_data = lv_class ).
|
|
|
|
ls_skwf_io-objid = lv_io.
|
|
|
|
IF lv_folder = abap_true.
|
|
li_api->create_folder(
|
|
EXPORTING
|
|
i_url = lv_url
|
|
i_language = mv_language
|
|
i_dev_package = iv_package
|
|
i_folder_loio = ls_skwf_io
|
|
EXCEPTIONS
|
|
parameter_missing = 1
|
|
error_occured = 2
|
|
cancelled = 3
|
|
permission_failure = 4
|
|
folder_exists = 5
|
|
OTHERS = 6 ).
|
|
IF sy-subrc <> 5 AND sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
ELSE.
|
|
lv_filename = get_filename( lv_url ).
|
|
ls_skwf_io-class = lv_class.
|
|
IF ls_skwf_io-class IS INITIAL.
|
|
cl_wb_mime_repository=>determine_io_class(
|
|
EXPORTING
|
|
filename = lv_filename
|
|
IMPORTING
|
|
io_class = ls_skwf_io-class ).
|
|
CONCATENATE ls_skwf_io-class '_L' INTO ls_skwf_io-class.
|
|
ENDIF.
|
|
|
|
lv_content = find_content( lv_url ).
|
|
|
|
li_api->put(
|
|
EXPORTING
|
|
i_url = lv_url
|
|
i_content = lv_content
|
|
i_dev_package = iv_package
|
|
i_new_loio = ls_skwf_io
|
|
EXCEPTIONS
|
|
parameter_missing = 1
|
|
error_occured = 2
|
|
cancelled = 3
|
|
permission_failure = 4
|
|
data_inconsistency = 5
|
|
new_loio_already_exists = 6
|
|
is_folder = 7
|
|
OTHERS = 8 ).
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~exists.
|
|
|
|
DATA: lv_loio TYPE sdok_docid.
|
|
|
|
|
|
lv_loio = ms_item-obj_name.
|
|
|
|
SELECT SINGLE loio_id FROM smimloio INTO lv_loio
|
|
WHERE loio_id = lv_loio. "#EC CI_GENBUFF
|
|
rv_bool = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_comparator.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_deserialize_order.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_deserialize_steps.
|
|
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_metadata.
|
|
rs_metadata = get_metadata( ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_active.
|
|
rv_active = is_active( ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_locked.
|
|
rv_is_locked = abap_false.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
" Covered by ZCL_ABAPGIT_OBJECTS=>JUMP
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~map_filename_to_object.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~map_object_to_filename.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~serialize.
|
|
|
|
DATA: lv_url TYPE string,
|
|
lv_folder TYPE abap_bool,
|
|
lv_filename TYPE string,
|
|
lv_class TYPE smimloio-lo_class,
|
|
ls_file TYPE zif_abapgit_git_definitions=>ty_file,
|
|
lv_content TYPE xstring,
|
|
li_api TYPE REF TO if_mr_api,
|
|
lv_loio TYPE sdok_docid.
|
|
|
|
|
|
lv_loio = ms_item-obj_name.
|
|
|
|
TRY.
|
|
get_url_for_io(
|
|
IMPORTING
|
|
ev_url = lv_url
|
|
ev_is_folder = lv_folder ).
|
|
CATCH zcx_abapgit_not_found.
|
|
RETURN.
|
|
ENDTRY.
|
|
|
|
IF lv_folder = abap_false.
|
|
li_api = cl_mime_repository_api=>if_mr_api~get_api( ).
|
|
li_api->get(
|
|
EXPORTING
|
|
i_url = lv_url
|
|
IMPORTING
|
|
e_content = lv_content
|
|
EXCEPTIONS
|
|
parameter_missing = 1
|
|
error_occured = 2
|
|
not_found = 3
|
|
permission_failure = 4
|
|
OTHERS = 5 ).
|
|
IF sy-subrc <> 0 AND sy-subrc <> 2 AND sy-subrc <> 3.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
lv_filename = get_filename( lv_url ).
|
|
CLEAR ls_file.
|
|
ls_file-filename = build_filename( lv_filename ).
|
|
ls_file-path = '/'.
|
|
ls_file-data = lv_content.
|
|
zif_abapgit_object~mo_files->add( ls_file ).
|
|
|
|
SELECT SINGLE lo_class FROM smimloio INTO lv_class
|
|
WHERE loio_id = lv_loio. "#EC CI_GENBUFF
|
|
ENDIF.
|
|
|
|
io_xml->add( iv_name = 'URL'
|
|
ig_data = lv_url ).
|
|
io_xml->add( iv_name = 'FOLDER'
|
|
ig_data = lv_folder ).
|
|
io_xml->add( iv_name = 'CLASS'
|
|
ig_data = lv_class ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|