From c5f7257a063881f4f77d30ab0ef3d36650ccea8e Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Sun, 9 Sep 2018 19:16:59 +0000 Subject: [PATCH] ENHC Composite Enhancement Implementation --- src/zcl_abapgit_object_enhc.clas.abap | 217 ++++++++++++++++++++++++++ src/zcl_abapgit_object_enhc.clas.xml | 18 +++ 2 files changed, 235 insertions(+) create mode 100644 src/zcl_abapgit_object_enhc.clas.abap create mode 100644 src/zcl_abapgit_object_enhc.clas.xml diff --git a/src/zcl_abapgit_object_enhc.clas.abap b/src/zcl_abapgit_object_enhc.clas.abap new file mode 100644 index 000000000..7e162e02f --- /dev/null +++ b/src/zcl_abapgit_object_enhc.clas.abap @@ -0,0 +1,217 @@ +CLASS zcl_abapgit_object_enhc DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_objects_super. + + 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. + + PRIVATE SECTION. + DATA: + mv_composite_id TYPE enhcompositename. + +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_OBJECT_ENHC IMPLEMENTATION. + + + METHOD constructor. + + super->constructor( is_item = is_item + iv_language = iv_language ). + + mv_composite_id = ms_item-obj_name. + + ENDMETHOD. + + + METHOD zif_abapgit_object~changed_by. + + rv_user = c_user_unknown. + + ENDMETHOD. + + + METHOD zif_abapgit_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. + ENDMETHOD. + + + METHOD zif_abapgit_object~delete. + + DATA: lx_error TYPE REF TO cx_enh_root, + li_enh_object TYPE REF TO if_enh_object. + + TRY. + li_enh_object = cl_enh_factory=>load_enhancement_composite( + name = mv_composite_id + lock = abap_true ). + + li_enh_object->delete( ). + li_enh_object->save( ). + li_enh_object->unlock( ). + + CATCH cx_enh_root INTO lx_error. + zcx_abapgit_exception=>raise( lx_error->get_text( ) ). + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~deserialize. + + DATA: lx_error TYPE REF TO cx_enh_root, + li_enh_composite TYPE REF TO if_enh_composite, + lv_package TYPE devclass, + lt_composite_childs TYPE enhcompositename_it, + lt_enh_childs TYPE enhname_it, + lv_longtext_id TYPE enhdocuobject, + lv_shorttext TYPE string. + + FIELD-SYMBOLS: TYPE enhcompositename, + LIKE LINE OF lt_enh_childs. + + lv_package = iv_package. + + + io_xml->read( EXPORTING iv_name = 'SHORTTEXT' + CHANGING cg_data = lv_shorttext ). + io_xml->read( EXPORTING iv_name = 'COMPOSITE_CHILDS' + CHANGING cg_data = lt_composite_childs ). + io_xml->read( EXPORTING iv_name = 'ENH_CHILDS' + CHANGING cg_data = lt_enh_childs ). + io_xml->read( EXPORTING iv_name = 'LONGTEXT_ID' + CHANGING cg_data = lv_longtext_id ). + + TRY. + cl_enh_factory=>create_enhancement_composite( + EXPORTING + name = mv_composite_id + run_dark = abap_true + IMPORTING + composite = li_enh_composite + CHANGING + devclass = lv_package ). + + li_enh_composite->if_enh_object_docu~set_shorttext( lv_shorttext ). + + LOOP AT lt_composite_childs ASSIGNING . + li_enh_composite->add_composite_child( ). + ENDLOOP. + + LOOP AT lt_enh_childs ASSIGNING . + li_enh_composite->add_enh_child( ). + ENDLOOP. + + li_enh_composite->set_longtext_id( lv_longtext_id ). + + li_enh_composite->if_enh_object~save( ). + li_enh_composite->if_enh_object~activate( ). + li_enh_composite->if_enh_object~unlock( ). + + CATCH cx_enh_root INTO lx_error. + zcx_abapgit_exception=>raise( lx_error->get_text( ) ). + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~exists. + + TRY. + cl_enh_factory=>load_enhancement_composite( + name = mv_composite_id + lock = abap_false ). + rv_bool = abap_true. + CATCH cx_enh_root. + rv_bool = abap_false. + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. + + + METHOD zif_abapgit_object~is_locked. + + DATA: lv_argument TYPE seqg3-garg. + + lv_argument = |{ mv_composite_id }|. + OVERLAY lv_argument WITH ' '. + lv_argument = |{ lv_argument }*|. + + rv_is_locked = exists_a_lock_entry_for( iv_lock_object = |E_ENHANCE| + iv_argument = lv_argument ). + + ENDMETHOD. + + + METHOD zif_abapgit_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = ms_item-obj_type + in_new_window = abap_true + EXCEPTIONS + OTHERS = 1. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_object~serialize. + + DATA: lx_error TYPE REF TO cx_enh_root, + li_enh_composite TYPE REF TO if_enh_composite, + lt_composite_childs TYPE enhcompositename_it, + lt_enh_childs TYPE enhname_it, + lv_longtext_id TYPE enhdocuobject, + lv_shorttext TYPE string. + + TRY. + li_enh_composite = cl_enh_factory=>load_enhancement_composite( + name = mv_composite_id + lock = abap_false ). + + lv_shorttext = li_enh_composite->if_enh_object_docu~get_shorttext( ). + + lt_composite_childs = li_enh_composite->get_composite_childs( ). + lt_enh_childs = li_enh_composite->get_enh_childs( ). + lv_longtext_id = li_enh_composite->get_longtext_id( ). + + io_xml->add( iv_name = 'SHORTTEXT' + ig_data = lv_shorttext ). + io_xml->add( iv_name = 'COMPOSITE_CHILDS' + ig_data = lt_composite_childs ). + io_xml->add( iv_name = 'ENH_CHILDS' + ig_data = lt_enh_childs ). + io_xml->add( iv_name = 'LONGTEXT_ID' + ig_data = lv_longtext_id ). + + CATCH cx_enh_root INTO lx_error. + zcx_abapgit_exception=>raise( lx_error->get_text( ) ). + ENDTRY. + + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_abapgit_object_enhc.clas.xml b/src/zcl_abapgit_object_enhc.clas.xml new file mode 100644 index 000000000..b33347404 --- /dev/null +++ b/src/zcl_abapgit_object_enhc.clas.xml @@ -0,0 +1,18 @@ + + + + + + ZCL_ABAPGIT_OBJECT_ENHC + 1 + E + Composite Enhancement + 2 + 1 + X + X + X + + + +