mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00

* 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>
376 lines
12 KiB
ABAP
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.
|