abapGit/src/objects/zcl_abapgit_object_char.clas.abap
2018-06-18 15:41:13 +02:00

255 lines
7.9 KiB
ABAP

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~is_locked.
rv_is_locked = abap_false.
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.