process_delete

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


  METHOD process_delete.

    DATA: lo_contrep       TYPE REF TO data,
          lo_docid         TYPE REF TO data,
          lo_abap_sdk_excp TYPE REF TO /goog/cx_sdk,
          lo_gcs           TYPE REF TO zgoog_cl_storage_cont_repo_v1,
          lo_compid        TYPE REF TO data.

    DATA: lv_pversion       TYPE string ##NEEDED,
          lv_seckey         TYPE string,
          lv_smand          TYPE c LENGTH 1,
          lv_signature      TYPE c LENGTH 1,
          lv_p_bucket       TYPE string,
          lv_object_name    TYPE string,
          lv_ret_code       TYPE i,
          lv_err_text       TYPE string,
          lv_managed_folder TYPE string,

          lv_p_object       TYPE string,
          lv_delete_error   TYPE flag,
          lv_msg            TYPE string.

    DATA: ls_object_list    TYPE /goog/cl_storage_v1=>ty_016.

    FIELD-SYMBOLS: <lv_contrep> TYPE c,
                   <lv_docid>   TYPE c,
                   <lv_compid>  TYPE c,
                   <ls_item>    TYPE /goog/cl_storage_v1=>ty_013.

    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      = 'compId'
                               iv_mandatory = 's'
                     IMPORTING er_value     = lo_compid ).

    ASSIGN lo_contrep->* TO <lv_contrep>.
    ASSIGN lo_docid->*   TO <lv_docid>.
    ASSIGN lo_compid->*  TO <lv_compid>.

    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 = 'd' ).
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    load_goog_repo_config( <lv_contrep> ).
    IF gs_error IS NOT INITIAL.
      RETURN.
    ENDIF.

    lv_p_bucket = gs_repo_config-bucket.

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

        IF <lv_compid> IS NOT INITIAL.

          lv_object_name = <lv_docid> && '/' && <lv_docid> && '-' && <lv_compid>.

          lv_object_name = cl_http_utility=>escape_url( lv_object_name ).

          lo_gcs->delete_objects( EXPORTING iv_p_bucket = lv_p_bucket
                                            iv_p_object = lv_object_name
                                  IMPORTING ev_ret_code = lv_ret_code
                                            ev_err_text = lv_err_text ).
        ELSE.

          lv_managed_folder = <lv_docid> && '/'.

          lo_gcs->list_objects( EXPORTING iv_q_prefix = lv_managed_folder
                                          iv_p_bucket = lv_p_bucket
                                IMPORTING es_output   = ls_object_list
                                          ev_ret_code = lv_ret_code
                                          ev_err_text = lv_err_text ).

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

          LOOP AT ls_object_list-items ASSIGNING <ls_item>.
            lv_p_object = cl_http_utility=>escape_url( <ls_item>-name ).
            lo_gcs->delete_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 ).

            IF lo_gcs->is_success( lv_ret_code ) <> abap_true.
              lv_delete_error = abap_true.
              set_error( iv_code = lv_ret_code
                         iv_text = lv_err_text ).
              RETURN.
            ENDIF.
          ENDLOOP.
          IF sy-subrc = 4.
*            set_error( iv_code = '404'
*                       iv_text = 'Empty folder' ) ##NO_TEXT.
            "Delete the folder
            lo_gcs->delete_objects( EXPORTING iv_p_bucket = lv_p_bucket
                                              iv_p_object = lv_managed_folder
                                    IMPORTING ev_ret_code = lv_ret_code
                                              ev_err_text = lv_err_text ).
            IF lo_gcs->is_success( lv_ret_code ) <> abap_true.
              lv_delete_error = abap_true.
              set_error( iv_code = lv_ret_code
                         iv_text = lv_err_text ).
              RETURN.
            ENDIF.
          ENDIF.

          IF lv_delete_error IS NOT INITIAL.
            RETURN.
          ENDIF.
        ENDIF.

        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.

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