diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index bf162b855..a524783d6 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -161,4 +161,16 @@ CONSTANTS: BEGIN OF gc_action, db_update TYPE string VALUE 'db_update', db_display TYPE string VALUE 'db_display', db_edit TYPE string VALUE 'db_edit', + bg_update TYPE string VALUE 'bg_update', + + go_main TYPE string VALUE 'go_main', + go_explore TYPE string VALUE 'go_explore', + go_db TYPE string VALUE 'go_db', + go_background TYPE string VALUE 'go_background', + go_background_run TYPE string VALUE 'go_background_run', + go_diff TYPE string VALUE 'go_diff', + go_stage TYPE string VALUE 'go_stage', + go_commit TYPE string VALUE 'go_commit', + go_branch_overview TYPE string VALUE 'go_branch_overview', + jump TYPE string VALUE 'jump', END OF gc_action. \ No newline at end of file diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index 8b77f427b..1ff19666d 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -191,7 +191,7 @@ CLASS lcl_gui IMPLEMENTATION. METHOD go_home. - on_event( action = 'main' ) ##NO_TEXT. + on_event( action = |{ gc_action-go_main }| ). " doesn't accept strings directly ENDMETHOD. "go_home diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 4c8c7e0e6..afe135e9b 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -69,64 +69,66 @@ CLASS lcl_gui_router IMPLEMENTATION. CASE iv_action. " General routing - WHEN 'main' - OR 'explore' - OR 'db' - OR 'background_run'. + WHEN gc_action-go_main " Go Main page + OR gc_action-go_explore " Go Explore page + OR gc_action-go_db " Go DB util page + OR gc_action-go_background_run. " Go background run page ei_page = get_page_by_name( iv_action ). ev_state = gc_event_state-new_page. - WHEN 'background'. + WHEN gc_action-go_background. " Go Background page ei_page = get_page_background( lv_key ). ev_state = gc_event_state-new_page. - WHEN 'jump'. + WHEN gc_action-go_diff. " Go Diff page + ei_page = get_page_diff( iv_getdata ). + ev_state = gc_event_state-new_page. + WHEN gc_action-go_stage. " Go Staging page + lv_key = iv_getdata. + ei_page = get_page_stage( lv_key ). + ev_state = gc_event_state-new_page_w_bookmark. + WHEN gc_action-go_branch_overview. " Go repo branch overview + ei_page = get_page_branch_overview( iv_getdata ). + ev_state = gc_event_state-new_page. + + " SAP GUI actions + WHEN gc_action-jump. lcl_html_action_utils=>jump_decode( EXPORTING iv_string = iv_getdata IMPORTING ev_obj_type = ls_item-obj_type ev_obj_name = ls_item-obj_name ). lcl_objects=>jump( ls_item ). ev_state = gc_event_state-no_more_act. - WHEN 'diff'. - ei_page = get_page_diff( iv_getdata ). - ev_state = gc_event_state-new_page. - WHEN 'stage'. - lv_key = iv_getdata. - ei_page = get_page_stage( lv_key ). - ev_state = gc_event_state-new_page_w_bookmark. - WHEN 'branch_overview'. - ei_page = get_page_branch_overview( iv_getdata ). - ev_state = gc_event_state-new_page. " DB actions - WHEN gc_action-db_display OR gc_action-db_edit. + WHEN gc_action-db_display OR gc_action-db_edit. " DB Display/Edit ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ). ev_state = gc_event_state-new_page. IF iv_prev_page = 'PAGE_DB_DISPLAY'. ev_state = gc_event_state-new_page_replacing. ENDIF. - WHEN gc_action-db_delete. + WHEN gc_action-db_delete. " DB Delete ls_db = lcl_html_action_utils=>dbkey_decode( iv_getdata ). lcl_services_db=>delete( ls_db ). ev_state = gc_event_state-re_render. - WHEN gc_action-db_update. + WHEN gc_action-db_update. " DB Update ls_db = lcl_html_action_utils=>dbcontent_decode( it_postdata ). lcl_services_db=>update( ls_db ). ev_state = gc_event_state-go_back. " Abapgit services actions - WHEN gc_action-abapgit_home. + WHEN gc_action-abapgit_home. " Go abapGit homepage lcl_services_abapgit=>open_abapgit_homepage( ). ev_state = gc_event_state-no_more_act. - WHEN gc_action-abapgit_install. + WHEN gc_action-abapgit_install. " Install abapGit lcl_services_abapgit=>install_abapgit( ). ev_state = gc_event_state-re_render. " Repository services actions - WHEN gc_action-repo_refresh. " Repo refresh + WHEN gc_action-repo_refresh. " Repo refresh lcl_services_repo=>refresh( lv_key ). ev_state = gc_event_state-re_render. - WHEN gc_action-repo_purge. " Repo remove & purge all objects + WHEN gc_action-repo_purge. " Repo remove & purge all objects lcl_services_repo=>purge( lv_key ). ev_state = gc_event_state-re_render. - WHEN gc_action-repo_remove. " Repo remove + WHEN gc_action-repo_remove. " Repo remove lcl_services_repo=>remove( lv_key ). ev_state = gc_event_state-re_render. WHEN gc_action-repo_clone OR 'install'. " Repo clone, 'install' is for explore page @@ -134,38 +136,38 @@ CLASS lcl_gui_router IMPLEMENTATION. ev_state = gc_event_state-re_render. " ZIP services actions - WHEN gc_action-zip_import. " Import repo from ZIP + WHEN gc_action-zip_import. " Import repo from ZIP lcl_zip=>import( lv_key ). ev_state = gc_event_state-re_render. - WHEN gc_action-zip_export. " Export repo as ZIP + WHEN gc_action-zip_export. " Export repo as ZIP lcl_zip=>export( lcl_app=>repo_srv( )->get( lv_key ) ). ev_state = gc_event_state-no_more_act. - WHEN gc_action-zip_package. " Export package as ZIP + WHEN gc_action-zip_package. " Export package as ZIP lcl_zip=>export_package( ). ev_state = gc_event_state-no_more_act. - WHEN gc_action-zip_transport. " Export transport as ZIP + WHEN gc_action-zip_transport. " Export transport as ZIP lcl_transport=>zip( ). ev_state = gc_event_state-no_more_act. " Remote origin manipulations - WHEN gc_action-repo_remote_attach. + WHEN gc_action-repo_remote_attach. " Remote attach lcl_services_repo=>remote_attach( lv_key ). ev_state = gc_event_state-re_render. - WHEN gc_action-repo_remote_detach. + WHEN gc_action-repo_remote_detach. " Remote detach lcl_services_repo=>remote_detach( lv_key ). ev_state = gc_event_state-re_render. - WHEN gc_action-repo_remote_change. + WHEN gc_action-repo_remote_change. " Remote change lcl_services_repo=>remote_change( lv_key ). ev_state = gc_event_state-re_render. " Git actions - WHEN gc_action-git_pull. + WHEN gc_action-git_pull. " GIT Pull lcl_services_git=>pull( lv_key ). ev_state = gc_event_state-re_render. - WHEN gc_action-git_reset. + WHEN gc_action-git_reset. " GIT Reset lcl_services_git=>reset( lv_key ). ev_state = gc_event_state-re_render. - WHEN gc_action-git_branch_create. + WHEN gc_action-git_branch_create. " GIT Create new branch lcl_services_git=>create_branch( lv_key ). ev_state = gc_event_state-re_render. @@ -179,15 +181,17 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD get_page_by_name. DATA: lv_page_class TYPE string, + lv_page_name TYPE string, lv_message TYPE string. - lv_page_class = |LCL_GUI_PAGE_{ to_upper( iv_name ) }|. + lv_page_name = iv_name. + SHIFT lv_page_name LEFT DELETING LEADING 'go_'. + lv_page_class = |LCL_GUI_PAGE_{ to_upper( lv_page_name ) }|. TRY. CREATE OBJECT ri_page TYPE (lv_page_class). CATCH cx_sy_create_object_error. - lv_message = |Cannot create page class { lv_page_class }|. - lcx_exception=>raise( lv_message ). + lcx_exception=>raise( |Cannot create page class { lv_page_class }| ). ENDTRY. ENDMETHOD. " get_page_by_name diff --git a/src/zabapgit_html_action_utils.prog.abap b/src/zabapgit_html_action_utils.prog.abap index 3aab00c3d..5bf88b67e 100644 --- a/src/zabapgit_html_action_utils.prog.abap +++ b/src/zabapgit_html_action_utils.prog.abap @@ -58,6 +58,10 @@ CLASS lcl_html_action_utils DEFINITION FINAL. IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RETURNING VALUE(rv_string) TYPE string. + CLASS-METHODS decode_bg_update + IMPORTING iv_getdata TYPE clike + RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background. + CLASS-METHODS field_keys_to_upper CHANGING ct_fields TYPE tihttpnvp. @@ -295,4 +299,31 @@ CLASS lcl_html_action_utils IMPLEMENTATION. ENDMETHOD. "field_keys_to_upper + METHOD decode_bg_update. + + DEFINE _field. " TODO refactor and use globally in html actions + READ TABLE lt_fields ASSIGNING WITH KEY name = &1 ##NO_TEXT. + IF sy-subrc = 0. + rs_fields-&2 = -value. + ENDIF. + END-OF-DEFINITION. + + DATA: lt_fields TYPE tihttpnvp. + + FIELD-SYMBOLS: LIKE LINE OF lt_fields. + + lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_getdata }| ). + field_keys_to_upper( CHANGING ct_fields = lt_fields ). + + _field 'METHOD' method. + _field 'USERNAME' username. + _field 'PASSWORD' password. + _field 'AMETHOD' amethod. + _field 'ANAME' aname. + _field 'AMAIL' amail. + + ASSERT NOT rs_fields IS INITIAL. + + ENDMETHOD. "decode_bg_update + ENDCLASS. "lcl_html_action_utils IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_page_background.prog.abap b/src/zabapgit_page_background.prog.abap index 570a8769e..64d0ee4ff 100644 --- a/src/zabapgit_page_background.prog.abap +++ b/src/zabapgit_page_background.prog.abap @@ -85,14 +85,8 @@ CLASS lcl_gui_page_background DEFINITION FINAL mv_key TYPE lcl_persistence_repo=>ty_repo-key. METHODS: - parse_fields - IMPORTING iv_getdata TYPE clike - RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background, render_data RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper - RAISING lcx_exception, - save - IMPORTING iv_getdata TYPE clike RAISING lcx_exception. ENDCLASS. @@ -104,68 +98,20 @@ CLASS lcl_gui_page_background IMPLEMENTATION. mv_key = iv_key. ENDMETHOD. - METHOD parse_fields. - - DEFINE _field. - READ TABLE lt_fields ASSIGNING WITH KEY name = &1 ##NO_TEXT. - IF sy-subrc = 0. - rs_fields-&2 = -value. - ENDIF. - END-OF-DEFINITION. - - DATA: lt_fields TYPE tihttpnvp, - lv_string TYPE string. - - FIELD-SYMBOLS: LIKE LINE OF lt_fields. - - - lv_string = iv_getdata. " type conversion - lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). - - _field 'method' method. - _field 'username' username. - _field 'password' password. - _field 'amethod' amethod. - _field 'aname' aname. - _field 'amail' amail. - - ASSERT NOT rs_fields IS INITIAL. - - ENDMETHOD. - METHOD lif_gui_page~on_event. + DATA ls_bg_task TYPE lcl_persistence_background=>ty_background. + CASE iv_action. - WHEN 'save'. - save( iv_getdata ). + WHEN gc_action-bg_update. + ls_bg_task = lcl_html_action_utils=>decode_bg_update( iv_getdata ). + ls_bg_task-key = mv_key. + lcl_services_background=>update_task( ls_bg_task ). ev_state = gc_event_state-re_render. ENDCASE. ENDMETHOD. - METHOD save. - - DATA: ls_fields TYPE lcl_persistence_background=>ty_background, - lo_persistence TYPE REF TO lcl_persistence_background. - - - ls_fields = parse_fields( iv_getdata ). - ls_fields-key = mv_key. - - CREATE OBJECT lo_persistence. - - IF ls_fields-method = lcl_persistence_background=>c_method-nothing. - lo_persistence->delete( ls_fields-key ). - ELSE. - lo_persistence->modify( ls_fields ). - ENDIF. - - MESSAGE 'Saved' TYPE 'S' ##NO_TEXT. - - COMMIT WORK. - - ENDMETHOD. - METHOD render_data. DATA: lo_repo TYPE REF TO lcl_repo_online, @@ -221,7 +167,7 @@ CLASS lcl_gui_page_background IMPLEMENTATION. ro_html->add( '
' ). ro_html->add( 'Method
' ) ##NO_TEXT. - ro_html->add( '
' ). + ro_html->add( || ). ro_html->add( 'Do nothing
' ) ##NO_TEXT. ro_html->add( 'add( iv_txt = 'Run background logic' - iv_act = 'background_run' ) ##NO_TEXT. + iv_act = gc_action-go_background_run ) ##NO_TEXT. ro_html->add( header( ) ). ro_html->add( title( iv_title = 'BACKGROUND' io_menu = lo_toolbar ) ). diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index eca83661a..88bb76655 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -125,7 +125,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. iv_obj_name = iv_obj_name ). CREATE OBJECT lo_html. - lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |jump?{ lv_encode }| ). + lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |{ gc_action-jump }?{ lv_encode }| ). rv_html = lo_html->mv_html. ENDMETHOD. @@ -138,12 +138,12 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CREATE OBJECT ro_menu. CREATE OBJECT lo_betasub. - lo_betasub->add( iv_txt = 'Database util' iv_act = 'db' ) ##NO_TEXT. + lo_betasub->add( iv_txt = 'Database util' iv_act = gc_action-go_db ) ##NO_TEXT. lo_betasub->add( iv_txt = 'Package to zip' iv_act = gc_action-zip_package ) ##NO_TEXT. lo_betasub->add( iv_txt = 'Transport to zip' iv_act = gc_action-zip_transport ) ##NO_TEXT. ro_menu->add( iv_txt = 'Clone' iv_act = gc_action-repo_clone ) ##NO_TEXT. - ro_menu->add( iv_txt = 'Explore' iv_act = 'explore' ) ##NO_TEXT. + ro_menu->add( iv_txt = 'Explore' iv_act = gc_action-go_explore ) ##NO_TEXT. ro_menu->add( iv_txt = 'New offline repo' iv_act = gc_action-repo_newoffline ) ##NO_TEXT. IF lcl_services_abapgit=>needs_installation( ) = abap_true. ro_menu->add( iv_txt = 'Get abapGit' iv_act = gc_action-abapgit_install ) ##NO_TEXT. @@ -227,7 +227,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. " Build branch drop-down ======================== IF io_repo->is_offline( ) = abap_false. " Online ? lo_tb_branch->add( iv_txt = 'Overview' - iv_act = |branch_overview?{ lv_key }| ). + iv_act = |{ gc_action-go_branch_overview }?{ lv_key }| ). lo_tb_branch->add( iv_txt = 'Switch' iv_act = |{ gc_action-git_branch_switch }?{ lv_key }| iv_opt = lv_wp_opt ). @@ -243,7 +243,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. iv_act = |{ gc_action-git_reset }?{ lv_key }| iv_opt = lv_wp_opt ). lo_tb_advanced->add( iv_txt = 'Background mode' - iv_act = |background?{ lv_key }| ). + iv_act = |{ gc_action-go_background }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Change remote' iv_act = |{ gc_action-repo_remote_change }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Make off-line' @@ -268,7 +268,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDIF. IF lcl_stage_logic=>count( lo_repo_online ) > 0. lo_toolbar->add( iv_txt = 'Stage' - iv_act = |stage?{ lv_key }| + iv_act = |{ gc_action-go_stage }?{ lv_key }| iv_opt = gc_html_opt-emphas ). ENDIF. CATCH lcx_exception ##NO_HANDLER. @@ -485,7 +485,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ig_file = ls_file ). ro_html->add_anchor( iv_txt = 'diff' - iv_act = |diff?{ lv_difflink }| ). + iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ). ELSE. ro_html->add( | | ). ENDIF. @@ -604,7 +604,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CREATE OBJECT lo_toolbar. lo_toolbar->add( iv_txt = 'Explore new projects' - iv_act = 'explore' ) ##NO_TEXT. + iv_act = gc_action-go_explore ) ##NO_TEXT. ro_html->add( '
' ). ro_html->add( lo_toolbar->render( ) ). diff --git a/src/zabapgit_page_stage.prog.abap b/src/zabapgit_page_stage.prog.abap index 05f125bca..56e34cd45 100644 --- a/src/zabapgit_page_stage.prog.abap +++ b/src/zabapgit_page_stage.prog.abap @@ -124,7 +124,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. iv_act = 'stage_add?' && lv_param ) ##NO_TEXT. ENDIF. lo_toolbar->add( iv_txt = 'diff' - iv_act = 'diff?' && lv_param ) ##NO_TEXT. + iv_act = |{ gc_action-go_diff }?{ lv_param }| ) ##NO_TEXT. IF lv_method IS INITIAL. lv_status = '?'. diff --git a/src/zabapgit_services.prog.abap b/src/zabapgit_services.prog.abap index 639f79ce1..88e26e99b 100644 --- a/src/zabapgit_services.prog.abap +++ b/src/zabapgit_services.prog.abap @@ -5,4 +5,5 @@ INCLUDE zabapgit_services_repo. INCLUDE zabapgit_services_abapgit. INCLUDE zabapgit_services_git. -INCLUDE zabapgit_services_db. \ No newline at end of file +INCLUDE zabapgit_services_db. +INCLUDE zabapgit_services_background. \ No newline at end of file diff --git a/src/zabapgit_services_background.prog.abap b/src/zabapgit_services_background.prog.abap new file mode 100644 index 000000000..701f36538 --- /dev/null +++ b/src/zabapgit_services_background.prog.abap @@ -0,0 +1,35 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_SERVICES_BACKGROUND +*&---------------------------------------------------------------------* + +CLASS lcl_services_background DEFINITION FINAL. + + PUBLIC SECTION. + + CLASS-METHODS update_task + IMPORTING is_bg_task TYPE lcl_persistence_background=>ty_background + RAISING lcx_exception. + +ENDCLASS. "lcl_services_background + +CLASS lcl_services_background IMPLEMENTATION. + + METHOD update_task. + + DATA lo_persistence TYPE REF TO lcl_persistence_background. + + CREATE OBJECT lo_persistence. + + IF is_bg_task-method = lcl_persistence_background=>c_method-nothing. + lo_persistence->delete( is_bg_task-key ). + ELSE. + lo_persistence->modify( is_bg_task ). + ENDIF. + + MESSAGE 'Saved' TYPE 'S' ##NO_TEXT. + + COMMIT WORK. + + ENDMETHOD. "update_task + +ENDCLASS. "lcl_services_background \ No newline at end of file diff --git a/src/zabapgit_services_background.prog.xml b/src/zabapgit_services_background.prog.xml new file mode 100644 index 000000000..ac4f12b1d --- /dev/null +++ b/src/zabapgit_services_background.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_SERVICES_BACKGROUND + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_SERVICES_BACKGROUND + 36 + + + + + +