abapGit/src/objects/zcl_abapgit_object_dsys.clas.abap
g-back b5b947bfe7
change reference from xml classes to interfaces (#3885)
changed refs in:
- zif_abapgit_longtext
- zif_abapgit_object_enhs

Co-authored-by: Lars Hvam <larshp@hotmail.com>
2020-09-15 08:21:32 +02:00

232 lines
4.9 KiB
ABAP

CLASS zcl_abapgit_object_dsys DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
METHODS constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras.
PROTECTED SECTION.
PRIVATE SECTION.
CONSTANTS: c_typ TYPE dokhl-typ VALUE 'E',
c_id TYPE dokhl-id VALUE 'HY'.
DATA: mv_doc_object TYPE sobj_name.
TYPES: BEGIN OF ty_data,
doctitle TYPE dsyst-doktitle,
head TYPE thead,
lines TYPE tline_tab,
END OF ty_data.
METHODS deserialize_dsys
IMPORTING
io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING
zcx_abapgit_exception.
METHODS get_master_lang
RETURNING
VALUE(rv_language) TYPE spras.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DSYS IMPLEMENTATION.
METHOD constructor.
DATA: lv_prefix TYPE namespace,
lv_bare_name TYPE progname.
super->constructor( is_item = is_item
iv_language = iv_language ).
IF ms_item-obj_name(1) = '/'.
CALL FUNCTION 'RS_NAME_SPLIT_NAMESPACE'
EXPORTING
name_with_namespace = ms_item-obj_name
IMPORTING
namespace = lv_prefix
name_without_namespace = lv_bare_name.
ELSE.
lv_bare_name = ms_item-obj_name.
ENDIF.
mv_doc_object = |{ lv_bare_name+0(4) }{ lv_prefix }{ lv_bare_name+4(*) }|.
ENDMETHOD.
METHOD deserialize_dsys.
DATA: ls_data TYPE ty_data,
ls_docu_info TYPE dokil,
lv_version TYPE dokvers,
lv_doku_obj TYPE doku_obj.
lv_doku_obj = mv_doc_object.
io_xml->read( EXPORTING iv_name = 'DSYS'
CHANGING cg_data = ls_data ).
CALL FUNCTION 'DOCU_INIT'
EXPORTING
id = c_id
langu = mv_language
object = lv_doku_obj
typ = c_typ
IMPORTING
xdokil = ls_docu_info.
lv_version = ls_docu_info-version.
CALL FUNCTION 'DOCU_UPDATE'
EXPORTING
head = ls_data-head
state = 'A'
typ = c_typ
version = lv_version
TABLES
line = ls_data-lines.
ENDMETHOD.
METHOD get_master_lang.
SELECT SINGLE langu FROM dokil INTO rv_language
WHERE id = c_id
AND object = mv_doc_object
AND masterlang = abap_true.
IF sy-subrc <> 0.
rv_language = mv_language.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
rv_user = zcl_abapgit_factory=>get_longtexts( )->changed_by(
iv_object_name = mv_doc_object
iv_longtext_id = c_id ).
ENDMETHOD.
METHOD zif_abapgit_object~delete.
zcl_abapgit_factory=>get_longtexts( )->delete(
iv_object_name = mv_doc_object
iv_longtext_id = c_id ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_metadata TYPE zif_abapgit_definitions=>ty_metadata.
ls_metadata = io_xml->get_metadata( ).
CASE ls_metadata-version.
WHEN 'v1.0.0'.
deserialize_dsys( io_xml ).
WHEN 'v2.0.0'.
zcl_abapgit_factory=>get_longtexts( )->deserialize(
ii_xml = io_xml
iv_master_language = mv_language ).
WHEN OTHERS.
zcx_abapgit_exception=>raise( 'unsupported DSYS version' ).
ENDCASE.
tadir_insert( iv_package ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lv_count TYPE i.
SELECT SINGLE COUNT( * ) FROM dokil INTO lv_count
WHERE id = c_id
AND object = mv_doc_object. "#EC CI_GENBUFF
rv_bool = boolc( lv_count > 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
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( ).
rs_metadata-delete_tadir = abap_true.
rs_metadata-version = 'v2.0.0'.
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.
DATA lv_lang TYPE sy-langu.
lv_lang = get_master_lang( ).
CALL FUNCTION 'DSYS_EDIT'
EXPORTING
dokclass = mv_doc_object+0(4)
dokname = mv_doc_object+4(*)
doklangu = lv_lang
EXCEPTIONS
class_unknown = 1
object_not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from DSYS_EDIT' ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
zcl_abapgit_factory=>get_longtexts( )->serialize(
iv_object_name = mv_doc_object
iv_longtext_id = c_id
ii_xml = io_xml ).
ENDMETHOD.
ENDCLASS.