mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
279 lines
9.8 KiB
ABAP
279 lines
9.8 KiB
ABAP
CLASS zcl_abapgit_abap_language_vers DEFINITION
|
|
PUBLIC
|
|
FINAL
|
|
CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
|
|
CONSTANTS:
|
|
c_any_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version VALUE '*',
|
|
c_no_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version VALUE '-',
|
|
c_feature_flag TYPE string VALUE 'ALAV'.
|
|
|
|
METHODS constructor
|
|
IMPORTING
|
|
!io_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit.
|
|
|
|
METHODS get_abap_language_vers_by_objt
|
|
IMPORTING
|
|
!iv_object_type TYPE trobjtype
|
|
!iv_package TYPE devclass
|
|
RETURNING
|
|
VALUE(rv_allowed_abap_langu_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
|
|
|
|
METHODS get_repo_abap_language_version
|
|
RETURNING
|
|
VALUE(rv_abap_language_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
|
|
|
|
METHODS is_import_allowed
|
|
IMPORTING
|
|
!iv_package TYPE devclass
|
|
RETURNING
|
|
VALUE(rv_allowed) TYPE abap_bool.
|
|
|
|
CLASS-METHODS check_abap_language_version
|
|
IMPORTING
|
|
!iv_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
|
|
!is_item TYPE zif_abapgit_definitions=>ty_item
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
|
|
DATA mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit.
|
|
|
|
" Depends on experimental feature flag and repo setting
|
|
DATA mv_has_abap_language_vers TYPE abap_bool.
|
|
|
|
METHODS get_default_abap_language_vers
|
|
IMPORTING
|
|
!iv_object_type TYPE trobjtype
|
|
RETURNING
|
|
VALUE(rv_abap_language_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
|
|
|
|
METHODS get_abap_language_vers_by_devc
|
|
IMPORTING
|
|
!iv_package TYPE devclass
|
|
RETURNING
|
|
VALUE(rv_abap_language_version) TYPE string.
|
|
|
|
METHODS get_abap_language_vers_by_repo
|
|
RETURNING
|
|
VALUE(rv_abap_language_version) TYPE string.
|
|
|
|
CLASS-METHODS get_description
|
|
IMPORTING
|
|
!iv_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
|
|
RETURNING
|
|
VALUE(rv_description) TYPE string.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
|
|
|
|
|
|
METHOD check_abap_language_version.
|
|
|
|
" Check if ABAP language version matches repository setting
|
|
IF is_item-abap_language_version IS NOT INITIAL AND iv_abap_language_version <> is_item-abap_language_version.
|
|
zcx_abapgit_exception=>raise(
|
|
|Object { is_item-obj_type } { is_item-obj_name } has { get_description( iv_abap_language_version ) }| &&
|
|
| but repository is set to { get_description( is_item-abap_language_version ) }| ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD constructor.
|
|
|
|
mo_dot_abapgit = io_dot_abapgit.
|
|
|
|
IF zcl_abapgit_feature=>is_enabled( c_feature_flag ) = abap_false.
|
|
mv_has_abap_language_vers = abap_undefined.
|
|
ELSEIF get_abap_language_vers_by_repo( ) = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
|
mv_has_abap_language_vers = abap_undefined.
|
|
ELSEIF get_abap_language_vers_by_repo( ) = zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
|
|
mv_has_abap_language_vers = abap_false.
|
|
ELSE.
|
|
mv_has_abap_language_vers = abap_true.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_abap_language_vers_by_devc.
|
|
|
|
DATA lv_class TYPE string.
|
|
DATA lv_abap_lang_version_devc TYPE string.
|
|
DATA lo_abap_language_version_cfg TYPE REF TO object.
|
|
|
|
lv_class = 'CL_ABAP_LANGUAGE_VERSION_CFG'.
|
|
|
|
TRY.
|
|
CALL METHOD (lv_class)=>('GET_INSTANCE')
|
|
RECEIVING
|
|
ro_instance = lo_abap_language_version_cfg.
|
|
|
|
" For non-existing packages, GET_PACKAGE_DEFAULT_VERSION returns "standard"
|
|
" but we want to return "undefined" in this case to allow any new packages
|
|
IF zcl_abapgit_factory=>get_sap_package( iv_package )->exists( ) = abap_true.
|
|
CALL METHOD lo_abap_language_version_cfg->('IF_ABAP_LANGUAGE_VERSION_CFG~GET_PACKAGE_DEFAULT_VERSION')
|
|
EXPORTING
|
|
iv_package_name = iv_package
|
|
RECEIVING
|
|
rv_default_language_version = lv_abap_lang_version_devc.
|
|
ELSE.
|
|
lv_abap_lang_version_devc = '-'.
|
|
ENDIF.
|
|
|
|
CASE lv_abap_lang_version_devc.
|
|
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-standard.
|
|
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-standard.
|
|
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-key_user.
|
|
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-key_user.
|
|
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-cloud_development.
|
|
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-cloud_development.
|
|
WHEN OTHERS.
|
|
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
|
ENDCASE.
|
|
|
|
CATCH cx_root.
|
|
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_abap_language_vers_by_objt.
|
|
|
|
DATA lv_class TYPE string.
|
|
DATA lo_abap_language_version TYPE REF TO object.
|
|
|
|
IF mv_has_abap_language_vers = abap_undefined.
|
|
rv_allowed_abap_langu_version = c_any_abap_language_version.
|
|
ELSEIF mv_has_abap_language_vers = abap_false.
|
|
rv_allowed_abap_langu_version = c_no_abap_language_version.
|
|
ELSE. " abap_true
|
|
|
|
lv_class = 'CL_ABAP_LANGUAGE_VERSION'.
|
|
|
|
TRY.
|
|
CALL METHOD (lv_class)=>('GET_INSTANCE')
|
|
RECEIVING
|
|
ro_version_handler = lo_abap_language_version.
|
|
|
|
CALL METHOD lo_abap_language_version->('IF_ABAP_LANGUAGE_VERSION~GET_DEFAULT_VERSION')
|
|
EXPORTING
|
|
iv_object_type = iv_object_type
|
|
iv_package = iv_package
|
|
RECEIVING
|
|
rv_default_version = rv_allowed_abap_langu_version.
|
|
|
|
CATCH cx_root.
|
|
rv_allowed_abap_langu_version = get_default_abap_language_vers( iv_object_type ).
|
|
ENDTRY.
|
|
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_abap_language_vers_by_repo.
|
|
rv_abap_language_version = mo_dot_abapgit->get_abap_language_version( ).
|
|
IF rv_abap_language_version IS INITIAL.
|
|
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_default_abap_language_vers.
|
|
|
|
IF zcl_abapgit_factory=>get_environment( )->is_sap_cloud_platform( ) = abap_true.
|
|
" On BTP, default to ABAP for Cloud Development
|
|
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_cloud-cloud_development.
|
|
ELSE.
|
|
" Differentiate between source code object and non-source code objects
|
|
CASE iv_object_type.
|
|
WHEN 'BDEF' OR 'CLAS' OR 'FUGR' OR 'FUGS' OR 'INTF' OR 'PROG' OR 'TYPE'.
|
|
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard.
|
|
WHEN OTHERS.
|
|
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version-standard.
|
|
ENDCASE.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_description.
|
|
|
|
CASE iv_abap_language_version.
|
|
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-standard
|
|
OR zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard.
|
|
rv_description = 'Standard ABAP'.
|
|
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-key_user
|
|
OR zif_abapgit_aff_types_v1=>co_abap_language_version_src-key_user.
|
|
rv_description = 'ABAP for Key Users'.
|
|
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-cloud_development
|
|
OR zif_abapgit_aff_types_v1=>co_abap_language_version_src-cloud_development.
|
|
rv_description = 'ABAP for Cloud Development'.
|
|
WHEN OTHERS.
|
|
rv_description = 'Undefined'.
|
|
ENDCASE.
|
|
|
|
rv_description = |ABAP language version "{ rv_description }"|.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_repo_abap_language_version.
|
|
|
|
DATA lv_abap_language_version TYPE string.
|
|
|
|
IF mv_has_abap_language_vers <> abap_undefined. " abap_true or abap_false
|
|
lv_abap_language_version = mo_dot_abapgit->get_abap_language_version( ).
|
|
ENDIF.
|
|
|
|
CASE lv_abap_language_version.
|
|
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-standard.
|
|
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard.
|
|
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-key_user.
|
|
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-key_user.
|
|
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-cloud_development.
|
|
rv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version_src-cloud_development.
|
|
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
|
|
rv_abap_language_version = c_no_abap_language_version.
|
|
WHEN OTHERS. " undefined or feature off
|
|
rv_abap_language_version = c_any_abap_language_version.
|
|
ENDCASE.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD is_import_allowed.
|
|
|
|
DATA lv_package_version TYPE string.
|
|
|
|
lv_package_version = get_abap_language_vers_by_devc( iv_package ).
|
|
|
|
CASE get_abap_language_vers_by_repo( ).
|
|
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined
|
|
OR zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
|
|
rv_allowed = abap_true.
|
|
WHEN OTHERS.
|
|
IF get_abap_language_vers_by_repo( ) = lv_package_version.
|
|
" allow packages that match repo setting
|
|
rv_allowed = abap_true.
|
|
ELSEIF lv_package_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
|
" always allow new packages
|
|
rv_allowed = abap_true.
|
|
ELSE.
|
|
rv_allowed = abap_false.
|
|
ENDIF.
|
|
ENDCASE.
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|