CLASS zcl_abapgit_gui_page_settings DEFINITION PUBLIC FINAL CREATE PUBLIC INHERITING FROM zcl_abapgit_gui_page. PUBLIC SECTION. INTERFACES: zif_abapgit_gui_page_hotkey. CONSTANTS: BEGIN OF c_action, save_settings TYPE string VALUE 'save_settings', END OF c_action. METHODS constructor. METHODS zif_abapgit_gui_page~on_event REDEFINITION. PROTECTED SECTION. METHODS render_content REDEFINITION. PRIVATE SECTION. DATA: mo_settings TYPE REF TO zcl_abapgit_settings, mv_error TYPE abap_bool, mt_post_fields TYPE tihttpnvp. METHODS render_proxy RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_development_internals RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_form_begin RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_form_end RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_max_lines RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_adt_jump_enabled RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_commit_msg RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS build_settings IMPORTING it_post_fields TYPE tihttpnvp. METHODS validate_settings. METHODS parse_post IMPORTING it_postdata TYPE cnht_post_data_tab RETURNING VALUE(rt_post_fields) TYPE tihttpnvp. METHODS persist_settings RAISING zcx_abapgit_exception. METHODS read_settings. METHODS render_section_begin IMPORTING iv_header TYPE csequence RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_section_end RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_start_up RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html. METHODS render_link_hints RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html RAISING zcx_abapgit_exception. METHODS render_hotkeys RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html RAISING zcx_abapgit_exception. METHODS get_possible_hotkey_actions RETURNING VALUE(rt_hotkey_actions) TYPE zif_abapgit_gui_page_hotkey=>tty_hotkey_action RAISING zcx_abapgit_exception. METHODS get_default_hotkeys RETURNING VALUE(rt_default_hotkeys) TYPE zif_abapgit_definitions=>tty_hotkey RAISING zcx_abapgit_exception. METHODS is_post_field_checked IMPORTING iv_name TYPE string RETURNING value(rv_return) TYPE abap_bool. ENDCLASS. CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION. METHOD build_settings. DATA: lv_i_param_value TYPE i, lv_column TYPE string, lt_key_bindings TYPE zif_abapgit_definitions=>tty_hotkey. FIELD-SYMBOLS: TYPE ihttpnvp, TYPE zif_abapgit_definitions=>ty_hotkey. CREATE OBJECT mo_settings. mt_post_fields = it_post_fields. READ TABLE mt_post_fields ASSIGNING WITH KEY name = 'proxy_url'. IF sy-subrc <> 0. mv_error = abap_true. ENDIF. mo_settings->set_proxy_url( -value ). READ TABLE mt_post_fields ASSIGNING WITH KEY name = 'proxy_port'. IF sy-subrc <> 0. mv_error = abap_true. ENDIF. mo_settings->set_proxy_port( -value ). IF is_post_field_checked( 'proxy_auth' ) = abap_true. mo_settings->set_proxy_authentication( abap_true ). ELSE. mo_settings->set_proxy_authentication( abap_false ). ENDIF. IF is_post_field_checked( 'critical_tests' ) = abap_true. mo_settings->set_run_critical_tests( abap_true ). ELSE. mo_settings->set_run_critical_tests( abap_false ). ENDIF. IF is_post_field_checked( 'experimental_features' ) = abap_true. mo_settings->set_experimental_features( abap_true ). ELSE. mo_settings->set_experimental_features( abap_false ). ENDIF. IF is_post_field_checked( 'show_default_repo' ) = abap_true. mo_settings->set_show_default_repo( abap_true ). ELSE. mo_settings->set_show_default_repo( abap_false ). ENDIF. READ TABLE mt_post_fields ASSIGNING WITH KEY name = 'max_lines'. IF sy-subrc = 0. lv_i_param_value = -value. mo_settings->set_max_lines( lv_i_param_value ). ELSE. mo_settings->set_max_lines( 0 ). ENDIF. IF is_post_field_checked( 'adt_jump_enabled' ) = abap_true. mo_settings->set_adt_jump_enanbled( abap_true ). ELSE. mo_settings->set_adt_jump_enanbled( abap_false ). ENDIF. IF is_post_field_checked( 'link_hints_enabled' ) = abap_true. mo_settings->set_link_hints_enabled( abap_true ). ELSE. mo_settings->set_link_hints_enabled( abap_false ). ENDIF. READ TABLE mt_post_fields ASSIGNING WITH KEY name = 'link_hint_key'. IF sy-subrc = 0. mo_settings->set_link_hint_key( |{ -value }| ). ENDIF. READ TABLE mt_post_fields ASSIGNING WITH KEY name = 'link_hint_background_color'. IF sy-subrc = 0. mo_settings->set_link_hint_background_color( |{ -value }| ). ENDIF. READ TABLE mt_post_fields ASSIGNING WITH KEY name = 'comment_length'. IF sy-subrc = 0. lv_i_param_value = -value. IF lv_i_param_value < zcl_abapgit_settings=>c_commitmsg_comment_length_dft. lv_i_param_value = zcl_abapgit_settings=>c_commitmsg_comment_length_dft. ENDIF. mo_settings->set_commitmsg_comment_length( lv_i_param_value ). ELSE. mo_settings->set_commitmsg_comment_length( zcl_abapgit_settings=>c_commitmsg_comment_length_dft ). ENDIF. READ TABLE mt_post_fields ASSIGNING WITH KEY name = 'body_size'. IF sy-subrc = 0. lv_i_param_value = -value. IF lv_i_param_value < zcl_abapgit_settings=>c_commitmsg_body_size_dft. lv_i_param_value = zcl_abapgit_settings=>c_commitmsg_body_size_dft. ENDIF. mo_settings->set_commitmsg_body_size( lv_i_param_value ). ELSE. mo_settings->set_commitmsg_body_size( zcl_abapgit_settings=>c_commitmsg_body_size_dft ). ENDIF. LOOP AT mt_post_fields ASSIGNING WHERE name CP 'key*'. FIND FIRST OCCURRENCE OF REGEX `key_(.*)_` IN -name SUBMATCHES lv_column. INSERT INITIAL LINE INTO TABLE lt_key_bindings ASSIGNING . CASE lv_column. WHEN 'sequence'. -sequence = -value. WHEN 'action'. -action = -value. ENDCASE. ENDLOOP. DELETE lt_key_bindings WHERE sequence IS INITIAL OR action IS INITIAL. mo_settings->set_hotkeys( lt_key_bindings ). ENDMETHOD. METHOD constructor. super->constructor( ). ms_control-page_title = 'SETTINGS'. ENDMETHOD. " constructor. METHOD get_default_hotkeys. DATA: lt_actions TYPE zif_abapgit_gui_page_hotkey=>tty_hotkey_action, ls_hotkey LIKE LINE OF rt_default_hotkeys. FIELD-SYMBOLS: LIKE LINE OF lt_actions. lt_actions = zcl_abapgit_hotkeys=>get_default_hotkeys_from_pages( ). LOOP AT lt_actions ASSIGNING . ls_hotkey-action = -action. ls_hotkey-sequence = -default_hotkey. INSERT ls_hotkey INTO TABLE rt_default_hotkeys. ENDLOOP. ENDMETHOD. METHOD get_possible_hotkey_actions. DATA: ls_hotkey_action LIKE LINE OF rt_hotkey_actions. rt_hotkey_actions = zcl_abapgit_hotkeys=>get_default_hotkeys_from_pages( ). " insert empty row at the beginning, so that we can unset a hotkey INSERT ls_hotkey_action INTO rt_hotkey_actions INDEX 1. ENDMETHOD. METHOD parse_post. DATA lv_serialized_post_data TYPE string. CONCATENATE LINES OF it_postdata INTO lv_serialized_post_data. rt_post_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_serialized_post_data ). ENDMETHOD. METHOD persist_settings. DATA lo_settings_persistence TYPE REF TO zcl_abapgit_persist_settings. lo_settings_persistence = zcl_abapgit_persist_settings=>get_instance( ). lo_settings_persistence->modify( mo_settings ). MESSAGE 'Settings succesfully saved' TYPE 'S'. ENDMETHOD. METHOD read_settings. DATA lo_settings_persistence TYPE REF TO zcl_abapgit_persist_settings. lo_settings_persistence = zcl_abapgit_persist_settings=>get_instance( ). mo_settings = lo_settings_persistence->read( ). ENDMETHOD. METHOD render_adt_jump_enabled. DATA lv_checked TYPE string. IF mo_settings->get_adt_jump_enabled( ) = abap_true. lv_checked = 'checked'. ENDIF. CREATE OBJECT ro_html. ro_html->add( |

ABAP Development Tools (ADT)

| ). ro_html->add( ` Enable jump to ADT first` ). ro_html->add( |
| ). ro_html->add( |
| ). ENDMETHOD. METHOD render_commit_msg. CREATE OBJECT ro_html. ro_html->add( |

Commit Message

| ). ro_html->add( || ). ro_html->add( |
| ). ro_html->add( || ). ro_html->add( |
| ). ro_html->add( || ). ro_html->add( |
| ). ro_html->add( || ). ro_html->add( |
| ). ro_html->add( |
| ). ENDMETHOD. METHOD render_content. CREATE OBJECT ro_html. read_settings( ). ro_html->add( render_form_begin( ) ). ro_html->add( render_section_begin( |Global settings| ) ). ro_html->add( render_proxy( ) ). ro_html->add( |
| ). ro_html->add( render_commit_msg( ) ). ro_html->add( |
| ). ro_html->add( render_development_internals( ) ). ro_html->add( render_section_end( ) ). ro_html->add( render_section_begin( |User specific settings| ) ). ro_html->add( render_start_up( ) ). ro_html->add( render_max_lines( ) ). ro_html->add( |
| ). ro_html->add( render_adt_jump_enabled( ) ). ro_html->add( |
| ). ro_html->add( render_link_hints( ) ). ro_html->add( |
| ). ro_html->add( render_hotkeys( ) ). ro_html->add( render_section_end( ) ). ro_html->add( render_form_end( ) ). ENDMETHOD. "render_content METHOD render_development_internals. DATA: lv_critical_tests TYPE string, lv_experimental TYPE string. IF mo_settings->get_run_critical_tests( ) = abap_true. lv_critical_tests = 'checked'. ENDIF. IF mo_settings->get_experimental_features( ) = abap_true. lv_experimental = 'checked'. ENDIF. CREATE OBJECT ro_html. ro_html->add( |

