CLASS z2ui5_cl_http_handler DEFINITION PUBLIC CREATE PROTECTED. PUBLIC SECTION. CLASS-METHODS run IMPORTING server TYPE REF TO object OPTIONAL req TYPE REF TO object OPTIONAL res TYPE REF TO object OPTIONAL config TYPE z2ui5_if_types=>ty_s_http_config OPTIONAL PREFERRED PARAMETER server. CLASS-METHODS factory_cloud IMPORTING req TYPE REF TO object res TYPE REF TO object RETURNING VALUE(result) TYPE REF TO z2ui5_cl_http_handler. CLASS-METHODS factory IMPORTING server TYPE REF TO object OPTIONAL req TYPE REF TO object OPTIONAL res TYPE REF TO object OPTIONAL PREFERRED PARAMETER server RETURNING VALUE(result) TYPE REF TO z2ui5_cl_http_handler. CLASS-METHODS _http_post IMPORTING is_req TYPE z2ui5_if_core_types=>ty_s_http_req RETURNING VALUE(result) TYPE z2ui5_if_core_types=>ty_s_http_res. CLASS-METHODS _http_get IMPORTING VALUE(is_config) TYPE z2ui5_if_types=>ty_s_http_config RETURNING VALUE(result) TYPE string. METHODS main IMPORTING s_config TYPE z2ui5_if_types=>ty_s_http_config OPTIONAL. CLASS-METHODS _main IMPORTING is_config TYPE z2ui5_if_types=>ty_s_http_config is_req TYPE z2ui5_if_core_types=>ty_s_http_req RETURNING VALUE(result) TYPE z2ui5_if_core_types=>ty_s_http_res. CLASS-METHODS get_request IMPORTING server TYPE REF TO object OPTIONAL req TYPE REF TO object OPTIONAL res TYPE REF TO object OPTIONAL PREFERRED PARAMETER server RETURNING VALUE(result) TYPE z2ui5_if_core_types=>ty_s_http_req. CLASS-METHODS get_response IMPORTING server TYPE REF TO object OPTIONAL req TYPE REF TO object OPTIONAL res TYPE REF TO object OPTIONAL is_res TYPE z2ui5_if_core_types=>ty_s_http_res. PROTECTED SECTION. CLASS-DATA so_sticky_handler TYPE REF TO z2ui5_cl_core_handler. DATA mo_server TYPE REF TO z2ui5_cl_abap_api_http. DATA ms_req TYPE z2ui5_if_core_types=>ty_s_http_req. DATA ms_res TYPE z2ui5_if_core_types=>ty_s_http_res. DATA ms_config TYPE z2ui5_if_types=>ty_s_http_config. METHODS set_request. METHODS set_response. PRIVATE SECTION. ENDCLASS. CLASS z2ui5_cl_http_handler IMPLEMENTATION. METHOD main. ms_config = s_config. set_request( ). CASE ms_req-method. WHEN `HEAD`. mo_server->set_session_stateful( 0 ). RETURN. WHEN OTHERS. ms_res = _main( is_req = ms_req is_config = ms_config ). ENDCASE. set_response( ). ENDMETHOD. METHOD factory. result = NEW #( ). IF server IS BOUND. result->mo_server = z2ui5_cl_abap_api_http=>factory( server ). ELSEIF req IS BOUND AND res IS BOUND. result = factory_cloud( req = req res = res ). ELSE. ASSERT 1 = `EMPTY_HTTP_HANDLER_CALL_ERROR`. ENDIF. ENDMETHOD. METHOD factory_cloud. result = NEW #( ). result->mo_server = z2ui5_cl_abap_api_http=>factory_cloud( req = req res = res ). ENDMETHOD. METHOD _http_get. IF is_config-title IS INITIAL. is_config-title = `abap2UI5`. ENDIF. IF is_config-theme IS INITIAL. is_config-theme = `sap_horizon`. ENDIF. IF is_config-src IS INITIAL. is_config-src = `https://sdk.openui5.org/resources/sap-ui-cachebuster/sap-ui-core.js`. * ms_req_config-src = `https://sdk.openui5.org/1.71.67/resources/sap-ui-core.js`. * ms_req_config-src = `https://sdk.openui5.org/nightly/2/resources/sap-ui-core.js`. ENDIF. IF is_config-content_security_policy IS INITIAL. is_config-content_security_policy = ||. ENDIF. IF is_config-styles_css IS INITIAL. DATA(lv_style_css) = z2ui5_cl_app_style_css=>get( ). ELSE. lv_style_css = is_config-styles_css. ENDIF. result = || && |\n| && || && |\n| && || && |\n| && |{ is_config-content_security_policy }\n| && | | && |\n| && | | && |\n| && | | && |\n| && | { is_config-title } \n| && | \n| && || && |\n| && || && |\n| && || && |\n| && |
| && |\n| && | |. ENDMETHOD. METHOD run. DATA(lo_handler) = factory( server = server req = req res = res ). lo_handler->main( config ). ENDMETHOD. METHOD set_request. ms_req-body = mo_server->get_cdata( ). ms_req-method = mo_server->get_method( ). ENDMETHOD. METHOD set_response. mo_server->set_cdata( ms_res-body ). mo_server->set_header_field( n = `cache-control` v = `no-cache` ). mo_server->set_status( code = 200 reason = `success` ). " transform cookie to header based contextid handling IF ms_res-s_stateful-switched = abap_true. mo_server->set_session_stateful( ms_res-s_stateful-active ). IF mo_server->get_header_field( 'sap-contextid-accept' ) = 'header'. DATA(lv_contextid) = mo_server->get_response_cookie( 'sap-contextid' ). IF lv_contextid IS NOT INITIAL. mo_server->delete_response_cookie( 'sap-contextid' ). mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ). ENDIF. ENDIF. ELSE. lv_contextid = mo_server->get_header_field( 'sap-contextid' ). IF lv_contextid IS NOT INITIAL. mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ). ENDIF. ENDIF. ENDMETHOD. METHOD _http_post. IF so_sticky_handler IS NOT BOUND. DATA(lo_post) = NEW z2ui5_cl_core_handler( is_req-body ). ELSE. lo_post = so_sticky_handler. lo_post->mv_request_json = is_req-body. ENDIF. result = lo_post->main( ). TRY. IF lo_post IS BOUND. DATA(li_app) = CAST z2ui5_if_app( lo_post->mo_action->mo_app->mo_app ). IF li_app->check_sticky = abap_true. so_sticky_handler = lo_post. ELSE. CLEAR so_sticky_handler. ENDIF. ENDIF. CATCH cx_root. ENDTRY. ENDMETHOD. METHOD _main. CASE is_req-method. WHEN `GET`. result-body = _http_get( is_config ). WHEN `POST`. result = _http_post( is_req ). ENDCASE. ENDMETHOD. METHOD get_request. DATA(lo_handler) = factory( server = server req = req res = res ). result-body = lo_handler->mo_server->get_cdata( ). result-method = lo_handler->mo_server->get_method( ). ENDMETHOD. METHOD get_response. DATA(lo_handler) = factory( server = server req = req res = res ). lo_handler->mo_server->set_cdata( is_res-body ). lo_handler->mo_server->set_header_field( n = `cache-control` v = `no-cache` ). lo_handler->mo_server->set_status( code = 200 reason = `success` ). " transform cookie to header based contextid handling IF is_res-s_stateful-switched = abap_true. lo_handler->mo_server->set_session_stateful( is_res-s_stateful-active ). IF lo_handler->mo_server->get_header_field( 'sap-contextid-accept' ) = 'header'. DATA(lv_contextid) = lo_handler->mo_server->get_response_cookie( 'sap-contextid' ). IF lv_contextid IS NOT INITIAL. lo_handler->mo_server->delete_response_cookie( 'sap-contextid' ). lo_handler->mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ). ENDIF. ENDIF. ELSE. lv_contextid = lo_handler->mo_server->get_header_field( 'sap-contextid' ). IF lv_contextid IS NOT INITIAL. lo_handler->mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ). ENDIF. ENDIF. ENDMETHOD. ENDCLASS.