diff --git a/src/objects/zcl_abapgit_object_apis.clas.abap b/src/objects/zcl_abapgit_object_apis.clas.abap new file mode 100644 index 000000000..e5130df26 --- /dev/null +++ b/src/objects/zcl_abapgit_object_apis.clas.abap @@ -0,0 +1,253 @@ +CLASS zcl_abapgit_object_apis DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_objects_super + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + + INTERFACES zif_abapgit_object. + + METHODS: + constructor + IMPORTING + is_item TYPE zif_abapgit_definitions=>ty_item + iv_language TYPE spras + RAISING + zcx_abapgit_exception. + + PROTECTED SECTION. + PRIVATE SECTION. + CONSTANTS gc_model TYPE string VALUE 'ARS_S_API_ABAPGIT'. + DATA mo_handler TYPE REF TO object. + METHODS initialize. +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_OBJECT_APIS IMPLEMENTATION. + + + METHOD constructor. + + DATA lr_data TYPE REF TO data. + + super->constructor( is_item = is_item + iv_language = iv_language ). + + TRY. + CREATE DATA lr_data TYPE (gc_model). + CATCH cx_sy_create_error. + zcx_abapgit_exception=>raise( |APIS not supported by your NW release| ). + ENDTRY. + + ENDMETHOD. + + + METHOD initialize. + + IF mo_handler IS NOT BOUND. + CREATE OBJECT mo_handler TYPE ('CL_ARS_API_ABAPGIT') + EXPORTING + iv_api_object_name = ms_item-obj_name. + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_object~changed_by. + + initialize( ). + + TRY. + CALL METHOD mo_handler->('IF_ARS_API_ABAPGIT~GET_CHANGED_BY') + RECEIVING + rv_changed_by = rv_user. + CATCH cx_root. + rv_user = c_user_unknown. + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~delete. + +* IF_ARS_API_ABAPGIT~DELETE_API_STATE dumps and checks fail, even tho I as a developer can delete it + + DATA lo_db TYPE REF TO object. + DATA lr_data TYPE REF TO data. + FIELD-SYMBOLS TYPE any. + + + CREATE DATA lr_data TYPE ('IF_ARS_STATE_DB_ACCESS=>TY_S_API_KEY'). + ASSIGN lr_data->* TO . + = ms_item-obj_name. + ASSERT IS NOT INITIAL. + + CALL METHOD ('CL_ARS_STATE_DB_ACCESS')=>('GET_INSTANCE') + RECEIVING + ro_state_db_access = lo_db. + + CALL METHOD lo_db->('IF_ARS_STATE_DB_ACCESS~DELETE') + EXPORTING + is_api_key = . + + ENDMETHOD. + + + METHOD zif_abapgit_object~deserialize. + +* IF_ARS_API_ABAPGIT~SAVE_API_STATE dumps in some package checks + + DATA lr_data TYPE REF TO data. + DATA lo_db TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE ANY TABLE. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE ANY TABLE. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE simple. + + + CREATE DATA lr_data TYPE (gc_model). + ASSIGN lr_data->* TO . + CREATE DATA lr_data TYPE ('IF_ARS_STATE_DB_ACCESS=>TY_S_HEADER'). + ASSIGN lr_data->* TO . + CREATE DATA lr_data TYPE ('IF_ARS_STATE_DB_ACCESS=>TY_T_STATE'). + ASSIGN lr_data->* TO . + + io_xml->read( + EXPORTING + iv_name = 'APIS' + CHANGING + cg_data = ). + + MOVE-CORRESPONDING TO . + + ASSIGN COMPONENT 'API_STATES' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + +* the state table is sorted, + LOOP AT ASSIGNING . + CREATE DATA lr_data TYPE ('IF_ARS_STATE_DB_ACCESS=>TY_S_STATE'). + ASSIGN lr_data->* TO . + MOVE-CORRESPONDING TO . + MOVE-CORRESPONDING TO . + + ASSIGN COMPONENT 'SOFTWARE_RELEASE_NAME' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = '1908'. + ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = sy-datum. + ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = sy-uname. + ASSIGN COMPONENT 'LAST_CHANGED_AT' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = sy-datum. + ASSIGN COMPONENT 'LAST_CHANGED_BY' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = sy-uname. + + INSERT INTO TABLE . + ENDLOOP. + + CALL METHOD ('CL_ARS_STATE_DB_ACCESS')=>('GET_INSTANCE') + RECEIVING + ro_state_db_access = lo_db. + + CALL METHOD lo_db->('IF_ARS_STATE_DB_ACCESS~SAVE') + EXPORTING + is_header = + it_release_states = . + + tadir_insert( iv_package ). + + corr_insert( iv_package ). + + ENDMETHOD. + + + METHOD zif_abapgit_object~exists. + + TRY. + initialize( ). + CALL METHOD mo_handler->('IF_ARS_API_ABAPGIT~CHECK_EXISTS') + RECEIVING + rv_api_exists = rv_bool. + CATCH cx_root. + rv_bool = abap_false. + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~get_comparator. + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~get_deserialize_order. + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~get_deserialize_steps. + APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps. + ENDMETHOD. + + + METHOD zif_abapgit_object~get_metadata. + rs_metadata = get_metadata( ). + rs_metadata-version = 'v2.0.0'. + ENDMETHOD. + + + METHOD zif_abapgit_object~is_active. + rv_active = zif_abapgit_object~exists( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~is_locked. +* looks like there is no enqueue lock +* E_ARS_API ? + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~jump. + " todo + ENDMETHOD. + + + METHOD zif_abapgit_object~map_filename_to_object. + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~map_object_to_filename. + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~serialize. + + DATA lr_data TYPE REF TO data. + FIELD-SYMBOLS TYPE any. + + CREATE DATA lr_data TYPE (gc_model). + ASSIGN lr_data->* TO . + + initialize( ). + + CALL METHOD mo_handler->('IF_ARS_API_ABAPGIT~GET_API_STATE') + RECEIVING + rs_apis_object = . + + io_xml->add( iv_name = 'APIS' + ig_data = ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_apis.clas.xml b/src/objects/zcl_abapgit_object_apis.clas.xml new file mode 100644 index 000000000..2479aa43c --- /dev/null +++ b/src/objects/zcl_abapgit_object_apis.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_OBJECT_APIS + E + abapGit - APIS - API Release State + 1 + X + X + X + + + +