From 45aa71f2da2992de2d573fbb1f0e872eac72edf3 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 13 Jun 2018 17:28:56 +0200 Subject: [PATCH] interface for ZCL_ABAPGIT_REPO_SRV --- src/zcl_abapgit_repo_srv.clas.abap | 417 +++++++++++++---------------- src/zif_abapgit_repo_srv.intf.abap | 63 +++++ src/zif_abapgit_repo_srv.intf.xml | 16 ++ 3 files changed, 266 insertions(+), 230 deletions(-) create mode 100644 src/zif_abapgit_repo_srv.intf.abap create mode 100644 src/zif_abapgit_repo_srv.intf.xml diff --git a/src/zcl_abapgit_repo_srv.clas.abap b/src/zcl_abapgit_repo_srv.clas.abap index 826de4d5b..364ec5239 100644 --- a/src/zcl_abapgit_repo_srv.clas.abap +++ b/src/zcl_abapgit_repo_srv.clas.abap @@ -5,70 +5,23 @@ CLASS zcl_abapgit_repo_srv DEFINITION PUBLIC SECTION. + INTERFACES zif_abapgit_repo_srv . + CLASS-METHODS get_instance RETURNING - VALUE(rv_srv) TYPE REF TO zcl_abapgit_repo_srv . - METHODS list - RETURNING - VALUE(rt_list) TYPE zif_abapgit_definitions=>ty_repo_ref_tt - RAISING - zcx_abapgit_exception . - METHODS new_online - IMPORTING - !iv_url TYPE string - !iv_branch_name TYPE string - !iv_package TYPE devclass - RETURNING - VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_online - RAISING - zcx_abapgit_exception . - METHODS new_offline - IMPORTING - !iv_url TYPE string - !iv_package TYPE devclass - RETURNING - VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_offline - RAISING - zcx_abapgit_exception . - METHODS delete - IMPORTING - !io_repo TYPE REF TO zcl_abapgit_repo - RAISING - zcx_abapgit_exception . - METHODS get - IMPORTING - !iv_key TYPE zif_abapgit_persistence=>ty_value - RETURNING - VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo - RAISING - zcx_abapgit_exception . - METHODS is_repo_installed - IMPORTING - !iv_url TYPE string - !iv_target_package TYPE devclass OPTIONAL - RETURNING - VALUE(rv_installed) TYPE abap_bool - RAISING - zcx_abapgit_exception . - METHODS switch_repo_type - IMPORTING - !iv_key TYPE zif_abapgit_persistence=>ty_value - !iv_offline TYPE abap_bool - RAISING - zcx_abapgit_exception . - METHODS validate_package - IMPORTING - !iv_package TYPE devclass - RAISING - zcx_abapgit_exception . - METHODS purge - IMPORTING - !io_repo TYPE REF TO zcl_abapgit_repo - RAISING - zcx_abapgit_exception . + VALUE(ri_srv) TYPE REF TO zif_abapgit_repo_srv . PRIVATE SECTION. - CLASS-DATA go_ref TYPE REF TO zcl_abapgit_repo_srv . + ALIASES delete + FOR zif_abapgit_repo_srv~delete . + ALIASES get + FOR zif_abapgit_repo_srv~get . + ALIASES list + FOR zif_abapgit_repo_srv~list . + ALIASES validate_package + FOR zif_abapgit_repo_srv~validate_package . + + CLASS-DATA gi_ref TYPE REF TO zif_abapgit_repo_srv . DATA mv_init TYPE abap_bool VALUE abap_false ##NO_TEXT. DATA mo_persistence TYPE REF TO zcl_abapgit_persistence_repo . DATA mt_list TYPE zif_abapgit_definitions=>ty_repo_ref_tt . @@ -116,79 +69,14 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION. ENDMETHOD. "class_constructor - METHOD delete. - - io_repo->delete( ). - - DELETE TABLE mt_list FROM io_repo. - ASSERT sy-subrc = 0. - - ENDMETHOD. "delete - - - METHOD get. - - FIELD-SYMBOLS: LIKE LINE OF mt_list. - - - IF mv_init = abap_false. - refresh( ). - ENDIF. - - LOOP AT mt_list ASSIGNING . - IF ->get_key( ) = iv_key. - ro_repo = . - RETURN. - ENDIF. - ENDLOOP. - - zcx_abapgit_exception=>raise( 'repo not found, get' ). - - ENDMETHOD. "get - - METHOD get_instance. - IF go_ref IS INITIAL. - CREATE OBJECT go_ref. + IF gi_ref IS INITIAL. + CREATE OBJECT gi_ref TYPE zcl_abapgit_repo_srv. ENDIF. - rv_srv = go_ref. + ri_srv = gi_ref. ENDMETHOD. - METHOD is_repo_installed. - - DATA: lt_repo TYPE zif_abapgit_definitions=>ty_repo_ref_tt, - lo_repo TYPE REF TO zcl_abapgit_repo, - lv_url TYPE string, - lv_package TYPE devclass, - lo_repo_online TYPE REF TO zcl_abapgit_repo_online, - lv_err TYPE string. - - lt_repo = list( ). - - LOOP AT lt_repo INTO lo_repo. - CHECK lo_repo->is_offline( ) = abap_false. - lo_repo_online ?= lo_repo. - - lv_url = lo_repo_online->get_url( ). - lv_package = lo_repo_online->get_package( ). - CHECK to_upper( lv_url ) = to_upper( iv_url ). - - " Validate bindings - "TODO refactor: move this message out of this method - IF iv_target_package IS NOT INITIAL AND iv_target_package <> lv_package. - lv_err = |Installation to package { lv_package } detected. | - && |Cancelling installation|. - zcx_abapgit_exception=>raise( lv_err ). - ENDIF. - - rv_installed = abap_true. - EXIT. - ENDLOOP. - - ENDMETHOD. "is_repo_installed - - METHOD is_sap_object_allowed. rv_allowed = cl_enh_badi_def_utility=>is_sap_system( ). @@ -201,104 +89,6 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION. ENDMETHOD. - METHOD list. - - IF mv_init = abap_false. - refresh( ). - ENDIF. - - rt_list = mt_list. - - ENDMETHOD. "list - - - METHOD new_offline. - - DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo, - lv_key TYPE zif_abapgit_persistence=>ty_repo-key. - - - validate_package( iv_package ). - - lv_key = mo_persistence->add( - iv_url = iv_url - iv_branch_name = '' - iv_package = iv_package - iv_offline = abap_true - is_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ) ). - - TRY. - ls_repo = mo_persistence->read( lv_key ). - CATCH zcx_abapgit_not_found. - zcx_abapgit_exception=>raise( 'new_offline not found' ). - ENDTRY. - - CREATE OBJECT ro_repo - EXPORTING - is_data = ls_repo. - - add( ro_repo ). - - ENDMETHOD. "new_offline - - - METHOD new_online. - - DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo, - lv_key TYPE zif_abapgit_persistence=>ty_repo-key. - - - ASSERT NOT iv_url IS INITIAL - AND NOT iv_branch_name IS INITIAL - AND NOT iv_package IS INITIAL. - - validate_package( iv_package ). - zcl_abapgit_url=>validate( |{ iv_url }| ). - - lv_key = mo_persistence->add( - iv_url = iv_url - iv_branch_name = iv_branch_name - iv_package = iv_package - iv_offline = abap_false - is_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ) ). - TRY. - ls_repo = mo_persistence->read( lv_key ). - CATCH zcx_abapgit_not_found. - zcx_abapgit_exception=>raise( 'new_online not found' ). - ENDTRY. - - CREATE OBJECT ro_repo - EXPORTING - is_data = ls_repo. - - add( ro_repo ). - - ro_repo->initialize( ). - ro_repo->find_remote_dot_abapgit( ). - - ENDMETHOD. "new_online - - - METHOD purge. - - DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt. - - - IF io_repo->get_local_settings( )-write_protected = abap_true. - zcx_abapgit_exception=>raise( 'Cannot purge. Local code is write-protected by repo config' ). - ELSEIF zcl_abapgit_auth=>is_allowed( zif_abapgit_auth=>gc_authorization-uninstall ) = abap_false. - zcx_abapgit_exception=>raise( 'Not authorized' ). - ENDIF. - - lt_tadir = zcl_abapgit_tadir=>read( io_repo->get_package( ) ). - - zcl_abapgit_objects=>delete( lt_tadir ). - - delete( io_repo ). - - ENDMETHOD. - - METHOD refresh. DATA: lt_list TYPE zif_abapgit_persistence=>tt_repo, @@ -330,7 +120,174 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION. ENDMETHOD. "refresh - METHOD switch_repo_type. + METHOD zif_abapgit_repo_srv~delete. + + io_repo->delete( ). + + DELETE TABLE mt_list FROM io_repo. + ASSERT sy-subrc = 0. + + ENDMETHOD. + + + METHOD zif_abapgit_repo_srv~get. + + FIELD-SYMBOLS: LIKE LINE OF mt_list. + + + IF mv_init = abap_false. + refresh( ). + ENDIF. + + LOOP AT mt_list ASSIGNING . + IF ->get_key( ) = iv_key. + ro_repo = . + RETURN. + ENDIF. + ENDLOOP. + + zcx_abapgit_exception=>raise( 'repo not found, get' ). + + ENDMETHOD. + + + METHOD zif_abapgit_repo_srv~is_repo_installed. + + DATA: lt_repo TYPE zif_abapgit_definitions=>ty_repo_ref_tt, + lo_repo TYPE REF TO zcl_abapgit_repo, + lv_url TYPE string, + lv_package TYPE devclass, + lo_repo_online TYPE REF TO zcl_abapgit_repo_online, + lv_err TYPE string. + + lt_repo = list( ). + + LOOP AT lt_repo INTO lo_repo. + CHECK lo_repo->is_offline( ) = abap_false. + lo_repo_online ?= lo_repo. + + lv_url = lo_repo_online->get_url( ). + lv_package = lo_repo_online->get_package( ). + CHECK to_upper( lv_url ) = to_upper( iv_url ). + + " Validate bindings + "TODO refactor: move this message out of this method + IF iv_target_package IS NOT INITIAL AND iv_target_package <> lv_package. + lv_err = |Installation to package { lv_package } detected. | + && |Cancelling installation|. + zcx_abapgit_exception=>raise( lv_err ). + ENDIF. + + rv_installed = abap_true. + EXIT. + ENDLOOP. + + ENDMETHOD. + + + METHOD zif_abapgit_repo_srv~list. + + IF mv_init = abap_false. + refresh( ). + ENDIF. + + rt_list = mt_list. + + ENDMETHOD. + + + METHOD zif_abapgit_repo_srv~new_offline. + + DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo, + lv_key TYPE zif_abapgit_persistence=>ty_repo-key. + + + validate_package( iv_package ). + + lv_key = mo_persistence->add( + iv_url = iv_url + iv_branch_name = '' + iv_package = iv_package + iv_offline = abap_true + is_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ) ). + + TRY. + ls_repo = mo_persistence->read( lv_key ). + CATCH zcx_abapgit_not_found. + zcx_abapgit_exception=>raise( 'new_offline not found' ). + ENDTRY. + + CREATE OBJECT ro_repo + EXPORTING + is_data = ls_repo. + + add( ro_repo ). + + ENDMETHOD. + + + METHOD zif_abapgit_repo_srv~new_online. + + DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo, + lv_key TYPE zif_abapgit_persistence=>ty_repo-key. + + + ASSERT NOT iv_url IS INITIAL + AND NOT iv_branch_name IS INITIAL + AND NOT iv_package IS INITIAL. + + validate_package( iv_package ). + zcl_abapgit_url=>validate( |{ iv_url }| ). + + lv_key = mo_persistence->add( + iv_url = iv_url + iv_branch_name = iv_branch_name + iv_package = iv_package + iv_offline = abap_false + is_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ) ). + TRY. + ls_repo = mo_persistence->read( lv_key ). + CATCH zcx_abapgit_not_found. + zcx_abapgit_exception=>raise( 'new_online not found' ). + ENDTRY. + + CREATE OBJECT ro_repo + EXPORTING + is_data = ls_repo. + + add( ro_repo ). + + ro_repo->initialize( ). + ro_repo->find_remote_dot_abapgit( ). + + ENDMETHOD. + + + METHOD zif_abapgit_repo_srv~purge. + +* todo, this should be a method on the repo instead + + DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt. + + + IF io_repo->get_local_settings( )-write_protected = abap_true. + zcx_abapgit_exception=>raise( 'Cannot purge. Local code is write-protected by repo config' ). + ELSEIF zcl_abapgit_auth=>is_allowed( zif_abapgit_auth=>gc_authorization-uninstall ) = abap_false. + zcx_abapgit_exception=>raise( 'Not authorized' ). + ENDIF. + + lt_tadir = zcl_abapgit_tadir=>read( io_repo->get_package( ) ). + + zcl_abapgit_objects=>delete( lt_tadir ). + + delete( io_repo ). + + ENDMETHOD. + + + METHOD zif_abapgit_repo_srv~switch_repo_type. + +* todo, this should be a method on the repo instead? DATA lo_repo TYPE REF TO zcl_abapgit_repo. @@ -358,10 +315,10 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION. is_data = lo_repo->ms_data. ENDIF. - ENDMETHOD. "switch_repo_type + ENDMETHOD. - METHOD validate_package. + METHOD zif_abapgit_repo_srv~validate_package. DATA: lv_as4user TYPE tdevc-as4user, lt_repos TYPE zif_abapgit_persistence=>tt_repo. @@ -393,5 +350,5 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION. zcx_abapgit_exception=>raise( |Package { iv_package } already in use| ). ENDIF. - ENDMETHOD. "validate_package + ENDMETHOD. ENDCLASS. diff --git a/src/zif_abapgit_repo_srv.intf.abap b/src/zif_abapgit_repo_srv.intf.abap new file mode 100644 index 000000000..0ab89d978 --- /dev/null +++ b/src/zif_abapgit_repo_srv.intf.abap @@ -0,0 +1,63 @@ +INTERFACE zif_abapgit_repo_srv + PUBLIC . + + + METHODS delete + IMPORTING + !io_repo TYPE REF TO zcl_abapgit_repo + RAISING + zcx_abapgit_exception . + METHODS get + IMPORTING + !iv_key TYPE zif_abapgit_persistence=>ty_value + RETURNING + VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo + RAISING + zcx_abapgit_exception . + METHODS is_repo_installed + IMPORTING + !iv_url TYPE string + !iv_target_package TYPE devclass OPTIONAL + RETURNING + VALUE(rv_installed) TYPE abap_bool + RAISING + zcx_abapgit_exception . + METHODS list + RETURNING + VALUE(rt_list) TYPE zif_abapgit_definitions=>ty_repo_ref_tt + RAISING + zcx_abapgit_exception . + METHODS new_offline + IMPORTING + !iv_url TYPE string + !iv_package TYPE devclass + RETURNING + VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_offline + RAISING + zcx_abapgit_exception . + METHODS new_online + IMPORTING + !iv_url TYPE string + !iv_branch_name TYPE string + !iv_package TYPE devclass + RETURNING + VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_online + RAISING + zcx_abapgit_exception . + METHODS purge + IMPORTING + !io_repo TYPE REF TO zcl_abapgit_repo + RAISING + zcx_abapgit_exception . + METHODS switch_repo_type + IMPORTING + !iv_key TYPE zif_abapgit_persistence=>ty_value + !iv_offline TYPE abap_bool + RAISING + zcx_abapgit_exception . + METHODS validate_package + IMPORTING + !iv_package TYPE devclass + RAISING + zcx_abapgit_exception . +ENDINTERFACE. diff --git a/src/zif_abapgit_repo_srv.intf.xml b/src/zif_abapgit_repo_srv.intf.xml new file mode 100644 index 000000000..c893add86 --- /dev/null +++ b/src/zif_abapgit_repo_srv.intf.xml @@ -0,0 +1,16 @@ + + + + + + ZIF_ABAPGIT_REPO_SRV + 1 + E + Repo services + 2 + 1 + X + + + +