*&---------------------------------------------------------------------* *& Include ZABAPGIT_PAGE_SETTINGS *&---------------------------------------------------------------------* CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page_super. PUBLIC SECTION. METHODS lif_gui_page~render REDEFINITION. METHODS lif_gui_page~on_event REDEFINITION. CONSTANTS: BEGIN OF c_action, save_settings TYPE string VALUE 'save_settings', END OF c_action. PRIVATE SECTION. METHODS render_proxy RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. METHODS render_development_internals RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. METHODS render_form_begin RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. METHODS render_form_end RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. 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 lcx_exception. METHODS read_settings. DATA: mo_settings TYPE REF TO lcl_settings, mv_error TYPE abap_bool. ENDCLASS. CLASS lcl_gui_page_settings IMPLEMENTATION. METHOD lif_gui_page~render. CREATE OBJECT ro_html. read_settings( ). ro_html->add( header( ) ). ro_html->add( title( 'Settings' ) ). ro_html->add( render_form_begin( ) ). ro_html->add( render_proxy( ) ). ro_html->add( |
| ). ro_html->add( render_development_internals( ) ). ro_html->add( render_form_end( ) ). 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( |
| ). ENDMETHOD. METHOD lif_gui_page~on_event. 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 = gc_event_state-go_back. ENDCASE. ENDMETHOD. METHOD build_settings. DATA ls_post_field TYPE ihttpnvp. CREATE OBJECT mo_settings. READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'proxy_url'. IF sy-subrc <> 0. mv_error = abap_true. ENDIF. mo_settings->set_proxy_url( ls_post_field-value ). READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'proxy_port'. IF sy-subrc <> 0. mv_error = abap_true. ENDIF. mo_settings->set_proxy_port( ls_post_field-value ). READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'critical_tests'. IF sy-subrc = 0. mo_settings->set_run_critical_tests( abap_true ). ELSE. mo_settings->set_run_critical_tests( abap_false ). ENDIF. 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 parse_post. DATA lv_serialized_post_data TYPE string. CONCATENATE LINES OF it_postdata INTO lv_serialized_post_data. rt_post_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_serialized_post_data ). ENDMETHOD. METHOD persist_settings. DATA lo_settings_persistence TYPE REF TO lcl_persistence_settings. lo_settings_persistence = lcl_app=>settings( ). lo_settings_persistence->modify( mo_settings ). MESSAGE 'Settings succesfully saved' TYPE 'S'. 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 read_settings. DATA lo_settings_persistence TYPE REF TO lcl_persistence_settings. lo_settings_persistence = lcl_app=>settings( ). mo_settings = lo_settings_persistence->read( ). ENDMETHOD. METHOD render_development_internals. DATA lv_checked TYPE string. IF mo_settings->get_run_critical_tests( ) = abap_true. lv_checked = '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( |
| ). ENDMETHOD. ENDCLASS.