mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
html event abstraction, phase 4 - form_data (#3975)
* event->post_data logic * part of pages, commit test this is also long text to test * string_map: port strict() feature * pages refactoring part 2 * linter * docs Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
c573b94a57
commit
6941d9824a
|
@ -107,6 +107,8 @@ To process sapevents in abap the component (page) must implement `ZIF_ABAPGIT_GU
|
|||
- `ii_event->query( )->get( 'XXX' )`
|
||||
- or `ii_event->query( )->to_abap( changing cs_container = ls_struc_with_fields )`
|
||||
- query string_map is immutable (attempt to `set` will raise an exception)
|
||||
- accepts optional `iv_upper_cased` param to unify param names (default = `true`)
|
||||
- `ii_event->form_data()` - attempts to parse post_data assuming it is set of key value pairs. Returns a string map. Otherwise behaves as `query()` above. `iv_upper_cased = false` by default.
|
||||
|
||||
Events can be processed on 2 levels - in page/component **or** in the router. On new event:
|
||||
- the GUI goes through event handlers stack - list of components that registered themselves as event handlers during rendering via `gui_services`
|
||||
|
|
|
@ -17,6 +17,8 @@ CLASS zcl_abapgit_gui_event DEFINITION
|
|||
PRIVATE SECTION.
|
||||
DATA mo_query TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_query_upper_cased TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form_data_upper_cased TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
METHODS fields_to_map
|
||||
IMPORTING
|
||||
|
@ -26,6 +28,17 @@ CLASS zcl_abapgit_gui_event DEFINITION
|
|||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS fields_to_map_macro
|
||||
IMPORTING
|
||||
it_fields TYPE tihttpnvp
|
||||
iv_upper_cased TYPE abap_bool
|
||||
CHANGING
|
||||
co_string_map_lower TYPE REF TO zcl_abapgit_string_map
|
||||
co_string_map_upper TYPE REF TO zcl_abapgit_string_map
|
||||
co_string_map_return TYPE REF TO zcl_abapgit_string_map
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -55,25 +68,53 @@ CLASS ZCL_ABAPGIT_GUI_EVENT IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_event~query.
|
||||
METHOD fields_to_map_macro.
|
||||
|
||||
DATA lt_fields TYPE tihttpnvp.
|
||||
FIELD-SYMBOLS <lo_map> TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
IF iv_upper_cased = abap_true.
|
||||
IF mo_query_upper_cased IS NOT BOUND.
|
||||
mo_query_upper_cased = fields_to_map(
|
||||
zcl_abapgit_html_action_utils=>parse_fields_upper_case_name( zif_abapgit_gui_event~mv_getdata ) ).
|
||||
mo_query_upper_cased->freeze( ).
|
||||
ENDIF.
|
||||
ro_string_map = mo_query_upper_cased.
|
||||
ASSIGN co_string_map_upper TO <lo_map>.
|
||||
ELSE.
|
||||
IF mo_query IS NOT BOUND.
|
||||
mo_query = fields_to_map(
|
||||
zcl_abapgit_html_action_utils=>parse_fields( zif_abapgit_gui_event~mv_getdata ) ).
|
||||
mo_query->freeze( ).
|
||||
ASSIGN co_string_map_lower TO <lo_map>.
|
||||
ENDIF.
|
||||
ro_string_map = mo_query.
|
||||
|
||||
IF <lo_map> IS NOT BOUND.
|
||||
<lo_map> = fields_to_map( it_fields ).
|
||||
<lo_map>->freeze( ).
|
||||
ENDIF.
|
||||
co_string_map_return = <lo_map>.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_event~form_data.
|
||||
|
||||
fields_to_map_macro(
|
||||
EXPORTING
|
||||
iv_upper_cased = iv_upper_cased
|
||||
it_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
|
||||
it_post_data = zif_abapgit_gui_event~mt_postdata
|
||||
iv_upper_cased = iv_upper_cased )
|
||||
CHANGING
|
||||
co_string_map_upper = mo_form_data_upper_cased
|
||||
co_string_map_lower = mo_form_data
|
||||
co_string_map_return = ro_string_map ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_event~query.
|
||||
|
||||
fields_to_map_macro(
|
||||
EXPORTING
|
||||
iv_upper_cased = iv_upper_cased
|
||||
it_fields = zcl_abapgit_html_action_utils=>parse_fields(
|
||||
iv_string = zif_abapgit_gui_event~mv_getdata
|
||||
iv_upper_cased = iv_upper_cased )
|
||||
CHANGING
|
||||
co_string_map_upper = mo_query_upper_cased
|
||||
co_string_map_lower = mo_query
|
||||
co_string_map_return = ro_string_map ).
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -7,6 +7,7 @@ CLASS ltcl_event DEFINITION
|
|||
PRIVATE SECTION.
|
||||
|
||||
METHODS query FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS form_data FOR TESTING RAISING zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -33,7 +34,12 @@ CLASS ltcl_event IMPLEMENTATION.
|
|||
iv_action = 'XXX'
|
||||
iv_getdata = 'a=b&b=c'.
|
||||
|
||||
lo_map = li_cut->query( ).
|
||||
" Cross check just in case
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = li_cut->form_data( )->size( )
|
||||
exp = 0 ).
|
||||
|
||||
lo_map = li_cut->query( iv_upper_cased = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_map->size( )
|
||||
exp = 2 ).
|
||||
|
@ -55,6 +61,11 @@ CLASS ltcl_event IMPLEMENTATION.
|
|||
act = lo_map->get( 'B' )
|
||||
exp = 'c' ).
|
||||
|
||||
" Check defaults
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = li_cut->query( )->get( 'A' )
|
||||
exp = 'b' ).
|
||||
|
||||
TRY.
|
||||
lo_map->set(
|
||||
iv_key = 'x'
|
||||
|
@ -68,4 +79,70 @@ CLASS ltcl_event IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD form_data.
|
||||
|
||||
DATA li_cut TYPE REF TO zif_abapgit_gui_event.
|
||||
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_x TYPE REF TO zcx_abapgit_exception.
|
||||
DATA lt_postdata TYPE cnht_post_data_tab.
|
||||
|
||||
CREATE OBJECT li_cut TYPE zcl_abapgit_gui_event
|
||||
EXPORTING
|
||||
iv_action = 'XXX'.
|
||||
|
||||
lo_map = li_cut->form_data( ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_map->size( )
|
||||
exp = 0 ).
|
||||
|
||||
APPEND 'a=b&b=c' TO lt_postdata.
|
||||
CREATE OBJECT li_cut TYPE zcl_abapgit_gui_event
|
||||
EXPORTING
|
||||
iv_action = 'XXX'
|
||||
it_postdata = lt_postdata.
|
||||
|
||||
" Cross check just in case
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = li_cut->query( )->size( )
|
||||
exp = 0 ).
|
||||
|
||||
lo_map = li_cut->form_data( iv_upper_cased = abap_false ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_map->size( )
|
||||
exp = 2 ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_map->get( 'a' )
|
||||
exp = 'b' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_map->get( 'b' )
|
||||
exp = 'c' ).
|
||||
|
||||
lo_map = li_cut->form_data( iv_upper_cased = abap_true ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_map->size( )
|
||||
exp = 2 ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_map->get( 'A' )
|
||||
exp = 'b' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_map->get( 'B' )
|
||||
exp = 'c' ).
|
||||
|
||||
" Check defaults
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = li_cut->form_data( )->get( 'a' )
|
||||
exp = 'b' ).
|
||||
|
||||
TRY.
|
||||
lo_map->set(
|
||||
iv_key = 'x'
|
||||
iv_val = 'y' ).
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
CATCH zcx_abapgit_exception INTO lo_x.
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_x->get_text( )
|
||||
exp = '*immutable*' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -14,4 +14,12 @@ INTERFACE zif_abapgit_gui_event
|
|||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS form_data
|
||||
IMPORTING
|
||||
iv_upper_cased TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(ro_string_map) TYPE REF TO zcl_abapgit_string_map
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
|
@ -17,9 +17,11 @@ CLASS zcl_abapgit_gui_page_db_edit DEFINITION
|
|||
|
||||
CLASS-METHODS dbcontent_decode
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RETURNING
|
||||
VALUE(rs_content) TYPE zif_abapgit_persistence=>ty_content .
|
||||
VALUE(rs_content) TYPE zif_abapgit_persistence=>ty_content
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
METHODS render_content
|
||||
REDEFINITION .
|
||||
|
@ -52,30 +54,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB_EDIT IMPLEMENTATION.
|
|||
|
||||
METHOD dbcontent_decode.
|
||||
|
||||
DATA lt_fields TYPE tihttpnvp.
|
||||
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
|
||||
it_post_data = it_postdata
|
||||
iv_upper_cased = abap_true ).
|
||||
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'TYPE'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = rs_content-type ).
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'VALUE'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = rs_content-value ).
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'XMLDATA'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = rs_content-data_str ).
|
||||
lo_map = ii_event->form_data( iv_upper_cased = abap_true ).
|
||||
rs_content-type = lo_map->get( 'TYPE' ).
|
||||
rs_content-value = lo_map->get( 'VALUE' ).
|
||||
rs_content-data_str = lo_map->get( 'XMLDATA' ).
|
||||
|
||||
IF rs_content-data_str(1) <> '<' AND rs_content-data_str+1(1) = '<'. " Hmmm ???
|
||||
rs_content-data_str = rs_content-data_str+1.
|
||||
|
@ -151,7 +135,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB_EDIT IMPLEMENTATION.
|
|||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_action-update.
|
||||
ls_db = dbcontent_decode( ii_event->mt_postdata ).
|
||||
ls_db = dbcontent_decode( ii_event ).
|
||||
update( ls_db ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-go_back.
|
||||
WHEN OTHERS.
|
||||
|
|
|
@ -52,13 +52,6 @@ CLASS zcl_abapgit_gui_page_boverview DEFINITION
|
|||
VALUE(ri_html) TYPE REF TO zif_abapgit_html
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS decode_merge
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
RETURNING
|
||||
VALUE(rs_merge) TYPE ty_merge
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS build_menu
|
||||
RETURNING
|
||||
VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar .
|
||||
|
@ -243,25 +236,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BOVERVIEW IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD decode_merge.
|
||||
|
||||
DATA lt_fields TYPE tihttpnvp.
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
|
||||
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( it_postdata ).
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'source'.
|
||||
ASSERT sy-subrc = 0.
|
||||
rs_merge-source = <ls_field>-value.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'target'.
|
||||
ASSERT sy-subrc = 0.
|
||||
rs_merge-target = <ls_field>-value.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD escape_branch.
|
||||
|
||||
rv_string = iv_string.
|
||||
|
@ -420,7 +394,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BOVERVIEW IMPLEMENTATION.
|
|||
refresh( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
WHEN c_actions-merge.
|
||||
ls_merge = decode_merge( ii_event->mt_postdata ).
|
||||
ls_merge-source = ii_event->form_data( )->get( 'source' ).
|
||||
ls_merge-target = ii_event->form_data( )->get( 'target' ).
|
||||
CREATE OBJECT lo_merge
|
||||
EXPORTING
|
||||
io_repo = mo_repo
|
||||
|
|
|
@ -25,9 +25,11 @@ CLASS zcl_abapgit_gui_page_commit DEFINITION
|
|||
|
||||
CLASS-METHODS parse_commit_request
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
EXPORTING
|
||||
!eg_fields TYPE any .
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RETURNING
|
||||
VALUE(rs_commit) TYPE zif_abapgit_services_git=>ty_commit_fields
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
METHODS render_content REDEFINITION .
|
||||
|
||||
|
@ -177,56 +179,14 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION.
|
|||
|
||||
METHOD parse_commit_request.
|
||||
|
||||
DATA lt_fields TYPE tihttpnvp.
|
||||
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
FIELD-SYMBOLS <lv_body> TYPE string.
|
||||
|
||||
CLEAR eg_fields.
|
||||
|
||||
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
|
||||
it_post_data = it_postdata
|
||||
iv_upper_cased = abap_true ).
|
||||
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'COMMITTER_NAME'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'COMMITTER_EMAIL'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'AUTHOR_NAME'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'AUTHOR_EMAIL'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'COMMENT'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'BODY'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = eg_fields ).
|
||||
|
||||
ASSIGN COMPONENT 'BODY' OF STRUCTURE eg_fields TO <lv_body>.
|
||||
ASSERT <lv_body> IS ASSIGNED.
|
||||
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN <lv_body> WITH zif_abapgit_definitions=>c_newline.
|
||||
lo_map = ii_event->form_data( iv_upper_cased = abap_true ).
|
||||
lo_map->to_abap( CHANGING cs_container = rs_commit ).
|
||||
REPLACE ALL OCCURRENCES
|
||||
OF zif_abapgit_definitions=>c_crlf
|
||||
IN rs_commit-body
|
||||
WITH zif_abapgit_definitions=>c_newline.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -462,10 +422,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION.
|
|||
CASE ii_event->mv_action.
|
||||
WHEN c_action-commit_post.
|
||||
|
||||
parse_commit_request(
|
||||
EXPORTING it_postdata = ii_event->mt_postdata
|
||||
IMPORTING eg_fields = ms_commit ).
|
||||
|
||||
ms_commit = parse_commit_request( ii_event ).
|
||||
ms_commit-repo_key = mo_repo->get_key( ).
|
||||
|
||||
zcl_abapgit_services_git=>commit(
|
||||
|
|
|
@ -56,7 +56,7 @@ CLASS zcl_abapgit_gui_page_merge_res DEFINITION
|
|||
|
||||
METHODS apply_merged_content
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS build_menu
|
||||
|
@ -113,30 +113,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION.
|
|||
METHOD apply_merged_content.
|
||||
|
||||
DATA:
|
||||
BEGIN OF ls_filedata,
|
||||
merge_content TYPE string,
|
||||
END OF ls_filedata,
|
||||
lv_merge_content TYPE string,
|
||||
lt_fields TYPE tihttpnvp,
|
||||
lv_new_file_content TYPE xstring.
|
||||
|
||||
FIELD-SYMBOLS:
|
||||
<ls_conflict> TYPE zif_abapgit_definitions=>ty_merge_conflict.
|
||||
|
||||
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
|
||||
it_post_data = it_postdata
|
||||
iv_upper_cased = abap_true ).
|
||||
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'MERGE_CONTENT'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = ls_filedata ).
|
||||
lv_merge_content = ii_event->form_data( iv_upper_cased = abap_true )->get( 'MERGE_CONTENT' ).
|
||||
|
||||
REPLACE ALL OCCURRENCES
|
||||
OF zif_abapgit_definitions=>c_crlf IN ls_filedata-merge_content WITH zif_abapgit_definitions=>c_newline.
|
||||
OF zif_abapgit_definitions=>c_crlf IN lv_merge_content WITH zif_abapgit_definitions=>c_newline.
|
||||
|
||||
lv_new_file_content = zcl_abapgit_convert=>string_to_xstring_utf8( ls_filedata-merge_content ).
|
||||
lv_new_file_content = zcl_abapgit_convert=>string_to_xstring_utf8( lv_merge_content ).
|
||||
|
||||
READ TABLE mt_conflicts ASSIGNING <ls_conflict> INDEX mv_current_conflict_index.
|
||||
<ls_conflict>-result_sha1 = zcl_abapgit_hash=>sha1(
|
||||
|
@ -545,7 +534,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION.
|
|||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_actions-apply_merge.
|
||||
apply_merged_content( ii_event->mt_postdata ).
|
||||
apply_merged_content( ii_event ).
|
||||
|
||||
WHEN c_actions-apply_source.
|
||||
READ TABLE mt_conflicts ASSIGNING <ls_conflict> INDEX mv_current_conflict_index.
|
||||
|
|
|
@ -77,12 +77,12 @@ CLASS zcl_abapgit_gui_page_patch DEFINITION
|
|||
!is_diff TYPE ty_file_diff .
|
||||
METHODS start_staging
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS apply_patch_from_form_fields
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS restore_patch_flags
|
||||
|
@ -319,19 +319,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_PATCH IMPLEMENTATION.
|
|||
METHOD apply_patch_from_form_fields.
|
||||
|
||||
DATA:
|
||||
lt_fields TYPE tihttpnvp,
|
||||
lv_add TYPE string,
|
||||
lv_remove TYPE string.
|
||||
|
||||
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( it_postdata ).
|
||||
|
||||
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = c_patch_action-add
|
||||
it_field = lt_fields
|
||||
CHANGING cg_field = lv_add ).
|
||||
|
||||
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = c_patch_action-remove
|
||||
it_field = lt_fields
|
||||
CHANGING cg_field = lv_remove ).
|
||||
lv_add = ii_event->form_data( )->get( c_patch_action-add ).
|
||||
lv_remove = ii_event->form_data( )->get( c_patch_action-remove ).
|
||||
|
||||
apply_patch_all( iv_patch = lv_add
|
||||
iv_patch_flag = abap_true ).
|
||||
|
@ -731,7 +723,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_PATCH IMPLEMENTATION.
|
|||
|
||||
METHOD start_staging.
|
||||
|
||||
apply_patch_from_form_fields( it_postdata ).
|
||||
apply_patch_from_form_fields( ii_event ).
|
||||
add_to_stage( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
@ -742,7 +734,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_PATCH IMPLEMENTATION.
|
|||
CASE ii_event->mv_action.
|
||||
WHEN c_actions-stage.
|
||||
|
||||
start_staging( ii_event->mt_postdata ).
|
||||
start_staging( ii_event ).
|
||||
|
||||
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_commit
|
||||
EXPORTING
|
||||
|
@ -755,7 +747,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_PATCH IMPLEMENTATION.
|
|||
FIND FIRST OCCURRENCE OF REGEX |^{ c_actions-refresh }| IN ii_event->mv_action.
|
||||
IF sy-subrc = 0.
|
||||
|
||||
apply_patch_from_form_fields( ii_event->mt_postdata ).
|
||||
apply_patch_from_form_fields( ii_event ).
|
||||
refresh( ii_event->mv_action ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION
|
|||
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
|
||||
METHODS stage_selected
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RETURNING
|
||||
VALUE(ro_stage) TYPE REF TO zcl_abapgit_stage
|
||||
RAISING
|
||||
|
@ -587,30 +587,29 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
|
|||
|
||||
METHOD stage_selected.
|
||||
|
||||
DATA:
|
||||
lt_fields TYPE tihttpnvp,
|
||||
ls_file TYPE zif_abapgit_definitions=>ty_file.
|
||||
DATA ls_file TYPE zif_abapgit_definitions=>ty_file.
|
||||
DATA lo_files TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
FIELD-SYMBOLS:
|
||||
<ls_file> LIKE LINE OF ms_files-local,
|
||||
<ls_status> LIKE LINE OF ms_files-status,
|
||||
<ls_item> LIKE LINE OF lt_fields.
|
||||
<ls_item> LIKE LINE OF lo_files->mt_entries.
|
||||
|
||||
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( it_postdata ).
|
||||
lo_files = ii_event->form_data( ).
|
||||
|
||||
IF lines( lt_fields ) = 0.
|
||||
IF lo_files->size( ) = 0.
|
||||
zcx_abapgit_exception=>raise( 'process_stage_list: empty list' ).
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT ro_stage.
|
||||
|
||||
LOOP AT lt_fields ASSIGNING <ls_item>
|
||||
LOOP AT lo_files->mt_entries ASSIGNING <ls_item>
|
||||
"Ignore Files that we don't want to stage, so any errors don't stop the staging process
|
||||
WHERE value <> zif_abapgit_definitions=>c_method-skip.
|
||||
WHERE v <> zif_abapgit_definitions=>c_method-skip.
|
||||
|
||||
zcl_abapgit_path=>split_file_location(
|
||||
EXPORTING
|
||||
iv_fullpath = <ls_item>-name
|
||||
iv_fullpath = <ls_item>-k
|
||||
IMPORTING
|
||||
ev_path = ls_file-path
|
||||
ev_filename = ls_file-filename ).
|
||||
|
@ -626,7 +625,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
|
|||
| Consider ignoring or staging the file at a later time.| ).
|
||||
ENDIF.
|
||||
|
||||
CASE <ls_item>-value.
|
||||
CASE <ls_item>-v.
|
||||
WHEN zif_abapgit_definitions=>c_method-add.
|
||||
READ TABLE ms_files-local ASSIGNING <ls_file>
|
||||
WITH KEY file-path = ls_file-path
|
||||
|
@ -650,7 +649,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
|
|||
WHEN zif_abapgit_definitions=>c_method-skip.
|
||||
" Do nothing
|
||||
WHEN OTHERS.
|
||||
zcx_abapgit_exception=>raise( |process_stage_list: unknown method { <ls_item>-value }| ).
|
||||
zcx_abapgit_exception=>raise( |process_stage_list: unknown method { <ls_item>-v }| ).
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
|
@ -659,8 +658,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_gui_event_handler~on_event.
|
||||
|
||||
DATA: lo_stage TYPE REF TO zcl_abapgit_stage,
|
||||
lt_fields TYPE tihttpnvp.
|
||||
DATA: lo_stage TYPE REF TO zcl_abapgit_stage.
|
||||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_action-stage_all.
|
||||
|
@ -676,7 +674,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
|
|||
|
||||
WHEN c_action-stage_commit.
|
||||
|
||||
lo_stage = stage_selected( ii_event->mt_postdata ).
|
||||
lo_stage = stage_selected( ii_event ).
|
||||
|
||||
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_commit
|
||||
EXPORTING
|
||||
|
@ -687,20 +685,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
|
|||
|
||||
WHEN c_action-stage_filter.
|
||||
|
||||
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( ii_event->mt_postdata ).
|
||||
|
||||
zcl_abapgit_html_action_utils=>get_field(
|
||||
EXPORTING
|
||||
iv_name = 'filterValue'
|
||||
it_field = lt_fields
|
||||
CHANGING
|
||||
cg_field = mv_filter_value ).
|
||||
|
||||
mv_filter_value = ii_event->form_data( )->get( 'filterValue' ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
||||
|
||||
WHEN zif_abapgit_definitions=>c_action-go_patch. " Go Patch page
|
||||
|
||||
lo_stage = stage_selected( ii_event->mt_postdata ).
|
||||
lo_stage = stage_selected( ii_event ).
|
||||
rs_handled-page = get_page_patch( lo_stage ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
|
||||
|
||||
|
|
|
@ -48,14 +48,16 @@ CLASS zcl_abapgit_gui_page_tag DEFINITION PUBLIC FINAL
|
|||
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
|
||||
METHODS create_tag
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS parse_tag_request
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab
|
||||
EXPORTING
|
||||
!eg_fields TYPE any .
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RETURNING
|
||||
VALUE(rs_git_tag) TYPE zif_abapgit_definitions=>ty_git_tag
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS parse_change_tag_type_request
|
||||
IMPORTING
|
||||
!it_postdata TYPE cnht_post_data_tab .
|
||||
|
@ -89,9 +91,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_TAG IMPLEMENTATION.
|
|||
lx_error TYPE REF TO zcx_abapgit_exception,
|
||||
lv_text TYPE string.
|
||||
|
||||
parse_tag_request(
|
||||
EXPORTING it_postdata = it_postdata
|
||||
IMPORTING eg_fields = ls_tag ).
|
||||
ls_tag = parse_tag_request( ii_event ).
|
||||
|
||||
IF ls_tag-name IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |Please supply a tag name| ).
|
||||
|
@ -153,38 +153,15 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_TAG IMPLEMENTATION.
|
|||
|
||||
METHOD parse_tag_request.
|
||||
|
||||
DATA lt_fields TYPE tihttpnvp.
|
||||
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
FIELD-SYMBOLS <lv_body> TYPE string.
|
||||
|
||||
CLEAR eg_fields.
|
||||
|
||||
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
|
||||
it_post_data = it_postdata
|
||||
iv_upper_cased = abap_true ).
|
||||
|
||||
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'SHA1'
|
||||
it_field = lt_fields
|
||||
CHANGING cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'NAME'
|
||||
it_field = lt_fields
|
||||
CHANGING cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'TAGGER_NAME'
|
||||
it_field = lt_fields
|
||||
CHANGING cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'TAGGER_EMAIL'
|
||||
it_field = lt_fields
|
||||
CHANGING cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'MESSAGE'
|
||||
it_field = lt_fields
|
||||
CHANGING cg_field = eg_fields ).
|
||||
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'BODY'
|
||||
it_field = lt_fields
|
||||
CHANGING cg_field = eg_fields ).
|
||||
|
||||
ASSIGN COMPONENT 'BODY' OF STRUCTURE eg_fields TO <lv_body>.
|
||||
ASSERT <lv_body> IS ASSIGNED.
|
||||
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN <lv_body> WITH zif_abapgit_definitions=>c_newline.
|
||||
lo_map = ii_event->form_data( ).
|
||||
lo_map->strict( abap_false ). " Hack, refactor !
|
||||
lo_map->to_abap( CHANGING cs_container = rs_git_tag ).
|
||||
REPLACE ALL OCCURRENCES
|
||||
OF zif_abapgit_definitions=>c_crlf
|
||||
IN rs_git_tag-body
|
||||
WITH zif_abapgit_definitions=>c_newline.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -377,7 +354,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_TAG IMPLEMENTATION.
|
|||
CASE ii_event->mv_action.
|
||||
WHEN c_action-commit_post.
|
||||
|
||||
create_tag( ii_event->mt_postdata ).
|
||||
create_tag( ii_event ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-go_back.
|
||||
|
||||
WHEN c_action-change_tag_type.
|
||||
|
|
|
@ -13,6 +13,7 @@ CLASS zcl_abapgit_html_action_utils DEFINITION
|
|||
CLASS-METHODS parse_fields
|
||||
IMPORTING
|
||||
!iv_string TYPE clike
|
||||
!iv_upper_cased TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(rt_fields) TYPE tihttpnvp .
|
||||
CLASS-METHODS parse_fields_upper_case_name
|
||||
|
@ -261,13 +262,18 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
|
|||
|
||||
ENDLOOP.
|
||||
|
||||
IF iv_upper_cased = abap_true.
|
||||
field_keys_to_upper( CHANGING ct_fields = rt_fields ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD parse_fields_upper_case_name.
|
||||
|
||||
rt_fields = parse_fields( iv_string ).
|
||||
field_keys_to_upper( CHANGING ct_fields = rt_fields ).
|
||||
rt_fields = parse_fields(
|
||||
iv_string = iv_string
|
||||
iv_upper_cased = abap_true ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ CLASS zcl_abapgit_string_map DEFINITION
|
|||
CLASS-METHODS create
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_string_map.
|
||||
METHODS constructor.
|
||||
METHODS get
|
||||
IMPORTING
|
||||
iv_key TYPE string
|
||||
|
@ -53,6 +54,11 @@ CLASS zcl_abapgit_string_map DEFINITION
|
|||
!cs_container TYPE any
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS strict
|
||||
IMPORTING
|
||||
!iv_strict TYPE abap_bool DEFAULT abap_true
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_string_map .
|
||||
METHODS freeze.
|
||||
|
||||
DATA mt_entries TYPE tts_entries READ-ONLY.
|
||||
|
@ -60,6 +66,7 @@ CLASS zcl_abapgit_string_map DEFINITION
|
|||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
DATA mv_read_only TYPE abap_bool.
|
||||
DATA mv_is_strict TYPE abap_bool.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -76,6 +83,11 @@ CLASS ZCL_ABAPGIT_STRING_MAP IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
mv_is_strict = abap_true.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create.
|
||||
CREATE OBJECT ro_instance.
|
||||
ENDMETHOD.
|
||||
|
@ -151,6 +163,12 @@ CLASS ZCL_ABAPGIT_STRING_MAP IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD strict.
|
||||
mv_is_strict = iv_strict.
|
||||
ro_instance = me.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD to_abap.
|
||||
|
||||
DATA lo_type TYPE REF TO cl_abap_typedescr.
|
||||
|
@ -172,6 +190,8 @@ CLASS ZCL_ABAPGIT_STRING_MAP IMPLEMENTATION.
|
|||
IF sy-subrc = 0.
|
||||
" TODO check target type ?
|
||||
<lv_val> = <ls_entry>-v.
|
||||
ELSEIF mv_is_strict = abap_false.
|
||||
CONTINUE.
|
||||
ELSE.
|
||||
zcx_abapgit_exception=>raise( |Component { lv_field } not found in target| ).
|
||||
ENDIF.
|
||||
|
|
|
@ -4,8 +4,18 @@ CLASS ltcl_sm_test DEFINITION
|
|||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_struc,
|
||||
a TYPE string,
|
||||
b TYPE abap_bool,
|
||||
c TYPE i,
|
||||
END OF ty_struc.
|
||||
|
||||
METHODS simple FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS freeze FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS strict FOR TESTING RAISING zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_sm_test IMPLEMENTATION.
|
||||
|
@ -91,4 +101,46 @@ CLASS ltcl_sm_test IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD strict.
|
||||
|
||||
DATA ls_struc_act TYPE ty_struc.
|
||||
DATA ls_struc_exp TYPE ty_struc.
|
||||
DATA lo_x TYPE REF TO cx_root.
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_string_map.
|
||||
lo_cut = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_cut->set(
|
||||
iv_key = 'a'
|
||||
iv_val = 'avalue' ).
|
||||
lo_cut->set(
|
||||
iv_key = 'b'
|
||||
iv_val = 'X' ).
|
||||
lo_cut->set(
|
||||
iv_key = 'c'
|
||||
iv_val = '123' ).
|
||||
lo_cut->set(
|
||||
iv_key = 'z'
|
||||
iv_val = 'xyz' ).
|
||||
|
||||
ls_struc_exp-a = 'avalue'.
|
||||
ls_struc_exp-b = abap_true.
|
||||
ls_struc_exp-c = 123.
|
||||
|
||||
TRY.
|
||||
lo_cut->to_abap( CHANGING cs_container = ls_struc_act ).
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
CATCH cx_root INTO lo_x.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'Component Z not found in target'
|
||||
act = lo_x->get_text( ) ).
|
||||
ENDTRY.
|
||||
|
||||
lo_cut->strict( abap_false )->to_abap( CHANGING cs_container = ls_struc_act ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_struc_exp
|
||||
act = ls_struc_act ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
Loading…
Reference in New Issue
Block a user