attr_search

in src/zgoog_cl_content_repo_gcs.clas.abap [0:0]


  METHOD attr_search.
    TYPES:
      BEGIN OF lty_off,
        pos TYPE i,
      END OF lty_off,

      ltt_off TYPE STANDARD TABLE OF lty_off.

    DATA: lo_gcs           TYPE REF TO zgoog_cl_storage_cont_repo_v1,
          lo_abap_sdk_excp TYPE REF TO /goog/cx_sdk.

    DATA: lv_p_bucket       TYPE string,
          lv_case_sensitive TYPE c LENGTH 1,
          lv_codepage       TYPE abap_encoding,
          lv_offset         TYPE i,
          lv_max_offset     TYPE i,
          lv_pattern        TYPE xstring,
          lv_upper          TYPE xstring,
          lv_lower          TYPE xstring,
          lv_pos            TYPE i,
          lv_p_object       TYPE string,
          lv_ret_code       TYPE i,
          lv_err_text       TYPE string,
          lv_data_buffer    TYPE xstring,
          lv_descr_buffer   TYPE xstring,
          lv_msg            TYPE string,
          lv_from           TYPE i,
          lv_to             TYPE i,
          lv_reverse        TYPE c LENGTH 1.

    DATA: ls_off            TYPE lty_off.

    DATA: lt_off            TYPE ltt_off.

    load_goog_repo_config( iv_crep_id ).
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    lv_p_bucket = gs_repo_config.

    TRY.
        CREATE OBJECT lo_gcs EXPORTING iv_key_name = gs_repo_config-keyname.

        lo_gcs->add_common_qparam( iv_name  = 'alt'
                                   iv_value = 'media' ).

        lv_p_object = iv_doc_id && '/' && iv_doc_id && '-' && 'data'.

        lo_gcs->get_objects( EXPORTING iv_p_bucket = lv_p_bucket
                                       iv_p_object = lv_p_object
                             IMPORTING ev_ret_code = lv_ret_code
                                       ev_err_text = lv_err_text
                                       es_raw      = lv_data_buffer ).

        IF lo_gcs->is_success( lv_ret_code ) <> abap_true.
          set_error( iv_code = lv_ret_code
                     iv_text = lv_err_text ).
          RETURN.
        ENDIF.

        lv_p_object = iv_doc_id && '/' && iv_doc_id && '-' && 'descr'.

        lo_gcs->get_objects( EXPORTING iv_p_bucket = lv_p_bucket
                                       iv_p_object = lv_p_object
                             IMPORTING ev_ret_code = lv_ret_code
                                       ev_err_text = lv_err_text
                                       es_raw      = lv_descr_buffer ).

        IF lo_gcs->is_success( lv_ret_code ) <> abap_true.
          set_error( iv_code = lv_ret_code
                     iv_text = lv_err_text ).
          RETURN.
        ENDIF.

      CATCH /goog/cx_sdk INTO lo_abap_sdk_excp.
        lv_msg = lo_abap_sdk_excp->get_text( ).
        set_error( iv_code = 400
                   iv_text = lv_msg ).
        RETURN.
    ENDTRY.

    IF iv_from_offset > 0 AND iv_from_offset <= iv_to_offset OR iv_to_offset < 0.
      lv_from = iv_from_offset.
      lv_to   = lv_offset.
      lv_reverse = space.
    ELSE.
      lv_from = lv_offset.
      lv_to   = iv_from_offset.
      lv_reverse = 'X'.
    ENDIF.

    attr_search_inner( EXPORTING iv_from           = lv_from
                                 iv_to             = lv_to
                                 iv_case_sensitive = iv_case_sensitive
                                 iv_reverse        = lv_reverse
                                 iv_data_buffer    = lv_data_buffer
                                 iv_descr_buffer   = lv_descr_buffer
                                 iv_pattern        = iv_pattern
                       CHANGING  ct_result         = et_result ).