abapGit/src/zabapgit_persistence_old.prog.abap
2017-06-10 08:04:00 +00:00

570 lines
16 KiB
ABAP

*&---------------------------------------------------------------------*
*& Include ZABAPGIT_PERSISTENCE_OLD
*&---------------------------------------------------------------------*
CLASS lcl_persist_migrate DEFINITION DEFERRED.
*----------------------------------------------------------------------*
* CLASS lcl_persistence DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_persistence DEFINITION FINAL FRIENDS lcl_persist_migrate.
* this class is obsolete, use LCL_PERSISTENCE_REPO instead
PRIVATE SECTION.
TYPES: BEGIN OF ty_repo_persi,
url TYPE string,
branch_name TYPE string,
sha1 TYPE lif_defs=>ty_sha1,
package TYPE devclass,
offline TYPE sap_bool,
END OF ty_repo_persi.
TYPES: ty_repos_persi_tt TYPE STANDARD TABLE OF ty_repo_persi WITH DEFAULT KEY.
METHODS list
RETURNING VALUE(rt_repos) TYPE ty_repos_persi_tt
RAISING lcx_exception.
METHODS update
IMPORTING iv_url TYPE ty_repo_persi-url
iv_branch_name TYPE ty_repo_persi-branch_name
iv_branch TYPE lif_defs=>ty_sha1
RAISING lcx_exception.
METHODS add
IMPORTING iv_url TYPE string
iv_branch_name TYPE string
iv_branch TYPE lif_defs=>ty_sha1 OPTIONAL
iv_package TYPE devclass
iv_offline TYPE sap_bool DEFAULT abap_false
RAISING lcx_exception.
METHODS delete
IMPORTING iv_url TYPE ty_repo_persi-url
iv_branch_name TYPE ty_repo_persi-branch_name
RAISING lcx_exception.
METHODS read_text_online
RETURNING VALUE(rt_repos) TYPE ty_repos_persi_tt
RAISING lcx_exception.
METHODS save_text_online
IMPORTING it_repos TYPE ty_repos_persi_tt
RAISING lcx_exception.
METHODS header_online
RETURNING VALUE(rs_header) TYPE thead.
METHODS read_text_offline
RETURNING VALUE(rt_repos) TYPE ty_repos_persi_tt
RAISING lcx_exception.
METHODS save_text_offline
IMPORTING it_repos TYPE ty_repos_persi_tt
RAISING lcx_exception.
METHODS header_offline
RETURNING VALUE(rs_header) TYPE thead.
METHODS read_text
IMPORTING is_header TYPE thead
RETURNING VALUE(rt_lines) TYPE tlinetab
RAISING lcx_exception.
METHODS save_text
IMPORTING is_header TYPE thead
it_lines TYPE tlinetab
RAISING lcx_exception.
ENDCLASS. "lcl_persistence DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_persistence IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_persistence IMPLEMENTATION.
METHOD save_text.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
header = is_header
TABLES
lines = it_lines
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5.
IF sy-subrc <> 0.
ROLLBACK WORK. "#EC CI_ROLLBACK
lcx_exception=>raise( 'error from SAVE_TEXT' ).
ENDIF.
ENDMETHOD. "save_text
METHOD header_online.
rs_header-tdid = 'ST'.
rs_header-tdspras = lif_defs=>gc_english.
rs_header-tdname = 'ZABAPGIT'.
rs_header-tdobject = 'TEXT'.
ENDMETHOD. "header
METHOD header_offline.
rs_header-tdid = 'ST'.
rs_header-tdspras = lif_defs=>gc_english.
rs_header-tdname = 'ZABAPGIT_OFFLINE'.
rs_header-tdobject = 'TEXT'.
ENDMETHOD. "header_offline
METHOD delete.
DATA: lt_repos TYPE ty_repos_persi_tt.
lt_repos = list( ).
DELETE lt_repos WHERE url = iv_url AND branch_name = iv_branch_name.
IF sy-subrc <> 0.
lcx_exception=>raise( 'repo not found, delete' ).
ENDIF.
save_text_online( lt_repos ).
save_text_offline( lt_repos ).
ENDMETHOD. "delete
METHOD save_text_online.
DATA: lt_lines TYPE TABLE OF tline.
FIELD-SYMBOLS: <ls_repo> LIKE LINE OF it_repos,
<ls_line> LIKE LINE OF lt_lines.
LOOP AT it_repos ASSIGNING <ls_repo> WHERE offline = abap_false.
APPEND INITIAL LINE TO lt_lines ASSIGNING <ls_line>.
<ls_line>-tdformat = '*'.
<ls_line>-tdline = <ls_repo>-url.
APPEND INITIAL LINE TO lt_lines ASSIGNING <ls_line>.
<ls_line>-tdformat = '*'.
<ls_line>-tdline = <ls_repo>-branch_name.
APPEND INITIAL LINE TO lt_lines ASSIGNING <ls_line>.
<ls_line>-tdformat = '*'.
<ls_line>-tdline = <ls_repo>-sha1.
APPEND INITIAL LINE TO lt_lines ASSIGNING <ls_line>.
<ls_line>-tdformat = '*'.
<ls_line>-tdline = <ls_repo>-package.
ENDLOOP.
save_text( is_header = header_online( )
it_lines = lt_lines ).
COMMIT WORK.
ENDMETHOD. "save_text
METHOD save_text_offline.
DATA: lt_lines TYPE TABLE OF tline.
FIELD-SYMBOLS: <ls_repo> LIKE LINE OF it_repos,
<ls_line> LIKE LINE OF lt_lines.
LOOP AT it_repos ASSIGNING <ls_repo> WHERE offline = abap_true.
APPEND INITIAL LINE TO lt_lines ASSIGNING <ls_line>.
<ls_line>-tdformat = '*'.
<ls_line>-tdline = <ls_repo>-url.
APPEND INITIAL LINE TO lt_lines ASSIGNING <ls_line>.
<ls_line>-tdformat = '*'.
<ls_line>-tdline = <ls_repo>-package.
ENDLOOP.
save_text( is_header = header_offline( )
it_lines = lt_lines ).
COMMIT WORK.
ENDMETHOD. "save_text_offline
METHOD add.
DATA: lt_repos TYPE ty_repos_persi_tt.
FIELD-SYMBOLS: <ls_repo> LIKE LINE OF lt_repos.
ASSERT NOT iv_url IS INITIAL.
ASSERT NOT iv_package IS INITIAL.
lt_repos = list( ).
READ TABLE lt_repos WITH KEY url = iv_url branch_name = iv_branch_name
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
lcx_exception=>raise( 'already inserted' ).
ENDIF.
APPEND INITIAL LINE TO lt_repos ASSIGNING <ls_repo>.
<ls_repo>-url = iv_url.
<ls_repo>-branch_name = iv_branch_name.
<ls_repo>-sha1 = iv_branch.
<ls_repo>-package = iv_package.
<ls_repo>-offline = iv_offline.
save_text_online( lt_repos ).
save_text_offline( lt_repos ).
ENDMETHOD. "insert
METHOD update.
DATA: lt_repos TYPE ty_repos_persi_tt.
FIELD-SYMBOLS: <ls_repo> LIKE LINE OF lt_repos.
IF iv_branch IS INITIAL.
lcx_exception=>raise( 'update, sha empty' ).
ENDIF.
lt_repos = list( ).
READ TABLE lt_repos ASSIGNING <ls_repo>
WITH KEY url = iv_url branch_name = iv_branch_name.
IF sy-subrc <> 0.
lcx_exception=>raise( 'persist update, repo not found' ).
ENDIF.
<ls_repo>-sha1 = iv_branch.
save_text_online( lt_repos ).
ENDMETHOD. "update
METHOD list.
CLEAR rt_repos.
APPEND LINES OF read_text_online( ) TO rt_repos.
APPEND LINES OF read_text_offline( ) TO rt_repos.
ENDMETHOD. "list
METHOD read_text.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = is_header-tdid
language = is_header-tdspras
name = is_header-tdname
object = is_header-tdobject
TABLES
lines = rt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 4.
RETURN.
ELSEIF sy-subrc <> 0.
lcx_exception=>raise( 'Error from READ_TEXT' ).
ENDIF.
ENDMETHOD. "read_text
METHOD read_text_online.
DATA: lt_lines TYPE TABLE OF tline,
lv_step TYPE i,
ls_repo TYPE ty_repo_persi.
FIELD-SYMBOLS: <ls_line> LIKE LINE OF lt_lines.
lt_lines = read_text( header_online( ) ).
IF lines( lt_lines ) = 0.
RETURN.
ENDIF.
IF lines( lt_lines ) MOD 4 <> 0.
* if this happens, delete text ZABAPGIT in SO10 or edit the text
* manually, so it contains the right information
lcx_exception=>raise( 'Persistence, text broken' ).
ENDIF.
CLEAR ls_repo.
LOOP AT lt_lines ASSIGNING <ls_line>.
lv_step = lv_step + 1.
CASE lv_step.
WHEN 4.
ls_repo-package = <ls_line>-tdline.
IF ls_repo-url IS INITIAL OR ls_repo-branch_name IS INITIAL.
lcx_exception=>raise( 'Persistence, text broken 2' ).
ENDIF.
APPEND ls_repo TO rt_repos.
CLEAR ls_repo.
lv_step = 0.
WHEN 3.
ls_repo-sha1 = <ls_line>-tdline.
WHEN 2.
ls_repo-branch_name = <ls_line>-tdline.
WHEN 1.
ls_repo-url = <ls_line>-tdline.
WHEN OTHERS.
ASSERT 1 = 0.
ENDCASE.
ENDLOOP.
ENDMETHOD. "list
METHOD read_text_offline.
DATA: lt_lines TYPE TABLE OF tline,
ls_repo TYPE ty_repo_persi.
FIELD-SYMBOLS: <ls_line> LIKE LINE OF lt_lines.
lt_lines = read_text( header_offline( ) ).
IF lines( lt_lines ) = 0.
RETURN.
ENDIF.
IF lines( lt_lines ) MOD 2 <> 0.
* if this happens, delete text ZABAPGIT in SO10 or edit the text
* manually, so it contains the right information
lcx_exception=>raise( 'Persistence, text broken' ).
ENDIF.
CLEAR ls_repo.
LOOP AT lt_lines ASSIGNING <ls_line>.
IF <ls_line>-tdline IS INITIAL.
lcx_exception=>raise( 'Persistence, text broken' ).
ENDIF.
IF ls_repo-url IS INITIAL.
ls_repo-url = <ls_line>-tdline.
CONTINUE. " current loop
ENDIF.
ls_repo-package = <ls_line>-tdline.
ls_repo-offline = abap_true.
APPEND ls_repo TO rt_repos.
CLEAR ls_repo.
ENDLOOP.
ENDMETHOD. "list
ENDCLASS. "lcl_persistence IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_user DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_user DEFINITION FINAL FRIENDS lcl_persist_migrate.
* this class is obsolete, use LCL_PERSISTENCE_USER instead
PRIVATE SECTION.
TYPES: BEGIN OF ty_user,
user LIKE sy-uname,
username TYPE string,
email TYPE string,
END OF ty_user.
TYPES: ty_user_tt TYPE STANDARD TABLE OF ty_user WITH DEFAULT KEY.
CLASS-METHODS set_username
IMPORTING iv_user TYPE xubname DEFAULT sy-uname
iv_username TYPE string
RAISING lcx_exception.
CLASS-METHODS get_username
IMPORTING iv_user TYPE xubname DEFAULT sy-uname
RETURNING VALUE(rv_username) TYPE string
RAISING lcx_exception.
CLASS-METHODS set_email
IMPORTING iv_user TYPE xubname DEFAULT sy-uname
iv_email TYPE string
RAISING lcx_exception.
CLASS-METHODS get_email
IMPORTING iv_user TYPE xubname DEFAULT sy-uname
RETURNING VALUE(rv_email) TYPE string
RAISING lcx_exception.
CLASS-METHODS list
RETURNING VALUE(rt_data) TYPE ty_user_tt
RAISING lcx_exception.
CLASS-METHODS read
IMPORTING iv_name TYPE tdobname
RETURNING VALUE(rv_value) TYPE string
RAISING lcx_exception.
CLASS-METHODS save
IMPORTING iv_name TYPE tdobname
iv_value TYPE string
RAISING lcx_exception.
ENDCLASS. "lcl_user DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_user IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_user IMPLEMENTATION.
METHOD read.
* this class is obsolete, use LCL_PERSISTENCE_USER instead
DATA: lt_lines TYPE TABLE OF tline,
ls_line LIKE LINE OF lt_lines.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'ST'
language = lif_defs=>gc_english
name = iv_name
object = 'TEXT'
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 4 AND sy-subrc <> 0.
lcx_exception=>raise( 'error from READ_TEXT' ).
ENDIF.
READ TABLE lt_lines INTO ls_line INDEX 1.
IF sy-subrc = 0.
rv_value = ls_line-tdline.
ENDIF.
ENDMETHOD. "get_details
METHOD save.
DATA: ls_header TYPE thead,
lt_lines TYPE TABLE OF tline,
ls_line LIKE LINE OF lt_lines.
ls_line-tdformat = '*'.
ls_line-tdline = iv_value.
APPEND ls_line TO lt_lines.
ls_header-tdid = 'ST'.
ls_header-tdspras = lif_defs=>gc_english.
ls_header-tdname = iv_name.
ls_header-tdobject = 'TEXT'.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
header = ls_header
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5.
IF sy-subrc <> 0.
ROLLBACK WORK. "#EC CI_ROLLBACK
lcx_exception=>raise( 'error from SAVE_TEXT' ).
ENDIF.
COMMIT WORK.
ENDMETHOD. "change
METHOD set_username.
DATA: lv_name TYPE tdobname.
CONCATENATE 'ZABAPGIT_USERNAME_' iv_user INTO lv_name.
save( iv_name = lv_name
iv_value = iv_username ).
ENDMETHOD. "set_username
METHOD get_username.
DATA: lv_name TYPE tdobname.
CONCATENATE 'ZABAPGIT_USERNAME_' iv_user INTO lv_name.
rv_username = read( lv_name ).
ENDMETHOD. "get_username
METHOD set_email.
DATA: lv_name TYPE tdobname.
CONCATENATE 'ZABAPGIT_EMAIL_' iv_user INTO lv_name.
save( iv_name = lv_name
iv_value = iv_email ).
ENDMETHOD. "set_email
METHOD list.
DATA: lt_stxh TYPE STANDARD TABLE OF stxh WITH DEFAULT KEY.
FIELD-SYMBOLS: <ls_output> LIKE LINE OF rt_data,
<ls_stxh> LIKE LINE OF lt_stxh.
SELECT * FROM stxh INTO TABLE lt_stxh
WHERE tdobject = 'TEXT'
AND tdname LIKE 'ZABAPGIT_USERNAME_%'. "#EC CI_SUBRC
LOOP AT lt_stxh ASSIGNING <ls_stxh>.
APPEND INITIAL LINE TO rt_data ASSIGNING <ls_output>.
<ls_output>-user = <ls_stxh>-tdname+18.
<ls_output>-username = get_username( <ls_output>-user ).
<ls_output>-email = get_email( <ls_output>-user ).
ENDLOOP.
ENDMETHOD.
METHOD get_email.
DATA: lv_name TYPE tdobname.
CONCATENATE 'ZABAPGIT_EMAIL_' iv_user INTO lv_name.
rv_email = read( lv_name ).
ENDMETHOD. "get_email
ENDCLASS. "lcl_user IMPLEMENTATION