html event abstraction, phase 3 - query (#3903)

* event->query

* page db refactoring

* linter fix

* linter fix

* address repo via key= param

* linter

* mv_getdata WIP

* mv_getdata - finish

* cleanup action utils

* linter fix

* another linter fix

* docs for event->query
This commit is contained in:
Alexander Tsybulsky 2020-09-28 17:41:59 +03:00 committed by GitHub
parent 1f3abfd8ec
commit e95b6f7806
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 282 additions and 334 deletions

View File

@ -98,7 +98,15 @@ Currently 2 collections are supported out of the box - scripts and hidden_forms
## Router and event handlers
To process sapevents in abap the component (page) must implement `ZIF_ABAPGIT_GUI_EVENT_HANDLER=>on_event`. It has the same importing params as `sapevent` handler of `cl_gui_html_viewer`, please refer SAP official documentation for param meaning and detail. For the exporting params see below.
To process sapevents in abap the component (page) must implement `ZIF_ABAPGIT_GUI_EVENT_HANDLER=>on_event`. It imports `ii_event` instance which represents `sapevent` handler of `cl_gui_html_viewer`. In particular:
- `ii_event->mv_action` - sapevent code (part of url before `?`)
- `ii_event->mv_getdata` - raw url query (part of url after `?`)
- `ii_event->mt_postdata` - raw post data (if present)
- `ii_event->mi_gui_services` - instance of GUI services for easier access
- `ii_event->query()` - returns parsed url query (`k1=v1&k2=v2...`) in form of `string_map`. Param names are upper cased (by default). Params that are not uniform are not parsed (`k1=v1&k2` - will result in `k1` only). Params can be addressed in 2 typical ways:
- `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)
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`
@ -108,7 +116,7 @@ Events can be processed on 2 levels - in page/component **or** in the router. On
Router (`ZCL_ABAPGIT_GUI_ROUTER`) is the class which handle global abapGit commands like opening specific pages and actions like repo installation/deletion.
In order to indicate the result of event handling an `on_event` implementation must return `ev_state` (element of `zcl_abapgit_gui=>c_event_state`) and, optionally, `ei_page`:
In order to indicate the result of event handling an `on_event` implementation must return `rs_handled-state` (element of `zcl_abapgit_gui=>c_event_state`) and, optionally, `rs_handled-page`:
- `not_handled` (same as `initial`) - event was not handled, process by next handler (e.g. the router)
- `re_render` - just re-render the current page (probably internal state of the page object was changed so the visualization should too)

View File

@ -5,17 +5,27 @@ CLASS zcl_abapgit_gui_event DEFINITION
PUBLIC SECTION.
INTERFACES zif_abapgit_gui_event.
INTERFACES zif_abapgit_gui_event .
METHODS constructor
IMPORTING
ii_gui_services TYPE REF TO zif_abapgit_gui_services
iv_action TYPE clike
iv_getdata TYPE clike OPTIONAL
it_postdata TYPE cnht_post_data_tab OPTIONAL.
!ii_gui_services TYPE REF TO zif_abapgit_gui_services OPTIONAL
!iv_action TYPE clike
!iv_getdata TYPE clike OPTIONAL
!it_postdata TYPE cnht_post_data_tab OPTIONAL .
PROTECTED SECTION.
PRIVATE SECTION.
DATA mo_query TYPE REF TO zcl_abapgit_string_map.
DATA mo_query_upper_cased TYPE REF TO zcl_abapgit_string_map.
METHODS fields_to_map
IMPORTING
it_fields TYPE tihttpnvp
RETURNING
VALUE(ro_string_map) TYPE REF TO zcl_abapgit_string_map
RAISING
zcx_abapgit_exception.
ENDCLASS.
@ -31,4 +41,39 @@ CLASS ZCL_ABAPGIT_GUI_EVENT IMPLEMENTATION.
zif_abapgit_gui_event~mt_postdata = it_postdata.
ENDMETHOD.
METHOD fields_to_map.
FIELD-SYMBOLS <ls_field> LIKE LINE OF it_fields.
CREATE OBJECT ro_string_map.
LOOP AT it_fields ASSIGNING <ls_field>.
ro_string_map->set(
iv_key = <ls_field>-name
iv_val = <ls_field>-value ).
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_gui_event~query.
DATA lt_fields TYPE tihttpnvp.
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.
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( ).
ENDIF.
ro_string_map = mo_query.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,71 @@
CLASS ltcl_event DEFINITION
FOR TESTING
RISK LEVEL HARMLESS
DURATION SHORT
FINAL.
PRIVATE SECTION.
METHODS query FOR TESTING RAISING zcx_abapgit_exception.
ENDCLASS.
CLASS ltcl_event IMPLEMENTATION.
METHOD query.
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.
CREATE OBJECT li_cut TYPE zcl_abapgit_gui_event
EXPORTING
iv_action = 'XXX'
iv_getdata = 'not_a_param'.
lo_map = li_cut->query( ).
cl_abap_unit_assert=>assert_equals(
act = lo_map->size( )
exp = 0 ).
CREATE OBJECT li_cut TYPE zcl_abapgit_gui_event
EXPORTING
iv_action = 'XXX'
iv_getdata = 'a=b&b=c'.
lo_map = li_cut->query( ).
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->query( 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' ).
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.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>

View File

@ -6,4 +6,12 @@ INTERFACE zif_abapgit_gui_event
DATA mt_postdata TYPE cnht_post_data_tab READ-ONLY.
DATA mi_gui_services TYPE REF TO zif_abapgit_gui_services READ-ONLY.
METHODS query
IMPORTING
iv_upper_cased TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(ro_string_map) TYPE REF TO zcl_abapgit_string_map
RAISING
zcx_abapgit_exception.
ENDINTERFACE.

View File

@ -196,7 +196,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB IMPLEMENTATION.
CASE ii_event->mv_action.
WHEN c_action-delete.
ls_db = zcl_abapgit_html_action_utils=>dbkey_decode( ii_event->mv_getdata ).
ii_event->query( )->to_abap( CHANGING cs_container = ls_db ).
delete( ls_db ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN OTHERS.

View File

@ -2003,7 +2003,7 @@ function createRepoCatalogEnumerator(catalog, action) {
return function() {
return catalog.map(function(i) {
return {
action: action + "?" + i.key,
action: action + "?key=" + i.key,
iconClass: i.isOffline
? "icon icon-plug darkgrey"
: "icon icon-cloud-upload-alt blue",

View File

@ -62,16 +62,6 @@ CLASS zcl_abapgit_gui_chunk_lib DEFINITION
!ix_error TYPE REF TO zcx_abapgit_exception
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
CLASS-METHODS parse_change_order_by
IMPORTING
!iv_query_str TYPE clike
RETURNING
VALUE(rv_order_by) TYPE string .
CLASS-METHODS parse_direction
IMPORTING
!iv_query_str TYPE clike
RETURNING
VALUE(rv_order_descending) TYPE abap_bool .
CLASS-METHODS render_order_by_header_cells
IMPORTING
!it_col_spec TYPE zif_abapgit_definitions=>tty_col_spec
@ -248,30 +238,6 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
ENDMETHOD.
METHOD parse_change_order_by.
FIND FIRST OCCURRENCE OF REGEX `orderBy=(.*)`
IN iv_query_str
SUBMATCHES rv_order_by.
rv_order_by = condense( rv_order_by ).
ENDMETHOD.
METHOD parse_direction.
DATA: lv_direction TYPE string.
FIND FIRST OCCURRENCE OF REGEX `direction=(.*)`
IN iv_query_str
SUBMATCHES lv_direction.
rv_order_descending = boolc( condense( lv_direction ) = 'DESCENDING' ).
ENDMETHOD.
METHOD render_branch_span.
DATA: lv_text TYPE string,
@ -290,7 +256,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
ri_html->add_icon( iv_name = 'code-branch/grey70'
iv_hint = 'Current branch' ).
IF iv_interactive = abap_true.
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?{ io_repo->get_key( ) }|
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?key={ io_repo->get_key( ) }|
iv_txt = lv_text ).
ELSE.
ri_html->add( lv_text ).
@ -709,7 +675,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
lo_repo_online ?= io_repo.
ri_html->add_a( iv_txt = lo_repo_online->get_url( )
iv_act = |{ zif_abapgit_definitions=>c_action-url }?|
iv_act = |{ zif_abapgit_definitions=>c_action-url }?url=|
&& |{ lo_repo_online->get_url( ) }|
iv_class = |url| ).
@ -749,7 +715,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
ELSE.
lv_icon = 'star/grey'.
ENDIF.
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-repo_toggle_fav }?{ io_repo->get_key( ) }|
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-repo_toggle_fav }?key={ io_repo->get_key( ) }|
iv_txt = ri_html->icon( iv_name = lv_icon
iv_class = 'pad-sides'
iv_hint = 'Click to toggle favorite' ) ).
@ -820,7 +786,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
lv_display_url = io_repo_online->get_commit_display_url( lv_commit_hash ).
ii_html->add_a( iv_txt = |{ lv_icon_commit }{ lv_commit_short_hash }|
iv_act = |{ zif_abapgit_definitions=>c_action-url }?{ lv_display_url }|
iv_act = |{ zif_abapgit_definitions=>c_action-url }?url={ lv_display_url }|
iv_class = |url| ).
CATCH zcx_abapgit_exception.
ii_html->add( |<span class="url">{ lv_icon_commit }{ lv_commit_short_hash }</span>| ).

View File

@ -307,9 +307,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BKG IMPLEMENTATION.
METHOD zif_abapgit_gui_event_handler~on_event.
DATA ls_fields TYPE zcl_abapgit_persist_background=>ty_background.
CASE ii_event->mv_action.
WHEN zif_abapgit_definitions=>c_action-bg_update.
update( decode( ii_event->mv_getdata ) ).
ls_fields = decode( ii_event->mv_getdata ).
update( ls_fields ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN OTHERS.
rs_handled = super->zif_abapgit_gui_event_handler~on_event( ii_event ).

View File

@ -31,11 +31,6 @@ CLASS zcl_abapgit_gui_page_main DEFINITION
METHODS build_main_menu
RETURNING VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
METHODS get_patch_page
IMPORTING iv_getdata TYPE clike
RETURNING VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING zcx_abapgit_exception.
ENDCLASS.
@ -73,26 +68,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION.
ENDMETHOD.
METHOD get_patch_page.
DATA lv_key TYPE zif_abapgit_persistence=>ty_value.
FIND FIRST OCCURRENCE OF '=' IN iv_getdata.
IF sy-subrc <> 0. " Not found ? -> just repo key in params
lv_key = iv_getdata.
ELSE.
zcl_abapgit_html_action_utils=>stage_decode(
EXPORTING iv_getdata = iv_getdata
IMPORTING ev_key = lv_key ).
ENDIF.
CREATE OBJECT ri_page TYPE zcl_abapgit_gui_page_patch
EXPORTING
iv_key = lv_key.
ENDMETHOD.
METHOD render_content.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
@ -119,7 +94,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION.
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN c_actions-select.
lv_key = ii_event->mv_getdata.
lv_key = ii_event->query( iv_upper_cased = abap_true )->get( 'KEY' ).
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lv_key ).
TRY.
@ -135,12 +110,13 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION.
WHEN zif_abapgit_definitions=>c_action-change_order_by.
mo_repo_overview->set_order_by( zcl_abapgit_gui_chunk_lib=>parse_change_order_by( ii_event->mv_getdata ) ).
mo_repo_overview->set_order_by( ii_event->query( )->get( 'ORDERBY' ) ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN zif_abapgit_definitions=>c_action-direction.
mo_repo_overview->set_order_direction( zcl_abapgit_gui_chunk_lib=>parse_direction( ii_event->mv_getdata ) ).
mo_repo_overview->set_order_direction(
boolc( ii_event->query( )->get( 'DIRECTION' ) = 'DESCENDING' ) ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN c_actions-apply_filter.
@ -150,12 +126,15 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MAIN IMPLEMENTATION.
WHEN zif_abapgit_definitions=>c_action-go_patch.
rs_handled-page = get_patch_page( ii_event->mv_getdata ).
lv_key = ii_event->query( )->get( 'KEY' ).
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_patch
EXPORTING
iv_key = lv_key.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN zif_abapgit_definitions=>c_action-repo_settings.
lv_key = ii_event->mv_getdata.
lv_key = ii_event->query( iv_upper_cased = abap_true )->get( 'KEY' ).
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_repo_sett
EXPORTING
io_repo = zcl_abapgit_repo_srv=>get_instance( )->get( lv_key ).

View File

@ -383,7 +383,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
IF iv_transport IS NOT INITIAL.
lv_transport_html = ri_html->a(
iv_txt = lv_transport_string
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transport }?{ iv_transport }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transport }?transport={ iv_transport }| ).
ENDIF.
ri_html->add( |<td class="type">{ is_item-obj_type }</td>| ).
ri_html->add( |<td class="name">{ lv_filename }</td>| ).

View File

@ -251,59 +251,61 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
IF iv_rstate IS NOT INITIAL OR iv_lstate IS NOT INITIAL. " In case of asyncronicities
ro_advanced_dropdown->add( iv_txt = 'Reset Local (Force Pull)'
iv_act = |{ zif_abapgit_definitions=>c_action-git_reset }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-git_reset }?key={ mv_key }|
iv_opt = iv_wp_opt ).
ENDIF.
IF mo_repo->is_offline( ) = abap_false. " Online ?
ro_advanced_dropdown->add( iv_txt = 'Background Mode'
iv_act = |{ zif_abapgit_definitions=>c_action-go_background }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-go_background }?key={ mv_key }| ).
ro_advanced_dropdown->add( iv_txt = 'Change Remote'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remote_change }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remote_change }?key={ mv_key }| ).
ro_advanced_dropdown->add( iv_txt = 'Make Off-line'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remote_detach }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remote_detach }?key={ mv_key }| ).
ro_advanced_dropdown->add( iv_txt = 'Force Stage'
iv_act = |{ zif_abapgit_definitions=>c_action-go_stage }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-go_stage }?key={ mv_key }| ).
CLEAR lv_crossout.
IF zcl_abapgit_auth=>is_allowed( zif_abapgit_auth=>gc_authorization-transport_to_branch ) = abap_false.
lv_crossout = zif_abapgit_html=>c_html_opt-crossout.
ENDIF.
ro_advanced_dropdown->add( iv_txt = 'Transport to Branch'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_transport_to_branch }?{ mv_key }|
ro_advanced_dropdown->add(
iv_txt = 'Transport to Branch'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_transport_to_branch }?key={ mv_key }|
iv_opt = lv_crossout ).
ELSE.
ro_advanced_dropdown->add( iv_txt = 'Make On-line'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remote_attach }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remote_attach }?key={ mv_key }| ).
ENDIF.
IF mv_are_changes_recorded_in_tr = abap_true.
ro_advanced_dropdown->add(
iv_txt = 'Add all objects to transport request'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_add_all_obj_to_trans_req }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_add_all_obj_to_trans_req }?key={ mv_key }| ).
ENDIF.
ro_advanced_dropdown->add( iv_txt = 'Syntax Check'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_syntax_check }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_syntax_check }?key={ mv_key }| ).
ro_advanced_dropdown->add( iv_txt = 'Run Code Inspector'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_code_inspector }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_code_inspector }?key={ mv_key }| ).
CLEAR lv_crossout.
IF zcl_abapgit_auth=>is_allowed( zif_abapgit_auth=>gc_authorization-update_local_checksum ) = abap_false.
lv_crossout = zif_abapgit_html=>c_html_opt-crossout.
ENDIF.
ro_advanced_dropdown->add( iv_txt = 'Update Local Checksums'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh_checksums }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh_checksums }?key={ mv_key }|
iv_opt = lv_crossout ).
IF mo_repo->get_dot_abapgit( )->get_master_language( ) <> sy-langu.
ro_advanced_dropdown->add( iv_txt = 'Open in Master Language'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_open_in_master_lang }?{ mv_key }| ).
ro_advanced_dropdown->add(
iv_txt = 'Open in Master Language'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_open_in_master_lang }?key={ mv_key }| ).
ENDIF.
ro_advanced_dropdown->add( iv_txt = 'Remove'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remove }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remove }?key={ mv_key }| ).
CLEAR lv_crossout.
IF mo_repo->get_local_settings( )-write_protected = abap_true
@ -311,7 +313,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
lv_crossout = zif_abapgit_html=>c_html_opt-crossout.
ENDIF.
ro_advanced_dropdown->add( iv_txt = 'Uninstall'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_purge }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-repo_purge }?key={ mv_key }|
iv_opt = lv_crossout ).
ENDMETHOD.
@ -328,14 +330,14 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
ENDIF.
ro_branch_dropdown->add( iv_txt = 'Overview'
iv_act = |{ zif_abapgit_definitions=>c_action-go_branch_overview }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-go_branch_overview }?key={ mv_key }| ).
ro_branch_dropdown->add( iv_txt = 'Switch'
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?key={ mv_key }|
iv_opt = iv_wp_opt ).
ro_branch_dropdown->add( iv_txt = 'Create'
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_create }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_create }?key={ mv_key }| ).
ro_branch_dropdown->add( iv_txt = 'Delete'
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_delete }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_delete }?key={ mv_key }| ).
lo_repo_online ?= mo_repo. " TODO refactor this disaster
IF lo_repo_online->get_switched_origin( ) IS NOT INITIAL.
@ -447,12 +449,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
IF mo_repo->is_offline( ) = abap_false.
IF iv_rstate IS NOT INITIAL. " Something new at remote
ro_toolbar->add( iv_txt = 'Pull'
iv_act = |{ zif_abapgit_definitions=>c_action-git_pull }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-git_pull }?key={ mv_key }|
iv_opt = iv_pull_opt ).
ENDIF.
IF iv_lstate IS NOT INITIAL. " Something new at local
ro_toolbar->add( iv_txt = 'Stage'
iv_act = |{ zif_abapgit_definitions=>c_action-go_stage }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-go_stage }?key={ mv_key }|
iv_opt = zif_abapgit_html=>c_html_opt-strong ).
ENDIF.
IF iv_rstate IS NOT INITIAL OR iv_lstate IS NOT INITIAL. " Any changes
@ -463,7 +465,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
li_log = mo_repo->get_log( ).
IF li_log IS BOUND AND li_log->count( ) > 0.
ro_toolbar->add( iv_txt = 'Log'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_log }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_log }?key={ mv_key }| ).
ENDIF.
ro_toolbar->add( iv_txt = 'Branch'
io_sub = io_tb_branch ).
@ -472,22 +474,22 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
ELSE.
IF mo_repo->has_remote_source( ) = abap_true AND iv_rstate IS NOT INITIAL.
ro_toolbar->add( iv_txt = 'Pull <sup>zip</sup>'
iv_act = |{ zif_abapgit_definitions=>c_action-git_pull }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-git_pull }?key={ mv_key }|
iv_opt = zif_abapgit_html=>c_html_opt-strong ).
ro_toolbar->add( iv_txt = 'Diff'
iv_act = |{ zif_abapgit_definitions=>c_action-go_diff }?key={ mv_key }|
iv_opt = zif_abapgit_html=>c_html_opt-strong ).
ENDIF.
ro_toolbar->add( iv_txt = 'Import <sup>zip</sup>'
iv_act = |{ zif_abapgit_definitions=>c_action-zip_import }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-zip_import }?key={ mv_key }|
iv_opt = zif_abapgit_html=>c_html_opt-strong ).
ro_toolbar->add( iv_txt = 'Export <sup>zip</sup>'
iv_act = |{ zif_abapgit_definitions=>c_action-zip_export }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-zip_export }?key={ mv_key }|
iv_opt = zif_abapgit_html=>c_html_opt-strong ).
li_log = mo_repo->get_log( ).
IF li_log IS BOUND AND li_log->count( ) > 0.
ro_toolbar->add( iv_txt = 'Log'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_log }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_log }?key={ mv_key }| ).
ENDIF.
ENDIF.
@ -498,11 +500,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
io_sub = build_view_menu( ) ).
ro_toolbar->add( iv_txt = 'Refresh'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh }?key={ mv_key }|
iv_opt = zif_abapgit_html=>c_html_opt-strong ).
ro_toolbar->add( iv_txt = zcl_abapgit_html=>icon( iv_name = 'cog' )
iv_act = |{ zif_abapgit_definitions=>c_action-repo_settings }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-repo_settings }?key={ mv_key }|
iv_title = `Repository Settings` ).
@ -536,14 +538,14 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
ENDIF.
ro_tag_dropdown->add( iv_txt = 'Overview'
iv_act = |{ zif_abapgit_definitions=>c_action-go_tag_overview }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-go_tag_overview }?key={ mv_key }| ).
ro_tag_dropdown->add( iv_txt = 'Switch'
iv_act = |{ zif_abapgit_definitions=>c_action-git_tag_switch }?{ mv_key }|
iv_act = |{ zif_abapgit_definitions=>c_action-git_tag_switch }?key={ mv_key }|
iv_opt = iv_wp_opt ).
ro_tag_dropdown->add( iv_txt = 'Create'
iv_act = |{ zif_abapgit_definitions=>c_action-git_tag_create }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-git_tag_create }?key={ mv_key }| ).
ro_tag_dropdown->add( iv_txt = 'Delete'
iv_act = |{ zif_abapgit_definitions=>c_action-git_tag_delete }?{ mv_key }| ).
iv_act = |{ zif_abapgit_definitions=>c_action-git_tag_delete }?key={ mv_key }| ).
ENDMETHOD.
@ -1036,7 +1038,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
lv_icon_html = li_html->a(
iv_txt = li_html->icon( iv_name = 'briefcase/darkgrey'
iv_hint = lv_transport_string )
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transport }?| && lv_transport ).
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transport }?transport={ lv_transport }| ).
rv_html = |<td class="icon">| &&
|{ lv_icon_html }| &&
@ -1166,7 +1168,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
WHEN zif_abapgit_definitions=>c_action-go_repo. " Switch to another repo
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_view_repo
EXPORTING
iv_key = |{ ii_event->mv_getdata }|.
iv_key = |{ ii_event->query( iv_upper_cased = abap_true )->get( 'KEY' ) }|.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_replacing.
WHEN c_actions-toggle_hide_files. " Toggle file diplay
@ -1174,8 +1176,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN c_actions-change_dir. " Change dir
lv_path = zcl_abapgit_html_action_utils=>dir_decode( ii_event->mv_getdata ).
mv_cur_dir = zcl_abapgit_path=>change_dir( iv_cur_dir = mv_cur_dir
lv_path = ii_event->query( )->get( 'PATH' ).
mv_cur_dir = zcl_abapgit_path=>change_dir(
iv_cur_dir = mv_cur_dir
iv_cd = lv_path ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
@ -1197,11 +1200,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN zif_abapgit_definitions=>c_action-change_order_by.
mv_order_by = zcl_abapgit_gui_chunk_lib=>parse_change_order_by( ii_event->mv_getdata ).
mv_order_by = ii_event->query( )->get( 'ORDERBY' ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN zif_abapgit_definitions=>c_action-direction.
mv_order_descending = zcl_abapgit_gui_chunk_lib=>parse_direction( ii_event->mv_getdata ).
mv_order_descending = boolc( ii_event->query( )->get( 'DIRECTION' ) = 'DESCENDING' ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN zif_abapgit_definitions=>c_action-repo_open_in_master_lang.

View File

@ -115,7 +115,7 @@ ENDCLASS.
CLASS zcl_abapgit_gui_repo_over IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GUI_REPO_OVER IMPLEMENTATION.
METHOD apply_filter.
@ -334,7 +334,7 @@ CLASS zcl_abapgit_gui_repo_over IMPLEMENTATION.
ii_html->add( |<tr class="repo { lv_favorite_class }">| ).
ii_html->add( |<td class="wmin">| ).
ii_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-repo_toggle_fav }?{ <ls_overview>-key }|
ii_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-repo_toggle_fav }?key={ <ls_overview>-key }|
iv_txt = ii_html->icon( iv_name = lv_favorite_icon
iv_class = 'pad-sides'
iv_hint = 'Click to toggle favorite' ) ).
@ -342,11 +342,11 @@ CLASS zcl_abapgit_gui_repo_over IMPLEMENTATION.
ii_html->add( |<td class="wmin">{ ii_html->icon( lv_type_icon ) }</td>| ).
ii_html->add( |<td>{ ii_html->a( iv_txt = <ls_overview>-name
iv_act = |{ c_action-select }?{ <ls_overview>-key }| ) }</td>| ).
iv_act = |{ c_action-select }?key={ <ls_overview>-key }| ) }</td>| ).
IF <ls_overview>-type = abap_false.
ii_html->add( |<td>{ ii_html->a( iv_txt = <ls_overview>-url
iv_act = |{ zif_abapgit_definitions=>c_action-url }?|
iv_act = |{ zif_abapgit_definitions=>c_action-url }?url=|
&& |{ <ls_overview>-url }| ) }</td>| ).
ELSE.
ii_html->add( |<td></td>| ).
@ -371,7 +371,7 @@ CLASS zcl_abapgit_gui_repo_over IMPLEMENTATION.
ii_html->add( |<td>{ ii_html->a(
iv_txt = lv_branch_html
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?{ <ls_overview>-key }| ) }</td>| ).
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?key={ <ls_overview>-key }| ) }</td>| ).
ENDIF.
ii_html->add( |<td class="ro-detail">{ <ls_overview>-deserialized_by }</td>| ).
@ -384,39 +384,39 @@ CLASS zcl_abapgit_gui_repo_over IMPLEMENTATION.
lv_check_link = ii_html->a(
iv_txt = |Check|
iv_act = |{ zif_abapgit_definitions=>c_action-repo_code_inspector }?{ <ls_overview>-key } | ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_code_inspector }?key={ <ls_overview>-key } | ).
ii_html->add( lv_check_link && lc_separator ).
IF <ls_overview>-type = abap_false. " online repo
lv_stage_link = ii_html->a(
iv_txt = |Stage|
iv_act = |{ zif_abapgit_definitions=>c_action-go_stage }?{ <ls_overview>-key } | ).
iv_act = |{ zif_abapgit_definitions=>c_action-go_stage }?key={ <ls_overview>-key } | ).
ii_html->add( lv_stage_link && lc_separator ).
lv_patch_link = ii_html->a(
iv_txt = |Patch|
iv_act = |{ zif_abapgit_definitions=>c_action-go_patch }?{ <ls_overview>-key } | ).
iv_act = |{ zif_abapgit_definitions=>c_action-go_patch }?key={ <ls_overview>-key } | ).
ii_html->add( lv_patch_link && lc_separator ).
ELSE. " offline repo
lv_zip_import_link = ii_html->a(
iv_txt = |Import|
iv_act = |{ zif_abapgit_definitions=>c_action-zip_import }?{ <ls_overview>-key } | ).
iv_act = |{ zif_abapgit_definitions=>c_action-zip_import }?key={ <ls_overview>-key } | ).
ii_html->add( lv_zip_import_link && lc_separator ).
lv_zip_export_link = ii_html->a(
iv_txt = |Export|
iv_act = |{ zif_abapgit_definitions=>c_action-zip_export }?{ <ls_overview>-key } | ).
iv_act = |{ zif_abapgit_definitions=>c_action-zip_export }?key={ <ls_overview>-key } | ).
ii_html->add( lv_zip_export_link && lc_separator ).
ENDIF.
lv_settings_link = ii_html->a(
iv_txt = |Settings|
iv_act = |{ zif_abapgit_definitions=>c_action-repo_settings }?{ <ls_overview>-key } | ).
iv_act = |{ zif_abapgit_definitions=>c_action-repo_settings }?key={ <ls_overview>-key } | ).
ii_html->add( lv_settings_link ).
@ -425,7 +425,7 @@ CLASS zcl_abapgit_gui_repo_over IMPLEMENTATION.
ii_html->add( |<td class='ro-go'><span>{
ii_html->a(
iv_txt = `&rsaquo;`
iv_act = |{ c_action-select }?{ <ls_overview>-key }| ) }</span></td>| ).
iv_act = |{ c_action-select }?key={ <ls_overview>-key }| ) }</span></td>| ).
ii_html->add( |</tr>| ).

