From 1290dcec93be23674fce897d2ffc31689c89f0ff Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 17 Jun 2018 12:29:29 +0000 Subject: [PATCH] CHAR support, #1511 --- src/objects/zcl_abapgit_object_char.clas.abap | 249 ++++++++++++++++++ src/objects/zcl_abapgit_object_char.clas.xml | 18 ++ 2 files changed, 267 insertions(+) create mode 100644 src/objects/zcl_abapgit_object_char.clas.abap create mode 100644 src/objects/zcl_abapgit_object_char.clas.xml diff --git a/src/objects/zcl_abapgit_object_char.clas.abap b/src/objects/zcl_abapgit_object_char.clas.abap new file mode 100644 index 000000000..6d08cb9ad --- /dev/null +++ b/src/objects/zcl_abapgit_object_char.clas.abap @@ -0,0 +1,249 @@ +CLASS zcl_abapgit_object_char DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_objects_super + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES zif_abapgit_object . + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_char, + cls_attribute TYPE cls_attribute, + cls_attributet TYPE STANDARD TABLE OF cls_attributet WITH DEFAULT KEY, + cls_attr_value TYPE STANDARD TABLE OF cls_attr_value WITH DEFAULT KEY, + cls_attr_valuet TYPE STANDARD TABLE OF cls_attr_valuet WITH DEFAULT KEY, + END OF ty_char . + + METHODS instantiate_char + IMPORTING + !iv_type_group TYPE cls_object_type_group + RETURNING + VALUE(ro_char) TYPE REF TO cl_cls_attribute + RAISING + zcx_abapgit_exception . +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION. + + + METHOD instantiate_char. + + DATA: lv_new TYPE abap_bool, + lv_name TYPE cls_attribute_name. + + + SELECT SINGLE name FROM cls_attribute INTO lv_name WHERE name = ms_item-obj_name. + lv_new = boolc( sy-subrc <> 0 ). + lv_name = ms_item-obj_name. + + TRY. + CREATE OBJECT ro_char + EXPORTING + im_name = lv_name + im_type_group = iv_type_group + im_new = lv_new. + CATCH cx_pak_invalid_data + cx_pak_not_authorized + cx_pak_invalid_state + cx_pak_wb_object_locked. + zcx_abapgit_exception=>raise( 'Error while instantiating CL_CLS_ATTRIBUTE' ). + ENDTRY. + + IF lv_new = abap_false. + TRY. + ro_char->if_pak_wb_object~lock_and_refresh( ). + CATCH cx_pak_wb_object_locked. + zcx_abapgit_exception=>raise( |Could not aquire lock, CHAR { lv_name }| ). + ENDTRY. + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_object~changed_by. + + SELECT SINGLE changed_by FROM cls_attribute INTO rv_user + WHERE name = ms_item-obj_name + AND activation_state = 'A'. + + IF rv_user IS INITIAL. + SELECT SINGLE created_by FROM cls_attribute INTO rv_user + WHERE name = ms_item-obj_name + AND activation_state = 'A'. + ENDIF. + + IF rv_user IS INITIAL. + rv_user = c_user_unknown. + ENDIF. + + 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: lo_char TYPE REF TO cl_cls_attribute, + lv_type_group TYPE cls_attribute-type_group. + + + SELECT SINGLE type_group FROM cls_attribute INTO lv_type_group + WHERE name = ms_item-obj_name + AND activation_state = 'A'. + + lo_char = instantiate_char( lv_type_group ). + + lo_char->if_pak_wb_object~delete( ). + + lo_char->if_pak_wb_object~save( ). + + lo_char->if_pak_wb_object_internal~unlock( ). + + ENDMETHOD. + + + METHOD zif_abapgit_object~deserialize. + + DATA: ls_char TYPE ty_char, + lv_request TYPE trkorr, + ls_description LIKE LINE OF ls_char-cls_attributet, + lo_char TYPE REF TO cl_cls_attribute. + + + io_xml->read( EXPORTING iv_name = 'CHAR' + CHANGING cg_data = ls_char ). + + tadir_insert( iv_package ). + + lo_char = instantiate_char( ls_char-cls_attribute-type_group ). + + lo_char->if_cls_attribute~set_kind( ls_char-cls_attribute-kind ). + lo_char->if_cls_attribute~set_single_valued( ls_char-cls_attribute-is_single_valued ). + lo_char->if_cls_attribute~set_aspect( + im_aspect_for = ls_char-cls_attribute-is_aspect_for + im_aspect_value = ls_char-cls_attribute-aspect_value ). + lo_char->if_cls_attribute~set_default_flag( ls_char-cls_attribute-default_flag ). + lo_char->if_cls_attribute~set_default_value( ls_char-cls_attribute-default_value ). + lo_char->if_cls_attribute~set_sub_object_treatment( ls_char-cls_attribute-sub_obj_treatm ). + lo_char->if_cls_attribute~set_automatic_changes_allowed( ls_char-cls_attribute-automatic_change ). + lo_char->if_cls_attribute~set_manual_changes_allowed( ls_char-cls_attribute-manu_chag_allow ). + lo_char->if_cls_attribute~set_implicit_changes_allowed( ls_char-cls_attribute-implicit_change ). + lo_char->if_cls_attribute~set_expl_values_dominate_links( ls_char-cls_attribute-weak_links ). + lo_char->if_cls_attribute~set_assignment_package_rule( ls_char-cls_attribute-assignment_devc ). + lo_char->if_cls_attribute~set_hide_remark( ls_char-cls_attribute-hide_remark ). + lo_char->if_cls_attribute~set_visible_in_customer_system( ls_char-cls_attribute-visible_for_cust ). + lo_char->if_cls_attribute~set_value_table( ls_char-cls_attribute-value_table ). + lo_char->if_cls_attribute~set_vtable_field( ls_char-cls_attribute-vtable_field ). + lo_char->if_cls_attribute~set_vtable_icon_f( ls_char-cls_attribute-vtable_icon_f ). + lo_char->if_cls_attribute~set_vtext_langu_f( ls_char-cls_attribute-vtext_langu_f ). + lo_char->if_cls_attribute~set_vtext_table( ls_char-cls_attribute-vtext_table ). + lo_char->if_cls_attribute~set_vtext_text_f( ls_char-cls_attribute-vtext_text_f ). + lo_char->if_cls_attribute~set_vtext_value_f( ls_char-cls_attribute-vtext_value_f ). + lo_char->if_cls_attribute~set_existing_objects_only( ls_char-cls_attribute-existing_objects ). + lo_char->if_cls_attribute~set_objs_of_typegr( ls_char-cls_attribute-objs_of_typegr ). + lo_char->if_cls_attribute~set_obj_values_have_subtypes( ls_char-cls_attribute-objs_w_subtype ). + lo_char->if_cls_attribute~set_arbtry_val_type( ls_char-cls_attribute-arbtry_val_type ). + + READ TABLE ls_char-cls_attributet INTO ls_description WITH KEY langu = sy-langu. + IF sy-subrc <> 0. + READ TABLE ls_char-cls_attributet INTO ls_description INDEX 1. + ENDIF. + lo_char->if_cls_attribute~set_description( ls_description-text ). + + lo_char->if_cls_attribute~set_values( + im_values = ls_char-cls_attr_value + im_values_t = ls_char-cls_attr_valuet ). + +* set default package, see function module RS_CORR_INSERT + SET PARAMETER ID 'EUK' FIELD iv_package. + + lo_char->if_pak_wb_object~save( ). + + SET PARAMETER ID 'EUK' FIELD ''. + + lo_char->if_pak_wb_object~activate( ). + + lo_char->if_pak_wb_object_internal~unlock( ). + + ENDMETHOD. + + + METHOD zif_abapgit_object~exists. + + rv_bool = cl_cls_attribute=>exists_object_attribute( ms_item-obj_name ). + + 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~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = ms_item-obj_type + EXCEPTIONS + not_executed = 1 + invalid_object_type = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( |Error from RS_TOOL_ACCESS, CHAR| ). + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_object~serialize. + + DATA: ls_char TYPE ty_char. + + CONSTANTS: lc_active TYPE c LENGTH 1 VALUE 'A'. + + + SELECT SINGLE * FROM cls_attribute INTO ls_char-cls_attribute + WHERE name = ms_item-obj_name + AND activation_state = lc_active. +* todo, ASSIGNMENT_DEVC? + + CLEAR: ls_char-cls_attribute-created_by, + ls_char-cls_attribute-created_on, + ls_char-cls_attribute-changed_by, + ls_char-cls_attribute-changed_on. + + SELECT * FROM cls_attributet INTO TABLE ls_char-cls_attributet + WHERE name = ms_item-obj_name + AND activation_state = lc_active. + + SELECT * FROM cls_attr_value INTO TABLE ls_char-cls_attr_value + WHERE name = ms_item-obj_name + AND activation_state = lc_active. + + SELECT * FROM cls_attr_valuet INTO TABLE ls_char-cls_attr_valuet + WHERE name = ms_item-obj_name + AND activation_state = lc_active. + + io_xml->add( iv_name = 'CHAR' + ig_data = ls_char ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_char.clas.xml b/src/objects/zcl_abapgit_object_char.clas.xml new file mode 100644 index 000000000..d7b57e002 --- /dev/null +++ b/src/objects/zcl_abapgit_object_char.clas.xml @@ -0,0 +1,18 @@ + + + + + + ZCL_ABAPGIT_OBJECT_CHAR + 1 + E + 2 + 1 + X + X + X + X + + + +