abapGit/src/ui/zcl_abapgit_gui_page_sett_glob.clas.abap
Marc Bernard 29a9201a3b
Commit page: option to hide author fields (#5171)
* Commit page: option to hide author fields

The vast majority of time the committer is the same as the author (I assume). This adds an option to hide the author name and email fields on the commit form.

* Update docs

* Update docs

Co-authored-by: Christian Günter <christianguenter@googlemail.com>
2021-12-01 09:27:30 -05:00

376 lines
12 KiB
ABAP

CLASS zcl_abapgit_gui_page_sett_glob DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_gui_component
FINAL
CREATE PRIVATE.
PUBLIC SECTION.
INTERFACES zif_abapgit_gui_event_handler.
INTERFACES zif_abapgit_gui_renderable.
CLASS-METHODS create
RETURNING
VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING
zcx_abapgit_exception.
METHODS constructor
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
CONSTANTS:
BEGIN OF c_id,
proxy_settings TYPE string VALUE 'proxy_settings',
proxy_url TYPE string VALUE 'proxy_url',
proxy_port TYPE string VALUE 'proxy_port',
proxy_auth TYPE string VALUE 'proxy_auth',
proxy_bypass TYPE string VALUE 'proxy_bypass',
commit_settings TYPE string VALUE 'commit_settings',
commitmsg_comment_length TYPE string VALUE 'commitmsg_comment_length',
commitmsg_comment_deflt TYPE string VALUE 'commitmsg_comment_deflt',
commitmsg_body_size TYPE string VALUE 'commitmsg_body_size',
commitmsg_hide_author TYPE string VALUE 'commitmsg_hide_author',
devint_settings TYPE string VALUE 'devint_settings',
run_critical_tests TYPE string VALUE 'run_critical_tests',
experimental_features TYPE string VALUE 'experimental_features',
activate_wo_popup TYPE string VALUE 'activate_wo_popup',
END OF c_id.
CONSTANTS:
BEGIN OF c_event,
proxy_bypass TYPE string VALUE 'proxy_bypass',
save TYPE string VALUE 'save',
END OF c_event.
DATA mo_form TYPE REF TO zcl_abapgit_html_form.
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
DATA mo_settings TYPE REF TO zcl_abapgit_settings.
METHODS validate_form
IMPORTING
!io_form_data TYPE REF TO zcl_abapgit_string_map
RETURNING
VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
RAISING
zcx_abapgit_exception.
METHODS get_form_schema
RETURNING
VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
METHODS read_settings
RAISING
zcx_abapgit_exception.
METHODS save_settings
RAISING
zcx_abapgit_exception.
METHODS read_proxy_bypass
RAISING
zcx_abapgit_exception.
METHODS save_proxy_bypass
RAISING
zcx_abapgit_exception.
ENDCLASS.
CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
CREATE OBJECT mo_validation_log.
CREATE OBJECT mo_form_data.
mo_form = get_form_schema( ).
mo_form_util = zcl_abapgit_html_form_utils=>create( mo_form ).
read_settings( ).
ENDMETHOD.
METHOD create.
DATA lo_component TYPE REF TO zcl_abapgit_gui_page_sett_glob.
CREATE OBJECT lo_component.
ri_page = zcl_abapgit_gui_page_hoc=>create(
iv_page_title = 'Global Settings'
io_page_menu = zcl_abapgit_gui_chunk_lib=>settings_toolbar(
zif_abapgit_definitions=>c_action-go_settings )
ii_child_component = lo_component ).
ENDMETHOD.
METHOD get_form_schema.
ro_form = zcl_abapgit_html_form=>create(
iv_form_id = 'global-setting-form'
iv_help_page = 'https://docs.abapgit.org/guide-settings-global.html' ).
ro_form->start_group(
iv_name = c_id-proxy_settings
iv_label = 'Proxy Settings'
)->text(
iv_name = c_id-proxy_url
iv_label = 'Proxy Host'
iv_hint = 'Hostname or IP of proxy required to access the Internet (do not enter http://)'
iv_placeholder = 'Hostname or IP without http://'
)->number(
iv_name = c_id-proxy_port
iv_label = 'Proxy Port'
iv_hint = 'Port of proxy required to access the Internet'
iv_min = 0
iv_max = 65535
)->checkbox(
iv_name = c_id-proxy_auth
iv_label = 'Proxy Authentication'
iv_hint = 'Check, if proxy requires you to login'
)->textarea(
iv_name = c_id-proxy_bypass
iv_label = 'Proxy Bypass'
iv_hint = 'List of hosts/domains for which to bypass using proxy'
)->start_group(
iv_name = c_id-commit_settings
iv_label = 'Commit Message Settings'
)->number(
iv_name = c_id-commitmsg_comment_length
iv_required = abap_true
iv_label = 'Maximum Length of Comment'
iv_hint = |At least { zcl_abapgit_settings=>c_commitmsg_comment_length_dft } characters|
iv_min = zcl_abapgit_settings=>c_commitmsg_comment_length_dft
)->text(
iv_name = c_id-commitmsg_comment_deflt
iv_label = 'Default Text For Comment'
iv_hint = 'You can use $OBJECT or $FILE to include the number of objects/files'
)->number(
iv_name = c_id-commitmsg_body_size
iv_required = abap_true
iv_label = 'Maximum Line Size of Body'
iv_hint = |At least { zcl_abapgit_settings=>c_commitmsg_body_size_dft } characters|
iv_min = zcl_abapgit_settings=>c_commitmsg_body_size_dft
)->checkbox(
iv_name = c_id-commitmsg_hide_author
iv_label = 'Hide Author Fields' ).
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false.
ro_form->start_group(
iv_name = c_id-devint_settings
iv_label = 'Development Internal Settings'
)->checkbox(
iv_name = c_id-run_critical_tests
iv_label = 'Enable Critical Unit Tests'
)->checkbox(
iv_name = c_id-experimental_features
iv_label = 'Enable Experimental Features' ).
ENDIF.
ro_form->command(
iv_label = 'Save Settings'
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
iv_action = c_event-save
)->command(
iv_label = 'Back'
iv_action = zif_abapgit_definitions=>c_action-go_back ).
ENDMETHOD.
METHOD read_proxy_bypass.
DATA:
lt_proxy_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url,
ls_proxy_bypass LIKE LINE OF lt_proxy_bypass,
lv_val TYPE string.
lt_proxy_bypass = mo_settings->get_proxy_bypass( ).
LOOP AT lt_proxy_bypass INTO ls_proxy_bypass.
lv_val = lv_val && ls_proxy_bypass-low && zif_abapgit_definitions=>c_newline.
ENDLOOP.
mo_form_data->set(
iv_key = c_id-proxy_bypass
iv_val = lv_val ).
ENDMETHOD.
METHOD read_settings.
" Get settings from DB
mo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ).
" Proxy
mo_form_data->set(
iv_key = c_id-proxy_url
iv_val = mo_settings->get_proxy_url( ) ).
mo_form_data->set(
iv_key = c_id-proxy_port
iv_val = mo_settings->get_proxy_port( ) ).
mo_form_data->set(
iv_key = c_id-proxy_auth
iv_val = boolc( mo_settings->get_proxy_authentication( ) = abap_true ) ) ##TYPE.
read_proxy_bypass( ).
" Commit Message
mo_form_data->set(
iv_key = c_id-commitmsg_comment_length
iv_val = |{ mo_settings->get_commitmsg_comment_length( ) }| ).
mo_form_data->set(
iv_key = c_id-commitmsg_comment_deflt
iv_val = mo_settings->get_commitmsg_comment_default( ) ).
mo_form_data->set(
iv_key = c_id-commitmsg_body_size
iv_val = |{ mo_settings->get_commitmsg_body_size( ) }| ).
mo_form_data->set(
iv_key = c_id-commitmsg_hide_author
iv_val = boolc( mo_settings->get_commitmsg_hide_author( ) = abap_true ) ) ##TYPE.
" Dev Internal
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false.
mo_form_data->set(
iv_key = c_id-run_critical_tests
iv_val = boolc( mo_settings->get_run_critical_tests( ) = abap_true ) ) ##TYPE.
mo_form_data->set(
iv_key = c_id-experimental_features
iv_val = boolc( mo_settings->get_experimental_features( ) = abap_true ) ) ##TYPE.
ENDIF.
" Set for is_dirty check
mo_form_util->set_data( mo_form_data ).
ENDMETHOD.
METHOD save_proxy_bypass.
DATA:
lt_textarea TYPE TABLE OF string,
lt_proxy_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url,
ls_proxy_bypass LIKE LINE OF lt_proxy_bypass.
lt_textarea = zcl_abapgit_convert=>split_string( mo_form_data->get( c_id-proxy_bypass ) ).
ls_proxy_bypass-sign = 'I'.
LOOP AT lt_textarea INTO ls_proxy_bypass-low WHERE table_line IS NOT INITIAL.
IF ls_proxy_bypass-low CA '*+'.
ls_proxy_bypass-option = 'CP'.
ELSE.
ls_proxy_bypass-option = 'EQ'.
ENDIF.
APPEND ls_proxy_bypass TO lt_proxy_bypass.
ENDLOOP.
mo_settings->set_proxy_bypass( lt_proxy_bypass ).
ENDMETHOD.
METHOD save_settings.
DATA:
li_persistence TYPE REF TO zif_abapgit_persist_settings,
lv_value TYPE i.
" Proxy
mo_settings->set_proxy_url( mo_form_data->get( c_id-proxy_url ) ).
mo_settings->set_proxy_port( mo_form_data->get( c_id-proxy_port ) ).
mo_settings->set_proxy_authentication( boolc( mo_form_data->get( c_id-proxy_auth ) = abap_true ) ).
save_proxy_bypass( ).
" Commit Message
lv_value = mo_form_data->get( c_id-commitmsg_comment_length ).
mo_settings->set_commitmsg_comment_length( lv_value ).
mo_settings->set_commitmsg_comment_default( mo_form_data->get( c_id-commitmsg_comment_deflt ) ).
lv_value = mo_form_data->get( c_id-commitmsg_body_size ).
mo_settings->set_commitmsg_body_size( lv_value ).
mo_settings->set_commitmsg_hide_author( boolc( mo_form_data->get( c_id-commitmsg_hide_author ) = abap_true ) ).
" Dev Internal
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false.
mo_settings->set_run_critical_tests( boolc( mo_form_data->get( c_id-run_critical_tests ) = abap_true ) ).
mo_settings->set_experimental_features( boolc( mo_form_data->get( c_id-experimental_features ) = abap_true ) ).
ENDIF.
" Store in DB
li_persistence = zcl_abapgit_persist_factory=>get_settings( ).
li_persistence->modify( mo_settings ).
COMMIT WORK AND WAIT.
MESSAGE 'Settings succesfully saved' TYPE 'S'.
read_settings( ).
ENDMETHOD.
METHOD validate_form.
ro_validation_log = mo_form_util->validate( io_form_data ).
IF io_form_data->get( c_id-proxy_url ) IS NOT INITIAL AND io_form_data->get( c_id-proxy_port ) IS INITIAL OR
io_form_data->get( c_id-proxy_url ) IS INITIAL AND io_form_data->get( c_id-proxy_port ) IS NOT INITIAL.
ro_validation_log->set(
iv_key = c_id-proxy_url
iv_val = |If you specify a proxy, you have to specify host and port| ).
ENDIF.
IF ( io_form_data->get( c_id-proxy_url ) IS INITIAL OR io_form_data->get( c_id-proxy_port ) IS INITIAL ) AND
io_form_data->get( c_id-proxy_auth ) = abap_true.
ro_validation_log->set(
iv_key = c_id-proxy_auth
iv_val = |To turn on authentication, you have to specify host and port| ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_gui_event_handler~on_event.
mo_form_data = mo_form_util->normalize( ii_event->form_data( ) ).
CASE ii_event->mv_action.
WHEN zif_abapgit_definitions=>c_action-go_back.
rs_handled-state = mo_form_util->exit( mo_form_data ).
WHEN c_event-save.
" Validate form entries before saving
mo_validation_log = validate_form( mo_form_data ).
IF mo_validation_log->is_empty( ) = abap_true.
save_settings( ).
ENDIF.
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
ENDCASE.
ENDMETHOD.
METHOD zif_abapgit_gui_renderable~render.
gui_services( )->register_event_handler( me ).
IF mo_form_util->is_empty( mo_form_data ) = abap_true.
read_settings( ).
ENDIF.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
ri_html->add( mo_form->render(
io_values = mo_form_data
io_validation_log = mo_validation_log ) ).
ENDMETHOD.
ENDCLASS.