CLASS zcl_abapgit_object_iaxu DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL. PUBLIC SECTION. INTERFACES zif_abapgit_object. PROTECTED SECTION. PRIVATE SECTION. DATA: mv_source_style_2006 TYPE w3style VALUE 'XML', mv_generator_class TYPE w3styleclass VALUE 'CL_ITS_GENERATE_XML3'. METHODS: read RETURNING VALUE(rs_attr) TYPE w3tempattr RAISING zcx_abapgit_exception, save IMPORTING is_attr TYPE w3tempattr RAISING zcx_abapgit_exception, w3_api_load IMPORTING is_name TYPE iacikeyt EXPORTING eo_xml_api TYPE REF TO object es_attr TYPE w3tempattr RAISING zcx_abapgit_exception, w3_api_set_changeable IMPORTING io_xml_api TYPE REF TO object iv_changeable TYPE abap_bool RAISING zcx_abapgit_exception, w3_api_delete IMPORTING io_xml_api TYPE REF TO object RAISING zcx_abapgit_exception, w3_api_save IMPORTING io_xml_api TYPE REF TO object RAISING zcx_abapgit_exception, w3_api_create_new IMPORTING is_attr TYPE w3tempattr RETURNING VALUE(ro_xml_api) TYPE REF TO object RAISING zcx_abapgit_exception. ENDCLASS. CLASS zcl_abapgit_object_iaxu IMPLEMENTATION. METHOD read. DATA: ls_name TYPE iacikeyt. ls_name = ms_item-obj_name. w3_api_load( EXPORTING is_name = ls_name IMPORTING es_attr = rs_attr ). CLEAR: rs_attr-chname, rs_attr-tdate, rs_attr-ttime, rs_attr-devclass. ENDMETHOD. METHOD save. DATA: lo_xml_api TYPE REF TO object. lo_xml_api = w3_api_create_new( is_attr = is_attr ). w3_api_save( io_xml_api = lo_xml_api ). w3_api_set_changeable( io_xml_api = lo_xml_api iv_changeable = abap_false ). ENDMETHOD. METHOD w3_api_create_new. DATA: lr_xml_api TYPE REF TO data. FIELD-SYMBOLS: TYPE any. CREATE DATA lr_xml_api TYPE REF TO ('CL_W3_API_XML3'). ASSIGN lr_xml_api->* TO . ASSERT sy-subrc = 0. CALL METHOD ('CL_W3_API_XML3')=>create_new EXPORTING p_source_style_2006 = mv_source_style_2006 p_xml_data = is_attr p_generator_class = mv_generator_class p_program_name = is_attr-programm IMPORTING p_xml = EXCEPTIONS undefined_name = 1 error_occured = 2 object_already_existing = 3 not_authorized = 4 action_cancelled = 5 OTHERS = 6. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |Error from w3_api_xml3~create_new subrc={ sy-subrc }| ). ENDIF. ro_xml_api ?= . ENDMETHOD. METHOD w3_api_delete. CALL METHOD io_xml_api->('IF_W3_API_OBJECT~DELETE') EXCEPTIONS object_not_empty = 1 object_not_changeable = 2 object_invalid = 3 error_occured = 4 OTHERS = 5. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |Error from w3_api_xml3~delete subrc={ sy-subrc }| ). ENDIF. ENDMETHOD. METHOD w3_api_load. DATA: lr_xml_api TYPE REF TO data. FIELD-SYMBOLS: TYPE any. CREATE DATA lr_xml_api TYPE REF TO ('CL_W3_API_XML3'). ASSIGN lr_xml_api->* TO . ASSERT sy-subrc = 0. CALL METHOD ('CL_W3_API_XML3')=>load EXPORTING p_xml_name = is_name IMPORTING p_attributes = es_attr p_xml = EXCEPTIONS object_not_existing = 1 permission_failure = 2 data_corrupt = 3 error_occured = 4 OTHERS = 5. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |Error from w3_api_xml3~load subrc={ sy-subrc }| ). ENDIF. eo_xml_api ?= . ENDMETHOD. METHOD w3_api_save. CALL METHOD io_xml_api->('IF_W3_API_OBJECT~SAVE') EXCEPTIONS object_invalid = 1 object_not_changeable = 2 action_cancelled = 3 permission_failure = 4 not_changed = 5 data_invalid = 6 error_occured = 7 OTHERS = 8. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |Error from w3_api_xml3~save subrc={ sy-subrc }| ). ENDIF. ENDMETHOD. METHOD w3_api_set_changeable. CALL METHOD io_xml_api->('IF_W3_API_OBJECT~SET_CHANGEABLE') EXPORTING p_changeable = iv_changeable EXCEPTIONS action_cancelled = 1 object_locked_by_other_user = 2 permission_failure = 3 object_already_changeable = 4 object_already_unlocked = 5 object_just_created = 6 object_deleted = 7 object_modified = 8 object_not_existing = 9 object_invalid = 10 error_occured = 11 OTHERS = 12. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |Error from w3_api_xml3~set_changeable subrc={ sy-subrc }| ). ENDIF. ENDMETHOD. METHOD zif_abapgit_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. METHOD zif_abapgit_object~delete. DATA: lo_xml_api TYPE REF TO object, ls_name TYPE iacikeyt. ls_name = ms_item-obj_name. w3_api_load( EXPORTING is_name = ls_name IMPORTING eo_xml_api = lo_xml_api ). w3_api_set_changeable( io_xml_api = lo_xml_api iv_changeable = abap_true ). w3_api_delete( io_xml_api = lo_xml_api ). w3_api_save( io_xml_api = lo_xml_api ). ENDMETHOD. METHOD zif_abapgit_object~deserialize. DATA: ls_attr TYPE w3tempattr. io_xml->read( EXPORTING iv_name = 'ATTR' CHANGING cg_data = ls_attr ). ls_attr-devclass = iv_package. IF zif_abapgit_object~exists( ) = abap_true. zif_abapgit_object~delete( iv_package = iv_package iv_transport = iv_transport ). ENDIF. save( is_attr = ls_attr ). ENDMETHOD. METHOD zif_abapgit_object~exists. DATA: ls_name TYPE iacikeyt. ls_name = ms_item-obj_name. CALL METHOD ('CL_W3_API_XML3')=>s_check_exist EXPORTING p_xml_name = ls_name IMPORTING p_exists = rv_bool. 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( ). 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. " Covered by ZCL_ABAPGIT_OBJECTS=>JUMP ENDMETHOD. METHOD zif_abapgit_object~serialize. DATA: ls_attr TYPE w3tempattr. IF zif_abapgit_object~exists( ) = abap_false. RETURN. ENDIF. ls_attr = read( ). io_xml->add( iv_name = 'ATTR' ig_data = ls_attr ). ENDMETHOD. ENDCLASS.