From fe595d78844190898415557b79e8752612d3a0b1 Mon Sep 17 00:00:00 2001 From: atsy Date: Sun, 5 Jun 2016 15:01:14 +0300 Subject: [PATCH] #238, lcl_html_action_utils, get_page_by_name unification --- zabapgit.prog.abap | 312 +++++++++++++++++++++++---------------------- 1 file changed, 160 insertions(+), 152 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index f0a3ccf6c..7ab00d853 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -73,6 +73,13 @@ TYPES: BEGIN OF ty_web_asset, END OF ty_web_asset. TYPES tt_web_assets TYPE STANDARD TABLE OF ty_web_asset WITH DEFAULT KEY. +TYPES: BEGIN OF ty_repo_file, + path TYPE string, + filename TYPE string, + is_changed TYPE abap_bool, + END OF ty_repo_file. +TYPES tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY. + CONSTANTS: BEGIN OF gc_type, commit TYPE ty_type VALUE 'commit', "#EC NOTEXT tree TYPE ty_type VALUE 'tree', "#EC NOTEXT @@ -13127,6 +13134,136 @@ CLASS lcl_persistence_repo DEFINITION FINAL. ENDCLASS. + +*----------------------------------------------------------------------* +* CLASS lcl_html_action_utils DEFINITION +*----------------------------------------------------------------------* +CLASS lcl_html_action_utils DEFINITION FINAL. + PUBLIC SECTION. + CLASS-METHODS jump_encode + IMPORTING iv_obj_type TYPE tadir-object + 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 lcx_exception. + + CLASS-METHODS file_encode + IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key + is_file TYPE ty_repo_file + RETURNING VALUE(rv_string) TYPE string. + + CLASS-METHODS file_decode + IMPORTING iv_string TYPE clike + EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key + es_file TYPE ty_repo_file + RAISING lcx_exception. +ENDCLASS. "lcl_html_action_utils DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_html_action_utils IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_html_action_utils IMPLEMENTATION. + + METHOD jump_encode. + + DATA: lt_fields TYPE tihttpnvp, + ls_field LIKE LINE OF lt_fields. + + + ls_field-name = 'TYPE'. + ls_field-value = iv_obj_type. + APPEND ls_field TO lt_fields. + + ls_field-name = 'NAME'. + ls_field-value = iv_obj_name. + APPEND ls_field TO lt_fields. + + rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ). + + ENDMETHOD. "jump_encode + + METHOD jump_decode. + + DATA: lt_fields TYPE tihttpnvp, + lv_string TYPE string. + + FIELD-SYMBOLS: LIKE LINE OF lt_fields. + + + lv_string = iv_string. " type conversion + lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'TYPE'. + IF sy-subrc = 0. + ev_obj_type = -value. + ELSE. + CLEAR ev_obj_type. + ENDIF. + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'NAME'. + IF sy-subrc = 0. + ev_obj_name = -value. + ELSE. + CLEAR ev_obj_name. + ENDIF. + + ENDMETHOD. "jump_decode + + METHOD file_encode. + + DATA: lt_fields TYPE tihttpnvp, + ls_field LIKE LINE OF lt_fields. + + ls_field-name = 'KEY'. + ls_field-value = iv_key. + APPEND ls_field TO lt_fields. + + ls_field-name = 'PATH'. + ls_field-value = is_file-path. + APPEND ls_field TO lt_fields. + + ls_field-name = 'FILENAME'. + ls_field-value = is_file-filename. + APPEND ls_field TO lt_fields. + + rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ). + + ENDMETHOD. "file_encode + + METHOD file_decode. + + DATA: lt_fields TYPE tihttpnvp, + lv_string TYPE string. + + FIELD-SYMBOLS: LIKE LINE OF lt_fields. + + CLEAR: ev_key, es_file. + lv_string = iv_string. " type conversion + lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'KEY'. + IF sy-subrc = 0. + ev_key = -value. + ENDIF. + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'PATH'. + IF sy-subrc = 0. + es_file-path = -value. + ENDIF. + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'FILENAME'. + IF sy-subrc = 0. + es_file-filename = -value. + ENDIF. + + ENDMETHOD. "file_decode + +ENDCLASS. "lcl_html_action_utils IMPLEMENTATION + *----------------------------------------------------------------------* * CLASS lcl_repo DEFINITION *----------------------------------------------------------------------* @@ -16016,8 +16153,10 @@ CLASS lcl_gui_router DEFINITION FINAL. RAISING lcx_exception. PRIVATE SECTION. - METHODS get_home_page RETURNING VALUE(ro_page) TYPE REF TO lif_gui_page. - METHODS get_explore_page RETURNING VALUE(ro_page) TYPE REF TO lif_gui_page. + METHODS get_page_by_name + IMPORTING iv_name TYPE clike + RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page + RAISING lcx_exception. METHODS abapgit_installation RAISING lcx_exception. @@ -18373,7 +18512,7 @@ CLASS lcl_gui IMPLEMENTATION. METHOD go_home. - on_event( action = 'home' ). + on_event( action = 'main' ). ENDMETHOD. @@ -18907,12 +19046,6 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super. METHODS lif_gui_page~get_assets REDEFINITION. PRIVATE SECTION. - TYPES: BEGIN OF ty_repo_file, - path TYPE string, - filename TYPE string, - is_changed TYPE abap_bool, - END OF ty_repo_file. - TYPES tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY. TYPES: BEGIN OF ty_repo_item, obj_type TYPE tadir-object, @@ -18978,28 +19111,6 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super. RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception. - METHODS jump_encode - IMPORTING iv_obj_type TYPE tadir-object - iv_obj_name TYPE tadir-obj_name - RETURNING VALUE(rv_string) TYPE string. - - METHODS jump_decode - IMPORTING iv_string TYPE clike - EXPORTING ev_obj_type TYPE tadir-object - ev_obj_name TYPE tadir-obj_name - RAISING lcx_exception. - - CLASS-METHODS file_encode - IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - is_file TYPE ty_repo_file - RETURNING VALUE(rv_string) TYPE string. - - CLASS-METHODS file_decode - IMPORTING iv_string TYPE clike - EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key - es_file TYPE ty_repo_file - RAISING lcx_exception. - CLASS-METHODS newoffline RAISING lcx_exception. @@ -20126,106 +20237,12 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. - METHOD jump_decode. - - DATA: lt_fields TYPE tihttpnvp, - lv_string TYPE string. - - FIELD-SYMBOLS: LIKE LINE OF lt_fields. - - - lv_string = iv_string. " type conversion - lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'TYPE'. - IF sy-subrc = 0. - ev_obj_type = -value. - ELSE. - CLEAR ev_obj_type. - ENDIF. - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'NAME'. - IF sy-subrc = 0. - ev_obj_name = -value. - ELSE. - CLEAR ev_obj_name. - ENDIF. - - ENDMETHOD. - - METHOD file_decode. - - DATA: lt_fields TYPE tihttpnvp, - lv_string TYPE string. - - FIELD-SYMBOLS: LIKE LINE OF lt_fields. - - CLEAR: ev_key, es_file. - lv_string = iv_string. " type conversion - lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'KEY'. - IF sy-subrc = 0. - ev_key = -value. - ENDIF. - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'PATH'. - IF sy-subrc = 0. - es_file-path = -value. - ENDIF. - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'FILENAME'. - IF sy-subrc = 0. - es_file-filename = -value. - ENDIF. - - ENDMETHOD. "struct_decode - - METHOD jump_encode. - - DATA: lt_fields TYPE tihttpnvp, - ls_field LIKE LINE OF lt_fields. - - - ls_field-name = 'TYPE'. - ls_field-value = iv_obj_type. - APPEND ls_field TO lt_fields. - - ls_field-name = 'NAME'. - ls_field-value = iv_obj_name. - APPEND ls_field TO lt_fields. - - rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ). - - ENDMETHOD. - - METHOD file_encode. - - DATA: lt_fields TYPE tihttpnvp, - ls_field LIKE LINE OF lt_fields. - - ls_field-name = 'KEY'. - ls_field-value = iv_key. - APPEND ls_field TO lt_fields. - - ls_field-name = 'PATH'. - ls_field-value = is_file-path. - APPEND ls_field TO lt_fields. - - ls_field-name = 'FILENAME'. - ls_field-value = is_file-filename. - APPEND ls_field TO lt_fields. - - rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ). - - ENDMETHOD. "encode_struct - METHOD render_obj_jump_link. DATA: lv_encode TYPE string. - lv_encode = jump_encode( iv_obj_type = iv_obj_type - iv_obj_name = iv_obj_name ). + lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = iv_obj_type + iv_obj_name = iv_obj_name ). rv_html = |{ iv_obj_name }|. @@ -20745,7 +20762,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ELSE. LOOP AT is_item-files INTO ls_file. IF ls_file-is_changed = abap_true. - lv_difflink = file_encode( iv_key = io_repo->get_key( ) is_file = ls_file ). + lv_difflink = lcl_html_action_utils=>file_encode( iv_key = io_repo->get_key( ) + is_file = ls_file ). ro_html->add( |diff| ). ELSE. ro_html->add( | | ). @@ -23528,11 +23546,8 @@ CLASS lcl_gui_router IMPLEMENTATION. CASE iv_action. - WHEN 'home'. - eo_page = get_home_page( ). - ev_state = gc_event_state-new_page. - WHEN 'explore'. - eo_page = get_explore_page( ). + WHEN 'main' OR 'explore' OR 'db' OR 'background'. + eo_page = get_page_by_name( iv_action ). ev_state = gc_event_state-new_page. WHEN 'abapgithome'. cl_gui_frontend_services=>execute( document = gc_abapgit_homepage ). @@ -23540,6 +23555,7 @@ CLASS lcl_gui_router IMPLEMENTATION. abapgit_installation( ). ev_state = gc_event_state-re_render. + " REPOSITORIES WHEN 'install'. lv_url = iv_getdata. @@ -23582,12 +23598,6 @@ CLASS lcl_gui_router IMPLEMENTATION. * WHEN 'newoffline'. * newoffline( ). * rv_state = gc_event_state-re_render. -* WHEN 'db'. -* CREATE OBJECT lo_db. -* lcl_gui=>get( )->call_page( lo_db ). -* WHEN 'background'. -* CREATE OBJECT lo_background. -* lcl_gui=>get( )->call_page( lo_background ). * WHEN 'zipimport'. * lv_key = iv_getdata. * lcl_zip=>import( lv_key ). @@ -23608,24 +23618,22 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDCASE. ENDMETHOD. " on_event - METHOD get_home_page. + METHOD get_page_by_name. - DATA lo_home TYPE REF TO lcl_gui_page_main. + DATA: lv_page_class TYPE string, + lv_message TYPE string. - CREATE OBJECT lo_home. - ro_page = lo_home. + lv_page_class = |LCL_GUI_PAGE_{ to_upper( iv_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 }|. + _raise lv_message. + ENDTRY. ENDMETHOD. " get_home_page - METHOD get_explore_page. - - DATA lo_page_explore TYPE REF TO lcl_gui_page_explore. - - CREATE OBJECT lo_page_explore. - ro_page = lo_page_explore. - - ENDMETHOD. " get_explore_page - METHOD abapgit_installation. CONSTANTS lc_package_abapgit TYPE devclass VALUE '$ABAPGIT'.