diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 78dd79634..578679cf2 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -56,16 +56,17 @@ INCLUDE zabapgit_git. INCLUDE zabapgit_objects. INCLUDE zabapgit_tadir. INCLUDE zabapgit_file_status. +INCLUDE zabapgit_popups. +INCLUDE zabapgit_zip. INCLUDE zabapgit_objects_impl. INCLUDE zabapgit_object_serializing. " All serializing classes here INCLUDE zabapgit_repo_impl. INCLUDE zabapgit_background. -INCLUDE zabapgit_zip. INCLUDE zabapgit_transport. -INCLUDE zabapgit_popups. +INCLUDE zabapgit_services. " All services here INCLUDE zabapgit_gui_pages. " All GUI pages here INCLUDE zabapgit_gui_router. INCLUDE zabapgit_gui. diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 46f3a26c8..f8ee0461b 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -132,7 +132,28 @@ CONSTANTS: gc_newline TYPE abap_char1 VALUE cl_abap_char_utilities=>newline. CONSTANTS: gc_english TYPE spras VALUE 'E'. -CONSTANTS: gc_abapgit_homepage TYPE string VALUE 'http://www.abapgit.org' ##NO_TEXT. - CONSTANTS: gc_root_dir TYPE string VALUE '/', - gc_dot_abapgit TYPE string VALUE '.abapgit.xml' ##NO_TEXT. \ No newline at end of file + gc_dot_abapgit TYPE string VALUE '.abapgit.xml' ##NO_TEXT. + +CONSTANTS: BEGIN OF gc_action, + repo_clone TYPE string VALUE 'repo_clone', + repo_refresh TYPE string VALUE 'repo_refresh', + repo_remove TYPE string VALUE 'repo_remove', + repo_purge TYPE string VALUE 'repo_purge', + repo_newoffline TYPE string VALUE 'repo_newoffline', + abapgit_home TYPE string VALUE 'abapgit_home', + abapgit_install TYPE string VALUE 'abapgit_install', + zip_import TYPE string VALUE 'zip_import', + zip_export TYPE string VALUE 'zip_export', + zip_package TYPE string VALUE 'zip_package', + zip_transport TYPE string VALUE 'zip_transport', + git_pull TYPE string VALUE 'git_pull', + git_reset TYPE string VALUE 'git_reset', + git_branch_create TYPE string VALUE 'git_branch_create', + git_branch_switch TYPE string VALUE 'git_branch_switch', + git_branch_delete TYPE string VALUE 'git_branch_delete', + db_delete TYPE string VALUE 'db_delete', + db_update TYPE string VALUE 'db_update', + db_display TYPE string VALUE 'db_display', + db_edit TYPE string VALUE 'db_edit', + END OF gc_action. \ No newline at end of file diff --git a/src/zabapgit_exceptions.prog.abap b/src/zabapgit_exceptions.prog.abap index 19f7542f0..076cbd371 100644 --- a/src/zabapgit_exceptions.prog.abap +++ b/src/zabapgit_exceptions.prog.abap @@ -5,8 +5,6 @@ *----------------------------------------------------------------------* * CLASS LCX_EXCEPTION DEFINITION *----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* CLASS lcx_exception DEFINITION INHERITING FROM cx_static_check FINAL. PUBLIC SECTION. @@ -27,8 +25,6 @@ ENDCLASS. "CX_LOCAL_EXCEPTION DEFINITION *----------------------------------------------------------------------* * CLASS LCX_EXCEPTION IMPLEMENTATION *----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* CLASS lcx_exception IMPLEMENTATION. METHOD constructor. @@ -48,8 +44,6 @@ ENDCLASS. "lcx_exception IMPLEMENTATION *----------------------------------------------------------------------* * CLASS LCX_NOT_FOUND DEFINITION *----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* CLASS lcx_not_found DEFINITION INHERITING FROM cx_static_check FINAL. ENDCLASS. "CX_LOCAL_EXCEPTION DEFINITION @@ -57,8 +51,20 @@ ENDCLASS. "CX_LOCAL_EXCEPTION DEFINITION *----------------------------------------------------------------------* * CLASS LCX_NOT_FOUND IMPLEMENTATION *----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* CLASS lcx_not_found IMPLEMENTATION. -ENDCLASS. "lcx_not_found IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcx_not_found IMPLEMENTATION + +*----------------------------------------------------------------------* +* CLASS LCX_CANCEL DEFINITION +*----------------------------------------------------------------------* +CLASS lcx_cancel DEFINITION INHERITING FROM cx_static_check FINAL. + +ENDCLASS. "lcx_cancel DEFINITION + +*----------------------------------------------------------------------* +* CLASS LCX_CANCEL IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcx_cancel IMPLEMENTATION. + +ENDCLASS. "lcx_cancel IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index 6e2094ca4..8b77f427b 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -125,6 +125,8 @@ CLASS lcl_gui IMPLEMENTATION. CATCH lcx_exception INTO lx_exception. ROLLBACK WORK. MESSAGE lx_exception->mv_text TYPE 'S' DISPLAY LIKE 'E'. + CATCH lcx_cancel ##NO_HANDLER. + " Do nothing = gc_event_state-no_more_act ENDTRY. ENDMETHOD. "on_event diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 273e0f47c..664c58bcb 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -15,7 +15,7 @@ CLASS lcl_gui_router DEFINITION FINAL. it_postdata TYPE cnht_post_data_tab OPTIONAL EXPORTING ei_page TYPE REF TO lif_gui_page ev_state TYPE i - RAISING lcx_exception. + RAISING lcx_exception lcx_cancel. PRIVATE SECTION. @@ -45,35 +45,9 @@ CLASS lcl_gui_router DEFINITION FINAL. RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page RAISING lcx_exception. - METHODS abapgit_installation - RAISING lcx_exception. - - METHODS repo_purge - IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - RAISING lcx_exception. - - METHODS repo_remove - IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - RAISING lcx_exception. - - METHODS repo_pull - IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - RAISING lcx_exception. - - METHODS reset - IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - RAISING lcx_exception. - - METHODS create_branch - IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - RAISING lcx_exception. - - METHODS db_delete - IMPORTING iv_getdata TYPE clike - RAISING lcx_exception. - - METHODS db_save - IMPORTING it_postdata TYPE cnht_post_data_tab + 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. ENDCLASS. @@ -85,10 +59,13 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD on_event. - DATA: lv_url TYPE string, - lv_key TYPE lcl_persistence_repo=>ty_repo-key, - ls_item TYPE ty_item. + 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 @@ -99,21 +76,8 @@ CLASS lcl_gui_router IMPLEMENTATION. ei_page = get_page_by_name( iv_action ). ev_state = gc_event_state-new_page. WHEN 'background'. - lv_key = iv_getdata. - CREATE OBJECT ei_page TYPE lcl_gui_page_background - EXPORTING - iv_key = lv_key. + ei_page = get_page_background( lv_key ). ev_state = gc_event_state-new_page. - WHEN 'abapgithome'. - cl_gui_frontend_services=>execute( EXPORTING document = gc_abapgit_homepage - EXCEPTIONS OTHERS = 1 ). - IF sy-subrc <> 0. - lcx_exception=>raise( 'Opening page in external browser failed.' ). - ENDIF. - ev_state = gc_event_state-no_more_act. - WHEN 'abapgit_installation'. - abapgit_installation( ). - ev_state = gc_event_state-re_render. WHEN 'jump'. lcl_html_action_utils=>jump_decode( EXPORTING iv_string = iv_getdata IMPORTING ev_obj_type = ls_item-obj_type @@ -123,84 +87,82 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN 'diff'. ei_page = get_page_diff( iv_getdata ). ev_state = gc_event_state-new_page. - - " DB actions - WHEN 'db_display' OR 'db_edit'. - ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ). - IF iv_prev_page = 'PAGE_DB_DISPLAY'. - ev_state = gc_event_state-new_page_replacing. - ELSE. - ev_state = gc_event_state-new_page. - ENDIF. - WHEN 'db_delete'. - db_delete( iv_getdata = iv_getdata ). - ev_state = gc_event_state-re_render. - WHEN 'db_save'. - db_save( it_postdata ). - ev_state = gc_event_state-go_back. - - " Repository state actions - WHEN 'uninstall'. - lv_key = iv_getdata. - repo_purge( lv_key ). - ev_state = gc_event_state-re_render. - WHEN 'remove'. - lv_key = iv_getdata. - repo_remove( lv_key ). - ev_state = gc_event_state-re_render. - WHEN 'zipimport'. - lv_key = iv_getdata. - lcl_zip=>import( lv_key ). - ev_state = gc_event_state-re_render. - WHEN 'zipexport'. - lv_key = iv_getdata. - lcl_zip=>export( lcl_app=>repo_srv( )->get( lv_key ) ). - ev_state = gc_event_state-no_more_act. - WHEN 'files_commit'. "TODO refactor name ? - lv_key = iv_getdata. - lcl_zip=>export( io_repo = lcl_app=>repo_srv( )->get( lv_key ) - iv_zip = abap_false ). - ev_state = gc_event_state-no_more_act. - WHEN 'packagezip'. - lcl_popups=>repo_package_zip( ). - ev_state = gc_event_state-no_more_act. - WHEN 'transportzip'. - lcl_transport=>zip( ). - ev_state = gc_event_state-no_more_act. - WHEN 'refresh'. - lv_key = iv_getdata. - lcl_app=>repo_srv( )->get( lv_key )->refresh( ). - ev_state = gc_event_state-re_render. - - " explore page - WHEN 'install'. - lv_url = iv_getdata. - lcl_popups=>repo_clone( lv_url ). - ev_state = gc_event_state-re_render. - - " Repository online actions - WHEN 'pull'. - lv_key = iv_getdata. - repo_pull( lv_key ). - ev_state = gc_event_state-re_render. WHEN 'stage'. lv_key = iv_getdata. ei_page = get_page_stage( lv_key ). ev_state = gc_event_state-new_page_w_bookmark. - WHEN 'reset'. - lv_key = iv_getdata. - reset( lv_key ). - ev_state = gc_event_state-re_render. - WHEN 'create_branch'. - lv_key = iv_getdata. - create_branch( lv_key ). - ev_state = gc_event_state-re_render. 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. + 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. + 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. + 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. + lcl_services_abapgit=>open_abapgit_homepage( ). + ev_state = gc_event_state-no_more_act. + WHEN gc_action-abapgit_install. + lcl_services_abapgit=>install_abapgit( ). + ev_state = gc_event_state-re_render. + + " Repository services actions + 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. + + " Git actions + WHEN gc_action-git_pull. + lcl_services_git=>pull( lv_key ). + ev_state = gc_event_state-re_render. + WHEN gc_action-git_reset. + lcl_services_git=>reset( lv_key ). + ev_state = gc_event_state-re_render. + WHEN gc_action-git_branch_create. + lcl_services_git=>create_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. @@ -302,259 +264,6 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. - METHOD abapgit_installation. - - CONSTANTS lc_package_abapgit TYPE devclass VALUE '$ABAPGIT'. - CONSTANTS lc_package_plugins TYPE devclass VALUE '$ABAPGIT_PLUGINS'. - - DATA lv_text TYPE c LENGTH 100. - DATA lv_answer TYPE c LENGTH 1. - DATA lo_repo TYPE REF TO lcl_repo_online. - DATA lv_url TYPE string. - DATA lv_target_package TYPE devclass. - - lv_text = |Installing current version ABAPGit to package { lc_package_abapgit } | - && |and plugins to { lc_package_plugins }|. - - CALL FUNCTION 'POPUP_TO_CONFIRM' - EXPORTING - titlebar = 'Install abapGit' - text_question = lv_text - text_button_1 = 'Continue' - text_button_2 = 'Cancel' - default_button = '2' - display_cancel_button = abap_false - IMPORTING - answer = lv_answer ##no_text. - IF lv_answer <> '1'. - RETURN. ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - ENDIF. - - DO 2 TIMES. - CASE sy-index. - WHEN 1. - lv_url = 'https://github.com/larshp/abapGit.git'. - lv_target_package = lc_package_abapgit. - WHEN 2. - lv_url = 'https://github.com/larshp/abapGit-plugins.git' ##no_text. - lv_target_package = lc_package_plugins. - ENDCASE. - - IF abap_false = lcl_app=>repo_srv( )->is_repo_installed( - iv_url = lv_url - iv_target_package = lv_target_package ). - - lcl_sap_package=>create_local( lv_target_package ). - - lo_repo = lcl_app=>repo_srv( )->new_online( - iv_url = lv_url - iv_branch_name = 'refs/heads/master' "TODO replace with HEAD ? - iv_package = lv_target_package ) ##NO_TEXT. - - lo_repo->status( ). " check for errors - lo_repo->deserialize( ). - ENDIF. - ENDDO. - - COMMIT WORK. - - ENDMETHOD. "abapgit_installation - - METHOD repo_purge. - - DATA: lt_tadir TYPE ty_tadir_tt, - lv_count TYPE c LENGTH 3, - lv_answer TYPE c LENGTH 1, - lo_repo TYPE REF TO lcl_repo, - lv_package TYPE devclass, - lv_question TYPE c LENGTH 100. - - - lo_repo = lcl_app=>repo_srv( )->get( iv_key ). - - IF lo_repo->is_write_protected( ) = abap_true. - lcx_exception=>raise( 'Cannot purge. Local code is write-protected by repo config' ). - ENDIF. - - lv_package = lo_repo->get_package( ). - lt_tadir = lcl_tadir=>read( lv_package ). - - IF lines( lt_tadir ) > 0. - lv_count = lines( lt_tadir ). - - CONCATENATE 'This will delete all objects in package' lv_package - INTO lv_question - SEPARATED BY space. "#EC NOTEXT - - CONCATENATE lv_question '(' lv_count 'objects)' - INTO lv_question - SEPARATED BY space. "#EC NOTEXT - - CALL FUNCTION 'POPUP_TO_CONFIRM' - EXPORTING - titlebar = 'Uninstall' - text_question = lv_question - text_button_1 = 'Delete' - icon_button_1 = 'ICON_DELETE' - text_button_2 = 'Cancel' - icon_button_2 = 'ICON_CANCEL' - default_button = '2' - display_cancel_button = abap_false - IMPORTING - answer = lv_answer - EXCEPTIONS - text_not_found = 1 - OTHERS = 2. "#EC NOTEXT - IF sy-subrc <> 0. - lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ). - ENDIF. - - IF lv_answer = '2'. - RETURN. - ENDIF. - - lcl_objects=>delete( lt_tadir ). - - ENDIF. - - lcl_app=>repo_srv( )->delete( lo_repo ). - - COMMIT WORK. - - ENDMETHOD. "repo_purge - - METHOD repo_remove. - - DATA: lv_answer TYPE c LENGTH 1, - lo_repo TYPE REF TO lcl_repo, - lv_package TYPE devclass, - lv_question TYPE c LENGTH 100. - - - lo_repo = lcl_app=>repo_srv( )->get( iv_key ). - lv_package = lo_repo->get_package( ). - - CONCATENATE 'This will remove the repository reference to the package' - lv_package - INTO lv_question - SEPARATED BY space. "#EC NOTEXT - - CALL FUNCTION 'POPUP_TO_CONFIRM' - EXPORTING - titlebar = 'Remove' - text_question = lv_question - text_button_1 = 'Remove' - icon_button_1 = 'ICON_WF_UNLINK' - text_button_2 = 'Cancel' - icon_button_2 = 'ICON_CANCEL' - default_button = '2' - display_cancel_button = abap_false - IMPORTING - answer = lv_answer - EXCEPTIONS - text_not_found = 1 - OTHERS = 2. "#EC NOTEXT - IF sy-subrc <> 0. - lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ). - ENDIF. - - IF lv_answer = '2'. - RETURN. - ENDIF. - - lcl_app=>repo_srv( )->delete( lo_repo ). - - COMMIT WORK. - - ENDMETHOD. "repo_remove - - METHOD reset. - - DATA: lo_repo TYPE REF TO lcl_repo_online, - lv_answer TYPE c LENGTH 1. - - - lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). - - IF lo_repo->is_write_protected( ) = abap_true. - lcx_exception=>raise( 'Cannot reset. Local code is write-protected by repo config' ). - ENDIF. - - CALL FUNCTION 'POPUP_TO_CONFIRM' - EXPORTING - titlebar = 'Warning' - text_question = 'Reset local objects?' - text_button_1 = 'Ok' - icon_button_1 = 'ICON_OKAY' - text_button_2 = 'Cancel' - icon_button_2 = 'ICON_CANCEL' - default_button = '2' - display_cancel_button = abap_false - IMPORTING - answer = lv_answer - EXCEPTIONS - text_not_found = 1 - OTHERS = 2. "#EC NOTEXT - IF sy-subrc <> 0. - lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ). - ENDIF. - - IF lv_answer = '2'. - RETURN. - ENDIF. - - lo_repo->deserialize( ). - - ENDMETHOD. - - METHOD create_branch. - - DATA: lv_name TYPE string, - lv_cancel TYPE abap_bool, - lo_repo TYPE REF TO lcl_repo_online. - - - lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). - - lcl_popups=>create_branch_popup( - IMPORTING - ev_name = lv_name - ev_cancel = lv_cancel ). - IF lv_cancel = abap_true. - RETURN. - ENDIF. - - ASSERT lv_name CP 'refs/heads/+*'. - - lcl_git_porcelain=>create_branch( - io_repo = lo_repo - iv_name = lv_name - iv_from = lo_repo->get_sha1_local( ) ). - -* automatically switch to new branch - lo_repo->set_branch_name( lv_name ). - - MESSAGE 'Switched to new branch' TYPE 'S' ##NO_TEXT. - - ENDMETHOD. - - METHOD repo_pull. - - DATA: lo_repo TYPE REF TO lcl_repo_online. - - lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). - - IF lo_repo->is_write_protected( ) = abap_true. - lcx_exception=>raise( 'Cannot pull. Local code is write-protected by repo config' ). - ENDIF. - - lo_repo->refresh( ). - lo_repo->deserialize( ). - - COMMIT WORK. - - ENDMETHOD. "pull - METHOD get_page_stage. DATA: lo_repo TYPE REF TO lcl_repo_online, @@ -574,79 +283,12 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. - METHOD db_delete. + METHOD get_page_background. - DATA: lv_answer TYPE c LENGTH 1, - ls_key TYPE lcl_persistence_db=>ty_content. - - - ls_key = lcl_html_action_utils=>dbkey_decode( iv_getdata ). - - CALL FUNCTION 'POPUP_TO_CONFIRM' + CREATE OBJECT ri_page TYPE lcl_gui_page_background EXPORTING - titlebar = 'Warning' - text_question = 'Delete?' - text_button_1 = 'Ok' - icon_button_1 = 'ICON_DELETE' - text_button_2 = 'Cancel' - icon_button_2 = 'ICON_CANCEL' - default_button = '2' - display_cancel_button = abap_false - IMPORTING - answer = lv_answer - EXCEPTIONS - text_not_found = 1 - OTHERS = 2. "#EC NOTEXT - IF sy-subrc <> 0. - lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ). - ENDIF. + iv_key = iv_key. - IF lv_answer = '2'. - RETURN. - ENDIF. - - lcl_app=>db( )->delete( - iv_type = ls_key-type - iv_value = ls_key-value ). - - COMMIT WORK. - - ENDMETHOD. - - METHOD db_save. - - DATA: lv_string TYPE string, - ls_content TYPE lcl_persistence_db=>ty_content, - lt_fields TYPE tihttpnvp. - - FIELD-SYMBOLS: LIKE LINE OF lt_fields. - - - CONCATENATE LINES OF it_postdata INTO lv_string. - - lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'type' ##NO_TEXT. - ASSERT sy-subrc = 0. - ls_content-type = -value. - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'value' ##NO_TEXT. - ASSERT sy-subrc = 0. - ls_content-value = -value. - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'xmldata' ##NO_TEXT. - ASSERT sy-subrc = 0. - IF -value(1) <> '<'. - ls_content-data_str = -value+1. " hmm - ENDIF. - - lcl_app=>db( )->update( - iv_type = ls_content-type - iv_value = ls_content-value - iv_data = ls_content-data_str ). - - COMMIT WORK. - - ENDMETHOD. + ENDMETHOD. "get_page_background ENDCLASS. " lcl_gui_router \ No newline at end of file diff --git a/src/zabapgit_html_action_utils.prog.abap b/src/zabapgit_html_action_utils.prog.abap index 221f4cfcc..3aab00c3d 100644 --- a/src/zabapgit_html_action_utils.prog.abap +++ b/src/zabapgit_html_action_utils.prog.abap @@ -46,6 +46,10 @@ CLASS lcl_html_action_utils DEFINITION FINAL. IMPORTING iv_string TYPE clike RETURNING VALUE(rs_key) TYPE lcl_persistence_db=>ty_content. + CLASS-METHODS dbcontent_decode + IMPORTING it_postdata TYPE cnht_post_data_tab + RETURNING VALUE(rs_content) TYPE lcl_persistence_db=>ty_content. + CLASS-METHODS parse_commit_request IMPORTING it_postdata TYPE cnht_post_data_tab RETURNING VALUE(rs_fields) TYPE ty_commit_fields. @@ -54,6 +58,9 @@ 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 field_keys_to_upper + CHANGING ct_fields TYPE tihttpnvp. + ENDCLASS. "lcl_html_action_utils DEFINITION *----------------------------------------------------------------------* @@ -192,6 +199,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION. lv_string = iv_string. " type conversion lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). + field_keys_to_upper( CHANGING ct_fields = lt_fields ). READ TABLE lt_fields ASSIGNING WITH KEY name = 'TYPE'. IF sy-subrc = 0. @@ -205,6 +213,26 @@ CLASS lcl_html_action_utils IMPLEMENTATION. ENDMETHOD. "dbkey_decode + METHOD dbcontent_decode. + + DATA: lt_fields TYPE tihttpnvp, + lv_string TYPE string. + + FIELD-SYMBOLS: LIKE LINE OF lt_fields. + + CONCATENATE LINES OF it_postdata INTO lv_string. + rs_content = dbkey_decode( lv_string ). + + lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). + field_keys_to_upper( CHANGING ct_fields = lt_fields ). + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'XMLDATA' ##NO_TEXT. + IF sy-subrc = 0 AND -value(1) <> '<'. + rs_content-data_str = -value+1. " hmm + ENDIF. + + ENDMETHOD. "dbcontent_decode + METHOD parse_commit_request. CONSTANTS: lc_replace TYPE string VALUE '<>'. @@ -257,4 +285,14 @@ CLASS lcl_html_action_utils IMPLEMENTATION. ENDMETHOD. "repo_key_encode + METHOD field_keys_to_upper. + + FIELD-SYMBOLS LIKE LINE OF ct_fields. + + LOOP AT ct_fields ASSIGNING . + -name = to_upper( -name ). + ENDLOOP. + + ENDMETHOD. "field_keys_to_upper + ENDCLASS. "lcl_html_action_utils IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 31821f0be..ffb0725d6 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -47,19 +47,11 @@ CLASS lcl_objects IMPLEMENTATION. } { -obj_name } has been modified locally, overwrite object?|. - CALL FUNCTION 'POPUP_TO_CONFIRM' - EXPORTING - titlebar = 'Warning' - text_question = lv_question - display_cancel_button = abap_false - IMPORTING - answer = lv_answer - EXCEPTIONS - text_not_found = 1 - OTHERS = 2 ##NO_TEXT. - IF sy-subrc <> 0. - lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ). - ENDIF. + lv_answer = lcl_popups=>popup_to_confirm( + titlebar = 'Warning' + text_question = lv_question + display_cancel_button = abap_false + ). "#EC NOTEXT IF lv_answer = '2'. DELETE ct_results INDEX lv_index. @@ -85,24 +77,16 @@ CLASS lcl_objects IMPLEMENTATION. 'from package' ls_tadir-devclass INTO lv_question SEPARATED BY space. "#EC NOTEXT - CALL FUNCTION 'POPUP_TO_CONFIRM' - EXPORTING - titlebar = 'Warning' - text_question = lv_question - text_button_1 = 'Ok' - icon_button_1 = 'ICON_DELETE' - text_button_2 = 'Cancel' - icon_button_2 = 'ICON_CANCEL' - default_button = '2' - display_cancel_button = abap_false - IMPORTING - answer = lv_answer - EXCEPTIONS - text_not_found = 1 - OTHERS = 2. "#EC NOTEXT - IF sy-subrc <> 0. - lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ). - ENDIF. + lv_answer = lcl_popups=>popup_to_confirm( + titlebar = 'Warning' + text_question = lv_question + text_button_1 = 'Ok' + icon_button_1 = 'ICON_DELETE' + text_button_2 = 'Cancel' + icon_button_2 = 'ICON_CANCEL' + default_button = '2' + display_cancel_button = abap_false + ). "#EC NOTEXT IF lv_answer = '2'. rv_cancel = abap_true. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index c90c08f83..1a5fd4ec2 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -14,7 +14,7 @@ INTERFACE lif_gui_page. it_postdata TYPE cnht_post_data_tab OPTIONAL EXPORTING ei_page TYPE REF TO lif_gui_page ev_state TYPE i - RAISING lcx_exception. + RAISING lcx_exception lcx_cancel. METHODS render RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper @@ -141,7 +141,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ro_html->add( || ). ro_html->add( '' ). IF iv_interactive = abap_true. - ro_html->add_anchor( iv_act = |switch_branch?{ io_repo->get_key( ) }| + ro_html->add_anchor( iv_act = |{ gc_action-git_branch_switch }?{ io_repo->get_key( ) }| iv_txt = lv_text ). ELSE. ro_html->add( lv_text ). @@ -180,7 +180,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT diff --git a/src/zabapgit_page_db.prog.abap b/src/zabapgit_page_db.prog.abap index 871bbebf1..8aff9e1be 100644 --- a/src/zabapgit_page_db.prog.abap +++ b/src/zabapgit_page_db.prog.abap @@ -59,7 +59,7 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION. |
{ ms_key-value }
| ). ro_html->add( '' ). - ro_html->add_anchor( iv_txt = 'Edit' iv_act = |db_edit?{ lv_action }| ). + ro_html->add_anchor( iv_txt = 'Edit' iv_act = |{ gc_action-db_edit }?{ lv_action }| ). ro_html->add( '' ). ro_html->add( |
{ lv_data }
| ). @@ -170,7 +170,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. | { ms_key-value }| ). " Form - ro_html->add( '
' ). + ro_html->add( || ). ro_html->add( || ). ro_html->add( || ). ro_html->add( |