abapGit/src/objects/zcl_abapgit_object_intf.clas.abap
larshp 25f6284493 implement GET_DESERIALIZE_STEPS
this is a quick fix, field LATE_DESER will be removed in future
2019-03-12 07:37:56 -07:00

357 lines
9.6 KiB
ABAP

CLASS zcl_abapgit_object_intf DEFINITION PUBLIC FINAL INHERITING FROM zcl_abapgit_objects_program.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
ALIASES mo_files FOR zif_abapgit_object~mo_files.
METHODS constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras.
PROTECTED SECTION.
METHODS deserialize_proxy
RAISING
zcx_abapgit_exception .
METHODS deserialize_abap
IMPORTING
!io_xml TYPE REF TO zcl_abapgit_xml_input
!iv_package TYPE devclass
RAISING
zcx_abapgit_exception .
METHODS deserialize_docu
IMPORTING
!io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
DATA mi_object_oriented_object_fct TYPE REF TO zif_abapgit_oo_object_fnc.
METHODS serialize_xml
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
METHOD constructor.
super->constructor(
is_item = is_item
iv_language = iv_language ).
mi_object_oriented_object_fct = zcl_abapgit_oo_factory=>make( ms_item-obj_type ).
ENDMETHOD.
METHOD deserialize_abap.
DATA: ls_vseointerf TYPE vseointerf,
lt_source TYPE seop_source_string,
lt_descriptions TYPE zif_abapgit_definitions=>ty_seocompotx_tt,
ls_clskey TYPE seoclskey.
ls_clskey-clsname = ms_item-obj_name.
lt_source = mo_files->read_abap( ).
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
CHANGING cg_data = ls_vseointerf ).
mi_object_oriented_object_fct->create(
EXPORTING
iv_package = iv_package
CHANGING
cg_properties = ls_vseointerf ).
mi_object_oriented_object_fct->deserialize_source(
is_key = ls_clskey
it_source = lt_source ).
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
CHANGING cg_data = lt_descriptions ).
mi_object_oriented_object_fct->update_descriptions(
is_key = ls_clskey
it_descriptions = lt_descriptions ).
mi_object_oriented_object_fct->add_to_activation_list( ms_item ).
ENDMETHOD.
METHOD deserialize_docu.
DATA: lt_lines TYPE tlinetab,
lv_object TYPE dokhl-object.
io_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ).
IF lines( lt_lines ) = 0.
RETURN.
ENDIF.
lv_object = ms_item-obj_name.
mi_object_oriented_object_fct->create_documentation(
it_lines = lt_lines
iv_object_name = lv_object
iv_language = mv_language ).
ENDMETHOD.
METHOD deserialize_proxy.
DATA: lv_transport TYPE e070use-ordernum,
li_proxy_object TYPE REF TO if_px_main,
lv_name TYPE prx_r3name,
lx_proxy_fault TYPE REF TO cx_proxy_fault.
lv_transport = zcl_abapgit_default_transport=>get_instance(
)->get( )-ordernum.
lv_name = ms_item-obj_name.
TRY.
li_proxy_object = cl_pxn_factory=>create(
application = 'PROXY_UI'
display_only = abap_false
saveable = abap_true
)->if_pxn_factory~load_by_abap_name(
object = ms_item-obj_type
obj_name = lv_name ).
li_proxy_object->activate(
EXPORTING
activate_all = abap_true
CHANGING
transport_number = lv_transport ).
li_proxy_object->dequeue( ).
CATCH cx_proxy_fault INTO lx_proxy_fault.
zcx_abapgit_exception=>raise( iv_text = |{ lx_proxy_fault->get_text( ) }|
ix_previous = lx_proxy_fault ).
ENDTRY.
ENDMETHOD.
METHOD serialize_xml.
DATA:
lt_descriptions TYPE zif_abapgit_definitions=>ty_seocompotx_tt,
ls_vseointerf TYPE vseointerf,
ls_clskey TYPE seoclskey,
lt_lines TYPE tlinetab.
ls_clskey-clsname = ms_item-obj_name.
ls_vseointerf = mi_object_oriented_object_fct->get_interface_properties( ls_clskey ).
CLEAR: ls_vseointerf-uuid,
ls_vseointerf-author,
ls_vseointerf-createdon,
ls_vseointerf-changedby,
ls_vseointerf-changedon,
ls_vseointerf-chgdanyby,
ls_vseointerf-chgdanyon,
ls_vseointerf-r3release.
io_xml->add( iv_name = 'VSEOINTERF'
ig_data = ls_vseointerf ).
lt_lines = mi_object_oriented_object_fct->read_documentation(
iv_class_name = ls_clskey-clsname
iv_language = mv_language ).
IF lines( lt_lines ) > 0.
io_xml->add( iv_name = 'LINES'
ig_data = lt_lines ).
ENDIF.
lt_descriptions = mi_object_oriented_object_fct->read_descriptions( ls_clskey-clsname ).
IF lines( lt_descriptions ) > 0.
io_xml->add( iv_name = 'DESCRIPTIONS'
ig_data = lt_descriptions ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
TYPES: BEGIN OF ty_includes,
programm TYPE programm,
END OF ty_includes.
TYPES: BEGIN OF ty_reposrc,
unam TYPE reposrc-unam,
udat TYPE reposrc-udat,
utime TYPE reposrc-utime,
END OF ty_reposrc.
DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc,
ls_reposrc LIKE LINE OF lt_reposrc,
lt_includes TYPE STANDARD TABLE OF ty_includes.
lt_includes = mi_object_oriented_object_fct->get_includes( ms_item-obj_name ).
ASSERT lines( lt_includes ) > 0.
SELECT unam udat utime FROM reposrc
INTO TABLE lt_reposrc
FOR ALL ENTRIES IN lt_includes
WHERE progname = lt_includes-programm
AND r3state = 'A'.
IF sy-subrc <> 0.
rv_user = c_user_unknown.
ELSE.
SORT lt_reposrc BY udat DESCENDING utime DESCENDING.
READ TABLE lt_reposrc INDEX 1 INTO ls_reposrc.
ASSERT sy-subrc = 0.
rv_user = ls_reposrc-unam.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: ls_clskey TYPE seoclskey,
ls_vseointerf TYPE vseointerf.
ls_clskey-clsname = ms_item-obj_name.
ls_vseointerf = mi_object_oriented_object_fct->get_interface_properties( ls_clskey ).
IF ls_vseointerf-clsproxy = abap_true.
" Proxy interfaces are managed via SPRX
RETURN.
ENDIF.
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
mi_object_oriented_object_fct->delete( ls_clskey ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_vseointerf TYPE vseointerf.
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
CHANGING cg_data = ls_vseointerf ).
IF ls_vseointerf-clsproxy = abap_true.
" Proxy interfaces are managed via SPRX
deserialize_proxy( ).
RETURN.
ENDIF.
deserialize_abap( io_xml = io_xml
iv_package = iv_package ).
deserialize_docu( io_xml ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: ls_class_key TYPE seoclskey,
lv_category TYPE seoclassdf-category.
ls_class_key-clsname = ms_item-obj_name.
rv_bool = mi_object_oriented_object_fct->exists( ls_class_key ).
IF rv_bool = abap_true.
SELECT SINGLE category FROM seoclassdf INTO lv_category
WHERE clsname = ls_class_key-clsname
AND ( version = '1'
OR version = '0' ) ##warn_ok. "#EC CI_GENBUFF
IF sy-subrc = 0 AND lv_category = seoc_category_webdynpro_class.
rv_bool = abap_false.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps.
DATA: ls_meta TYPE zif_abapgit_definitions=>ty_metadata.
ls_meta = get_metadata( ).
IF ls_meta-late_deser = abap_true.
APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps.
ELSEIF ls_meta-ddic = abap_true.
APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps.
ELSE.
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
ENDIF.
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.
DATA: lv_object TYPE eqegraarg.
lv_object = |{ ms_item-obj_name }|.
OVERLAY lv_object WITH '==============================P'.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESEOCLASS'
iv_argument = lv_object ).
ENDMETHOD.
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = 'INTF'
in_new_window = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lt_source TYPE seop_source_string,
ls_interface_key TYPE seoclskey.
ls_interface_key-clsname = ms_item-obj_name.
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
CALL FUNCTION 'SEO_BUFFER_REFRESH'
EXPORTING
version = seoc_version_active
force = seox_true.
CALL FUNCTION 'SEO_BUFFER_REFRESH'
EXPORTING
version = seoc_version_inactive
force = seox_true.
lt_source = mi_object_oriented_object_fct->serialize_abap( ls_interface_key ).
mo_files->add_abap( lt_source ).
serialize_xml( io_xml ).
ENDMETHOD.
ENDCLASS.