mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
325 lines
12 KiB
ABAP
325 lines
12 KiB
ABAP
*&---------------------------------------------------------------------*
|
|
*& Include ZABAPGIT_GUI_ROUTER
|
|
*&---------------------------------------------------------------------*
|
|
|
|
*----------------------------------------------------------------------*
|
|
* CLASS lcl_gui_router DEFINITION
|
|
*----------------------------------------------------------------------*
|
|
CLASS lcl_gui_router DEFINITION FINAL.
|
|
PUBLIC SECTION.
|
|
|
|
METHODS on_event
|
|
IMPORTING iv_action TYPE clike
|
|
iv_prev_page TYPE clike
|
|
iv_getdata TYPE clike OPTIONAL
|
|
it_postdata TYPE cnht_post_data_tab OPTIONAL
|
|
EXPORTING ei_page TYPE REF TO lif_gui_page
|
|
ev_state TYPE i
|
|
RAISING lcx_exception lcx_cancel.
|
|
|
|
PRIVATE SECTION.
|
|
|
|
METHODS get_page_by_name
|
|
IMPORTING iv_name TYPE clike
|
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
RAISING lcx_exception.
|
|
|
|
METHODS get_page_diff
|
|
IMPORTING iv_getdata TYPE clike
|
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
RAISING lcx_exception.
|
|
|
|
METHODS get_page_branch_overview
|
|
IMPORTING iv_getdata TYPE clike
|
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
RAISING lcx_exception.
|
|
|
|
METHODS get_page_stage
|
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
RAISING lcx_exception.
|
|
|
|
METHODS get_page_db_by_name
|
|
IMPORTING iv_name TYPE clike
|
|
iv_getdata TYPE clike
|
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
RAISING lcx_exception.
|
|
|
|
METHODS get_page_background
|
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
RAISING lcx_exception.
|
|
|
|
METHODS get_page_playground
|
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
RAISING lcx_exception lcx_cancel.
|
|
|
|
ENDCLASS.
|
|
|
|
*----------------------------------------------------------------------*
|
|
* CLASS lcl_gui_router IMPLEMENTATION
|
|
*----------------------------------------------------------------------*
|
|
CLASS lcl_gui_router IMPLEMENTATION.
|
|
|
|
METHOD on_event.
|
|
|
|
DATA: lv_url TYPE string,
|
|
lv_key TYPE lcl_persistence_repo=>ty_repo-key,
|
|
ls_db TYPE lcl_persistence_db=>ty_content,
|
|
ls_item TYPE ty_item.
|
|
|
|
lv_key = iv_getdata. " TODO refactor
|
|
lv_url = iv_getdata. " TODO refactor
|
|
|
|
CASE iv_action.
|
|
" General routing
|
|
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
|
|
OR gc_action-go_debuginfo. " Go debug info page
|
|
ei_page = get_page_by_name( iv_action ).
|
|
ev_state = gc_event_state-new_page.
|
|
WHEN gc_action-go_background. " Go Background page
|
|
ei_page = get_page_background( lv_key ).
|
|
ev_state = gc_event_state-new_page.
|
|
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
|
|
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.
|
|
WHEN gc_action-go_playground. " Create playground page
|
|
ei_page = get_page_playground( ).
|
|
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.
|
|
|
|
" DB actions
|
|
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. " 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. " 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. " Go abapGit homepage
|
|
lcl_services_abapgit=>open_abapgit_homepage( ).
|
|
ev_state = gc_event_state-no_more_act.
|
|
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_newoffline. " New offline repo
|
|
lcl_services_repo=>new_offline( ).
|
|
ev_state = gc_event_state-re_render.
|
|
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
|
|
lcl_services_repo=>purge( lv_key ).
|
|
ev_state = gc_event_state-re_render.
|
|
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
|
|
lcl_services_repo=>clone( lv_url ).
|
|
ev_state = gc_event_state-re_render.
|
|
|
|
" ZIP services actions
|
|
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
|
|
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
|
|
lcl_zip=>export_package( ).
|
|
ev_state = gc_event_state-no_more_act.
|
|
WHEN gc_action-zip_transport. " Export transport as ZIP
|
|
lcl_transport=>zip( ).
|
|
ev_state = gc_event_state-no_more_act.
|
|
WHEN gc_action-zip_object. " Export object as ZIP
|
|
lcl_zip=>export_object( ).
|
|
ev_state = gc_event_state-no_more_act.
|
|
|
|
" Remote origin manipulations
|
|
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. " Remote detach
|
|
lcl_services_repo=>remote_detach( lv_key ).
|
|
ev_state = gc_event_state-re_render.
|
|
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. " GIT Pull
|
|
lcl_services_git=>pull( lv_key ).
|
|
ev_state = gc_event_state-re_render.
|
|
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. " GIT Create new branch
|
|
lcl_services_git=>create_branch( lv_key ).
|
|
ev_state = gc_event_state-re_render.
|
|
WHEN gc_action-git_branch_delete. " Delete remote branch
|
|
lcl_services_git=>delete_branch( lv_key ).
|
|
ev_state = gc_event_state-re_render.
|
|
WHEN gc_action-git_branch_switch. " Switch branch
|
|
lcl_services_git=>switch_branch( lv_key ).
|
|
ev_state = gc_event_state-re_render.
|
|
|
|
"Others
|
|
WHEN OTHERS.
|
|
ev_state = gc_event_state-not_handled.
|
|
ENDCASE.
|
|
|
|
ENDMETHOD. " on_event
|
|
|
|
METHOD get_page_by_name.
|
|
|
|
DATA: lv_page_class TYPE string,
|
|
lv_page_name TYPE string.
|
|
|
|
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.
|
|
lcx_exception=>raise( |Cannot create page class { lv_page_class }| ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD. " get_page_by_name
|
|
|
|
METHOD get_page_db_by_name.
|
|
|
|
DATA: lv_page_class TYPE string,
|
|
lv_message TYPE string,
|
|
ls_key TYPE lcl_persistence_db=>ty_content.
|
|
|
|
lv_page_class = |LCL_GUI_PAGE_{ to_upper( iv_name ) }|.
|
|
ls_key = lcl_html_action_utils=>dbkey_decode( iv_getdata ).
|
|
|
|
TRY.
|
|
CREATE OBJECT ri_page TYPE (lv_page_class)
|
|
EXPORTING
|
|
is_key = ls_key.
|
|
|
|
CATCH cx_sy_create_object_error.
|
|
lv_message = |Cannot create page class { lv_page_class }|.
|
|
lcx_exception=>raise( lv_message ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD. " get_page_db_by_name
|
|
|
|
METHOD get_page_branch_overview.
|
|
|
|
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
|
lo_page TYPE REF TO lcl_gui_page_branch_overview,
|
|
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
|
|
|
|
|
|
lv_key = iv_getdata.
|
|
|
|
lo_repo ?= lcl_app=>repo_srv( )->get( lv_key ).
|
|
|
|
CREATE OBJECT lo_page
|
|
EXPORTING
|
|
io_repo = lo_repo.
|
|
|
|
ri_page = lo_page.
|
|
|
|
ENDMETHOD. "get_page_branch_overview
|
|
|
|
METHOD get_page_diff.
|
|
|
|
DATA: ls_file TYPE ty_file,
|
|
ls_object TYPE ty_item,
|
|
lo_page TYPE REF TO lcl_gui_page_diff,
|
|
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
|
|
|
|
|
|
lcl_html_action_utils=>file_obj_decode( EXPORTING iv_string = iv_getdata
|
|
IMPORTING ev_key = lv_key
|
|
eg_file = ls_file
|
|
eg_object = ls_object ).
|
|
|
|
CREATE OBJECT lo_page
|
|
EXPORTING
|
|
iv_key = lv_key
|
|
is_file = ls_file
|
|
is_object = ls_object.
|
|
|
|
ri_page = lo_page.
|
|
|
|
ENDMETHOD. "get_page_diff
|
|
|
|
METHOD get_page_stage.
|
|
|
|
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
|
lo_stage_page TYPE REF TO lcl_gui_page_stage.
|
|
|
|
|
|
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
|
|
|
" force refresh on stage, to make sure the latest local and remote files are used
|
|
lo_repo->refresh( ).
|
|
|
|
CREATE OBJECT lo_stage_page
|
|
EXPORTING
|
|
io_repo = lo_repo.
|
|
|
|
ri_page = lo_stage_page.
|
|
|
|
ENDMETHOD. "get_page_stage
|
|
|
|
METHOD get_page_background.
|
|
|
|
CREATE OBJECT ri_page TYPE lcl_gui_page_background
|
|
EXPORTING
|
|
iv_key = iv_key.
|
|
|
|
ENDMETHOD. "get_page_background
|
|
|
|
METHOD get_page_playground.
|
|
DATA: lv_class_name TYPE string,
|
|
lv_cancel TYPE abap_bool.
|
|
|
|
lcl_popups=>run_page_class_popup( IMPORTING ev_name = lv_class_name
|
|
ev_cancel = lv_cancel ).
|
|
IF lv_cancel = abap_true.
|
|
RAISE EXCEPTION TYPE lcx_cancel.
|
|
ENDIF.
|
|
|
|
TRY.
|
|
CREATE OBJECT ri_page TYPE (lv_class_name).
|
|
CATCH cx_sy_create_object_error.
|
|
lcx_exception=>raise( |Cannot create page class { lv_class_name }| ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD. "get_page_playground
|
|
|
|
ENDCLASS. " lcl_gui_router |