All files / test/src/web zcl_abapgit_web.clas.abap

100% Statements 168/168
100% Branches 0/0
100% Functions 0/0
100% Lines 168/168

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 1691x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
CLASS zcl_abapgit_web DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .
 
  PUBLIC SECTION.
    CLASS-METHODS handle
      IMPORTING
        ii_request  TYPE REF TO zif_abapgit_web_request
        ii_response TYPE REF TO zif_abapgit_web_response
      RAISING
        zcx_abapgit_exception.
 
  PROTECTED SECTION.
 
    CONSTANTS c_base      TYPE string VALUE '/sap/zabapgit/' ##NO_TEXT.
 
    CLASS-DATA go_viewer   TYPE REF TO zcl_abapgit_html_viewer_web .
    CLASS-DATA go_gui      TYPE REF TO zcl_abapgit_gui .
    CLASS-DATA gi_request  TYPE REF TO zif_abapgit_web_request.
    CLASS-DATA gi_response TYPE REF TO zif_abapgit_web_response.
 
    CLASS-METHODS sapevent.
    CLASS-METHODS redirect.
    CLASS-METHODS search_asset
      RETURNING
        VALUE(rv_found) TYPE abap_bool
      RAISING
        zcx_abapgit_exception.
  PRIVATE SECTION.
ENDCLASS.
 
 
 
CLASS zcl_abapgit_web IMPLEMENTATION.
 
  METHOD handle.
 
    DATA lv_found TYPE abap_bool.
    DATA lv_path  TYPE string.
 
    gi_request = ii_request.
    gi_response = ii_response.
 
    IF go_viewer IS INITIAL.
      zcl_abapgit_web_setup=>setup( ).
 
      CREATE OBJECT go_viewer
        EXPORTING
          ii_request  = ii_request
          ii_response = ii_response.
      zcl_abapgit_ui_core_injector=>set_html_viewer( go_viewer ).
 
      go_gui = zcl_abapgit_ui_factory=>get_gui( ).
    ENDIF.
 
    lv_found = search_asset( ).
    IF lv_found = abap_true.
      RETURN.
    ENDIF.
 
    lv_path = cl_http_utility=>unescape_url( ii_request->get_header_field( '~path' ) ).
    IF lv_path = '/sap/zabapgit'.
      redirect( ).
    ELSEIF lv_path = c_base.
      go_gui->go_home( zif_abapgit_definitions=>c_action-go_home ).
    ELSEIF lv_path = |{ c_base }css/bundle.css|.
      go_viewer->zif_abapgit_html_viewer~show_url( |css/bundle.css| ).
    ELSEIF lv_path CP |{ c_base }sapevent:+*|.
      sapevent( ).
    ELSE.
      ii_response->set_content_type( 'text/html' ).
      ii_response->set_cdata( 'handle_request, unknown path ' && lv_path ).
    ENDIF.
 
  ENDMETHOD.
 
  METHOD redirect.
 
    DATA lv_html TYPE string.
 
    lv_html =
      |<!DOCTYPE html>\n| &&
      |<html>\n| &&
      |   <head>\n| &&
      |      <title>HTML Meta Tag</title>\n| &&
      |      <meta http-equiv = "refresh" content = "0; url = { c_base }" />\n| &&
      |   </head>\n| &&
      |   <body>\n| &&
      |      <p>Redirecting</p>\n| &&
      |   </body>\n| &&
      |</html>|.
 
    gi_response->set_cdata( lv_html ).
 
  ENDMETHOD.
 
 
  METHOD sapevent.
 
* todo, parse and pass data
* todo, respect GET and POST
 
    DATA: lv_action   TYPE c LENGTH 100,
          lv_getdata  TYPE c LENGTH 100,
          lv_method   TYPE string,
          lv_body     TYPE string,
          lv_value    TYPE string,
          lt_postdata TYPE zif_abapgit_html_viewer=>ty_post_data.
 
    lv_value = gi_request->get_header_field( '~request_uri' ).
 
    REPLACE FIRST OCCURRENCE OF c_base IN lv_value WITH ''.
 
    FIND REGEX '^sapevent:([\w-]+)' IN lv_value SUBMATCHES lv_action.
 
    FIND REGEX '\?([\w=&%.]+)' IN lv_value SUBMATCHES lv_getdata.
 
    lv_method = gi_request->get_method( ).
    IF lv_method = 'POST'.
      lv_body = gi_request->get_cdata( ).
 
      zcl_abapgit_convert=>string_to_tab(
        EXPORTING
          iv_str = lv_body
        IMPORTING
          et_tab = lt_postdata ).
    ENDIF.
 
    go_gui->on_event(
      action   = lv_action
      getdata  = lv_getdata
      postdata = lt_postdata ).
 
* sdf     getdata     = iv_getdata
* sdf     postdata    = VALUE #( )
* sdf     query_table = VALUE #( ).
 
  ENDMETHOD.
 
 
  METHOD search_asset.
 
    DATA ls_asset  TYPE zif_abapgit_gui_asset_manager=>ty_web_asset.
    DATA lv_search TYPE string.
    DATA lv_path   TYPE string.
    DATA li_assets TYPE REF TO zif_abapgit_gui_asset_manager.
 
 
    lv_path = cl_http_utility=>unescape_url( gi_request->get_header_field( '~path' ) ).
 
    li_assets = zcl_abapgit_ui_factory=>get_asset_manager( ).
 
    IF lv_path CP |{ c_base }+*|.
      lv_search = lv_path.
      REPLACE FIRST OCCURRENCE OF c_base IN lv_search WITH ''.
      TRY.
          ls_asset = li_assets->get_asset( lv_search ).
          gi_response->set_content_type( |{ ls_asset-type }/{ ls_asset-subtype }| ).
          gi_response->set_xdata( ls_asset-content ).
          rv_found = abap_true.
        CATCH zcx_abapgit_exception.
          rv_found = abap_false.
      ENDTRY.
    ENDIF.
 
  ENDMETHOD.
ENDCLASS.