zip - unzip

CLASS APPLICATION DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      UNZIP,
      SET_PATH_LOCAL CHANGING VALUE(C_FILE) TYPE STRING,
      SET_PATH_SERVER CHANGING VALUE(C_FILE) TYPE STRING.

  PRIVATE SECTION.
    CLASS-DATA: FILE_CONTENT  TYPE STRING_TABLE,
                LOCATION_TYPE TYPE STRING,
                FILE_PATH     TYPE STRING.
    CLASS-DATA: O_ZIP TYPE REF TO CL_ABAP_ZIP.

    CLASS-METHODS:
      SHOW_ALV,
      READ_FILE IMPORTING CONTENT TYPE XSTRING,
      LOAD_ZIP_FILE.
ENDCLASS.

PARAMETERS: P_FILE TYPE STRING OBLIGATORY.

CLASS APPLICATION IMPLEMENTATION.

  METHOD UNZIP.
    LOAD_ZIP_FILE( ).
    LOOP AT O_ZIP->FILES INTO DATA(FILE).
      O_ZIP->GET(
      EXPORTING
        NAME = FILE-NAME
      IMPORTING
        CONTENT = DATA(CONTENT) ).

      READ_FILE( CONTENT ).
    ENDLOOP.
    SHOW_ALV( ).
  ENDMETHOD.

  METHOD READ_FILE.
    DATA FILE_STR TYPE STRING.
*    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
*      EXPORTING
*        BUFFER        = CONT
*      IMPORTING
*        OUTPUT_LENGTH = OLEN
*      TABLES
*        BINARY_TAB    = XTAB.
*    CALL FUNCTION 'SCMS_BINARY_TO_STRING'
*      EXPORTING
*        INPUT_LENGTH = OLEN
*      IMPORTING
*        TEXT_BUFFER  = LS
*      TABLES
*        BINARY_TAB   = XTAB
*      EXCEPTIONS
*        FAILED       = 1
*        OTHERS       = 2.
*    IF SY-SUBRC <> 0.
*      EXIT.
*    ENDIF.
    CL_ABAP_CONV_IN_CE=>CREATE( ENCODING = '8000' )->CONVERT( EXPORTING INPUT = CONTENT IMPORTING DATA = FILE_STR ).

    SPLIT FILE_STR AT CL_ABAP_CHAR_UTILITIES=>CR_LF INTO TABLE FILE_CONTENT.
  ENDMETHOD.

  METHOD LOAD_ZIP_FILE.
    DATA:FLEN  TYPE I,
         XHEAD TYPE XSTRING,
         XLINE TYPE X255,
         XTAB  TYPE TABLE OF X255.

    CASE LOCATION_TYPE.
      WHEN 'LOCAL'.
        CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD(
        EXPORTING
          FILENAME = FILE_PATH
          FILETYPE = 'BIN'
        IMPORTING
          FILELENGTH = FLEN
        CHANGING
          DATA_TAB = XTAB ).

        CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
          EXPORTING
            INPUT_LENGTH = FLEN
          IMPORTING
            BUFFER       = XHEAD
          TABLES
            BINARY_TAB   = XTAB
          EXCEPTIONS
            FAILED       = 1
            OTHERS       = 2.
      WHEN 'SERVER'.
        OPEN DATASET FILE_PATH FOR INPUT IN BINARY MODE.

        READ DATASET FILE_PATH INTO XHEAD.

        CLOSE DATASET FILE_PATH.
      WHEN OTHERS.
    ENDCASE.

    IF SY-SUBRC <> 0 OR XHEAD IS INITIAL.
      IF O_ZIP IS NOT INITIAL.
        FREE O_ZIP.
      ENDIF.
      RETURN.
    ENDIF.

    CREATE OBJECT O_ZIP.
    O_ZIP->LOAD( XHEAD ).
  ENDMETHOD.

  METHOD SHOW_ALV.
*    DATA: SALV      TYPE REF TO CL_SALV_TABLE,
*          FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS.
*    CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = SALV
*    CHANGING T_TABLE = FILE_CONTENT  ).
*    FUNCTIONS = SALV->GET_FUNCTIONS( ).
*    FUNCTIONS->SET_ALL( ABAP_TRUE ).
*    SALV->DISPLAY( ).
  ENDMETHOD.

  METHOD SET_PATH_LOCAL.
    DATA: FILES TYPE FILETABLE,
          RC    TYPE I.

    CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(
    CHANGING
      FILE_TABLE = FILES
      RC         = RC ).
    IF FILES[] IS NOT INITIAL.
      C_FILE = FILES[ 1 ].
      FILE_PATH = FILES[ 1 ].
      LOCATION_TYPE = 'LOCAL'.
    ENDIF.
  ENDMETHOD.

  METHOD SET_PATH_SERVER.
    DATA FILE TYPE DXFIELDS-LONGPATH.

    CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
      EXPORTING
*       I_LOCATION_FLAG       = ' ' => A: Application server, P: Presentation server
        I_SERVER       = ''
        I_PATH         = '/nas/shareif/BWH/500/bw_upload/BPC_Other/temp'
*       FILEMASK       = '*.*'
*       FILEOPERATION  = 'R'
      IMPORTING
*       O_LOCATION_FLAG       =
*       O_SERVER       =
        O_PATH         = FILE
*       ABEND_FLAG     =
      EXCEPTIONS
        RFC_ERROR      = 1
        ERROR_WITH_GUI = 2
        OTHERS         = 3.
    IF SY-SUBRC = 0.
      FILE_PATH = FILE.
      C_FILE = FILE_PATH.
      LOCATION_TYPE = 'SERVER'.
    ENDIF.

*    CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
**      EXPORTING
**       DIRECTORY        = 'X'
**        FILEMASK         = 'DIRECTORY'
*      IMPORTING
*        SERVERFILE       = FILE_PATH
*      EXCEPTIONS
*        CANCELED_BY_USER = 1
*        OTHERS           = 2.
*
*    IF SY-SUBRC = 0.
*      C_FILE = FILE_PATH.
*      LOCATION_TYPE = 'SERVER'.
*    ENDIF.

  ENDMETHOD.
ENDCLASS.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*  APPLICATION=>SET_PATH_LOCAL( CHANGING C_FILE = P_FILE ).
  APPLICATION=>SET_PATH_SERVER( CHANGING C_FILE = P_FILE ).

START-OF-SELECTION.
  APPLICATION=>UNZIP( ).

Comments