View File

@ -81,21 +81,21 @@ CLASS zcl_abapgit_gui_router DEFINITION
zcx_abapgit_exception.
METHODS get_page_diff
IMPORTING
!iv_getdata TYPE clike
!ii_event TYPE REF TO zif_abapgit_gui_event
RETURNING
VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING
zcx_abapgit_exception .
METHODS get_page_branch_overview
IMPORTING
!iv_getdata TYPE clike
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RETURNING
VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING
zcx_abapgit_exception .
METHODS get_page_stage
IMPORTING
!iv_getdata TYPE clike
!ii_event TYPE REF TO zif_abapgit_gui_event
RETURNING
VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING
@ -110,7 +110,7 @@ CLASS zcl_abapgit_gui_router DEFINITION
CLASS-METHODS jump_display_transport
IMPORTING
!iv_getdata TYPE clike
!iv_transport TYPE trkorr
RAISING
zcx_abapgit_exception.
@ -168,19 +168,23 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
METHOD db_actions.
DATA ls_db_key TYPE zif_abapgit_persistence=>ty_content.
CASE ii_event->mv_action.
WHEN zif_abapgit_definitions=>c_action-db_edit.
ii_event->query( )->to_abap( CHANGING cs_container = ls_db_key ).
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_db_edit
EXPORTING
is_key = zcl_abapgit_html_action_utils=>dbkey_decode( ii_event->mv_getdata ).
is_key = ls_db_key.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
IF ii_event->mi_gui_services->get_current_page_name( ) = 'ZCL_ABAPGIT_GUI_PAGE_DB_DIS'. " TODO refactor
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_replacing.
ENDIF.
WHEN zif_abapgit_definitions=>c_action-db_display.
ii_event->query( )->to_abap( CHANGING cs_container = ls_db_key ).
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_db_dis
EXPORTING
is_key = zcl_abapgit_html_action_utils=>dbkey_decode( ii_event->mv_getdata ).
is_key = ls_db_key.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
ENDCASE.
@ -220,7 +224,7 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
lt_repo_list TYPE zif_abapgit_definitions=>ty_repo_ref_tt.
lv_key = ii_event->mv_getdata. " TODO refactor
lv_key = ii_event->query( )->get( 'KEY' ).
CASE ii_event->mv_action.
WHEN zcl_abapgit_gui=>c_action-go_home.
@ -255,17 +259,17 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
rs_handled-page = get_page_background( lv_key ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN zif_abapgit_definitions=>c_action-go_diff. " Go Diff page
rs_handled-page = get_page_diff( ii_event->mv_getdata ).
rs_handled-page = get_page_diff( ii_event ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_w_bookmark.
WHEN zif_abapgit_definitions=>c_action-go_stage. " Go Staging page
rs_handled-page = get_page_stage( ii_event->mv_getdata ).
rs_handled-page = get_page_stage( ii_event ).
IF ii_event->mi_gui_services->get_current_page_name( ) = 'ZCL_ABAPGIT_GUI_PAGE_DIFF'. " TODO refactor
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
ELSE.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_w_bookmark.
ENDIF.
WHEN zif_abapgit_definitions=>c_action-go_branch_overview. " Go repo branch overview
rs_handled-page = get_page_branch_overview( ii_event->mv_getdata ).
rs_handled-page = get_page_branch_overview( lv_key ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN zif_abapgit_definitions=>c_action-go_tutorial. " Go to tutorial
rs_handled-page = zcl_abapgit_gui_page_tutorial=>create( ).
@ -297,13 +301,10 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
METHOD get_page_branch_overview.
DATA: lo_repo TYPE REF TO zcl_abapgit_repo_online,
lo_page TYPE REF TO zcl_abapgit_gui_page_boverview,
lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
lo_page TYPE REF TO zcl_abapgit_gui_page_boverview.
lv_key = iv_getdata.
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( lv_key ).
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
CREATE OBJECT lo_page
EXPORTING
@ -321,14 +322,11 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
lo_page TYPE REF TO zcl_abapgit_gui_page_diff,
lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
zcl_abapgit_html_action_utils=>file_obj_decode(
EXPORTING
iv_string = iv_getdata
IMPORTING
ev_key = lv_key
eg_file = ls_file
eg_object = ls_object ).
lv_key = ii_event->query( )->get( 'KEY' ).
ls_file-path = ii_event->query( )->get( 'PATH' ).
ls_file-filename = ii_event->query( )->get( 'FILENAME' ). " unescape ?
ls_object-obj_type = ii_event->query( )->get( 'OBJ_TYPE' ).
ls_object-obj_name = ii_event->query( )->get( 'OBJ_NAME' ). " unescape ?
CREATE OBJECT lo_page
EXPORTING
@ -349,16 +347,8 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
lo_stage_page TYPE REF TO zcl_abapgit_gui_page_stage,
lo_code_inspector_page TYPE REF TO zcl_abapgit_gui_page_code_insp.
FIND FIRST OCCURRENCE OF '=' IN iv_getdata.
IF sy-subrc <> 0. " Not found ? -> just repo key in params
lv_key = iv_getdata.
ELSE.
zcl_abapgit_html_action_utils=>stage_decode(
EXPORTING iv_getdata = iv_getdata
IMPORTING ev_key = lv_key
ev_seed = lv_seed ).
ENDIF.
lv_key = ii_event->query( )->get( 'KEY' ).
lv_seed = ii_event->query( )->get( 'SEED' ).
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( lv_key ).
IF lo_repo->get_local_settings( )-code_inspector_check_variant IS NOT INITIAL.
@ -388,10 +378,9 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
METHOD git_services.
DATA: lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
DATA lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
lv_key = ii_event->mv_getdata. " TODO refactor
lv_key = ii_event->query( )->get( 'KEY' ).
CASE ii_event->mv_action.
WHEN zif_abapgit_definitions=>c_action-git_pull. " GIT Pull
@ -431,19 +420,17 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
METHOD jump_display_transport.
DATA: lv_transport TYPE trkorr,
DATA:
lv_transport_adt_uri TYPE string,
lv_adt_link TYPE string,
lv_adt_jump_enabled TYPE abap_bool.
lv_transport = iv_getdata.
lv_adt_jump_enabled = zcl_abapgit_persist_settings=>get_instance( )->read( )->get_adt_jump_enabled( ).
IF lv_adt_jump_enabled = abap_true.
TRY.
CALL METHOD ('CL_CTS_ADT_TM_URI_BUILDER')=>('CREATE_ADT_URI')
EXPORTING
trnumber = lv_transport
trnumber = iv_transport
RECEIVING
result = lv_transport_adt_uri.
lv_adt_link = |adt://{ sy-sysid }{ lv_transport_adt_uri }|.
@ -456,12 +443,12 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
CATCH cx_root.
CALL FUNCTION 'TR_DISPLAY_REQUEST'
EXPORTING
i_trkorr = lv_transport.
i_trkorr = iv_transport.
ENDTRY.
ELSE.
CALL FUNCTION 'TR_DISPLAY_REQUEST'
EXPORTING
i_trkorr = lv_transport.
i_trkorr = iv_transport.
ENDIF.
ENDMETHOD.
@ -486,10 +473,10 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
METHOD remote_origin_manipulations.
DATA: lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
DATA lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
lv_key = ii_event->mv_getdata. " TODO refactor
lv_key = ii_event->query( )->get( 'KEY' ).
CASE ii_event->mv_action.
WHEN zif_abapgit_definitions=>c_action-repo_remote_attach. " Remote attach
@ -508,12 +495,11 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
METHOD repository_services.
DATA: lv_url TYPE string,
DATA:
lv_key TYPE zif_abapgit_persistence=>ty_repo-key,
li_log TYPE REF TO zif_abapgit_log.
lv_key = ii_event->mv_getdata. " TODO refactor
lv_url = ii_event->mv_getdata. " TODO refactor
lv_key = ii_event->query( )->get( 'KEY' ).
CASE ii_event->mv_action.
WHEN zif_abapgit_definitions=>c_action-repo_newoffline. " New offline repo
@ -576,19 +562,17 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
CASE ii_event->mv_action.
WHEN zif_abapgit_definitions=>c_action-jump. " Open object editor
zcl_abapgit_html_action_utils=>jump_decode(
EXPORTING iv_string = ii_event->mv_getdata
IMPORTING ev_obj_type = ls_item-obj_type
ev_obj_name = ls_item-obj_name ).
ls_item-obj_type = ii_event->query( )->get( 'TYPE' ).
ls_item-obj_name = ii_event->query( )->get( 'NAME' ).
zcl_abapgit_objects=>jump( ls_item ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
WHEN zif_abapgit_definitions=>c_action-jump_transport.
jump_display_transport( ii_event->mv_getdata ).
jump_display_transport( |{ ii_event->query( )->get( 'TRANSPORT' ) }| ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
WHEN zif_abapgit_definitions=>c_action-url.
call_browser( ii_event->mv_getdata ).
call_browser( ii_event->query( )->get( 'URL' ) ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
ENDCASE.
@ -647,7 +631,7 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
repo_view TYPE string VALUE 'ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO',
END OF lc_page.
lv_key = ii_event->mv_getdata. " TODO refactor
lv_key = ii_event->query( )->get( 'KEY' ).
CASE ii_event->mv_action.
WHEN zif_abapgit_definitions=>c_action-zip_import. " Import repo from ZIP

View File

@ -39,26 +39,12 @@ CLASS zcl_abapgit_html_action_utils DEFINITION
!iv_obj_name TYPE tadir-obj_name
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS jump_decode
IMPORTING
!iv_string TYPE clike
EXPORTING
!ev_obj_type TYPE tadir-object
!ev_obj_name TYPE tadir-obj_name
RAISING
zcx_abapgit_exception .
CLASS-METHODS dir_encode
IMPORTING
!iv_path TYPE string
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS dir_decode
IMPORTING
!iv_string TYPE clike
RETURNING
VALUE(rv_path) TYPE string
RAISING
zcx_abapgit_exception .
CLASS-METHODS file_encode
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
@ -71,33 +57,13 @@ CLASS zcl_abapgit_html_action_utils DEFINITION
!ig_object TYPE any
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS file_obj_decode
IMPORTING
!iv_string TYPE clike
EXPORTING
!ev_key TYPE zif_abapgit_persistence=>ty_repo-key
!eg_file TYPE any "assuming ty_file
!eg_object TYPE any "assuming ty_item
RAISING
zcx_abapgit_exception .
CLASS-METHODS dbkey_encode
IMPORTING
!is_key TYPE zif_abapgit_persistence=>ty_content
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS dbkey_decode
IMPORTING
!iv_string TYPE clike
RETURNING
VALUE(rs_key) TYPE zif_abapgit_persistence=>ty_content .
CLASS-METHODS stage_decode
IMPORTING
!iv_getdata TYPE clike
EXPORTING
!ev_key TYPE zif_abapgit_persistence=>ty_repo-key
!ev_seed TYPE string
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
PRIVATE SECTION.
@ -146,20 +112,6 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
ENDMETHOD.
METHOD dbkey_decode.
DATA: lt_fields TYPE tihttpnvp.
lt_fields = parse_fields_upper_case_name( cl_http_utility=>unescape_url( |{ iv_string }| ) ).
get_field( EXPORTING iv_name = 'TYPE'
it_field = lt_fields CHANGING cg_field = rs_key-type ).
get_field( EXPORTING iv_name = 'VALUE'
it_field = lt_fields CHANGING cg_field = rs_key-value ).
ENDMETHOD.
METHOD dbkey_encode.
DATA: lt_fields TYPE tihttpnvp.
@ -174,17 +126,6 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
ENDMETHOD.
METHOD dir_decode.
DATA: lt_fields TYPE tihttpnvp.
lt_fields = parse_fields( iv_string ).
get_field( EXPORTING iv_name = 'PATH'
it_field = lt_fields CHANGING cg_field = rv_path ).
ENDMETHOD.
METHOD dir_encode.
DATA: lt_fields TYPE tihttpnvp.
@ -223,39 +164,6 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
ENDMETHOD.
METHOD file_obj_decode.
DATA: lt_fields TYPE tihttpnvp.
ASSERT eg_file IS SUPPLIED OR eg_object IS SUPPLIED OR ev_key IS SUPPLIED.
CLEAR: ev_key, eg_file, eg_object.
lt_fields = parse_fields_upper_case_name( iv_string ).
get_field( EXPORTING iv_name = 'KEY'
it_field = lt_fields CHANGING cg_field = ev_key ).
IF eg_file IS SUPPLIED.
get_field( EXPORTING iv_name = 'PATH'
it_field = lt_fields CHANGING cg_field = eg_file ).
get_field( EXPORTING iv_name = 'FILENAME'
it_field = lt_fields
iv_decode = abap_true
CHANGING cg_field = eg_file ).
ENDIF.
IF eg_object IS SUPPLIED.
get_field( EXPORTING iv_name = 'OBJ_TYPE'
it_field = lt_fields CHANGING cg_field = eg_object ).
get_field( EXPORTING iv_name = 'OBJ_NAME'
it_field = lt_fields
iv_decode = abap_true
CHANGING cg_field = eg_object ).
ENDIF.
ENDMETHOD.
METHOD get_field.
DATA: lv_value TYPE string.
@ -289,20 +197,6 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
ENDMETHOD.
METHOD jump_decode.
DATA: lt_fields TYPE tihttpnvp.
lt_fields = parse_fields( iv_string ).
get_field( EXPORTING iv_name = 'TYPE'
it_field = lt_fields CHANGING cg_field = ev_obj_type ).
get_field( EXPORTING iv_name = 'NAME'
it_field = lt_fields CHANGING cg_field = ev_obj_name ).
ENDMETHOD.
METHOD jump_encode.
DATA: lt_fields TYPE tihttpnvp.
@ -348,16 +242,16 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
LOOP AT lt_substrings ASSIGNING <lv_substring>.
CLEAR ls_field.
<lv_substring> = unescape( <lv_substring> ).
" On attempt to change unescaping -> run unit tests to check !
ls_field-name = substring_before(
val = <lv_substring>
sub = '=' ).
ls_field-name = unescape( ls_field-name ).
ls_field-value = substring_after(
val = <lv_substring>
sub = '=' ).
ls_field-value = unescape( ls_field-value ).
IF ls_field IS INITIAL. " Not a field with proper structure
CONTINUE.
@ -392,22 +286,6 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
ENDMETHOD.
METHOD stage_decode.
DATA: lt_fields TYPE tihttpnvp.
lt_fields = parse_fields_upper_case_name( iv_getdata ).
get_field( EXPORTING iv_name = 'KEY'
it_field = lt_fields CHANGING cg_field = ev_key ).
get_field( EXPORTING iv_name = 'SEED'
it_field = lt_fields CHANGING cg_field = ev_seed ).
ASSERT NOT ev_key IS INITIAL.
ENDMETHOD.
METHOD translate_postdata.
DATA: lt_post_data TYPE cnht_post_data_tab,

View File

@ -142,13 +142,15 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
ENDMETHOD.
METHOD parse_fields_unescape.
* file status = '?', used in staging page
" file status = '?', used in staging page
_given_string_is( '/SRC/ZFOOBAR.PROG.ABAP=%3F' ).
_when_fields_are_parsed( ).
_then_field_count_should_be( 1 ).
_then_fields_should_be( iv_index = 1
_then_fields_should_be(
iv_index = 1
iv_name = '/SRC/ZFOOBAR.PROG.ABAP'
iv_value = '?' ).