abapGit Development Internals settings

| ). ro_html->add( ` Enable critical unit tests (see LTCL_DANGEROUS)` ). ro_html->add( |
| ). ro_html->add( ` Enable experimental features` ). ro_html->add( |
| ). ro_html->add( |
| ). ENDMETHOD. METHOD render_form_begin. CREATE OBJECT ro_html. ro_html->add( '
' ). ro_html->add( `
` ). ENDMETHOD. METHOD render_form_end. CREATE OBJECT ro_html. ro_html->add( '' ). ro_html->add( '
' ). ro_html->add( '
' ). ENDMETHOD. METHOD render_hotkeys. DATA: lv_index TYPE i, lt_hotkeys TYPE zif_abapgit_definitions=>tty_hotkey, lv_selected TYPE string, lt_actions TYPE zif_abapgit_gui_page_hotkey=>tty_hotkey_action. FIELD-SYMBOLS: LIKE LINE OF lt_hotkeys, LIKE LINE OF lt_actions. lt_hotkeys = mo_settings->get_hotkeys( ). IF lines( lt_hotkeys ) = 0. lt_hotkeys = get_default_hotkeys( ). ENDIF. DO 3 TIMES. APPEND INITIAL LINE TO lt_hotkeys. ENDDO. CREATE OBJECT ro_html. ro_html->add( |

Hotkeys

| ). ro_html->add( |(Only available with installed abapGit repo)| ). ro_html->add( |
| ). ro_html->add( |
| ). ro_html->add( '' ). ro_html->add( '' ). lt_actions = get_possible_hotkey_actions( ). LOOP AT lt_hotkeys ASSIGNING . lv_index = sy-tabix. ro_html->add( '' ). ro_html->add( || ). ro_html->add( |' ). ro_html->add( '' ). ENDLOOP. ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '
keyaction
' ). ro_html->add( |
| ). ro_html->add( |
| ). ENDMETHOD. METHOD render_link_hints. DATA: lv_checked TYPE string, lv_link_hint_key TYPE char01, lv_link_background_color TYPE string. IF mo_settings->get_link_hints_enabled( ) = abap_true. lv_checked = 'checked'. ENDIF. lv_link_hint_key = mo_settings->get_link_hint_key( ). lv_link_background_color = mo_settings->get_link_hint_background_color( ). CREATE OBJECT ro_html. ro_html->add( |

Vimium like link hints

| ). ro_html->add( ` Enable Vimium like link hints` ). ro_html->add( |
| ). ro_html->add( |
| ). ro_html->add( | Single key to activate links| ). ro_html->add( |
| ). ro_html->add( |
| ). ro_html->add( | Background Color (HTML colors e.g. lightgreen or #42f47a)| ). ro_html->add( |
| ). ro_html->add( |
| ). ENDMETHOD. METHOD render_max_lines. CREATE OBJECT ro_html. ro_html->add( |

List size

| ). ro_html->add( || ). ro_html->add( |
| ). ro_html->add( `` ). ro_html->add( |
| ). ro_html->add( |
| ). ENDMETHOD. METHOD render_proxy. CREATE OBJECT ro_html. ro_html->add( |

Proxy

| ). ro_html->add( || ). ro_html->add( |
| ). ro_html->add( `` ). ro_html->add( |
| ). ro_html->add( || ). ro_html->add( |
| ). ro_html->add( `` ). ro_html->add( |
| ). ro_html->add( || ). IF mo_settings->get_proxy_authentication( ) = abap_true. ro_html->add( `` ). ELSE. ro_html->add( `` ). ENDIF. ro_html->add( |
| ). ro_html->add( |
| ). ENDMETHOD. METHOD render_section_begin. CREATE OBJECT ro_html. ro_html->add( |

{ iv_header }

| ). ro_html->add( |
| ). ENDMETHOD. METHOD render_section_end. CREATE OBJECT ro_html. ro_html->add( |
| ). ENDMETHOD. METHOD render_start_up. DATA lv_checked TYPE string. IF mo_settings->get_show_default_repo( ) = abap_true. lv_checked = 'checked'. ENDIF. CREATE OBJECT ro_html. ro_html->add( |

Start up

| ). ro_html->add( ` Show last repo` ). ro_html->add( |
| ). ro_html->add( |
| ). ENDMETHOD. METHOD validate_settings. IF ( mo_settings->get_proxy_url( ) IS NOT INITIAL AND mo_settings->get_proxy_port( ) IS INITIAL ) OR ( mo_settings->get_proxy_url( ) IS INITIAL AND mo_settings->get_proxy_port( ) IS NOT INITIAL ). MESSAGE 'If specifying proxy, specify both URL and port' TYPE 'W'. ENDIF. ENDMETHOD. METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions. ENDMETHOD. METHOD zif_abapgit_gui_page~on_event. * todo, check input values eg INT DATA: lt_post_fields TYPE tihttpnvp. CASE iv_action. WHEN c_action-save_settings. lt_post_fields = parse_post( it_postdata ). build_settings( lt_post_fields ). validate_settings( ). IF mv_error = abap_true. MESSAGE 'Error when saving settings. Open an issue at https://github.com/larshp/abapGit' TYPE 'E'. ELSE. persist_settings( ). ENDIF. ev_state = zif_abapgit_definitions=>c_event_state-go_back. ENDCASE. ENDMETHOD. METHOD is_post_field_checked. FIELD-SYMBOLS: TYPE ihttpnvp. READ TABLE mt_post_fields ASSIGNING WITH KEY name = iv_name. IF sy-subrc = 0. IF -value = abap_true "HTML value when using standard netweaver GUI OR -value = 'on'. "HTML value when using Netweaver Java GUI rv_return = abap_true. ENDIF. ENDIF. ENDMETHOD. ENDCLASS.