first dependency injection #1390

* extract public methods of ZCL_ABAPGIT_TADIR to new interface
* create factory ZCL_ABAPGIT_FACTORY
* refactor existing calls
This commit is contained in:
larshp 2018-06-10 12:11:48 +00:00
parent fbadb3537b
commit 4e67e884de
15 changed files with 134 additions and 63 deletions

View File

@ -721,7 +721,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION.
TRANSLATE <ls_field>-value TO UPPER CASE.
rs_tadir-obj_name = <ls_field>-value.
rs_tadir = zcl_abapgit_tadir=>read_single(
rs_tadir = zcl_abapgit_factory=>get_tadir( )->read_single(
iv_object = rs_tadir-object
iv_obj_name = rs_tadir-obj_name ).

View File

@ -288,7 +288,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION.
lo_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
lv_package = lo_repo->get_package( ).
lt_tadir = zcl_abapgit_tadir=>read( lv_package ).
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( lv_package ).
IF lines( lt_tadir ) > 0.

View File

@ -0,0 +1,30 @@
CLASS zcl_abapgit_factory DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-DATA gi_tadir TYPE REF TO zif_abapgit_tadir .
CLASS-METHODS get_tadir
RETURNING
VALUE(ri_tadir) TYPE REF TO zif_abapgit_tadir .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_ABAPGIT_FACTORY IMPLEMENTATION.
METHOD get_tadir.
IF gi_tadir IS INITIAL.
CREATE OBJECT gi_tadir TYPE zcl_abapgit_tadir.
ENDIF.
ri_tadir = gi_tadir.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_FACTORY</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Factory</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -236,9 +236,9 @@ CLASS ZCL_ABAPGIT_FILE_STATUS IMPLEMENTATION.
CHECK lv_is_xml = abap_true. " Skip all but obj definitions
ls_item-devclass = zcl_abapgit_tadir=>get_object_package(
iv_object = ls_item-obj_type
iv_obj_name = ls_item-obj_name ).
ls_item-devclass = zcl_abapgit_factory=>get_tadir( )->get_object_package(
iv_object = ls_item-obj_type
iv_obj_name = ls_item-obj_name ).
IF NOT ls_item-devclass IS INITIAL AND iv_devclass <> ls_item-devclass.
* make sure the package is under the repo main package

View File

@ -893,7 +893,7 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
io_dot = io_repo->get_dot_abapgit( )
iv_path = <ls_result>-path ).
ls_tadir = zcl_abapgit_tadir=>read_single(
ls_tadir = zcl_abapgit_factory=>get_tadir( )->read_single(
iv_object = <ls_result>-obj_type
iv_obj_name = <ls_result>-obj_name ).

View File

@ -64,7 +64,7 @@ CLASS ltcl_dangerous IMPLEMENTATION.
lo_repo->status( ).
lo_repo->deserialize( ls_checks ).
lt_tadir = zcl_abapgit_tadir=>read( c_package ).
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( c_package ).
LOOP AT lt_types ASSIGNING <lv_type>.
READ TABLE lt_tadir WITH KEY object = <lv_type> TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
@ -85,7 +85,7 @@ CLASS ltcl_dangerous IMPLEMENTATION.
ENDLOOP.
zcl_abapgit_objects=>delete( lt_tadir ).
lt_tadir = zcl_abapgit_tadir=>read( c_package ).
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( c_package ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
lv_msg = |Not deleted properly { <ls_tadir>-object } { <ls_tadir>-obj_name }|.
cl_abap_unit_assert=>fail(

View File

@ -125,7 +125,7 @@ ENDCLASS.
CLASS zcl_abapgit_repo IMPLEMENTATION.
CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
METHOD constructor.
@ -262,7 +262,7 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
iv_data = <ls_return>-file-data ).
lt_cache = mt_local.
lt_tadir = zcl_abapgit_tadir=>read(
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
iv_package = get_package( )
iv_ignore_subpackages = get_local_settings( )-ignore_subpackages
iv_only_local_objects = get_local_settings( )-only_local_objects
@ -609,5 +609,4 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
set( it_checksums = lt_checksums ).
ENDMETHOD. " update_local_checksums
ENDCLASS.

View File

@ -108,7 +108,7 @@ CLASS ZCL_ABAPGIT_REPO_CONTENT_LIST IMPLEMENTATION.
<ls_tadir> LIKE LINE OF lt_tadir.
lt_tadir = zcl_abapgit_tadir=>read(
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
iv_package = mo_repo->get_package( )
io_dot = mo_repo->get_dot_abapgit( ) ).

View File

@ -107,7 +107,7 @@ ENDCLASS.
CLASS zcl_abapgit_repo_online IMPLEMENTATION.
CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
METHOD actualize_head_branch.
@ -215,8 +215,8 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
lt_remote = get_files_remote( ).
lt_status = status( ).
lv_package = me->get_package( ).
lt_tadir = zcl_abapgit_tadir=>read( lv_package ).
lv_package = get_package( ).
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( lv_package ).
SORT lt_tadir BY pgmid ASCENDING object ASCENDING obj_name ASCENDING devclass ASCENDING.
LOOP AT lt_status ASSIGNING <ls_status>

View File

@ -290,7 +290,7 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Not authorized' ).
ENDIF.
lt_tadir = zcl_abapgit_tadir=>read( io_repo->get_package( ) ).
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( io_repo->get_package( ) ).
zcl_abapgit_objects=>delete( lt_tadir ).

View File

@ -1,55 +1,28 @@
CLASS zcl_abapgit_tadir DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
CREATE PUBLIC
GLOBAL FRIENDS zcl_abapgit_factory .
PUBLIC SECTION.
CLASS-METHODS read
IMPORTING
!iv_package TYPE tadir-devclass
!iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
!iv_only_local_objects TYPE abap_bool DEFAULT abap_false
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
!io_log TYPE REF TO zcl_abapgit_log OPTIONAL
RETURNING
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
CLASS-METHODS read_single
IMPORTING
!iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object TYPE tadir-object
!iv_obj_name TYPE tadir-obj_name
RETURNING
VALUE(rs_tadir) TYPE tadir
RAISING
zcx_abapgit_exception .
CLASS-METHODS get_object_package
IMPORTING
!iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object TYPE tadir-object
!iv_obj_name TYPE tadir-obj_name
RETURNING
VALUE(rv_devclass) TYPE tadir-devclass
RAISING
zcx_abapgit_exception .
INTERFACES zif_abapgit_tadir .
PRIVATE SECTION.
CLASS-METHODS exists
METHODS exists
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
!is_item TYPE zif_abapgit_definitions=>ty_item
RETURNING
VALUE(rv_exists) TYPE abap_bool.
CLASS-METHODS check_exists
VALUE(rv_exists) TYPE abap_bool .
METHODS check_exists
IMPORTING
!it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
RETURNING
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
CLASS-METHODS build
METHODS build
IMPORTING
!iv_package TYPE tadir-devclass
!iv_top TYPE tadir-devclass
@ -65,7 +38,7 @@ ENDCLASS.
CLASS zcl_abapgit_tadir IMPLEMENTATION.
CLASS ZCL_ABAPGIT_TADIR IMPLEMENTATION.
METHOD build.
@ -211,14 +184,15 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
ENDMETHOD.
METHOD get_object_package.
METHOD zif_abapgit_tadir~get_object_package.
DATA: ls_tadir TYPE tadir,
ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_tadir = read_single( iv_pgmid = iv_pgmid
iv_object = iv_object
iv_obj_name = iv_obj_name ).
ls_tadir = zif_abapgit_tadir~read_single(
iv_pgmid = iv_pgmid
iv_object = iv_object
iv_obj_name = iv_obj_name ).
IF ls_tadir-delflag = 'X'.
RETURN. "Mark for deletion -> return nothing
@ -233,10 +207,10 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
rv_devclass = ls_tadir-devclass.
ENDMETHOD. "get_object_package.
ENDMETHOD.
METHOD read.
METHOD zif_abapgit_tadir~read.
* start recursion
* hmm, some problems here, should TADIR also build path?
@ -255,10 +229,10 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
rt_tadir = check_exists( rt_tadir ).
ENDMETHOD. "read
ENDMETHOD.
METHOD read_single.
METHOD zif_abapgit_tadir~read_single.
IF iv_object = 'SICF'.
rs_tadir = zcl_abapgit_object_sicf=>read_tadir_sicf(
@ -271,5 +245,5 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
AND obj_name = iv_obj_name. "#EC CI_SUBRC
ENDIF.
ENDMETHOD. "read_single
ENDMETHOD.
ENDCLASS.

View File

@ -115,7 +115,7 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
lv_obj_name = <ls_object>-obj_name.
ENDIF.
ls_tadir = zcl_abapgit_tadir=>read_single(
ls_tadir = zcl_abapgit_factory=>get_tadir( )->read_single(
iv_object = lv_object
iv_obj_name = lv_obj_name ).

View File

@ -0,0 +1,34 @@
INTERFACE zif_abapgit_tadir
PUBLIC .
METHODS get_object_package
IMPORTING
!iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object TYPE tadir-object
!iv_obj_name TYPE tadir-obj_name
RETURNING
VALUE(rv_devclass) TYPE tadir-devclass
RAISING
zcx_abapgit_exception .
METHODS read
IMPORTING
!iv_package TYPE tadir-devclass
!iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
!iv_only_local_objects TYPE abap_bool DEFAULT abap_false
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
!io_log TYPE REF TO zcl_abapgit_log OPTIONAL
RETURNING
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
METHODS read_single
IMPORTING
!iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object TYPE tadir-object
!iv_obj_name TYPE tadir-obj_name
RETURNING
VALUE(rs_tadir) TYPE tadir
RAISING
zcx_abapgit_exception .
ENDINTERFACE.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_TADIR</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>TADIR access</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>