mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00

* update abaplint config to latest * remove some descriptions * remove more descriptions * fixes * fixes
246 lines
6.2 KiB
ABAP
246 lines
6.2 KiB
ABAP
CLASS zcl_abapgit_persistence_db DEFINITION
|
|
PUBLIC
|
|
CREATE PRIVATE .
|
|
|
|
PUBLIC SECTION.
|
|
CONSTANTS c_tabname TYPE tabname VALUE 'ZABAPGIT' ##NO_TEXT.
|
|
CONSTANTS c_lock TYPE viewname VALUE 'EZABAPGIT' ##NO_TEXT.
|
|
|
|
CONSTANTS:
|
|
c_type_settings TYPE zif_abapgit_persistence=>ty_type VALUE 'SETTINGS' ##NO_TEXT,
|
|
c_type_repo TYPE zif_abapgit_persistence=>ty_type VALUE 'REPO' ##NO_TEXT,
|
|
c_type_background TYPE zif_abapgit_persistence=>ty_type VALUE 'BACKGROUND' ##NO_TEXT,
|
|
c_type_user TYPE zif_abapgit_persistence=>ty_type VALUE 'USER' ##NO_TEXT.
|
|
|
|
CLASS-METHODS get_instance
|
|
RETURNING
|
|
VALUE(ro_db) TYPE REF TO zcl_abapgit_persistence_db .
|
|
METHODS add
|
|
IMPORTING
|
|
!iv_type TYPE zif_abapgit_persistence=>ty_type
|
|
!iv_value TYPE zif_abapgit_persistence=>ty_content-value
|
|
!iv_data TYPE zif_abapgit_persistence=>ty_content-data_str
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS delete
|
|
IMPORTING
|
|
!iv_type TYPE zif_abapgit_persistence=>ty_type
|
|
!iv_value TYPE zif_abapgit_persistence=>ty_content-value
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS list
|
|
RETURNING
|
|
VALUE(rt_content) TYPE zif_abapgit_persistence=>tt_content .
|
|
METHODS list_by_type
|
|
IMPORTING
|
|
!iv_type TYPE zif_abapgit_persistence=>ty_type
|
|
RETURNING
|
|
VALUE(rt_content) TYPE zif_abapgit_persistence=>tt_content .
|
|
METHODS lock
|
|
IMPORTING
|
|
!iv_mode TYPE enqmode DEFAULT 'E'
|
|
!iv_type TYPE zif_abapgit_persistence=>ty_type
|
|
!iv_value TYPE zif_abapgit_persistence=>ty_content-value
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS modify
|
|
IMPORTING
|
|
!iv_type TYPE zif_abapgit_persistence=>ty_type
|
|
!iv_value TYPE zif_abapgit_persistence=>ty_content-value
|
|
!iv_data TYPE zif_abapgit_persistence=>ty_content-data_str
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS read
|
|
IMPORTING
|
|
!iv_type TYPE zif_abapgit_persistence=>ty_type
|
|
!iv_value TYPE zif_abapgit_persistence=>ty_content-value
|
|
RETURNING
|
|
VALUE(rv_data) TYPE zif_abapgit_persistence=>ty_content-data_str
|
|
RAISING
|
|
zcx_abapgit_not_found .
|
|
METHODS update
|
|
IMPORTING
|
|
!iv_type TYPE zif_abapgit_persistence=>ty_type
|
|
!iv_value TYPE zif_abapgit_persistence=>ty_content-value
|
|
!iv_data TYPE zif_abapgit_persistence=>ty_content-data_str
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
|
|
CLASS-DATA go_db TYPE REF TO zcl_abapgit_persistence_db .
|
|
DATA mv_update_function TYPE funcname .
|
|
|
|
METHODS get_update_function
|
|
RETURNING
|
|
VALUE(rv_funcname) TYPE funcname .
|
|
METHODS validate_and_unprettify_xml
|
|
IMPORTING
|
|
!iv_xml TYPE string
|
|
RETURNING
|
|
VALUE(rv_xml) TYPE string
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_ABAPGIT_PERSISTENCE_DB IMPLEMENTATION.
|
|
|
|
|
|
METHOD add.
|
|
|
|
DATA ls_table TYPE zif_abapgit_persistence=>ty_content.
|
|
|
|
ls_table-type = iv_type.
|
|
ls_table-value = iv_value.
|
|
ls_table-data_str = iv_data.
|
|
|
|
INSERT (c_tabname) FROM ls_table. "#EC CI_SUBRC
|
|
ASSERT sy-subrc = 0.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD delete.
|
|
|
|
lock( iv_type = iv_type
|
|
iv_value = iv_value ).
|
|
|
|
DELETE FROM (c_tabname)
|
|
WHERE type = iv_type
|
|
AND value = iv_value.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'DB Delete failed' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_instance.
|
|
|
|
IF go_db IS NOT BOUND.
|
|
CREATE OBJECT go_db.
|
|
ENDIF.
|
|
ro_db = go_db.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_update_function.
|
|
IF mv_update_function IS INITIAL.
|
|
mv_update_function = 'CALL_V1_PING'.
|
|
CALL FUNCTION 'FUNCTION_EXISTS'
|
|
EXPORTING
|
|
funcname = mv_update_function
|
|
EXCEPTIONS
|
|
OTHERS = 2.
|
|
|
|
IF sy-subrc <> 0.
|
|
mv_update_function = 'BANK_OBJ_WORKL_RELEASE_LOCKS'.
|
|
ENDIF.
|
|
ENDIF.
|
|
rv_funcname = mv_update_function.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD list.
|
|
SELECT * FROM (c_tabname)
|
|
INTO TABLE rt_content. "#EC CI_SUBRC
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD list_by_type.
|
|
SELECT * FROM (c_tabname)
|
|
INTO TABLE rt_content
|
|
WHERE type = iv_type
|
|
ORDER BY PRIMARY KEY. "#EC CI_SUBRC
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD lock.
|
|
DATA: lv_dummy_update_function TYPE funcname.
|
|
|
|
CALL FUNCTION 'ENQUEUE_EZABAPGIT'
|
|
EXPORTING
|
|
mode_zabapgit = iv_mode
|
|
type = iv_type
|
|
value = iv_value
|
|
EXCEPTIONS
|
|
foreign_lock = 1
|
|
system_failure = 2
|
|
OTHERS = 3.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( |Could not aquire lock { iv_type } { iv_value }| ).
|
|
ENDIF.
|
|
|
|
lv_dummy_update_function = get_update_function( ).
|
|
|
|
* trigger dummy update task to automatically release locks at commit
|
|
CALL FUNCTION lv_dummy_update_function
|
|
IN UPDATE TASK.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD modify.
|
|
|
|
DATA: ls_content TYPE zif_abapgit_persistence=>ty_content.
|
|
|
|
lock( iv_type = iv_type
|
|
iv_value = iv_value ).
|
|
|
|
ls_content-type = iv_type.
|
|
ls_content-value = iv_value.
|
|
ls_content-data_str = iv_data.
|
|
|
|
MODIFY (c_tabname) FROM ls_content.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'DB modify failed' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD read.
|
|
|
|
SELECT SINGLE data_str FROM (c_tabname) INTO rv_data
|
|
WHERE type = iv_type
|
|
AND value = iv_value.
|
|
IF sy-subrc <> 0.
|
|
RAISE EXCEPTION TYPE zcx_abapgit_not_found.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD update.
|
|
|
|
DATA lv_data LIKE iv_data.
|
|
|
|
lv_data = validate_and_unprettify_xml( iv_data ).
|
|
|
|
lock( iv_type = iv_type
|
|
iv_value = iv_value ).
|
|
|
|
UPDATE (c_tabname) SET data_str = lv_data
|
|
WHERE type = iv_type
|
|
AND value = iv_value.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'DB update failed' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD validate_and_unprettify_xml.
|
|
|
|
rv_xml = zcl_abapgit_xml_pretty=>print(
|
|
iv_xml = iv_xml
|
|
iv_unpretty = abap_true
|
|
iv_ignore_errors = abap_false ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|