mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
419 lines
13 KiB
ABAP
419 lines
13 KiB
ABAP
CLASS zcl_abapgit_gui_page_sett_locl 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
|
|
IMPORTING
|
|
!io_repo TYPE REF TO zcl_abapgit_repo
|
|
RETURNING
|
|
VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS constructor
|
|
IMPORTING
|
|
!io_repo TYPE REF TO zcl_abapgit_repo
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
|
|
CONSTANTS:
|
|
BEGIN OF c_id,
|
|
local TYPE string VALUE 'local',
|
|
display_name TYPE string VALUE 'display_name',
|
|
transport_request TYPE string VALUE 'transport_request',
|
|
labels TYPE string VALUE 'labels',
|
|
ignore_subpackages TYPE string VALUE 'ignore_subpackages',
|
|
write_protected TYPE string VALUE 'write_protected',
|
|
only_local_objects TYPE string VALUE 'only_local_objects',
|
|
main_language_only TYPE string VALUE 'main_language_only',
|
|
checks TYPE string VALUE 'checks',
|
|
code_inspector_check_variant TYPE string VALUE 'code_inspector_check_variant',
|
|
block_commit TYPE string VALUE 'block_commit',
|
|
END OF c_id .
|
|
CONSTANTS:
|
|
BEGIN OF c_event,
|
|
save TYPE string VALUE 'save',
|
|
choose_transport_request TYPE string VALUE 'choose_transport_request',
|
|
choose_labels TYPE string VALUE 'choose-labels',
|
|
choose_check_variant TYPE string VALUE 'choose_check_variant',
|
|
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_repo TYPE REF TO zcl_abapgit_repo .
|
|
DATA ms_settings TYPE zif_abapgit_persistence=>ty_repo-local_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
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS read_settings
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS save_settings
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS choose_labels
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
METHODS choose_check_variant
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
METHODS choose_transport_request
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
|
|
|
|
|
|
METHOD choose_check_variant.
|
|
|
|
DATA: lv_check_variant TYPE sci_chkv.
|
|
|
|
lv_check_variant = zcl_abapgit_ui_factory=>get_popups( )->choose_code_insp_check_variant( ).
|
|
|
|
IF lv_check_variant IS NOT INITIAL.
|
|
mo_form_data->set(
|
|
iv_key = c_id-code_inspector_check_variant
|
|
iv_val = lv_check_variant ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD choose_labels.
|
|
|
|
DATA:
|
|
lv_old_labels TYPE string,
|
|
lv_new_labels TYPE string.
|
|
|
|
lv_old_labels = mo_form_data->get( c_id-labels ).
|
|
|
|
lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ).
|
|
|
|
mo_form_data->set(
|
|
iv_key = c_id-labels
|
|
iv_val = lv_new_labels ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD choose_transport_request.
|
|
|
|
DATA: lv_transport_request TYPE trkorr.
|
|
|
|
lv_transport_request = zcl_abapgit_ui_factory=>get_popups( )->popup_transport_request( ).
|
|
|
|
IF lv_transport_request IS NOT INITIAL.
|
|
mo_form_data->set(
|
|
iv_key = c_id-transport_request
|
|
iv_val = lv_transport_request ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD constructor.
|
|
|
|
super->constructor( ).
|
|
CREATE OBJECT mo_validation_log.
|
|
CREATE OBJECT mo_form_data.
|
|
mo_repo = io_repo.
|
|
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_locl.
|
|
|
|
CREATE OBJECT lo_component
|
|
EXPORTING
|
|
io_repo = io_repo.
|
|
|
|
ri_page = zcl_abapgit_gui_page_hoc=>create(
|
|
iv_page_title = 'Local Settings & Checks'
|
|
io_page_menu = zcl_abapgit_gui_chunk_lib=>settings_repo_toolbar(
|
|
iv_key = io_repo->get_key( )
|
|
iv_act = zif_abapgit_definitions=>c_action-repo_local_settings )
|
|
ii_child_component = lo_component ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_form_schema.
|
|
|
|
DATA: li_package TYPE REF TO zif_abapgit_sap_package.
|
|
|
|
li_package = zcl_abapgit_factory=>get_sap_package( mo_repo->get_package( ) ).
|
|
|
|
ro_form = zcl_abapgit_html_form=>create(
|
|
iv_form_id = 'repo-local-settings-form'
|
|
iv_help_page = 'https://docs.abapgit.org/settings-local.html' ).
|
|
|
|
ro_form->start_group(
|
|
iv_name = c_id-local
|
|
iv_label = 'Local Settings'
|
|
iv_hint = 'Settings valid for this system only'
|
|
)->text(
|
|
iv_name = c_id-display_name
|
|
iv_label = 'Display Name'
|
|
iv_hint = 'Name to show instead of original repo name (optional)' ).
|
|
|
|
IF li_package->are_changes_recorded_in_tr_req( ) = abap_true.
|
|
ro_form->text(
|
|
iv_name = c_id-transport_request
|
|
iv_side_action = c_event-choose_transport_request
|
|
iv_label = |Transport request|
|
|
iv_hint = 'Transport request; All changes are recorded therein and no transport popup appears|' ).
|
|
ENDIF.
|
|
|
|
ro_form->text(
|
|
iv_name = c_id-labels
|
|
iv_side_action = c_event-choose_labels
|
|
iv_label = |Labels (comma-separated, allowed chars: "{ zcl_abapgit_repo_labels=>c_allowed_chars }")|
|
|
iv_hint = 'Comma-separated labels for grouping and repo organization (optional)'
|
|
)->checkbox(
|
|
iv_name = c_id-write_protected
|
|
iv_label = 'Write Protected'
|
|
iv_hint = 'Lock repository against changes from remote (pull)'
|
|
)->checkbox(
|
|
iv_name = c_id-ignore_subpackages
|
|
iv_label = 'Ignore Subpackages'
|
|
iv_hint = 'Syncronize root package only'
|
|
)->checkbox(
|
|
iv_name = c_id-only_local_objects
|
|
iv_label = 'Only Local Objects'
|
|
iv_hint = 'Ignore objects imported from other systems; serialize only objects created in this system'
|
|
)->checkbox(
|
|
iv_name = c_id-main_language_only
|
|
iv_label = 'Only Serialize Main Language'
|
|
iv_hint = 'Ignore translations; serialize only main language of repository'
|
|
)->start_group(
|
|
iv_name = c_id-checks
|
|
iv_label = 'Local Checks'
|
|
iv_hint = 'Code Inspector check performed to run from menu and before commit'
|
|
)->text(
|
|
iv_name = c_id-code_inspector_check_variant
|
|
iv_side_action = c_event-choose_check_variant
|
|
iv_label = 'Code Inspector Check Variant'
|
|
iv_hint = 'Global check variant for Code Inspector or ABAP Test Cockpit'
|
|
)->checkbox(
|
|
iv_name = c_id-block_commit
|
|
iv_label = 'Block Commit If Code Inspection Has Errors'
|
|
iv_hint = 'Prevent staging if errors of priority 1 or 2 were found during check'
|
|
)->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_settings.
|
|
|
|
" Get settings from DB
|
|
ms_settings = mo_repo->get_local_settings( ).
|
|
|
|
" Local Settings
|
|
mo_form_data->set(
|
|
iv_key = c_id-display_name
|
|
iv_val = ms_settings-display_name ).
|
|
mo_form_data->set(
|
|
iv_key = c_id-transport_request
|
|
iv_val = ms_settings-transport_request ).
|
|
mo_form_data->set(
|
|
iv_key = c_id-labels
|
|
iv_val = ms_settings-labels ).
|
|
mo_form_data->set(
|
|
iv_key = c_id-ignore_subpackages
|
|
iv_val = boolc( ms_settings-ignore_subpackages = abap_true ) ) ##TYPE.
|
|
mo_form_data->set(
|
|
iv_key = c_id-main_language_only
|
|
iv_val = boolc( ms_settings-main_language_only = abap_true ) ) ##TYPE.
|
|
mo_form_data->set(
|
|
iv_key = c_id-write_protected
|
|
iv_val = boolc( ms_settings-write_protected = abap_true ) ) ##TYPE.
|
|
mo_form_data->set(
|
|
iv_key = c_id-only_local_objects
|
|
iv_val = boolc( ms_settings-only_local_objects = abap_true ) ) ##TYPE.
|
|
mo_form_data->set(
|
|
iv_key = c_id-code_inspector_check_variant
|
|
iv_val = |{ ms_settings-code_inspector_check_variant }| ).
|
|
mo_form_data->set(
|
|
iv_key = c_id-block_commit
|
|
iv_val = boolc( ms_settings-block_commit = abap_true ) ) ##TYPE.
|
|
|
|
" Set for is_dirty check
|
|
mo_form_util->set_data( mo_form_data ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD save_settings.
|
|
|
|
ms_settings-display_name = mo_form_data->get( c_id-display_name ).
|
|
ms_settings-transport_request = mo_form_data->get( c_id-transport_request ).
|
|
ms_settings-labels = zcl_abapgit_repo_labels=>normalize( mo_form_data->get( c_id-labels ) ).
|
|
ms_settings-ignore_subpackages = mo_form_data->get( c_id-ignore_subpackages ).
|
|
ms_settings-main_language_only = mo_form_data->get( c_id-main_language_only ).
|
|
ms_settings-write_protected = mo_form_data->get( c_id-write_protected ).
|
|
ms_settings-only_local_objects = mo_form_data->get( c_id-only_local_objects ).
|
|
ms_settings-code_inspector_check_variant = mo_form_data->get( c_id-code_inspector_check_variant ).
|
|
ms_settings-block_commit = mo_form_data->get( c_id-block_commit ).
|
|
|
|
mo_repo->set_local_settings( ms_settings ).
|
|
|
|
COMMIT WORK AND WAIT.
|
|
|
|
MESSAGE 'Settings succesfully saved' TYPE 'S'.
|
|
|
|
read_settings( ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD validate_form.
|
|
|
|
DATA:
|
|
lx_error TYPE REF TO zcx_abapgit_exception,
|
|
lv_transport_request TYPE trkorr,
|
|
lv_check_variant TYPE sci_chkv.
|
|
|
|
ro_validation_log = mo_form_util->validate( io_form_data ).
|
|
|
|
lv_transport_request = io_form_data->get( c_id-transport_request ).
|
|
IF lv_transport_request IS NOT INITIAL.
|
|
TRY.
|
|
zcl_abapgit_transport=>validate_transport_request( lv_transport_request ).
|
|
CATCH zcx_abapgit_exception INTO lx_error.
|
|
ro_validation_log->set(
|
|
iv_key = c_id-transport_request
|
|
iv_val = lx_error->get_text( ) ).
|
|
ENDTRY.
|
|
ENDIF.
|
|
|
|
lv_check_variant = to_upper( io_form_data->get( c_id-code_inspector_check_variant ) ).
|
|
IF lv_check_variant IS NOT INITIAL.
|
|
TRY.
|
|
zcl_abapgit_code_inspector=>validate_check_variant( lv_check_variant ).
|
|
CATCH zcx_abapgit_exception INTO lx_error.
|
|
ro_validation_log->set(
|
|
iv_key = c_id-code_inspector_check_variant
|
|
iv_val = lx_error->get_text( ) ).
|
|
ENDTRY.
|
|
ENDIF.
|
|
|
|
IF io_form_data->get( c_id-block_commit ) = abap_true AND lv_check_variant IS INITIAL.
|
|
ro_validation_log->set(
|
|
iv_key = c_id-block_commit
|
|
iv_val = |If block commit is active, a check variant has to be maintained| ).
|
|
ENDIF.
|
|
|
|
TRY.
|
|
zcl_abapgit_repo_labels=>validate( io_form_data->get( c_id-labels ) ).
|
|
CATCH zcx_abapgit_exception INTO lx_error.
|
|
ro_validation_log->set(
|
|
iv_key = c_id-labels
|
|
iv_val = lx_error->get_text( ) ).
|
|
ENDTRY.
|
|
|
|
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-choose_transport_request.
|
|
|
|
choose_transport_request( ).
|
|
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
|
|
|
WHEN c_event-choose_labels.
|
|
|
|
choose_labels( ).
|
|
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
|
|
|
|
|
WHEN c_event-choose_check_variant.
|
|
|
|
choose_check_variant( ).
|
|
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
|
|
|
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.
|
|
|
|
register_handlers( ).
|
|
|
|
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( `<div class="repo">` ).
|
|
|
|
ri_html->add( zcl_abapgit_gui_chunk_lib=>render_repo_top(
|
|
io_repo = mo_repo
|
|
iv_show_commit = abap_false
|
|
iv_interactive_branch = abap_true ) ).
|
|
|
|
ri_html->add( mo_form->render(
|
|
io_values = mo_form_data
|
|
io_validation_log = mo_validation_log ) ).
|
|
|
|
ri_html->add( `</div>` ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|