process_attrsearch

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


  METHOD process_attrsearch.
    TYPES lty_result TYPE c LENGTH 20.

    DATA:lo_contrep TYPE REF TO data,
         lo_docid   TYPE REF TO data,
         lo_pattern TYPE REF TO data.

    DATA: lv_fromoffset    TYPE i,
          lv_tooffset      TYPE i,
          lv_numresults    TYPE i,
          lv_casesens      TYPE string,
          lv_pversion      TYPE string ##NEEDED,
          lv_seckey        TYPE string,
          lv_smand         TYPE c LENGTH 1,
          lv_signature     TYPE c LENGTH 1,
          lv_casesensitive TYPE c LENGTH 1,
          lv_pos           TYPE string,
          lv_length        TYPE string,
          lv_cnt           TYPE i.

    DATA: ls_result TYPE scms_reatr.

    DATA: lt_results       TYPE STANDARD TABLE OF scms_reatr.

    FIELD-SYMBOLS: <lv_contrep> TYPE c,
                   <lv_docid>   TYPE c,
                   <lv_pattern> TYPE c.

    get_parameter_c( EXPORTING iv_name      = 'contRep'
                               iv_mandatory = 'S'
                     IMPORTING er_value     = lo_contrep ).
    get_parameter_c( EXPORTING iv_name      = 'docId'
                               iv_mandatory = 'S'
                     IMPORTING er_value     = lo_docid ).
    get_parameter_c( EXPORTING iv_name      = 'pattern'
                               iv_mandatory = 'X'
                               iv_raw_mode  = 'X'
                     IMPORTING er_value     = lo_pattern ).

    ASSIGN lo_contrep->* TO <lv_contrep>.
    ASSIGN lo_docid->*   TO <lv_docid>.
    ASSIGN lo_pattern->* TO <lv_pattern>.

    lv_fromoffset = get_parameter_i( iv_name    = 'fromOffset'
                                     iv_default = 0 ).
    lv_tooffset = get_parameter_i( iv_name    = 'toOffset'
                                   iv_default = -1 ).
    lv_numresults = get_parameter_i( iv_name    = 'numResults'
                                     iv_default = 1 ).

    lv_casesens = get_parameter( iv_name    = 'caseSensitive'
                                 iv_default = 'n' ).
    lv_pversion = get_parameter( iv_name      = 'pVersion'
                                 iv_mandatory = 'X' ).
    lv_seckey   = get_parameter( iv_name = 'secKey' ).

    IF lv_seckey IS NOT INITIAL.
      lv_smand = 'S'.
      get_parameter( iv_name      = 'accessMode'
                     iv_mandatory = lv_smand ).
      get_parameter( iv_name      = 'authId'
                     iv_mandatory = lv_smand ).
      get_parameter( iv_name      = 'expiration'
                     iv_mandatory = lv_smand ).
    ENDIF.

    check_parameter_consistence( ).
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    lv_signature = check_signature( iv_docprot = 'r' ).
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    IF lv_casesens = 'n'.
      lv_casesensitive = ' '.
    ELSEIF lv_casesens = 'y'.
      lv_casesensitive = 'X'.
    ELSE.
      gs_error-status_code = 400.
    ENDIF.

    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    attr_search(
      EXPORTING
        iv_crep_id        = <lv_contrep>
        iv_doc_id         = <lv_docid>
        iv_from_offset    = lv_fromoffset
        iv_to_offset      = lv_tooffset
        iv_case_sensitive = lv_casesensitive
        iv_num_results    = lv_numresults
        iv_signature      = lv_signature
        iv_security       = ' '
        iv_pattern        = <lv_pattern>
      IMPORTING
        et_result         = lt_results
    ).

    DESCRIBE TABLE lt_results LINES lv_cnt.
    gv_body = lv_cnt.
    CONDENSE gv_body NO-GAPS.
    CONCATENATE gv_body ';' INTO gv_body.

    LOOP AT lt_results INTO ls_result.
      lv_pos = ls_result-pos.
      lv_length = ls_result-length.
      CONDENSE lv_pos NO-GAPS.
      CONDENSE lv_length NO-GAPS.
      CONCATENATE gv_body lv_pos ';' lv_length ';' INTO gv_body.
    ENDLOOP.

    go_server->response->set_status( code   = 200
                                     reason = 'OK' ).