mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 21:08:01 +08:00
commit
33ce832d5f
|
@ -38,72 +38,27 @@ INCLUDE zabapgit_password_dialog. " !!! Contains SELECTION SCREEN
|
||||||
INCLUDE zabapgit_definitions.
|
INCLUDE zabapgit_definitions.
|
||||||
INCLUDE zabapgit_exceptions.
|
INCLUDE zabapgit_exceptions.
|
||||||
INCLUDE zabapgit_zlib.
|
INCLUDE zabapgit_zlib.
|
||||||
|
INCLUDE zabapgit_html.
|
||||||
INCLUDE zabapgit_util.
|
INCLUDE zabapgit_util.
|
||||||
INCLUDE zabapgit_xml.
|
INCLUDE zabapgit_xml.
|
||||||
|
|
||||||
CLASS lcl_gui DEFINITION DEFERRED.
|
INCLUDE zabapgit_app. " Some deferred definitions here
|
||||||
CLASS lcl_persistence_user DEFINITION DEFERRED.
|
INCLUDE zabapgit_persistence_old.
|
||||||
CLASS lcl_repo_srv DEFINITION DEFERRED.
|
|
||||||
CLASS lcl_persistence_db DEFINITION DEFERRED.
|
|
||||||
|
|
||||||
INCLUDE zabapgit_app.
|
|
||||||
INCLUDE zabapgit_persistence.
|
INCLUDE zabapgit_persistence.
|
||||||
INCLUDE zabapgit_html.
|
|
||||||
INCLUDE zabapgit_dot_abapgit.
|
INCLUDE zabapgit_dot_abapgit.
|
||||||
INCLUDE zabapgit_sap_package.
|
INCLUDE zabapgit_sap_package.
|
||||||
|
|
||||||
CLASS lcl_repo_online DEFINITION DEFERRED.
|
|
||||||
|
|
||||||
INCLUDE zabapgit_stage.
|
INCLUDE zabapgit_stage.
|
||||||
INCLUDE zabapgit_git_helpers.
|
INCLUDE zabapgit_git_helpers.
|
||||||
INCLUDE zabapgit_repo.
|
INCLUDE zabapgit_repo.
|
||||||
INCLUDE zabapgit_git.
|
|
||||||
INCLUDE zabapgit_stage_logic.
|
INCLUDE zabapgit_stage_logic.
|
||||||
|
INCLUDE zabapgit_git.
|
||||||
INCLUDE zabapgit_objects.
|
INCLUDE zabapgit_objects.
|
||||||
INCLUDE zabapgit_tadir.
|
INCLUDE zabapgit_tadir.
|
||||||
INCLUDE zabapgit_file_status.
|
INCLUDE zabapgit_file_status.
|
||||||
INCLUDE zabapgit_object.
|
INCLUDE zabapgit_objects_impl.
|
||||||
INCLUDE zabapgit_object_acid.
|
|
||||||
INCLUDE zabapgit_object_auth.
|
INCLUDE zabapgit_object_serializing. " All serializing classes here
|
||||||
INCLUDE zabapgit_object_doct.
|
|
||||||
INCLUDE zabapgit_object_docv.
|
|
||||||
INCLUDE zabapgit_object_doma.
|
|
||||||
INCLUDE zabapgit_object_dtel.
|
|
||||||
INCLUDE zabapgit_object_enho.
|
|
||||||
INCLUDE zabapgit_object_enhs.
|
|
||||||
INCLUDE zabapgit_object_enqu.
|
|
||||||
INCLUDE zabapgit_object_ensc.
|
|
||||||
INCLUDE zabapgit_object_iarp.
|
|
||||||
INCLUDE zabapgit_object_iasp.
|
|
||||||
INCLUDE zabapgit_object_iatu.
|
|
||||||
INCLUDE zabapgit_object_msag.
|
|
||||||
INCLUDE zabapgit_object_nrob.
|
|
||||||
INCLUDE zabapgit_object_para.
|
|
||||||
INCLUDE zabapgit_object_pinf.
|
|
||||||
INCLUDE zabapgit_object_sfbf.
|
|
||||||
INCLUDE zabapgit_object_sfbs.
|
|
||||||
INCLUDE zabapgit_object_sfsw.
|
|
||||||
INCLUDE zabapgit_object_shi3.
|
|
||||||
INCLUDE zabapgit_object_shlp.
|
|
||||||
INCLUDE zabapgit_object_sicf.
|
|
||||||
INCLUDE zabapgit_object_smim.
|
|
||||||
INCLUDE zabapgit_object_splo.
|
|
||||||
INCLUDE zabapgit_object_ssfo.
|
|
||||||
INCLUDE zabapgit_object_ssst.
|
|
||||||
INCLUDE zabapgit_object_susc.
|
|
||||||
INCLUDE zabapgit_object_suso.
|
|
||||||
INCLUDE zabapgit_object_tabl.
|
|
||||||
INCLUDE zabapgit_object_tobj.
|
|
||||||
INCLUDE zabapgit_object_tran.
|
|
||||||
INCLUDE zabapgit_object_ttyp.
|
|
||||||
INCLUDE zabapgit_object_type.
|
|
||||||
INCLUDE zabapgit_object_vcls.
|
|
||||||
INCLUDE zabapgit_object_view.
|
|
||||||
INCLUDE zabapgit_object_w3xx.
|
|
||||||
INCLUDE zabapgit_object_wdya.
|
|
||||||
INCLUDE zabapgit_object_wdyn.
|
|
||||||
INCLUDE zabapgit_object_webi.
|
|
||||||
INCLUDE zabapgit_object_xslt.
|
|
||||||
|
|
||||||
INCLUDE zabapgit_repo_impl.
|
INCLUDE zabapgit_repo_impl.
|
||||||
INCLUDE zabapgit_background.
|
INCLUDE zabapgit_background.
|
||||||
|
@ -111,19 +66,15 @@ INCLUDE zabapgit_zip.
|
||||||
INCLUDE zabapgit_transport.
|
INCLUDE zabapgit_transport.
|
||||||
INCLUDE zabapgit_popups.
|
INCLUDE zabapgit_popups.
|
||||||
|
|
||||||
INCLUDE zabapgit_page.
|
INCLUDE zabapgit_gui_pages. " All GUI pages here
|
||||||
INCLUDE zabapgit_page_commit.
|
INCLUDE zabapgit_gui_router.
|
||||||
INCLUDE zabapgit_page_merge.
|
|
||||||
INCLUDE zabapgit_page_branch_overview.
|
|
||||||
INCLUDE zabapgit_page_stage.
|
|
||||||
INCLUDE zabapgit_page_db.
|
|
||||||
INCLUDE zabapgit_page_main.
|
|
||||||
INCLUDE zabapgit_page_background.
|
|
||||||
INCLUDE zabapgit_gui.
|
INCLUDE zabapgit_gui.
|
||||||
|
|
||||||
INCLUDE zabapgit_app_impl.
|
INCLUDE zabapgit_app_impl.
|
||||||
INCLUDE zabapgit_unit_test.
|
INCLUDE zabapgit_unit_test.
|
||||||
INCLUDE zabapgit_forms.
|
INCLUDE zabapgit_forms.
|
||||||
|
|
||||||
|
**********************************************************************
|
||||||
INITIALIZATION.
|
INITIALIZATION.
|
||||||
lcl_password_dialog=>on_screen_init( ).
|
lcl_password_dialog=>on_screen_init( ).
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,11 @@
|
||||||
*& Include ZABAPGIT_APP
|
*& Include ZABAPGIT_APP
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
CLASS lcl_gui DEFINITION DEFERRED.
|
||||||
|
CLASS lcl_persistence_user DEFINITION DEFERRED.
|
||||||
|
CLASS lcl_repo_srv DEFINITION DEFERRED.
|
||||||
|
CLASS lcl_persistence_db DEFINITION DEFERRED.
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_app DEFINITION
|
* CLASS lcl_app DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
*& Include ZABAPGIT_FORMS
|
*& Include ZABAPGIT_FORMS
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
*& Form run
|
*& Form run
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
|
@ -2,81 +2,6 @@
|
||||||
*& Include ZABAPGIT_GUI
|
*& Include ZABAPGIT_GUI
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
* CLASS lcl_gui_router DEFINITION
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_gui_router DEFINITION FINAL.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
|
|
||||||
METHODS on_event
|
|
||||||
IMPORTING iv_action TYPE clike
|
|
||||||
iv_getdata TYPE clike OPTIONAL
|
|
||||||
it_postdata TYPE cnht_post_data_tab OPTIONAL
|
|
||||||
EXPORTING ei_page TYPE REF TO lif_gui_page
|
|
||||||
ev_state TYPE i
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
|
||||||
|
|
||||||
METHODS get_page_by_name
|
|
||||||
IMPORTING iv_name TYPE clike
|
|
||||||
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS get_page_diff
|
|
||||||
IMPORTING iv_getdata TYPE clike
|
|
||||||
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS get_page_branch_overview
|
|
||||||
IMPORTING iv_getdata TYPE clike
|
|
||||||
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS get_page_stage
|
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS get_page_db_by_name
|
|
||||||
IMPORTING iv_name TYPE clike
|
|
||||||
iv_getdata TYPE clike
|
|
||||||
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS abapgit_installation
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS repo_purge
|
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS repo_remove
|
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS repo_pull
|
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS reset
|
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS create_branch
|
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS db_delete
|
|
||||||
IMPORTING iv_getdata TYPE clike
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS db_save
|
|
||||||
IMPORTING it_postdata TYPE cnht_post_data_tab
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_gui DEFINITION
|
* CLASS lcl_gui DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
@ -133,9 +58,7 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
||||||
ENDCLASS. "lcl_gui DEFINITION
|
ENDCLASS. "lcl_gui DEFINITION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_view IMPLEMENTATION
|
* CLASS lcl_gui IMPLEMENTATION
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_gui IMPLEMENTATION.
|
CLASS lcl_gui IMPLEMENTATION.
|
||||||
|
|
||||||
|
@ -348,826 +271,3 @@ CLASS lcl_gui IMPLEMENTATION.
|
||||||
ENDMETHOD. "cache_image
|
ENDMETHOD. "cache_image
|
||||||
|
|
||||||
ENDCLASS. "lcl_gui IMPLEMENTATION
|
ENDCLASS. "lcl_gui IMPLEMENTATION
|
||||||
|
|
||||||
CLASS lcl_gui_page_explore DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
METHODS lif_gui_page~render REDEFINITION.
|
|
||||||
|
|
||||||
ENDCLASS. "lcl_gui_page_explore DEFINITION
|
|
||||||
|
|
||||||
CLASS lcl_gui_page_explore IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD lif_gui_page~render.
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
|
||||||
ro_html->add( redirect( 'http://larshp.github.io/abapGit/explore.html' ) ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS. "lcl_gui_page_explore IMPLEMENTATION
|
|
||||||
|
|
||||||
CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
METHODS: constructor
|
|
||||||
IMPORTING
|
|
||||||
is_local TYPE ty_file
|
|
||||||
is_remote TYPE ty_file.
|
|
||||||
|
|
||||||
METHODS lif_gui_page~render REDEFINITION.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
|
||||||
DATA: mv_filename TYPE string,
|
|
||||||
mo_diff TYPE REF TO lcl_diff.
|
|
||||||
|
|
||||||
METHODS styles RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
|
||||||
METHODS render_head RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
|
||||||
METHODS render_diff RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
|
||||||
METHODS render_lines RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS lcl_gui_page_diff IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD constructor.
|
|
||||||
super->constructor( ).
|
|
||||||
|
|
||||||
mv_filename = is_local-filename.
|
|
||||||
|
|
||||||
CREATE OBJECT mo_diff
|
|
||||||
EXPORTING
|
|
||||||
iv_local = is_local-data
|
|
||||||
iv_remote = is_remote-data.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD styles.
|
|
||||||
DATA lo_html TYPE REF TO lcl_html_helper.
|
|
||||||
CREATE OBJECT lo_html.
|
|
||||||
|
|
||||||
lo_html->add( '/* DIFF */' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'div.diff {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' background-color: #f2f2f2;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding: 0.7em ' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'div.diff_head {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-bottom: 1px solid #DDD;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding-bottom: 0.7em;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'span.diff_name {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' color: grey;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'span.diff_name strong {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' color: #333;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'span.diff_banner {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-style: solid;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-width: 1px;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-radius: 3px;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding-left: 0.3em;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding-right: 0.3em;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '.diff_ins {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-color: #38e038;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' background-color: #91ee91 !important;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '.diff_del {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-color: #ff8093;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' background-color: #ffb3be !important;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '.diff_upd {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-color: #dada00;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' background-color: #ffffb3 !important;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'div.diff_content {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' background: #fff;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
|
|
||||||
" Table part
|
|
||||||
lo_html->add( '/* DIFF TABLE */' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'table.diff_tab {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' font-family: Consolas, Courier, monospace;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'table.diff_tab th {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' color: grey;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' text-align: left;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' font-weight: normal;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding: 0.5em;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'table.diff_tab td {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' color: #444;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding-right: 0.5em;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' font-size: 12pt;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'table.diff_tab td.num, th.num {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' text-align: right;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' color: #ccc;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-left: 1px solid #eee;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' border-right: 1px solid #eee;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'table.diff_tab td.cmd, th.cmd {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' text-align: center !important;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' white-space: nowrap;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
lo_html->add( 'table.diff_tab tr.diff_nav_line {'). "#EC NOTEXT
|
|
||||||
lo_html->add( ' background-color: #edf2f9;'). "#EC NOTEXT
|
|
||||||
lo_html->add( '}'). "#EC NOTEXT
|
|
||||||
lo_html->add( 'table.diff_tab tr.diff_nav_line td {'). "#EC NOTEXT
|
|
||||||
lo_html->add( ' color: #ccc;'). "#EC NOTEXT
|
|
||||||
lo_html->add( '}'). "#EC NOTEXT
|
|
||||||
lo_html->add( 'table.diff_tab code {' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' font-family: inherit;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' white-space: pre;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
|
||||||
|
|
||||||
ro_html = lo_html.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD render_head.
|
|
||||||
DATA: lo_html TYPE REF TO lcl_html_helper,
|
|
||||||
ls_stats TYPE lcl_diff=>ty_count.
|
|
||||||
|
|
||||||
CREATE OBJECT lo_html.
|
|
||||||
|
|
||||||
ls_stats = mo_diff->stats( ).
|
|
||||||
|
|
||||||
lo_html->add( '<div class="diff_head">' ). "#EC NOTEXT
|
|
||||||
lo_html->add( |<span class="diff_banner diff_ins">+ { ls_stats-insert }</span>| ).
|
|
||||||
lo_html->add( |<span class="diff_banner diff_del">- { ls_stats-delete }</span>| ).
|
|
||||||
lo_html->add( |<span class="diff_banner diff_upd">~ { ls_stats-update }</span>| ).
|
|
||||||
lo_html->add( '<span class="diff_name">' ). "#EC NOTEXT
|
|
||||||
lo_html->add( |{ mv_filename }| ).
|
|
||||||
lo_html->add( '</span>' ). "#EC NOTEXT
|
|
||||||
lo_html->add( '</div>' ). "#EC NOTEXT
|
|
||||||
|
|
||||||
ro_html = lo_html.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD render_diff.
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
|
||||||
|
|
||||||
ro_html->add( '<div class="diff">' ). "#EC NOTEXT
|
|
||||||
ro_html->add( render_head( ) ).
|
|
||||||
|
|
||||||
" Content
|
|
||||||
ro_html->add( '<div class="diff_content">' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '<table width="100%" class="diff_tab">' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '<tr>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '<th>@LOCAL</th>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '<th>@REMOTE</th>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '</tr>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( render_lines( ) ).
|
|
||||||
ro_html->add( '</table>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '</div>' ). "#EC NOTEXT
|
|
||||||
|
|
||||||
ro_html->add( '</div>' ). "#EC NOTEXT
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD render_lines.
|
|
||||||
|
|
||||||
DATA: lt_diffs TYPE lcl_diff=>ty_diffs_tt,
|
|
||||||
lv_local TYPE string,
|
|
||||||
lv_remote TYPE string,
|
|
||||||
lv_attr_local TYPE string,
|
|
||||||
lv_attr_remote TYPE string,
|
|
||||||
lv_beacon TYPE string,
|
|
||||||
lv_insert_nav TYPE abap_bool.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_diff> LIKE LINE OF lt_diffs.
|
|
||||||
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
|
||||||
lt_diffs = mo_diff->get( ).
|
|
||||||
|
|
||||||
LOOP AT lt_diffs ASSIGNING <ls_diff>.
|
|
||||||
IF <ls_diff>-short = abap_false.
|
|
||||||
lv_insert_nav = abap_true.
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF lv_insert_nav = abap_true. " Insert separator line with navigation
|
|
||||||
IF <ls_diff>-beacon > 0.
|
|
||||||
READ TABLE mo_diff->mt_beacons INTO lv_beacon INDEX <ls_diff>-beacon.
|
|
||||||
ELSE.
|
|
||||||
lv_beacon = '---'.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ro_html->add( '<tr class="diff_nav_line">').
|
|
||||||
ro_html->add( '<td class="num"></td>' ).
|
|
||||||
ro_html->add( |<td colspan="3">@@ { <ls_diff>-local_line } @@ { lv_beacon }</td>| ).
|
|
||||||
ro_html->add( '</tr>' ).
|
|
||||||
lv_insert_nav = abap_false.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lv_local = escape( val = <ls_diff>-local format = cl_abap_format=>e_html_attr ).
|
|
||||||
lv_remote = escape( val = <ls_diff>-remote format = cl_abap_format=>e_html_attr ).
|
|
||||||
|
|
||||||
CLEAR: lv_attr_local, lv_attr_remote. " Class for changed lines
|
|
||||||
CASE <ls_diff>-result.
|
|
||||||
WHEN lcl_diff=>c_diff-insert.
|
|
||||||
lv_attr_local = ' class="diff_ins"'. "#EC NOTEXT
|
|
||||||
WHEN lcl_diff=>c_diff-delete.
|
|
||||||
lv_attr_remote = ' class="diff_del"'. "#EC NOTEXT
|
|
||||||
WHEN lcl_diff=>c_diff-update.
|
|
||||||
lv_attr_local = ' class="diff_upd"'. "#EC NOTEXT
|
|
||||||
lv_attr_remote = ' class="diff_upd"'. "#EC NOTEXT
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
ro_html->add( '<tr>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( |<td class="num">{ <ls_diff>-local_line }</td>| ). "#EC NOTEXT
|
|
||||||
ro_html->add( |<td{ lv_attr_local }><code>{ lv_local }</code></td>| ). "#EC NOTEXT
|
|
||||||
ro_html->add( |<td class="num">{ <ls_diff>-remote_line }</td>| ). "#EC NOTEXT
|
|
||||||
ro_html->add( |<td{ lv_attr_remote }><code>{ lv_remote }</code></td>| ). "#EC NOTEXT
|
|
||||||
ro_html->add( '</tr>' ). "#EC NOTEXT
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD lif_gui_page~render.
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
|
||||||
|
|
||||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
|
||||||
ro_html->add( title( 'DIFF' ) ).
|
|
||||||
ro_html->add( render_diff( ) ).
|
|
||||||
ro_html->add( footer( ) ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
* CLASS lcl_gui_router IMPLEMENTATION
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_gui_router IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD on_event.
|
|
||||||
|
|
||||||
DATA: lv_url TYPE string,
|
|
||||||
lv_key TYPE lcl_persistence_repo=>ty_repo-key,
|
|
||||||
ls_item TYPE ty_item.
|
|
||||||
|
|
||||||
|
|
||||||
CASE iv_action.
|
|
||||||
" General routing
|
|
||||||
WHEN 'main'
|
|
||||||
OR 'explore'
|
|
||||||
OR 'db'
|
|
||||||
OR 'background_run'.
|
|
||||||
ei_page = get_page_by_name( iv_action ).
|
|
||||||
ev_state = gc_event_state-new_page.
|
|
||||||
WHEN 'background'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
CREATE OBJECT ei_page TYPE lcl_gui_page_background
|
|
||||||
EXPORTING
|
|
||||||
iv_key = lv_key.
|
|
||||||
ev_state = gc_event_state-new_page.
|
|
||||||
WHEN 'abapgithome'.
|
|
||||||
cl_gui_frontend_services=>execute( EXPORTING document = gc_abapgit_homepage
|
|
||||||
EXCEPTIONS OTHERS = 1 ).
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'Opening page in external browser failed.' ).
|
|
||||||
ENDIF.
|
|
||||||
ev_state = gc_event_state-no_more_act.
|
|
||||||
WHEN 'abapgit_installation'.
|
|
||||||
abapgit_installation( ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
WHEN 'jump'.
|
|
||||||
lcl_html_action_utils=>jump_decode( EXPORTING iv_string = iv_getdata
|
|
||||||
IMPORTING ev_obj_type = ls_item-obj_type
|
|
||||||
ev_obj_name = ls_item-obj_name ).
|
|
||||||
lcl_objects=>jump( ls_item ).
|
|
||||||
ev_state = gc_event_state-no_more_act.
|
|
||||||
WHEN 'diff'.
|
|
||||||
ei_page = get_page_diff( iv_getdata ).
|
|
||||||
ev_state = gc_event_state-new_page.
|
|
||||||
|
|
||||||
" DB actions
|
|
||||||
WHEN 'db_display' OR 'db_edit'.
|
|
||||||
ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ).
|
|
||||||
ev_state = gc_event_state-new_page.
|
|
||||||
WHEN 'db_delete'.
|
|
||||||
db_delete( iv_getdata = iv_getdata ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
WHEN 'db_save'.
|
|
||||||
db_save( it_postdata ).
|
|
||||||
ev_state = gc_event_state-go_back.
|
|
||||||
|
|
||||||
" Repository state actions
|
|
||||||
WHEN 'uninstall'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
repo_purge( lv_key ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
WHEN 'remove'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
repo_remove( lv_key ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
WHEN 'zipimport'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
lcl_zip=>import( lv_key ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
WHEN 'zipexport'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
lcl_zip=>export( lcl_app=>repo_srv( )->get( lv_key ) ).
|
|
||||||
ev_state = gc_event_state-no_more_act.
|
|
||||||
WHEN 'files_commit'. "TODO refactor name ?
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
lcl_zip=>export( io_repo = lcl_app=>repo_srv( )->get( lv_key )
|
|
||||||
iv_zip = abap_false ).
|
|
||||||
ev_state = gc_event_state-no_more_act.
|
|
||||||
WHEN 'packagezip'.
|
|
||||||
lcl_popups=>repo_package_zip( ).
|
|
||||||
ev_state = gc_event_state-no_more_act.
|
|
||||||
WHEN 'transportzip'.
|
|
||||||
lcl_transport=>zip( ).
|
|
||||||
ev_state = gc_event_state-no_more_act.
|
|
||||||
WHEN 'refresh'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
lcl_app=>repo_srv( )->get( lv_key )->refresh( ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
|
|
||||||
" explore page
|
|
||||||
WHEN 'install'.
|
|
||||||
lv_url = iv_getdata.
|
|
||||||
lcl_popups=>repo_clone( lv_url ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
|
|
||||||
" Repository online actions
|
|
||||||
WHEN 'pull'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
repo_pull( lv_key ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
WHEN 'stage'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
ei_page = get_page_stage( lv_key ).
|
|
||||||
ev_state = gc_event_state-new_page_w_bookmark.
|
|
||||||
WHEN 'reset'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
reset( lv_key ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
WHEN 'create_branch'.
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
create_branch( lv_key ).
|
|
||||||
ev_state = gc_event_state-re_render.
|
|
||||||
WHEN 'branch_overview'.
|
|
||||||
ei_page = get_page_branch_overview( iv_getdata ).
|
|
||||||
ev_state = gc_event_state-new_page.
|
|
||||||
WHEN OTHERS.
|
|
||||||
ev_state = gc_event_state-not_handled.
|
|
||||||
ENDCASE.
|
|
||||||
ENDMETHOD. " on_event
|
|
||||||
|
|
||||||
METHOD get_page_by_name.
|
|
||||||
|
|
||||||
DATA: lv_page_class TYPE string,
|
|
||||||
lv_message TYPE string.
|
|
||||||
|
|
||||||
lv_page_class = |LCL_GUI_PAGE_{ to_upper( iv_name ) }|.
|
|
||||||
|
|
||||||
TRY.
|
|
||||||
CREATE OBJECT ri_page TYPE (lv_page_class).
|
|
||||||
CATCH cx_sy_create_object_error.
|
|
||||||
lv_message = |Cannot create page class { lv_page_class }|.
|
|
||||||
lcx_exception=>raise( lv_message ).
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
ENDMETHOD. " get_page_by_name
|
|
||||||
|
|
||||||
METHOD get_page_db_by_name.
|
|
||||||
|
|
||||||
DATA: lv_page_class TYPE string,
|
|
||||||
lv_message TYPE string,
|
|
||||||
ls_key TYPE lcl_persistence_db=>ty_content.
|
|
||||||
|
|
||||||
lv_page_class = |LCL_GUI_PAGE_{ to_upper( iv_name ) }|.
|
|
||||||
ls_key = lcl_html_action_utils=>dbkey_decode( iv_getdata ).
|
|
||||||
|
|
||||||
TRY.
|
|
||||||
CREATE OBJECT ri_page TYPE (lv_page_class)
|
|
||||||
EXPORTING
|
|
||||||
is_key = ls_key.
|
|
||||||
|
|
||||||
CATCH cx_sy_create_object_error.
|
|
||||||
lv_message = |Cannot create page class { lv_page_class }|.
|
|
||||||
lcx_exception=>raise( lv_message ).
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
ENDMETHOD. " get_page_db_by_name
|
|
||||||
|
|
||||||
METHOD get_page_branch_overview.
|
|
||||||
|
|
||||||
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
|
||||||
lo_page TYPE REF TO lcl_gui_page_branch_overview,
|
|
||||||
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
|
|
||||||
|
|
||||||
|
|
||||||
lv_key = iv_getdata.
|
|
||||||
|
|
||||||
lo_repo ?= lcl_app=>repo_srv( )->get( lv_key ).
|
|
||||||
|
|
||||||
CREATE OBJECT lo_page
|
|
||||||
EXPORTING
|
|
||||||
io_repo = lo_repo.
|
|
||||||
|
|
||||||
ri_page = lo_page.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD get_page_diff.
|
|
||||||
|
|
||||||
DATA: lt_remote TYPE ty_files_tt,
|
|
||||||
lt_local TYPE ty_files_item_tt,
|
|
||||||
lo_page TYPE REF TO lcl_gui_page_diff,
|
|
||||||
lo_repo TYPE REF TO lcl_repo_online,
|
|
||||||
ls_file TYPE ty_repo_file,
|
|
||||||
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF lt_remote,
|
|
||||||
<ls_local> LIKE LINE OF lt_local.
|
|
||||||
|
|
||||||
lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata
|
|
||||||
IMPORTING ev_key = lv_key
|
|
||||||
eg_file = ls_file ).
|
|
||||||
|
|
||||||
lo_repo ?= lcl_app=>repo_srv( )->get( lv_key ).
|
|
||||||
lt_remote = lo_repo->get_files_remote( ).
|
|
||||||
lt_local = lo_repo->get_files_local( ).
|
|
||||||
|
|
||||||
READ TABLE lt_remote ASSIGNING <ls_remote>
|
|
||||||
WITH KEY filename = ls_file-filename
|
|
||||||
path = ls_file-path.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'file not found remotely' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_local ASSIGNING <ls_local>
|
|
||||||
WITH KEY file-filename = ls_file-filename
|
|
||||||
file-path = ls_file-path.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'file not found locally' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CREATE OBJECT lo_page
|
|
||||||
EXPORTING
|
|
||||||
is_local = <ls_local>-file
|
|
||||||
is_remote = <ls_remote>.
|
|
||||||
|
|
||||||
ri_page = lo_page.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD abapgit_installation.
|
|
||||||
|
|
||||||
CONSTANTS lc_package_abapgit TYPE devclass VALUE '$ABAPGIT'.
|
|
||||||
CONSTANTS lc_package_plugins TYPE devclass VALUE '$ABAPGIT_PLUGINS'.
|
|
||||||
|
|
||||||
DATA lv_text TYPE c LENGTH 100.
|
|
||||||
DATA lv_answer TYPE c LENGTH 1.
|
|
||||||
DATA lo_repo TYPE REF TO lcl_repo_online.
|
|
||||||
DATA lv_url TYPE string.
|
|
||||||
DATA lv_target_package TYPE devclass.
|
|
||||||
|
|
||||||
lv_text = |Installing current version ABAPGit to package { lc_package_abapgit } |
|
|
||||||
&& |and plugins to { lc_package_plugins }|.
|
|
||||||
|
|
||||||
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
|
||||||
EXPORTING
|
|
||||||
titlebar = 'Install abapGit'
|
|
||||||
text_question = lv_text
|
|
||||||
text_button_1 = 'Continue'
|
|
||||||
text_button_2 = 'Cancel'
|
|
||||||
default_button = '2'
|
|
||||||
display_cancel_button = abap_false
|
|
||||||
IMPORTING
|
|
||||||
answer = lv_answer ##no_text.
|
|
||||||
IF lv_answer <> '1'.
|
|
||||||
RETURN. ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
DO 2 TIMES.
|
|
||||||
CASE sy-index.
|
|
||||||
WHEN 1.
|
|
||||||
lv_url = 'https://github.com/larshp/abapGit.git'.
|
|
||||||
lv_target_package = lc_package_abapgit.
|
|
||||||
WHEN 2.
|
|
||||||
lv_url = 'https://github.com/larshp/abapGit-plugins.git' ##no_text.
|
|
||||||
lv_target_package = lc_package_plugins.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
IF abap_false = lcl_app=>repo_srv( )->is_repo_installed(
|
|
||||||
iv_url = lv_url
|
|
||||||
iv_target_package = lv_target_package ).
|
|
||||||
|
|
||||||
lcl_sap_package=>create_local( lv_target_package ).
|
|
||||||
|
|
||||||
lo_repo = lcl_app=>repo_srv( )->new_online(
|
|
||||||
iv_url = lv_url
|
|
||||||
iv_branch_name = 'refs/heads/master' "TODO replace with HEAD ?
|
|
||||||
iv_package = lv_target_package ) ##NO_TEXT.
|
|
||||||
|
|
||||||
lo_repo->status( ). " check for errors
|
|
||||||
lo_repo->deserialize( ).
|
|
||||||
ENDIF.
|
|
||||||
ENDDO.
|
|
||||||
|
|
||||||
COMMIT WORK.
|
|
||||||
|
|
||||||
ENDMETHOD. "abapgit_installation
|
|
||||||
|
|
||||||
METHOD repo_purge.
|
|
||||||
|
|
||||||
DATA: lt_tadir TYPE ty_tadir_tt,
|
|
||||||
lv_count TYPE c LENGTH 3,
|
|
||||||
lv_answer TYPE c LENGTH 1,
|
|
||||||
lo_repo TYPE REF TO lcl_repo,
|
|
||||||
lv_package TYPE devclass,
|
|
||||||
lv_question TYPE c LENGTH 100.
|
|
||||||
|
|
||||||
|
|
||||||
lo_repo = lcl_app=>repo_srv( )->get( iv_key ).
|
|
||||||
|
|
||||||
IF lo_repo->is_write_protected( ) = abap_true.
|
|
||||||
lcx_exception=>raise( 'Cannot purge. Local code is write-protected by repo config' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lv_package = lo_repo->get_package( ).
|
|
||||||
lt_tadir = lcl_tadir=>read( lv_package ).
|
|
||||||
|
|
||||||
IF lines( lt_tadir ) > 0.
|
|
||||||
lv_count = lines( lt_tadir ).
|
|
||||||
|
|
||||||
CONCATENATE 'This will delete all objects in package' lv_package
|
|
||||||
INTO lv_question
|
|
||||||
SEPARATED BY space. "#EC NOTEXT
|
|
||||||
|
|
||||||
CONCATENATE lv_question '(' lv_count 'objects)'
|
|
||||||
INTO lv_question
|
|
||||||
SEPARATED BY space. "#EC NOTEXT
|
|
||||||
|
|
||||||
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
|
||||||
EXPORTING
|
|
||||||
titlebar = 'Uninstall'
|
|
||||||
text_question = lv_question
|
|
||||||
text_button_1 = 'Delete'
|
|
||||||
icon_button_1 = 'ICON_DELETE'
|
|
||||||
text_button_2 = 'Cancel'
|
|
||||||
icon_button_2 = 'ICON_CANCEL'
|
|
||||||
default_button = '2'
|
|
||||||
display_cancel_button = abap_false
|
|
||||||
IMPORTING
|
|
||||||
answer = lv_answer
|
|
||||||
EXCEPTIONS
|
|
||||||
text_not_found = 1
|
|
||||||
OTHERS = 2. "#EC NOTEXT
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF lv_answer = '2'.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lcl_objects=>delete( lt_tadir ).
|
|
||||||
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lcl_app=>repo_srv( )->delete( lo_repo ).
|
|
||||||
|
|
||||||
COMMIT WORK.
|
|
||||||
|
|
||||||
ENDMETHOD. "repo_purge
|
|
||||||
|
|
||||||
METHOD repo_remove.
|
|
||||||
|
|
||||||
DATA: lv_answer TYPE c LENGTH 1,
|
|
||||||
lo_repo TYPE REF TO lcl_repo,
|
|
||||||
lv_package TYPE devclass,
|
|
||||||
lv_question TYPE c LENGTH 100.
|
|
||||||
|
|
||||||
|
|
||||||
lo_repo = lcl_app=>repo_srv( )->get( iv_key ).
|
|
||||||
lv_package = lo_repo->get_package( ).
|
|
||||||
|
|
||||||
CONCATENATE 'This will remove the repository reference to the package'
|
|
||||||
lv_package
|
|
||||||
INTO lv_question
|
|
||||||
SEPARATED BY space. "#EC NOTEXT
|
|
||||||
|
|
||||||
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
|
||||||
EXPORTING
|
|
||||||
titlebar = 'Remove'
|
|
||||||
text_question = lv_question
|
|
||||||
text_button_1 = 'Remove'
|
|
||||||
icon_button_1 = 'ICON_WF_UNLINK'
|
|
||||||
text_button_2 = 'Cancel'
|
|
||||||
icon_button_2 = 'ICON_CANCEL'
|
|
||||||
default_button = '2'
|
|
||||||
display_cancel_button = abap_false
|
|
||||||
IMPORTING
|
|
||||||
answer = lv_answer
|
|
||||||
EXCEPTIONS
|
|
||||||
text_not_found = 1
|
|
||||||
OTHERS = 2. "#EC NOTEXT
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF lv_answer = '2'.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lcl_app=>repo_srv( )->delete( lo_repo ).
|
|
||||||
|
|
||||||
COMMIT WORK.
|
|
||||||
|
|
||||||
ENDMETHOD. "repo_remove
|
|
||||||
|
|
||||||
METHOD reset.
|
|
||||||
|
|
||||||
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
|
||||||
lv_answer TYPE c LENGTH 1.
|
|
||||||
|
|
||||||
|
|
||||||
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
|
||||||
|
|
||||||
IF lo_repo->is_write_protected( ) = abap_true.
|
|
||||||
lcx_exception=>raise( 'Cannot reset. Local code is write-protected by repo config' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
|
||||||
EXPORTING
|
|
||||||
titlebar = 'Warning'
|
|
||||||
text_question = 'Reset local objects?'
|
|
||||||
text_button_1 = 'Ok'
|
|
||||||
icon_button_1 = 'ICON_OKAY'
|
|
||||||
text_button_2 = 'Cancel'
|
|
||||||
icon_button_2 = 'ICON_CANCEL'
|
|
||||||
default_button = '2'
|
|
||||||
display_cancel_button = abap_false
|
|
||||||
IMPORTING
|
|
||||||
answer = lv_answer
|
|
||||||
EXCEPTIONS
|
|
||||||
text_not_found = 1
|
|
||||||
OTHERS = 2. "#EC NOTEXT
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF lv_answer = '2'.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lo_repo->deserialize( ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD create_branch.
|
|
||||||
|
|
||||||
DATA: lv_name TYPE string,
|
|
||||||
lv_cancel TYPE abap_bool,
|
|
||||||
lo_repo TYPE REF TO lcl_repo_online.
|
|
||||||
|
|
||||||
|
|
||||||
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
|
||||||
|
|
||||||
lcl_popups=>create_branch_popup(
|
|
||||||
IMPORTING
|
|
||||||
ev_name = lv_name
|
|
||||||
ev_cancel = lv_cancel ).
|
|
||||||
IF lv_cancel = abap_true.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ASSERT lv_name CP 'refs/heads/+*'.
|
|
||||||
|
|
||||||
lcl_git_porcelain=>create_branch(
|
|
||||||
io_repo = lo_repo
|
|
||||||
iv_name = lv_name
|
|
||||||
iv_from = lo_repo->get_sha1_local( ) ).
|
|
||||||
|
|
||||||
* automatically switch to new branch
|
|
||||||
lo_repo->set_branch_name( lv_name ).
|
|
||||||
|
|
||||||
MESSAGE 'Switched to new branch' TYPE 'S' ##NO_TEXT.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD repo_pull.
|
|
||||||
|
|
||||||
DATA: lo_repo TYPE REF TO lcl_repo_online.
|
|
||||||
|
|
||||||
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
|
||||||
|
|
||||||
IF lo_repo->is_write_protected( ) = abap_true.
|
|
||||||
lcx_exception=>raise( 'Cannot pull. Local code is write-protected by repo config' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lo_repo->refresh( ).
|
|
||||||
lo_repo->deserialize( ).
|
|
||||||
|
|
||||||
COMMIT WORK.
|
|
||||||
|
|
||||||
ENDMETHOD. "pull
|
|
||||||
|
|
||||||
METHOD get_page_stage.
|
|
||||||
|
|
||||||
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
|
||||||
lo_stage_page TYPE REF TO lcl_gui_page_stage.
|
|
||||||
|
|
||||||
|
|
||||||
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
|
||||||
|
|
||||||
" force refresh on stage, to make sure the latest local and remote files are used
|
|
||||||
lo_repo->refresh( ).
|
|
||||||
|
|
||||||
CREATE OBJECT lo_stage_page
|
|
||||||
EXPORTING
|
|
||||||
io_repo = lo_repo.
|
|
||||||
|
|
||||||
ri_page = lo_stage_page.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD db_delete.
|
|
||||||
|
|
||||||
DATA: lv_answer TYPE c LENGTH 1,
|
|
||||||
ls_key TYPE lcl_persistence_db=>ty_content.
|
|
||||||
|
|
||||||
|
|
||||||
ls_key = lcl_html_action_utils=>dbkey_decode( iv_getdata ).
|
|
||||||
|
|
||||||
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
|
||||||
EXPORTING
|
|
||||||
titlebar = 'Warning'
|
|
||||||
text_question = 'Delete?'
|
|
||||||
text_button_1 = 'Ok'
|
|
||||||
icon_button_1 = 'ICON_DELETE'
|
|
||||||
text_button_2 = 'Cancel'
|
|
||||||
icon_button_2 = 'ICON_CANCEL'
|
|
||||||
default_button = '2'
|
|
||||||
display_cancel_button = abap_false
|
|
||||||
IMPORTING
|
|
||||||
answer = lv_answer
|
|
||||||
EXCEPTIONS
|
|
||||||
text_not_found = 1
|
|
||||||
OTHERS = 2. "#EC NOTEXT
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF lv_answer = '2'.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lcl_app=>db( )->delete(
|
|
||||||
iv_type = ls_key-type
|
|
||||||
iv_value = ls_key-value ).
|
|
||||||
|
|
||||||
COMMIT WORK.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD db_save.
|
|
||||||
|
|
||||||
DATA: lv_string TYPE string,
|
|
||||||
ls_content TYPE lcl_persistence_db=>ty_content,
|
|
||||||
lt_fields TYPE tihttpnvp.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
|
|
||||||
CONCATENATE LINES OF it_postdata INTO lv_string.
|
|
||||||
|
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'type' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
ls_content-type = <ls_field>-value.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'value' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
ls_content-value = <ls_field>-value.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'xmldata' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
IF <ls_field>-value(1) <> '<'.
|
|
||||||
ls_content-data_str = <ls_field>-value+1. " hmm
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lcl_app=>db( )->update(
|
|
||||||
iv_type = ls_content-type
|
|
||||||
iv_value = ls_content-value
|
|
||||||
iv_data = ls_content-data_str ).
|
|
||||||
|
|
||||||
COMMIT WORK.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS. " lcl_gui_router
|
|
17
src/zabapgit_gui_pages.prog.abap
Normal file
17
src/zabapgit_gui_pages.prog.abap
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_GUI_PAGES
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
* All UI pages
|
||||||
|
|
||||||
|
INCLUDE zabapgit_html_action_utils.
|
||||||
|
INCLUDE zabapgit_page.
|
||||||
|
INCLUDE zabapgit_page_commit.
|
||||||
|
INCLUDE zabapgit_page_merge.
|
||||||
|
INCLUDE zabapgit_page_branch_overview.
|
||||||
|
INCLUDE zabapgit_page_stage.
|
||||||
|
INCLUDE zabapgit_page_db.
|
||||||
|
INCLUDE zabapgit_page_main.
|
||||||
|
INCLUDE zabapgit_page_background.
|
||||||
|
INCLUDE zabapgit_page_diff.
|
||||||
|
INCLUDE zabapgit_page_explore.
|
48
src/zabapgit_gui_pages.prog.xml
Normal file
48
src/zabapgit_gui_pages.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_GUI_PAGES</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_GUI_PAGES</ENTRY>
|
||||||
|
<LENGTH>26</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
647
src/zabapgit_gui_router.prog.abap
Normal file
647
src/zabapgit_gui_router.prog.abap
Normal file
|
@ -0,0 +1,647 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_GUI_ROUTER
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_gui_router DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_gui_router DEFINITION FINAL.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
METHODS on_event
|
||||||
|
IMPORTING iv_action TYPE clike
|
||||||
|
iv_getdata TYPE clike OPTIONAL
|
||||||
|
it_postdata TYPE cnht_post_data_tab OPTIONAL
|
||||||
|
EXPORTING ei_page TYPE REF TO lif_gui_page
|
||||||
|
ev_state TYPE i
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
METHODS get_page_by_name
|
||||||
|
IMPORTING iv_name TYPE clike
|
||||||
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS get_page_diff
|
||||||
|
IMPORTING iv_getdata TYPE clike
|
||||||
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS get_page_branch_overview
|
||||||
|
IMPORTING iv_getdata TYPE clike
|
||||||
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS get_page_stage
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS get_page_db_by_name
|
||||||
|
IMPORTING iv_name TYPE clike
|
||||||
|
iv_getdata TYPE clike
|
||||||
|
RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS abapgit_installation
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS repo_purge
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS repo_remove
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS repo_pull
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS reset
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS create_branch
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS db_delete
|
||||||
|
IMPORTING iv_getdata TYPE clike
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS db_save
|
||||||
|
IMPORTING it_postdata TYPE cnht_post_data_tab
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_gui_router IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_gui_router IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD on_event.
|
||||||
|
|
||||||
|
DATA: lv_url TYPE string,
|
||||||
|
lv_key TYPE lcl_persistence_repo=>ty_repo-key,
|
||||||
|
ls_item TYPE ty_item.
|
||||||
|
|
||||||
|
|
||||||
|
CASE iv_action.
|
||||||
|
" General routing
|
||||||
|
WHEN 'main'
|
||||||
|
OR 'explore'
|
||||||
|
OR 'db'
|
||||||
|
OR 'background_run'.
|
||||||
|
ei_page = get_page_by_name( iv_action ).
|
||||||
|
ev_state = gc_event_state-new_page.
|
||||||
|
WHEN 'background'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
CREATE OBJECT ei_page TYPE lcl_gui_page_background
|
||||||
|
EXPORTING
|
||||||
|
iv_key = lv_key.
|
||||||
|
ev_state = gc_event_state-new_page.
|
||||||
|
WHEN 'abapgithome'.
|
||||||
|
cl_gui_frontend_services=>execute( EXPORTING document = gc_abapgit_homepage
|
||||||
|
EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Opening page in external browser failed.' ).
|
||||||
|
ENDIF.
|
||||||
|
ev_state = gc_event_state-no_more_act.
|
||||||
|
WHEN 'abapgit_installation'.
|
||||||
|
abapgit_installation( ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN 'jump'.
|
||||||
|
lcl_html_action_utils=>jump_decode( EXPORTING iv_string = iv_getdata
|
||||||
|
IMPORTING ev_obj_type = ls_item-obj_type
|
||||||
|
ev_obj_name = ls_item-obj_name ).
|
||||||
|
lcl_objects=>jump( ls_item ).
|
||||||
|
ev_state = gc_event_state-no_more_act.
|
||||||
|
WHEN 'diff'.
|
||||||
|
ei_page = get_page_diff( iv_getdata ).
|
||||||
|
ev_state = gc_event_state-new_page.
|
||||||
|
|
||||||
|
" DB actions
|
||||||
|
WHEN 'db_display' OR 'db_edit'.
|
||||||
|
ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ).
|
||||||
|
ev_state = gc_event_state-new_page.
|
||||||
|
WHEN 'db_delete'.
|
||||||
|
db_delete( iv_getdata = iv_getdata ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN 'db_save'.
|
||||||
|
db_save( it_postdata ).
|
||||||
|
ev_state = gc_event_state-go_back.
|
||||||
|
|
||||||
|
" Repository state actions
|
||||||
|
WHEN 'uninstall'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
repo_purge( lv_key ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN 'remove'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
repo_remove( lv_key ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN 'zipimport'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
lcl_zip=>import( lv_key ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN 'zipexport'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
lcl_zip=>export( lcl_app=>repo_srv( )->get( lv_key ) ).
|
||||||
|
ev_state = gc_event_state-no_more_act.
|
||||||
|
WHEN 'files_commit'. "TODO refactor name ?
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
lcl_zip=>export( io_repo = lcl_app=>repo_srv( )->get( lv_key )
|
||||||
|
iv_zip = abap_false ).
|
||||||
|
ev_state = gc_event_state-no_more_act.
|
||||||
|
WHEN 'packagezip'.
|
||||||
|
lcl_popups=>repo_package_zip( ).
|
||||||
|
ev_state = gc_event_state-no_more_act.
|
||||||
|
WHEN 'transportzip'.
|
||||||
|
lcl_transport=>zip( ).
|
||||||
|
ev_state = gc_event_state-no_more_act.
|
||||||
|
WHEN 'refresh'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
lcl_app=>repo_srv( )->get( lv_key )->refresh( ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
|
||||||
|
" explore page
|
||||||
|
WHEN 'install'.
|
||||||
|
lv_url = iv_getdata.
|
||||||
|
lcl_popups=>repo_clone( lv_url ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
|
||||||
|
" Repository online actions
|
||||||
|
WHEN 'pull'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
repo_pull( lv_key ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN 'stage'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
ei_page = get_page_stage( lv_key ).
|
||||||
|
ev_state = gc_event_state-new_page_w_bookmark.
|
||||||
|
WHEN 'reset'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
reset( lv_key ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN 'create_branch'.
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
create_branch( lv_key ).
|
||||||
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN 'branch_overview'.
|
||||||
|
ei_page = get_page_branch_overview( iv_getdata ).
|
||||||
|
ev_state = gc_event_state-new_page.
|
||||||
|
WHEN OTHERS.
|
||||||
|
ev_state = gc_event_state-not_handled.
|
||||||
|
ENDCASE.
|
||||||
|
ENDMETHOD. " on_event
|
||||||
|
|
||||||
|
METHOD get_page_by_name.
|
||||||
|
|
||||||
|
DATA: lv_page_class TYPE string,
|
||||||
|
lv_message TYPE string.
|
||||||
|
|
||||||
|
lv_page_class = |LCL_GUI_PAGE_{ to_upper( iv_name ) }|.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
CREATE OBJECT ri_page TYPE (lv_page_class).
|
||||||
|
CATCH cx_sy_create_object_error.
|
||||||
|
lv_message = |Cannot create page class { lv_page_class }|.
|
||||||
|
lcx_exception=>raise( lv_message ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD. " get_page_by_name
|
||||||
|
|
||||||
|
METHOD get_page_db_by_name.
|
||||||
|
|
||||||
|
DATA: lv_page_class TYPE string,
|
||||||
|
lv_message TYPE string,
|
||||||
|
ls_key TYPE lcl_persistence_db=>ty_content.
|
||||||
|
|
||||||
|
lv_page_class = |LCL_GUI_PAGE_{ to_upper( iv_name ) }|.
|
||||||
|
ls_key = lcl_html_action_utils=>dbkey_decode( iv_getdata ).
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
CREATE OBJECT ri_page TYPE (lv_page_class)
|
||||||
|
EXPORTING
|
||||||
|
is_key = ls_key.
|
||||||
|
|
||||||
|
CATCH cx_sy_create_object_error.
|
||||||
|
lv_message = |Cannot create page class { lv_page_class }|.
|
||||||
|
lcx_exception=>raise( lv_message ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD. " get_page_db_by_name
|
||||||
|
|
||||||
|
METHOD get_page_branch_overview.
|
||||||
|
|
||||||
|
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||||
|
lo_page TYPE REF TO lcl_gui_page_branch_overview,
|
||||||
|
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
|
||||||
|
|
||||||
|
|
||||||
|
lv_key = iv_getdata.
|
||||||
|
|
||||||
|
lo_repo ?= lcl_app=>repo_srv( )->get( lv_key ).
|
||||||
|
|
||||||
|
CREATE OBJECT lo_page
|
||||||
|
EXPORTING
|
||||||
|
io_repo = lo_repo.
|
||||||
|
|
||||||
|
ri_page = lo_page.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_page_diff.
|
||||||
|
|
||||||
|
DATA: lt_remote TYPE ty_files_tt,
|
||||||
|
lt_local TYPE ty_files_item_tt,
|
||||||
|
lo_page TYPE REF TO lcl_gui_page_diff,
|
||||||
|
lo_repo TYPE REF TO lcl_repo_online,
|
||||||
|
ls_file TYPE ty_repo_file,
|
||||||
|
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF lt_remote,
|
||||||
|
<ls_local> LIKE LINE OF lt_local.
|
||||||
|
|
||||||
|
lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata
|
||||||
|
IMPORTING ev_key = lv_key
|
||||||
|
eg_file = ls_file ).
|
||||||
|
|
||||||
|
lo_repo ?= lcl_app=>repo_srv( )->get( lv_key ).
|
||||||
|
lt_remote = lo_repo->get_files_remote( ).
|
||||||
|
lt_local = lo_repo->get_files_local( ).
|
||||||
|
|
||||||
|
READ TABLE lt_remote ASSIGNING <ls_remote>
|
||||||
|
WITH KEY filename = ls_file-filename
|
||||||
|
path = ls_file-path.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'file not found remotely' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_local ASSIGNING <ls_local>
|
||||||
|
WITH KEY file-filename = ls_file-filename
|
||||||
|
file-path = ls_file-path.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'file not found locally' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_page
|
||||||
|
EXPORTING
|
||||||
|
is_local = <ls_local>-file
|
||||||
|
is_remote = <ls_remote>.
|
||||||
|
|
||||||
|
ri_page = lo_page.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD abapgit_installation.
|
||||||
|
|
||||||
|
CONSTANTS lc_package_abapgit TYPE devclass VALUE '$ABAPGIT'.
|
||||||
|
CONSTANTS lc_package_plugins TYPE devclass VALUE '$ABAPGIT_PLUGINS'.
|
||||||
|
|
||||||
|
DATA lv_text TYPE c LENGTH 100.
|
||||||
|
DATA lv_answer TYPE c LENGTH 1.
|
||||||
|
DATA lo_repo TYPE REF TO lcl_repo_online.
|
||||||
|
DATA lv_url TYPE string.
|
||||||
|
DATA lv_target_package TYPE devclass.
|
||||||
|
|
||||||
|
lv_text = |Installing current version ABAPGit to package { lc_package_abapgit } |
|
||||||
|
&& |and plugins to { lc_package_plugins }|.
|
||||||
|
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
titlebar = 'Install abapGit'
|
||||||
|
text_question = lv_text
|
||||||
|
text_button_1 = 'Continue'
|
||||||
|
text_button_2 = 'Cancel'
|
||||||
|
default_button = '2'
|
||||||
|
display_cancel_button = abap_false
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer ##no_text.
|
||||||
|
IF lv_answer <> '1'.
|
||||||
|
RETURN. ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
DO 2 TIMES.
|
||||||
|
CASE sy-index.
|
||||||
|
WHEN 1.
|
||||||
|
lv_url = 'https://github.com/larshp/abapGit.git'.
|
||||||
|
lv_target_package = lc_package_abapgit.
|
||||||
|
WHEN 2.
|
||||||
|
lv_url = 'https://github.com/larshp/abapGit-plugins.git' ##no_text.
|
||||||
|
lv_target_package = lc_package_plugins.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
IF abap_false = lcl_app=>repo_srv( )->is_repo_installed(
|
||||||
|
iv_url = lv_url
|
||||||
|
iv_target_package = lv_target_package ).
|
||||||
|
|
||||||
|
lcl_sap_package=>create_local( lv_target_package ).
|
||||||
|
|
||||||
|
lo_repo = lcl_app=>repo_srv( )->new_online(
|
||||||
|
iv_url = lv_url
|
||||||
|
iv_branch_name = 'refs/heads/master' "TODO replace with HEAD ?
|
||||||
|
iv_package = lv_target_package ) ##NO_TEXT.
|
||||||
|
|
||||||
|
lo_repo->status( ). " check for errors
|
||||||
|
lo_repo->deserialize( ).
|
||||||
|
ENDIF.
|
||||||
|
ENDDO.
|
||||||
|
|
||||||
|
COMMIT WORK.
|
||||||
|
|
||||||
|
ENDMETHOD. "abapgit_installation
|
||||||
|
|
||||||
|
METHOD repo_purge.
|
||||||
|
|
||||||
|
DATA: lt_tadir TYPE ty_tadir_tt,
|
||||||
|
lv_count TYPE c LENGTH 3,
|
||||||
|
lv_answer TYPE c LENGTH 1,
|
||||||
|
lo_repo TYPE REF TO lcl_repo,
|
||||||
|
lv_package TYPE devclass,
|
||||||
|
lv_question TYPE c LENGTH 100.
|
||||||
|
|
||||||
|
|
||||||
|
lo_repo = lcl_app=>repo_srv( )->get( iv_key ).
|
||||||
|
|
||||||
|
IF lo_repo->is_write_protected( ) = abap_true.
|
||||||
|
lcx_exception=>raise( 'Cannot purge. Local code is write-protected by repo config' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_package = lo_repo->get_package( ).
|
||||||
|
lt_tadir = lcl_tadir=>read( lv_package ).
|
||||||
|
|
||||||
|
IF lines( lt_tadir ) > 0.
|
||||||
|
lv_count = lines( lt_tadir ).
|
||||||
|
|
||||||
|
CONCATENATE 'This will delete all objects in package' lv_package
|
||||||
|
INTO lv_question
|
||||||
|
SEPARATED BY space. "#EC NOTEXT
|
||||||
|
|
||||||
|
CONCATENATE lv_question '(' lv_count 'objects)'
|
||||||
|
INTO lv_question
|
||||||
|
SEPARATED BY space. "#EC NOTEXT
|
||||||
|
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
titlebar = 'Uninstall'
|
||||||
|
text_question = lv_question
|
||||||
|
text_button_1 = 'Delete'
|
||||||
|
icon_button_1 = 'ICON_DELETE'
|
||||||
|
text_button_2 = 'Cancel'
|
||||||
|
icon_button_2 = 'ICON_CANCEL'
|
||||||
|
default_button = '2'
|
||||||
|
display_cancel_button = abap_false
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer
|
||||||
|
EXCEPTIONS
|
||||||
|
text_not_found = 1
|
||||||
|
OTHERS = 2. "#EC NOTEXT
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_answer = '2'.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lcl_objects=>delete( lt_tadir ).
|
||||||
|
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lcl_app=>repo_srv( )->delete( lo_repo ).
|
||||||
|
|
||||||
|
COMMIT WORK.
|
||||||
|
|
||||||
|
ENDMETHOD. "repo_purge
|
||||||
|
|
||||||
|
METHOD repo_remove.
|
||||||
|
|
||||||
|
DATA: lv_answer TYPE c LENGTH 1,
|
||||||
|
lo_repo TYPE REF TO lcl_repo,
|
||||||
|
lv_package TYPE devclass,
|
||||||
|
lv_question TYPE c LENGTH 100.
|
||||||
|
|
||||||
|
|
||||||
|
lo_repo = lcl_app=>repo_srv( )->get( iv_key ).
|
||||||
|
lv_package = lo_repo->get_package( ).
|
||||||
|
|
||||||
|
CONCATENATE 'This will remove the repository reference to the package'
|
||||||
|
lv_package
|
||||||
|
INTO lv_question
|
||||||
|
SEPARATED BY space. "#EC NOTEXT
|
||||||
|
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
titlebar = 'Remove'
|
||||||
|
text_question = lv_question
|
||||||
|
text_button_1 = 'Remove'
|
||||||
|
icon_button_1 = 'ICON_WF_UNLINK'
|
||||||
|
text_button_2 = 'Cancel'
|
||||||
|
icon_button_2 = 'ICON_CANCEL'
|
||||||
|
default_button = '2'
|
||||||
|
display_cancel_button = abap_false
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer
|
||||||
|
EXCEPTIONS
|
||||||
|
text_not_found = 1
|
||||||
|
OTHERS = 2. "#EC NOTEXT
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_answer = '2'.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lcl_app=>repo_srv( )->delete( lo_repo ).
|
||||||
|
|
||||||
|
COMMIT WORK.
|
||||||
|
|
||||||
|
ENDMETHOD. "repo_remove
|
||||||
|
|
||||||
|
METHOD reset.
|
||||||
|
|
||||||
|
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||||
|
lv_answer TYPE c LENGTH 1.
|
||||||
|
|
||||||
|
|
||||||
|
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
||||||
|
|
||||||
|
IF lo_repo->is_write_protected( ) = abap_true.
|
||||||
|
lcx_exception=>raise( 'Cannot reset. Local code is write-protected by repo config' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
titlebar = 'Warning'
|
||||||
|
text_question = 'Reset local objects?'
|
||||||
|
text_button_1 = 'Ok'
|
||||||
|
icon_button_1 = 'ICON_OKAY'
|
||||||
|
text_button_2 = 'Cancel'
|
||||||
|
icon_button_2 = 'ICON_CANCEL'
|
||||||
|
default_button = '2'
|
||||||
|
display_cancel_button = abap_false
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer
|
||||||
|
EXCEPTIONS
|
||||||
|
text_not_found = 1
|
||||||
|
OTHERS = 2. "#EC NOTEXT
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_answer = '2'.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lo_repo->deserialize( ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD create_branch.
|
||||||
|
|
||||||
|
DATA: lv_name TYPE string,
|
||||||
|
lv_cancel TYPE abap_bool,
|
||||||
|
lo_repo TYPE REF TO lcl_repo_online.
|
||||||
|
|
||||||
|
|
||||||
|
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
||||||
|
|
||||||
|
lcl_popups=>create_branch_popup(
|
||||||
|
IMPORTING
|
||||||
|
ev_name = lv_name
|
||||||
|
ev_cancel = lv_cancel ).
|
||||||
|
IF lv_cancel = abap_true.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ASSERT lv_name CP 'refs/heads/+*'.
|
||||||
|
|
||||||
|
lcl_git_porcelain=>create_branch(
|
||||||
|
io_repo = lo_repo
|
||||||
|
iv_name = lv_name
|
||||||
|
iv_from = lo_repo->get_sha1_local( ) ).
|
||||||
|
|
||||||
|
* automatically switch to new branch
|
||||||
|
lo_repo->set_branch_name( lv_name ).
|
||||||
|
|
||||||
|
MESSAGE 'Switched to new branch' TYPE 'S' ##NO_TEXT.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD repo_pull.
|
||||||
|
|
||||||
|
DATA: lo_repo TYPE REF TO lcl_repo_online.
|
||||||
|
|
||||||
|
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
||||||
|
|
||||||
|
IF lo_repo->is_write_protected( ) = abap_true.
|
||||||
|
lcx_exception=>raise( 'Cannot pull. Local code is write-protected by repo config' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lo_repo->refresh( ).
|
||||||
|
lo_repo->deserialize( ).
|
||||||
|
|
||||||
|
COMMIT WORK.
|
||||||
|
|
||||||
|
ENDMETHOD. "pull
|
||||||
|
|
||||||
|
METHOD get_page_stage.
|
||||||
|
|
||||||
|
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||||
|
lo_stage_page TYPE REF TO lcl_gui_page_stage.
|
||||||
|
|
||||||
|
|
||||||
|
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
||||||
|
|
||||||
|
" force refresh on stage, to make sure the latest local and remote files are used
|
||||||
|
lo_repo->refresh( ).
|
||||||
|
|
||||||
|
CREATE OBJECT lo_stage_page
|
||||||
|
EXPORTING
|
||||||
|
io_repo = lo_repo.
|
||||||
|
|
||||||
|
ri_page = lo_stage_page.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD db_delete.
|
||||||
|
|
||||||
|
DATA: lv_answer TYPE c LENGTH 1,
|
||||||
|
ls_key TYPE lcl_persistence_db=>ty_content.
|
||||||
|
|
||||||
|
|
||||||
|
ls_key = lcl_html_action_utils=>dbkey_decode( iv_getdata ).
|
||||||
|
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
titlebar = 'Warning'
|
||||||
|
text_question = 'Delete?'
|
||||||
|
text_button_1 = 'Ok'
|
||||||
|
icon_button_1 = 'ICON_DELETE'
|
||||||
|
text_button_2 = 'Cancel'
|
||||||
|
icon_button_2 = 'ICON_CANCEL'
|
||||||
|
default_button = '2'
|
||||||
|
display_cancel_button = abap_false
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer
|
||||||
|
EXCEPTIONS
|
||||||
|
text_not_found = 1
|
||||||
|
OTHERS = 2. "#EC NOTEXT
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_answer = '2'.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lcl_app=>db( )->delete(
|
||||||
|
iv_type = ls_key-type
|
||||||
|
iv_value = ls_key-value ).
|
||||||
|
|
||||||
|
COMMIT WORK.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD db_save.
|
||||||
|
|
||||||
|
DATA: lv_string TYPE string,
|
||||||
|
ls_content TYPE lcl_persistence_db=>ty_content,
|
||||||
|
lt_fields TYPE tihttpnvp.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
|
||||||
|
CONCATENATE LINES OF it_postdata INTO lv_string.
|
||||||
|
|
||||||
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'type' ##NO_TEXT.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
ls_content-type = <ls_field>-value.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'value' ##NO_TEXT.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
ls_content-value = <ls_field>-value.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'xmldata' ##NO_TEXT.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF <ls_field>-value(1) <> '<'.
|
||||||
|
ls_content-data_str = <ls_field>-value+1. " hmm
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lcl_app=>db( )->update(
|
||||||
|
iv_type = ls_content-type
|
||||||
|
iv_value = ls_content-value
|
||||||
|
iv_data = ls_content-data_str ).
|
||||||
|
|
||||||
|
COMMIT WORK.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS. " lcl_gui_router
|
48
src/zabapgit_gui_router.prog.xml
Normal file
48
src/zabapgit_gui_router.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_GUI_ROUTER</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_GUI_ROUTER</ENTRY>
|
||||||
|
<LENGTH>27</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -6,263 +6,6 @@ DEFINE _add.
|
||||||
ro_html->add( &1 ) ##NO_TEXT.
|
ro_html->add( &1 ) ##NO_TEXT.
|
||||||
END-OF-DEFINITION.
|
END-OF-DEFINITION.
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
* CLASS lcl_html_action_utils DEFINITION
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_html_action_utils DEFINITION FINAL.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_commit_fields, "TODO refactor ! Move to normal place
|
|
||||||
repo_key TYPE lcl_persistence_repo=>ty_repo-key,
|
|
||||||
username TYPE string,
|
|
||||||
email TYPE string,
|
|
||||||
comment TYPE string,
|
|
||||||
body TYPE string,
|
|
||||||
END OF ty_commit_fields.
|
|
||||||
|
|
||||||
CLASS-METHODS jump_encode
|
|
||||||
IMPORTING iv_obj_type TYPE tadir-object
|
|
||||||
iv_obj_name TYPE tadir-obj_name
|
|
||||||
RETURNING VALUE(rv_string) TYPE string.
|
|
||||||
|
|
||||||
CLASS-METHODS jump_decode
|
|
||||||
IMPORTING iv_string TYPE clike
|
|
||||||
EXPORTING ev_obj_type TYPE tadir-object
|
|
||||||
ev_obj_name TYPE tadir-obj_name
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS file_encode
|
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
ig_file TYPE any "ty_repo_file
|
|
||||||
RETURNING VALUE(rv_string) TYPE string.
|
|
||||||
|
|
||||||
CLASS-METHODS file_decode
|
|
||||||
IMPORTING iv_string TYPE clike
|
|
||||||
EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
eg_file TYPE any "ty_repo_file
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS dbkey_encode
|
|
||||||
IMPORTING is_key TYPE lcl_persistence_db=>ty_content
|
|
||||||
RETURNING VALUE(rv_string) TYPE string.
|
|
||||||
|
|
||||||
CLASS-METHODS dbkey_decode
|
|
||||||
IMPORTING iv_string TYPE clike
|
|
||||||
RETURNING VALUE(rs_key) TYPE lcl_persistence_db=>ty_content.
|
|
||||||
|
|
||||||
CLASS-METHODS parse_commit_request
|
|
||||||
IMPORTING it_postdata TYPE cnht_post_data_tab
|
|
||||||
RETURNING VALUE(rs_fields) TYPE ty_commit_fields.
|
|
||||||
|
|
||||||
CLASS-METHODS repo_key_encode
|
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
|
||||||
RETURNING VALUE(rv_string) TYPE string.
|
|
||||||
|
|
||||||
ENDCLASS. "lcl_html_action_utils DEFINITION
|
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
* CLASS lcl_html_action_utils IMPLEMENTATION
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_html_action_utils IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD jump_encode.
|
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
|
||||||
ls_field LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
|
|
||||||
ls_field-name = 'TYPE'.
|
|
||||||
ls_field-value = iv_obj_type.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'NAME'.
|
|
||||||
ls_field-value = iv_obj_name.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
|
||||||
|
|
||||||
ENDMETHOD. "jump_encode
|
|
||||||
|
|
||||||
METHOD jump_decode.
|
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
|
||||||
lv_string TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
|
|
||||||
lv_string = iv_string. " type conversion
|
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ev_obj_type = <ls_field>-value.
|
|
||||||
ELSE.
|
|
||||||
CLEAR ev_obj_type.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'NAME'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ev_obj_name = <ls_field>-value.
|
|
||||||
ELSE.
|
|
||||||
CLEAR ev_obj_name.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "jump_decode
|
|
||||||
|
|
||||||
METHOD file_encode.
|
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
|
||||||
ls_field LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <lv_field> TYPE string.
|
|
||||||
|
|
||||||
ls_field-name = 'KEY'.
|
|
||||||
ls_field-value = iv_key.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'PATH'.
|
|
||||||
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
|
|
||||||
ASSERT <lv_field> IS ASSIGNED.
|
|
||||||
ls_field-value = <lv_field>.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'FILENAME'.
|
|
||||||
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
|
|
||||||
ASSERT <lv_field> IS ASSIGNED.
|
|
||||||
ls_field-value = <lv_field>.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
|
||||||
|
|
||||||
ENDMETHOD. "file_encode
|
|
||||||
|
|
||||||
METHOD file_decode.
|
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
|
||||||
lv_string TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields,
|
|
||||||
<lv_field> TYPE string.
|
|
||||||
|
|
||||||
CLEAR: ev_key, eg_file.
|
|
||||||
lv_string = iv_string. " type conversion
|
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'KEY'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ev_key = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'PATH'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ASSIGN COMPONENT 'PATH' OF STRUCTURE eg_file TO <lv_field>.
|
|
||||||
ASSERT <lv_field> IS ASSIGNED.
|
|
||||||
<lv_field> = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'FILENAME'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ASSIGN COMPONENT 'FILENAME' OF STRUCTURE eg_file TO <lv_field>.
|
|
||||||
ASSERT <lv_field> IS ASSIGNED.
|
|
||||||
<lv_field> = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "file_decode
|
|
||||||
|
|
||||||
METHOD dbkey_encode.
|
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
|
||||||
ls_field LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'TYPE'.
|
|
||||||
ls_field-value = is_key-type.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'VALUE'.
|
|
||||||
ls_field-value = is_key-value.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
|
||||||
|
|
||||||
ENDMETHOD. "dbkey_encode
|
|
||||||
|
|
||||||
METHOD dbkey_decode.
|
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
|
||||||
lv_string TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
lv_string = iv_string. " type conversion
|
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
rs_key-type = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'VALUE'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
rs_key-value = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "dbkey_decode
|
|
||||||
|
|
||||||
METHOD parse_commit_request.
|
|
||||||
|
|
||||||
CONSTANTS: lc_replace TYPE string VALUE '<<new>>'.
|
|
||||||
|
|
||||||
DATA: lv_string TYPE string,
|
|
||||||
lt_fields TYPE tihttpnvp.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
|
|
||||||
CONCATENATE LINES OF it_postdata INTO lv_string.
|
|
||||||
|
|
||||||
REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace.
|
|
||||||
|
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'key' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
rs_fields-repo_key = <ls_field>-value.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'username' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
rs_fields-username = <ls_field>-value.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'email' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
rs_fields-email = <ls_field>-value.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'comment' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
rs_fields-comment = <ls_field>-value.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'body' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
rs_fields-body = <ls_field>-value.
|
|
||||||
REPLACE ALL OCCURRENCES OF lc_replace IN rs_fields-body WITH gc_newline.
|
|
||||||
|
|
||||||
ENDMETHOD. "parse_commit_request
|
|
||||||
|
|
||||||
METHOD repo_key_encode.
|
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
|
||||||
ls_field LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'KEY'.
|
|
||||||
ls_field-value = iv_key.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
|
||||||
|
|
||||||
ENDMETHOD. "repo_key_encode
|
|
||||||
|
|
||||||
ENDCLASS. "lcl_html_action_utils IMPLEMENTATION
|
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_html_helper DEFINITION
|
* CLASS lcl_html_helper DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
@ -559,83 +302,3 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||||
ENDMETHOD. "render
|
ENDMETHOD. "render
|
||||||
|
|
||||||
ENDCLASS. "lcl_html_toolbar IMPLEMENTATION
|
ENDCLASS. "lcl_html_toolbar IMPLEMENTATION
|
||||||
|
|
||||||
CLASS lcl_log DEFINITION FINAL.
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
METHODS:
|
|
||||||
add
|
|
||||||
IMPORTING
|
|
||||||
iv_msgv1 TYPE csequence
|
|
||||||
iv_msgv2 TYPE csequence OPTIONAL
|
|
||||||
iv_msgv3 TYPE csequence OPTIONAL
|
|
||||||
iv_msgv4 TYPE csequence OPTIONAL,
|
|
||||||
count
|
|
||||||
RETURNING VALUE(rv_count) TYPE i,
|
|
||||||
to_html
|
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
|
||||||
show.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
|
||||||
DATA: mt_log TYPE rs_t_msg.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS lcl_log IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD to_html.
|
|
||||||
|
|
||||||
DATA: lv_string TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_log> LIKE LINE OF mt_log.
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
|
||||||
|
|
||||||
IF count( ) = 0.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ro_html->add( '<br>' ).
|
|
||||||
LOOP AT mt_log ASSIGNING <ls_log>.
|
|
||||||
CONCATENATE <ls_log>-msgv1
|
|
||||||
<ls_log>-msgv2
|
|
||||||
<ls_log>-msgv3
|
|
||||||
<ls_log>-msgv4 INTO lv_string SEPARATED BY space.
|
|
||||||
ro_html->add( lv_string ).
|
|
||||||
ro_html->add( '<br>' ).
|
|
||||||
ENDLOOP.
|
|
||||||
ro_html->add( '<br>' ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD add.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_log> LIKE LINE OF mt_log.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO mt_log ASSIGNING <ls_log>.
|
|
||||||
<ls_log>-msgty = 'W'.
|
|
||||||
<ls_log>-msgid = '00'.
|
|
||||||
<ls_log>-msgno = '001'.
|
|
||||||
<ls_log>-msgv1 = iv_msgv1.
|
|
||||||
<ls_log>-msgv2 = iv_msgv2.
|
|
||||||
<ls_log>-msgv3 = iv_msgv3.
|
|
||||||
<ls_log>-msgv4 = iv_msgv4.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD show.
|
|
||||||
CALL FUNCTION 'RSDC_SHOW_MESSAGES_POPUP'
|
|
||||||
EXPORTING
|
|
||||||
i_t_msg = mt_log
|
|
||||||
i_txt = 'Warning'
|
|
||||||
i_with_s_on_empty = abap_false
|
|
||||||
i_one_msg_direct = abap_false
|
|
||||||
i_one_msg_type_s = abap_false
|
|
||||||
##no_text.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD count.
|
|
||||||
rv_count = lines( mt_log ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
260
src/zabapgit_html_action_utils.prog.abap
Normal file
260
src/zabapgit_html_action_utils.prog.abap
Normal file
|
@ -0,0 +1,260 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_HTML_ACTION_UTILS
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_html_action_utils DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_html_action_utils DEFINITION FINAL.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_commit_fields, "TODO refactor ! Move to normal place
|
||||||
|
repo_key TYPE lcl_persistence_repo=>ty_repo-key,
|
||||||
|
username TYPE string,
|
||||||
|
email TYPE string,
|
||||||
|
comment TYPE string,
|
||||||
|
body TYPE string,
|
||||||
|
END OF ty_commit_fields.
|
||||||
|
|
||||||
|
CLASS-METHODS jump_encode
|
||||||
|
IMPORTING iv_obj_type TYPE tadir-object
|
||||||
|
iv_obj_name TYPE tadir-obj_name
|
||||||
|
RETURNING VALUE(rv_string) TYPE string.
|
||||||
|
|
||||||
|
CLASS-METHODS jump_decode
|
||||||
|
IMPORTING iv_string TYPE clike
|
||||||
|
EXPORTING ev_obj_type TYPE tadir-object
|
||||||
|
ev_obj_name TYPE tadir-obj_name
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS file_encode
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
ig_file TYPE any "ty_repo_file
|
||||||
|
RETURNING VALUE(rv_string) TYPE string.
|
||||||
|
|
||||||
|
CLASS-METHODS file_decode
|
||||||
|
IMPORTING iv_string TYPE clike
|
||||||
|
EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
eg_file TYPE any "ty_repo_file
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS dbkey_encode
|
||||||
|
IMPORTING is_key TYPE lcl_persistence_db=>ty_content
|
||||||
|
RETURNING VALUE(rv_string) TYPE string.
|
||||||
|
|
||||||
|
CLASS-METHODS dbkey_decode
|
||||||
|
IMPORTING iv_string TYPE clike
|
||||||
|
RETURNING VALUE(rs_key) TYPE lcl_persistence_db=>ty_content.
|
||||||
|
|
||||||
|
CLASS-METHODS parse_commit_request
|
||||||
|
IMPORTING it_postdata TYPE cnht_post_data_tab
|
||||||
|
RETURNING VALUE(rs_fields) TYPE ty_commit_fields.
|
||||||
|
|
||||||
|
CLASS-METHODS repo_key_encode
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
RETURNING VALUE(rv_string) TYPE string.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_html_action_utils DEFINITION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_html_action_utils IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD jump_encode.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
ls_field LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
|
||||||
|
ls_field-name = 'TYPE'.
|
||||||
|
ls_field-value = iv_obj_type.
|
||||||
|
APPEND ls_field TO lt_fields.
|
||||||
|
|
||||||
|
ls_field-name = 'NAME'.
|
||||||
|
ls_field-value = iv_obj_name.
|
||||||
|
APPEND ls_field TO lt_fields.
|
||||||
|
|
||||||
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
|
|
||||||
|
ENDMETHOD. "jump_encode
|
||||||
|
|
||||||
|
METHOD jump_decode.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
lv_string TYPE string.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
|
||||||
|
lv_string = iv_string. " type conversion
|
||||||
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ev_obj_type = <ls_field>-value.
|
||||||
|
ELSE.
|
||||||
|
CLEAR ev_obj_type.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'NAME'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ev_obj_name = <ls_field>-value.
|
||||||
|
ELSE.
|
||||||
|
CLEAR ev_obj_name.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "jump_decode
|
||||||
|
|
||||||
|
METHOD file_encode.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
ls_field LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <lv_field> TYPE string.
|
||||||
|
|
||||||
|
ls_field-name = 'KEY'.
|
||||||
|
ls_field-value = iv_key.
|
||||||
|
APPEND ls_field TO lt_fields.
|
||||||
|
|
||||||
|
ls_field-name = 'PATH'.
|
||||||
|
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
|
||||||
|
ASSERT <lv_field> IS ASSIGNED.
|
||||||
|
ls_field-value = <lv_field>.
|
||||||
|
APPEND ls_field TO lt_fields.
|
||||||
|
|
||||||
|
ls_field-name = 'FILENAME'.
|
||||||
|
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
|
||||||
|
ASSERT <lv_field> IS ASSIGNED.
|
||||||
|
ls_field-value = <lv_field>.
|
||||||
|
APPEND ls_field TO lt_fields.
|
||||||
|
|
||||||
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
|
|
||||||
|
ENDMETHOD. "file_encode
|
||||||
|
|
||||||
|
METHOD file_decode.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
lv_string TYPE string.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields,
|
||||||
|
<lv_field> TYPE string.
|
||||||
|
|
||||||
|
CLEAR: ev_key, eg_file.
|
||||||
|
lv_string = iv_string. " type conversion
|
||||||
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'KEY'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ev_key = <ls_field>-value.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'PATH'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ASSIGN COMPONENT 'PATH' OF STRUCTURE eg_file TO <lv_field>.
|
||||||
|
ASSERT <lv_field> IS ASSIGNED.
|
||||||
|
<lv_field> = <ls_field>-value.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'FILENAME'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ASSIGN COMPONENT 'FILENAME' OF STRUCTURE eg_file TO <lv_field>.
|
||||||
|
ASSERT <lv_field> IS ASSIGNED.
|
||||||
|
<lv_field> = <ls_field>-value.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "file_decode
|
||||||
|
|
||||||
|
METHOD dbkey_encode.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
ls_field LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
ls_field-name = 'TYPE'.
|
||||||
|
ls_field-value = is_key-type.
|
||||||
|
APPEND ls_field TO lt_fields.
|
||||||
|
|
||||||
|
ls_field-name = 'VALUE'.
|
||||||
|
ls_field-value = is_key-value.
|
||||||
|
APPEND ls_field TO lt_fields.
|
||||||
|
|
||||||
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
|
|
||||||
|
ENDMETHOD. "dbkey_encode
|
||||||
|
|
||||||
|
METHOD dbkey_decode.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
lv_string TYPE string.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
lv_string = iv_string. " type conversion
|
||||||
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
rs_key-type = <ls_field>-value.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'VALUE'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
rs_key-value = <ls_field>-value.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "dbkey_decode
|
||||||
|
|
||||||
|
METHOD parse_commit_request.
|
||||||
|
|
||||||
|
CONSTANTS: lc_replace TYPE string VALUE '<<new>>'.
|
||||||
|
|
||||||
|
DATA: lv_string TYPE string,
|
||||||
|
lt_fields TYPE tihttpnvp.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
|
||||||
|
CONCATENATE LINES OF it_postdata INTO lv_string.
|
||||||
|
|
||||||
|
REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace.
|
||||||
|
|
||||||
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'key' ##NO_TEXT.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
rs_fields-repo_key = <ls_field>-value.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'username' ##NO_TEXT.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
rs_fields-username = <ls_field>-value.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'email' ##NO_TEXT.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
rs_fields-email = <ls_field>-value.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'comment' ##NO_TEXT.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
rs_fields-comment = <ls_field>-value.
|
||||||
|
|
||||||
|
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'body' ##NO_TEXT.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
rs_fields-body = <ls_field>-value.
|
||||||
|
REPLACE ALL OCCURRENCES OF lc_replace IN rs_fields-body WITH gc_newline.
|
||||||
|
|
||||||
|
ENDMETHOD. "parse_commit_request
|
||||||
|
|
||||||
|
METHOD repo_key_encode.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
ls_field LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
ls_field-name = 'KEY'.
|
||||||
|
ls_field-value = iv_key.
|
||||||
|
APPEND ls_field TO lt_fields.
|
||||||
|
|
||||||
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
|
|
||||||
|
ENDMETHOD. "repo_key_encode
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_html_action_utils IMPLEMENTATION
|
48
src/zabapgit_html_action_utils.prog.xml
Normal file
48
src/zabapgit_html_action_utils.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_HTML_ACTION_UTILS</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_HTML_ACTION_UTILS</ENTRY>
|
||||||
|
<LENGTH>34</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
File diff suppressed because it is too large
Load Diff
946
src/zabapgit_object_clas.prog.abap
Normal file
946
src/zabapgit_object_clas.prog.abap
Normal file
|
@ -0,0 +1,946 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_OBJECT_CLAS
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_clas DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES lif_object.
|
||||||
|
ALIASES mo_files FOR lif_object~mo_files.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
TYPES: BEGIN OF ty_sotr,
|
||||||
|
header TYPE sotr_head,
|
||||||
|
entries TYPE sotr_text_tt,
|
||||||
|
END OF ty_sotr.
|
||||||
|
|
||||||
|
TYPES: ty_sotr_tt TYPE STANDARD TABLE OF ty_sotr WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
DATA mv_skip_testclass TYPE abap_bool.
|
||||||
|
|
||||||
|
METHODS deserialize_abap
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||||
|
iv_package TYPE devclass
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_textpool
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_docu
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_sotr
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||||
|
iv_package TYPE devclass
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_abap_old
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_abap_source_old
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
it_source TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_abap_source_new
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
it_source TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception
|
||||||
|
cx_sy_dyn_call_error.
|
||||||
|
|
||||||
|
METHODS serialize_abap_new
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception
|
||||||
|
cx_sy_dyn_call_error.
|
||||||
|
|
||||||
|
METHODS serialize_locals_imp
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_locals_def
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS read_include
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
iv_type TYPE seop_include_ext_app
|
||||||
|
RETURNING VALUE(rt_source) TYPE seop_source_string.
|
||||||
|
|
||||||
|
METHODS serialize_testclasses
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_macros
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_xml
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_output
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS read_sotr
|
||||||
|
RETURNING VALUE(rt_sotr) TYPE ty_sotr_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS remove_signatures
|
||||||
|
CHANGING ct_source TYPE ty_string_tt.
|
||||||
|
|
||||||
|
METHODS reduce
|
||||||
|
CHANGING ct_source TYPE ty_string_tt.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_object_dtel DEFINITION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_intf DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_intf DEFINITION INHERITING FROM lcl_object_clas FINAL.
|
||||||
|
* todo, CLAS + INTF to be refactored, see:
|
||||||
|
* https://github.com/larshp/abapGit/issues/21
|
||||||
|
ENDCLASS. "lcl_object_intf DEFINITION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_clas IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_clas IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD lif_object~get_metadata.
|
||||||
|
rs_metadata = get_metadata( ).
|
||||||
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
|
METHOD lif_object~changed_by.
|
||||||
|
* todo, not sure this is correct, to be tested
|
||||||
|
SELECT SINGLE changedby FROM seoclassdf INTO rv_user
|
||||||
|
WHERE clsname = ms_item-obj_name
|
||||||
|
AND version = '1'. "#EC CI_GENBUFF
|
||||||
|
IF sy-subrc = 0 AND rv_user IS INITIAL.
|
||||||
|
SELECT SINGLE author FROM seoclassdf INTO rv_user
|
||||||
|
WHERE clsname = ms_item-obj_name
|
||||||
|
AND version = '1'. "#EC CI_GENBUFF
|
||||||
|
ENDIF.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
rv_user = c_user_unknown.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~exists.
|
||||||
|
|
||||||
|
DATA: ls_clskey TYPE seoclskey.
|
||||||
|
|
||||||
|
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK'
|
||||||
|
EXPORTING
|
||||||
|
clskey = ls_clskey
|
||||||
|
EXCEPTIONS
|
||||||
|
not_specified = 1
|
||||||
|
not_existing = 2
|
||||||
|
is_interface = 3
|
||||||
|
no_text = 4
|
||||||
|
inconsistent = 5
|
||||||
|
OTHERS = 6.
|
||||||
|
rv_bool = boolc( sy-subrc <> 2 ).
|
||||||
|
|
||||||
|
ENDMETHOD. "lif_object~exists
|
||||||
|
|
||||||
|
METHOD lif_object~jump.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||||
|
EXPORTING
|
||||||
|
operation = 'SHOW'
|
||||||
|
object_name = ms_item-obj_name
|
||||||
|
object_type = 'CLAS'
|
||||||
|
in_new_window = abap_true.
|
||||||
|
|
||||||
|
ENDMETHOD. "jump
|
||||||
|
|
||||||
|
METHOD lif_object~delete.
|
||||||
|
|
||||||
|
DATA: ls_clskey TYPE seoclskey.
|
||||||
|
|
||||||
|
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
CASE ms_item-obj_type.
|
||||||
|
WHEN 'CLAS'.
|
||||||
|
CALL FUNCTION 'SEO_CLASS_DELETE_COMPLETE'
|
||||||
|
EXPORTING
|
||||||
|
clskey = ls_clskey
|
||||||
|
EXCEPTIONS
|
||||||
|
not_existing = 1
|
||||||
|
is_interface = 2
|
||||||
|
db_error = 3
|
||||||
|
no_access = 4
|
||||||
|
other = 5
|
||||||
|
OTHERS = 6.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from SEO_CLASS_DELETE_COMPLETE' ).
|
||||||
|
ENDIF.
|
||||||
|
WHEN 'INTF'.
|
||||||
|
CALL FUNCTION 'SEO_INTERFACE_DELETE_COMPLETE'
|
||||||
|
EXPORTING
|
||||||
|
intkey = ls_clskey
|
||||||
|
EXCEPTIONS
|
||||||
|
not_existing = 1
|
||||||
|
is_class = 2
|
||||||
|
db_error = 3
|
||||||
|
no_access = 4
|
||||||
|
other = 5
|
||||||
|
OTHERS = 6.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from SEO_INTERFACE_DELETE_COMPLETE' ).
|
||||||
|
ENDIF.
|
||||||
|
WHEN OTHERS.
|
||||||
|
lcx_exception=>raise( 'class delete, unknown type' ).
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ENDMETHOD. "delete
|
||||||
|
|
||||||
|
METHOD reduce.
|
||||||
|
|
||||||
|
DATA: lv_source LIKE LINE OF ct_source,
|
||||||
|
lv_found TYPE sap_bool.
|
||||||
|
|
||||||
|
|
||||||
|
* skip files that only contain the standard comments
|
||||||
|
lv_found = abap_false.
|
||||||
|
LOOP AT ct_source INTO lv_source.
|
||||||
|
IF strlen( lv_source ) >= 3 AND lv_source(3) <> '*"*'.
|
||||||
|
lv_found = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
IF lv_found = abap_false.
|
||||||
|
CLEAR ct_source[].
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "reduce
|
||||||
|
|
||||||
|
METHOD serialize_locals_imp.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_locals_imp ).
|
||||||
|
|
||||||
|
reduce( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_local
|
||||||
|
|
||||||
|
METHOD serialize_locals_def.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_locals_def ).
|
||||||
|
|
||||||
|
reduce( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_locals_def
|
||||||
|
|
||||||
|
METHOD read_include.
|
||||||
|
|
||||||
|
DATA: ls_include TYPE progstruc.
|
||||||
|
|
||||||
|
|
||||||
|
ASSERT iv_type = seop_ext_class_locals_def
|
||||||
|
OR iv_type = seop_ext_class_locals_imp
|
||||||
|
OR iv_type = seop_ext_class_macros
|
||||||
|
OR iv_type = seop_ext_class_testclasses.
|
||||||
|
|
||||||
|
ls_include-rootname = is_clskey-clsname.
|
||||||
|
TRANSLATE ls_include-rootname USING ' ='.
|
||||||
|
ls_include-categorya = iv_type(1).
|
||||||
|
ls_include-codea = iv_type+1(4).
|
||||||
|
|
||||||
|
* it looks like there is an issue in function module SEO_CLASS_GET_INCLUDE_SOURCE
|
||||||
|
* on 750 kernels, where the READ REPORT without STATE addition does not
|
||||||
|
* return the active version, this method is a workaround for this issue
|
||||||
|
READ REPORT ls_include INTO rt_source STATE 'A'.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD serialize_testclasses.
|
||||||
|
|
||||||
|
DATA: lv_line1 LIKE LINE OF rt_source,
|
||||||
|
lv_line2 LIKE LINE OF rt_source.
|
||||||
|
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_testclasses ).
|
||||||
|
|
||||||
|
* when creating classes in Eclipse it automatically generates the
|
||||||
|
* testclass include, but it is not needed, so skip to avoid
|
||||||
|
* creating an extra file in the repository.
|
||||||
|
* Also remove it if the content is manually removed, but
|
||||||
|
* the class still thinks it contains tests
|
||||||
|
mv_skip_testclass = abap_false.
|
||||||
|
IF lines( rt_source ) = 2.
|
||||||
|
READ TABLE rt_source INDEX 1 INTO lv_line1.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
READ TABLE rt_source INDEX 2 INTO lv_line2.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF lv_line1(3) = '*"*' AND lv_line2 IS INITIAL.
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ELSEIF lines( rt_source ) = 1.
|
||||||
|
READ TABLE rt_source INDEX 1 INTO lv_line1.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF lv_line1(3) = '*"*' OR lv_line1 IS INITIAL.
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ELSEIF lines( rt_source ) = 0.
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_test
|
||||||
|
|
||||||
|
METHOD serialize_macros.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_macros ).
|
||||||
|
|
||||||
|
reduce( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_macro
|
||||||
|
|
||||||
|
METHOD serialize_abap_old.
|
||||||
|
* for old ABAP AS versions
|
||||||
|
DATA: lo_source TYPE REF TO cl_oo_source.
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OBJECT lo_source
|
||||||
|
EXPORTING
|
||||||
|
clskey = is_clskey
|
||||||
|
EXCEPTIONS
|
||||||
|
class_not_existing = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from CL_OO_SOURCE' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lo_source->read( 'A' ).
|
||||||
|
rt_source = lo_source->get_old_source( ).
|
||||||
|
remove_signatures( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_abap
|
||||||
|
|
||||||
|
METHOD serialize_abap_new.
|
||||||
|
|
||||||
|
DATA: lo_source TYPE REF TO object,
|
||||||
|
lo_instance TYPE REF TO object.
|
||||||
|
|
||||||
|
* do not call the class/methods statically, as it will
|
||||||
|
* give syntax errors on old versions
|
||||||
|
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
|
||||||
|
RECEIVING
|
||||||
|
result = lo_instance.
|
||||||
|
|
||||||
|
CALL METHOD lo_instance->('CREATE_CLIF_SOURCE')
|
||||||
|
EXPORTING
|
||||||
|
clif_name = is_clskey-clsname
|
||||||
|
version = 'A'
|
||||||
|
RECEIVING
|
||||||
|
result = lo_source.
|
||||||
|
|
||||||
|
CALL METHOD lo_source->('GET_SOURCE')
|
||||||
|
IMPORTING
|
||||||
|
source = rt_source.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD remove_signatures.
|
||||||
|
|
||||||
|
* signatures messes up in CL_OO_SOURCE when deserializing and serializing
|
||||||
|
* within same session
|
||||||
|
|
||||||
|
DATA: lv_begin TYPE string,
|
||||||
|
lv_end TYPE string,
|
||||||
|
lv_remove TYPE sap_bool,
|
||||||
|
lv_source LIKE LINE OF ct_source.
|
||||||
|
|
||||||
|
|
||||||
|
CONCATENATE '* <SIGNATURE>------------------------------------'
|
||||||
|
'---------------------------------------------------+'
|
||||||
|
INTO lv_begin.
|
||||||
|
|
||||||
|
CONCATENATE '* +------------------------------------------------'
|
||||||
|
'--------------------------------------</SIGNATURE>'
|
||||||
|
INTO lv_end.
|
||||||
|
|
||||||
|
lv_remove = abap_false.
|
||||||
|
LOOP AT ct_source INTO lv_source.
|
||||||
|
IF lv_source = lv_begin.
|
||||||
|
lv_remove = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_remove = abap_true.
|
||||||
|
DELETE ct_source INDEX sy-tabix.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_source = lv_end.
|
||||||
|
lv_remove = abap_false.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "remove_signatures
|
||||||
|
|
||||||
|
METHOD lif_object~serialize.
|
||||||
|
|
||||||
|
DATA: lt_source TYPE seop_source_string,
|
||||||
|
ls_clskey TYPE seoclskey.
|
||||||
|
|
||||||
|
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
IF lif_object~exists( ) = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CALL FUNCTION 'SEO_BUFFER_REFRESH'
|
||||||
|
EXPORTING
|
||||||
|
version = seoc_version_active
|
||||||
|
force = seox_true.
|
||||||
|
CALL FUNCTION 'SEO_BUFFER_REFRESH'
|
||||||
|
EXPORTING
|
||||||
|
version = seoc_version_inactive
|
||||||
|
force = seox_true.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
lt_source = serialize_abap_new( ls_clskey ).
|
||||||
|
CATCH cx_sy_dyn_call_error.
|
||||||
|
lt_source = serialize_abap_old( ls_clskey ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
mo_files->add_abap( lt_source ).
|
||||||
|
|
||||||
|
IF ms_item-obj_type = 'CLAS'.
|
||||||
|
lt_source = serialize_locals_def( ls_clskey ).
|
||||||
|
IF NOT lt_source[] IS INITIAL.
|
||||||
|
mo_files->add_abap( iv_extra = 'locals_def'
|
||||||
|
it_abap = lt_source ). "#EC NOTEXT
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_source = serialize_locals_imp( ls_clskey ).
|
||||||
|
IF NOT lt_source[] IS INITIAL.
|
||||||
|
mo_files->add_abap( iv_extra = 'locals_imp'
|
||||||
|
it_abap = lt_source ). "#EC NOTEXT
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_source = serialize_testclasses( ls_clskey ).
|
||||||
|
IF NOT lt_source[] IS INITIAL AND mv_skip_testclass = abap_false.
|
||||||
|
mo_files->add_abap( iv_extra = 'testclasses'
|
||||||
|
it_abap = lt_source ). "#EC NOTEXT
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_source = serialize_macros( ls_clskey ).
|
||||||
|
IF NOT lt_source[] IS INITIAL.
|
||||||
|
mo_files->add_abap( iv_extra = 'macros'
|
||||||
|
it_abap = lt_source ). "#EC NOTEXT
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
serialize_xml( io_xml ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize
|
||||||
|
|
||||||
|
METHOD read_sotr.
|
||||||
|
|
||||||
|
DATA: lv_concept TYPE sotr_head-concept,
|
||||||
|
lt_seocompodf TYPE STANDARD TABLE OF seocompodf WITH DEFAULT KEY,
|
||||||
|
ls_header TYPE sotr_head,
|
||||||
|
lt_entries TYPE sotr_text_tt.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF rt_sotr,
|
||||||
|
<ls_seocompodf> LIKE LINE OF lt_seocompodf,
|
||||||
|
<ls_entry> LIKE LINE OF lt_entries.
|
||||||
|
|
||||||
|
|
||||||
|
SELECT * FROM seocompodf
|
||||||
|
INTO TABLE lt_seocompodf
|
||||||
|
WHERE clsname = ms_item-obj_name
|
||||||
|
AND version = '1'
|
||||||
|
AND exposure = '2'
|
||||||
|
AND attdecltyp = '2'
|
||||||
|
AND type = 'SOTR_CONC'
|
||||||
|
ORDER BY PRIMARY KEY.
|
||||||
|
|
||||||
|
LOOP AT lt_seocompodf ASSIGNING <ls_seocompodf>.
|
||||||
|
|
||||||
|
lv_concept = translate( val = <ls_seocompodf>-attvalue from = '''' to = '' ).
|
||||||
|
|
||||||
|
CALL FUNCTION 'SOTR_GET_CONCEPT'
|
||||||
|
EXPORTING
|
||||||
|
concept = lv_concept
|
||||||
|
IMPORTING
|
||||||
|
header = ls_header
|
||||||
|
TABLES
|
||||||
|
entries = lt_entries
|
||||||
|
EXCEPTIONS
|
||||||
|
no_entry_found = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from SOTR_GET_CONCEPT' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CLEAR: ls_header-paket,
|
||||||
|
ls_header-crea_name,
|
||||||
|
ls_header-crea_tstut,
|
||||||
|
ls_header-chan_name,
|
||||||
|
ls_header-chan_tstut.
|
||||||
|
|
||||||
|
LOOP AT lt_entries ASSIGNING <ls_entry>.
|
||||||
|
CLEAR: <ls_entry>-crea_name,
|
||||||
|
<ls_entry>-crea_tstut,
|
||||||
|
<ls_entry>-chan_name,
|
||||||
|
<ls_entry>-chan_tstut.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO rt_sotr ASSIGNING <ls_sotr>.
|
||||||
|
<ls_sotr>-header = ls_header.
|
||||||
|
<ls_sotr>-entries = lt_entries.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD serialize_xml.
|
||||||
|
|
||||||
|
DATA: ls_vseoclass TYPE vseoclass,
|
||||||
|
lv_cp TYPE program,
|
||||||
|
lt_tpool TYPE textpool_table,
|
||||||
|
lv_object TYPE dokhl-object,
|
||||||
|
lv_state TYPE dokhl-dokstate,
|
||||||
|
ls_vseointerf TYPE vseointerf,
|
||||||
|
ls_clskey TYPE seoclskey,
|
||||||
|
lt_sotr TYPE ty_sotr_tt,
|
||||||
|
lt_lines TYPE tlinetab.
|
||||||
|
|
||||||
|
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'SEO_CLIF_GET'
|
||||||
|
EXPORTING
|
||||||
|
cifkey = ls_clskey
|
||||||
|
version = seoc_version_active
|
||||||
|
IMPORTING
|
||||||
|
class = ls_vseoclass
|
||||||
|
interface = ls_vseointerf
|
||||||
|
EXCEPTIONS
|
||||||
|
not_existing = 1
|
||||||
|
deleted = 2
|
||||||
|
model_only = 3
|
||||||
|
OTHERS = 4.
|
||||||
|
IF sy-subrc = 1.
|
||||||
|
RETURN. " in case only inactive version exists
|
||||||
|
ELSEIF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from seo_clif_get' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CLEAR: ls_vseoclass-uuid,
|
||||||
|
ls_vseoclass-author,
|
||||||
|
ls_vseoclass-createdon,
|
||||||
|
ls_vseoclass-changedby,
|
||||||
|
ls_vseoclass-changedon,
|
||||||
|
ls_vseoclass-r3release,
|
||||||
|
ls_vseoclass-chgdanyby,
|
||||||
|
ls_vseoclass-chgdanyon.
|
||||||
|
|
||||||
|
IF mv_skip_testclass = abap_true.
|
||||||
|
CLEAR ls_vseoclass-with_unit_tests.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CLEAR: ls_vseointerf-uuid,
|
||||||
|
ls_vseointerf-author,
|
||||||
|
ls_vseointerf-createdon,
|
||||||
|
ls_vseointerf-changedby,
|
||||||
|
ls_vseointerf-changedon,
|
||||||
|
ls_vseointerf-r3release.
|
||||||
|
|
||||||
|
CASE ms_item-obj_type.
|
||||||
|
WHEN 'CLAS'.
|
||||||
|
io_xml->add( iv_name = 'VSEOCLASS'
|
||||||
|
ig_data = ls_vseoclass ).
|
||||||
|
|
||||||
|
lv_cp = cl_oo_classname_service=>get_classpool_name( ls_clskey-clsname ).
|
||||||
|
READ TEXTPOOL lv_cp INTO lt_tpool LANGUAGE mv_language. "#EC CI_READ_REP
|
||||||
|
io_xml->add( iv_name = 'TPOOL'
|
||||||
|
ig_data = add_tpool( lt_tpool ) ).
|
||||||
|
|
||||||
|
IF ls_vseoclass-category = seoc_category_exception.
|
||||||
|
lt_sotr = read_sotr( ).
|
||||||
|
IF lines( lt_sotr ) > 0.
|
||||||
|
io_xml->add( iv_name = 'SOTR'
|
||||||
|
ig_data = lt_sotr ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
WHEN 'INTF'.
|
||||||
|
io_xml->add( iv_name = 'VSEOINTERF'
|
||||||
|
ig_data = ls_vseointerf ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
ASSERT 0 = 1.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
lv_object = ls_clskey-clsname.
|
||||||
|
CALL FUNCTION 'DOCU_GET'
|
||||||
|
EXPORTING
|
||||||
|
id = 'CL'
|
||||||
|
langu = mv_language
|
||||||
|
object = lv_object
|
||||||
|
IMPORTING
|
||||||
|
dokstate = lv_state
|
||||||
|
TABLES
|
||||||
|
line = lt_lines
|
||||||
|
EXCEPTIONS
|
||||||
|
no_docu_on_screen = 1
|
||||||
|
no_docu_self_def = 2
|
||||||
|
no_docu_temp = 3
|
||||||
|
ret_code = 4
|
||||||
|
OTHERS = 5.
|
||||||
|
IF sy-subrc = 0 AND lv_state = 'R'.
|
||||||
|
io_xml->add( iv_name = 'LINES'
|
||||||
|
ig_data = lt_lines ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_xml
|
||||||
|
|
||||||
|
METHOD lif_object~deserialize.
|
||||||
|
|
||||||
|
* function group SEOK
|
||||||
|
* function group SEOQ
|
||||||
|
* function group SEOP
|
||||||
|
* class CL_OO_CLASSNAME_SERVICE
|
||||||
|
* class CL_OO_SOURCE
|
||||||
|
|
||||||
|
deserialize_abap( io_xml = io_xml
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
IF ms_item-obj_type = 'CLAS'.
|
||||||
|
deserialize_textpool( io_xml ).
|
||||||
|
|
||||||
|
deserialize_sotr( io_xml = io_xml
|
||||||
|
iv_package = iv_package ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
deserialize_docu( io_xml ).
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize
|
||||||
|
|
||||||
|
METHOD deserialize_sotr.
|
||||||
|
|
||||||
|
DATA: lt_sotr TYPE ty_sotr_tt,
|
||||||
|
lt_objects TYPE sotr_objects,
|
||||||
|
ls_paket TYPE sotr_pack,
|
||||||
|
lv_object LIKE LINE OF lt_objects.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF lt_sotr.
|
||||||
|
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'SOTR'
|
||||||
|
CHANGING cg_data = lt_sotr ).
|
||||||
|
|
||||||
|
IF lines( lt_sotr ) = 0.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT lt_sotr ASSIGNING <ls_sotr>.
|
||||||
|
CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS'
|
||||||
|
EXPORTING
|
||||||
|
object_vector = <ls_sotr>-header-objid_vec
|
||||||
|
IMPORTING
|
||||||
|
objects = lt_objects
|
||||||
|
EXCEPTIONS
|
||||||
|
object_not_found = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from SOTR_OBJECT_GET_OBJECTS' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_objects INDEX 1 INTO lv_object.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
|
ls_paket-paket = iv_package.
|
||||||
|
|
||||||
|
CALL FUNCTION 'SOTR_CREATE_CONCEPT'
|
||||||
|
EXPORTING
|
||||||
|
paket = ls_paket
|
||||||
|
crea_lan = <ls_sotr>-header-crea_lan
|
||||||
|
alias_name = <ls_sotr>-header-alias_name
|
||||||
|
object = lv_object
|
||||||
|
entries = <ls_sotr>-entries
|
||||||
|
concept_default = <ls_sotr>-header-concept
|
||||||
|
EXCEPTIONS
|
||||||
|
package_missing = 1
|
||||||
|
crea_lan_missing = 2
|
||||||
|
object_missing = 3
|
||||||
|
paket_does_not_exist = 4
|
||||||
|
alias_already_exist = 5
|
||||||
|
object_type_not_found = 6
|
||||||
|
langu_missing = 7
|
||||||
|
identical_context_not_allowed = 8
|
||||||
|
text_too_long = 9
|
||||||
|
error_in_update = 10
|
||||||
|
no_master_langu = 11
|
||||||
|
error_in_concept_id = 12
|
||||||
|
alias_not_allowed = 13
|
||||||
|
tadir_entry_creation_failed = 14
|
||||||
|
internal_error = 15
|
||||||
|
error_in_correction = 16
|
||||||
|
user_cancelled = 17
|
||||||
|
no_entry_found = 18
|
||||||
|
OTHERS = 19.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from SOTR_CREATE_CONCEPT' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD deserialize_docu.
|
||||||
|
|
||||||
|
DATA: lt_lines TYPE tlinetab,
|
||||||
|
lv_object TYPE dokhl-object.
|
||||||
|
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'LINES'
|
||||||
|
CHANGING cg_data = lt_lines ).
|
||||||
|
|
||||||
|
IF lt_lines[] IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_object = ms_item-obj_name.
|
||||||
|
CALL FUNCTION 'DOCU_UPD'
|
||||||
|
EXPORTING
|
||||||
|
id = 'CL'
|
||||||
|
langu = mv_language
|
||||||
|
object = lv_object
|
||||||
|
TABLES
|
||||||
|
line = lt_lines
|
||||||
|
EXCEPTIONS
|
||||||
|
ret_code = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from DOCU_UPD' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize_doku
|
||||||
|
|
||||||
|
METHOD deserialize_textpool.
|
||||||
|
|
||||||
|
DATA: lv_cp TYPE program,
|
||||||
|
lv_clsname TYPE seoclsname,
|
||||||
|
lt_tpool_ext TYPE ty_tpool_tt,
|
||||||
|
lt_tpool TYPE textpool_table.
|
||||||
|
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'TPOOL'
|
||||||
|
CHANGING cg_data = lt_tpool_ext ).
|
||||||
|
lt_tpool = read_tpool( lt_tpool_ext ).
|
||||||
|
|
||||||
|
IF lt_tpool[] IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_clsname = ms_item-obj_name.
|
||||||
|
lv_cp = cl_oo_classname_service=>get_classpool_name( lv_clsname ).
|
||||||
|
|
||||||
|
INSERT TEXTPOOL lv_cp
|
||||||
|
FROM lt_tpool
|
||||||
|
LANGUAGE mv_language
|
||||||
|
STATE 'I'.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lcl_objects_activation=>add( iv_type = 'REPT'
|
||||||
|
iv_name = lv_cp ).
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize_textpool
|
||||||
|
|
||||||
|
METHOD deserialize_abap.
|
||||||
|
|
||||||
|
DATA: ls_vseoclass TYPE vseoclass,
|
||||||
|
ls_vseointerf TYPE vseointerf,
|
||||||
|
lt_source TYPE seop_source_string,
|
||||||
|
lt_locals_def TYPE seop_source_string,
|
||||||
|
lt_locals_imp TYPE seop_source_string,
|
||||||
|
lt_locals_mac TYPE seop_source_string,
|
||||||
|
lt_testclasses TYPE seop_source_string,
|
||||||
|
ls_clskey TYPE seoclskey.
|
||||||
|
|
||||||
|
|
||||||
|
lt_source = mo_files->read_abap( ).
|
||||||
|
|
||||||
|
lt_locals_def = mo_files->read_abap( iv_extra = 'locals_def'
|
||||||
|
iv_error = abap_false ). "#EC NOTEXT
|
||||||
|
|
||||||
|
lt_locals_imp = mo_files->read_abap( iv_extra = 'locals_imp'
|
||||||
|
iv_error = abap_false ). "#EC NOTEXT
|
||||||
|
|
||||||
|
lt_locals_mac = mo_files->read_abap( iv_extra = 'macros'
|
||||||
|
iv_error = abap_false ). "#EC NOTEXT
|
||||||
|
|
||||||
|
lt_testclasses = mo_files->read_abap( iv_extra = 'testclasses'
|
||||||
|
iv_error = abap_false ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
|
||||||
|
CASE ms_item-obj_type.
|
||||||
|
WHEN 'CLAS'.
|
||||||
|
io_xml->read( EXPORTING iv_name = 'VSEOCLASS'
|
||||||
|
CHANGING cg_data = ls_vseoclass ).
|
||||||
|
|
||||||
|
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
|
||||||
|
EXPORTING
|
||||||
|
devclass = iv_package
|
||||||
|
overwrite = seox_true
|
||||||
|
CHANGING
|
||||||
|
class = ls_vseoclass
|
||||||
|
EXCEPTIONS
|
||||||
|
existing = 1
|
||||||
|
is_interface = 2
|
||||||
|
db_error = 3
|
||||||
|
component_error = 4
|
||||||
|
no_access = 5
|
||||||
|
other = 6
|
||||||
|
OTHERS = 7.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
WHEN 'INTF'.
|
||||||
|
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
|
||||||
|
CHANGING cg_data = ls_vseointerf ).
|
||||||
|
|
||||||
|
CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
|
||||||
|
EXPORTING
|
||||||
|
devclass = iv_package
|
||||||
|
overwrite = seox_true
|
||||||
|
CHANGING
|
||||||
|
interface = ls_vseointerf
|
||||||
|
EXCEPTIONS
|
||||||
|
existing = 1
|
||||||
|
is_class = 2
|
||||||
|
db_error = 3
|
||||||
|
component_error = 4
|
||||||
|
no_access = 5
|
||||||
|
other = 6
|
||||||
|
OTHERS = 7.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from SEO_INTERFACE_CREATE_COMPLETE' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
WHEN OTHERS.
|
||||||
|
ASSERT 0 = 1.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
IF ms_item-obj_type = 'CLAS'.
|
||||||
|
CALL FUNCTION 'SEO_CLASS_GENERATE_LOCALS'
|
||||||
|
EXPORTING
|
||||||
|
clskey = ls_clskey
|
||||||
|
force = seox_true
|
||||||
|
locals_def = lt_locals_def
|
||||||
|
locals_imp = lt_locals_imp
|
||||||
|
locals_mac = lt_locals_mac
|
||||||
|
locals_testclasses = lt_testclasses
|
||||||
|
EXCEPTIONS
|
||||||
|
not_existing = 1
|
||||||
|
model_only = 2
|
||||||
|
locals_not_generated = 3
|
||||||
|
locals_not_initialised = 4
|
||||||
|
OTHERS = 5.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from generate_locals' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
deserialize_abap_source_new(
|
||||||
|
is_clskey = ls_clskey
|
||||||
|
it_source = lt_source ).
|
||||||
|
CATCH cx_sy_dyn_call_error.
|
||||||
|
deserialize_abap_source_old(
|
||||||
|
is_clskey = ls_clskey
|
||||||
|
it_source = lt_source ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
lcl_objects_activation=>add_item( ms_item ).
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize
|
||||||
|
|
||||||
|
METHOD deserialize_abap_source_old.
|
||||||
|
* for backwards compatability down to 702
|
||||||
|
|
||||||
|
DATA: lo_source TYPE REF TO cl_oo_source.
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OBJECT lo_source
|
||||||
|
EXPORTING
|
||||||
|
clskey = is_clskey
|
||||||
|
EXCEPTIONS
|
||||||
|
class_not_existing = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from CL_OO_SOURCE' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
lo_source->access_permission( seok_access_modify ).
|
||||||
|
lo_source->set_source( it_source ).
|
||||||
|
lo_source->save( ).
|
||||||
|
lo_source->access_permission( seok_access_free ).
|
||||||
|
CATCH cx_oo_access_permission.
|
||||||
|
lcx_exception=>raise( 'permission error' ).
|
||||||
|
CATCH cx_oo_source_save_failure.
|
||||||
|
lcx_exception=>raise( 'save failure' ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD deserialize_abap_source_new.
|
||||||
|
|
||||||
|
DATA: lo_factory TYPE REF TO object,
|
||||||
|
lo_source TYPE REF TO object.
|
||||||
|
|
||||||
|
|
||||||
|
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
|
||||||
|
RECEIVING
|
||||||
|
result = lo_factory.
|
||||||
|
|
||||||
|
CALL METHOD lo_factory->('CREATE_CLIF_SOURCE')
|
||||||
|
EXPORTING
|
||||||
|
clif_name = is_clskey-clsname
|
||||||
|
RECEIVING
|
||||||
|
result = lo_source.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~LOCK').
|
||||||
|
CATCH cx_oo_access_permission.
|
||||||
|
lcx_exception=>raise( 'source_new, access permission exception' ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SET_SOURCE')
|
||||||
|
EXPORTING
|
||||||
|
source = it_source.
|
||||||
|
|
||||||
|
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SAVE').
|
||||||
|
|
||||||
|
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~UNLOCK').
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
|
48
src/zabapgit_object_clas.prog.xml
Normal file
48
src/zabapgit_object_clas.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_CLAS</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_CLAS</ENTRY>
|
||||||
|
<LENGTH>28</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
632
src/zabapgit_object_fugr.prog.abap
Normal file
632
src/zabapgit_object_fugr.prog.abap
Normal file
|
@ -0,0 +1,632 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_OBJECT_FUGR
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_fugr DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES lif_object.
|
||||||
|
ALIASES mo_files FOR lif_object~mo_files.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
TYPES: ty_rs38l_incl_tt TYPE STANDARD TABLE OF rs38l_incl WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_function,
|
||||||
|
funcname TYPE rs38l_fnam,
|
||||||
|
include TYPE progname,
|
||||||
|
global_flag TYPE rs38l-global,
|
||||||
|
remote_call TYPE rs38l-remote,
|
||||||
|
update_task TYPE rs38l-utask,
|
||||||
|
short_text TYPE tftit-stext,
|
||||||
|
remote_basxml TYPE rs38l-basxml_enabled,
|
||||||
|
import TYPE STANDARD TABLE OF rsimp WITH DEFAULT KEY,
|
||||||
|
changing TYPE STANDARD TABLE OF rscha WITH DEFAULT KEY,
|
||||||
|
export TYPE STANDARD TABLE OF rsexp WITH DEFAULT KEY,
|
||||||
|
tables TYPE STANDARD TABLE OF rstbl WITH DEFAULT KEY,
|
||||||
|
exception TYPE STANDARD TABLE OF rsexc WITH DEFAULT KEY,
|
||||||
|
documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY,
|
||||||
|
END OF ty_function.
|
||||||
|
|
||||||
|
TYPES: ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
METHODS main_name
|
||||||
|
RETURNING VALUE(rv_program) TYPE program
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS functions
|
||||||
|
RETURNING VALUE(rt_functab) TYPE ty_rs38l_incl_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS includes
|
||||||
|
RETURNING VALUE(rt_includes) TYPE rso_t_objnm
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_functions
|
||||||
|
RETURNING VALUE(rt_functions) TYPE ty_function_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_functions
|
||||||
|
IMPORTING it_functions TYPE ty_function_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_xml
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_output
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_xml
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||||
|
iv_package TYPE devclass
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_includes
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_includes
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||||
|
iv_package TYPE devclass
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
* METHODS deserialize_dynpros
|
||||||
|
* IMPORTING it_dynpros TYPE ty_dynpro_tt
|
||||||
|
* RAISING lcx_exception.
|
||||||
|
*
|
||||||
|
* METHODS deserialize_cua
|
||||||
|
* IMPORTING is_cua TYPE ty_cua
|
||||||
|
* RAISING lcx_exception.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_object_fugr DEFINITION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_dtel IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
|
|
||||||
|
* function group SEUF
|
||||||
|
* function group SIFP
|
||||||
|
* function group SUNI
|
||||||
|
|
||||||
|
METHOD lif_object~changed_by.
|
||||||
|
rv_user = c_user_unknown. " todo
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~get_metadata.
|
||||||
|
rs_metadata = get_metadata( ).
|
||||||
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
|
METHOD lif_object~exists.
|
||||||
|
|
||||||
|
DATA: lv_pool TYPE tlibg-area.
|
||||||
|
|
||||||
|
|
||||||
|
lv_pool = ms_item-obj_name.
|
||||||
|
CALL FUNCTION 'RS_FUNCTION_POOL_EXISTS'
|
||||||
|
EXPORTING
|
||||||
|
function_pool = lv_pool
|
||||||
|
EXCEPTIONS
|
||||||
|
pool_not_exists = 1.
|
||||||
|
rv_bool = boolc( sy-subrc <> 1 ).
|
||||||
|
|
||||||
|
ENDMETHOD. "lif_object~exists
|
||||||
|
|
||||||
|
METHOD deserialize_functions.
|
||||||
|
|
||||||
|
DATA: lv_include TYPE rs38l-include,
|
||||||
|
lv_area TYPE rs38l-area,
|
||||||
|
lt_source TYPE TABLE OF abaptxt255.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_func> LIKE LINE OF it_functions.
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT it_functions ASSIGNING <ls_func>.
|
||||||
|
|
||||||
|
lt_source = mo_files->read_abap( iv_extra = <ls_func>-funcname ).
|
||||||
|
|
||||||
|
lv_area = ms_item-obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'FUNCTION_EXISTS'
|
||||||
|
EXPORTING
|
||||||
|
funcname = <ls_func>-funcname
|
||||||
|
IMPORTING
|
||||||
|
include = lv_include
|
||||||
|
EXCEPTIONS
|
||||||
|
function_not_exist = 1.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
* delete the function module to make sure the parameters are updated
|
||||||
|
* havent found a nice way to update the paramters
|
||||||
|
CALL FUNCTION 'FUNCTION_DELETE'
|
||||||
|
EXPORTING
|
||||||
|
funcname = <ls_func>-funcname
|
||||||
|
suppress_success_message = abap_true
|
||||||
|
EXCEPTIONS
|
||||||
|
error_message = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from FUNCTION_DELETE' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_FUNCTIONMODULE_INSERT'
|
||||||
|
EXPORTING
|
||||||
|
funcname = <ls_func>-funcname
|
||||||
|
function_pool = lv_area
|
||||||
|
interface_global = <ls_func>-global_flag
|
||||||
|
remote_call = <ls_func>-remote_call
|
||||||
|
short_text = <ls_func>-short_text
|
||||||
|
* NAMESPACE = ' ' todo
|
||||||
|
remote_basxml_supported = <ls_func>-remote_basxml
|
||||||
|
IMPORTING
|
||||||
|
function_include = lv_include
|
||||||
|
TABLES
|
||||||
|
import_parameter = <ls_func>-import
|
||||||
|
export_parameter = <ls_func>-export
|
||||||
|
tables_parameter = <ls_func>-tables
|
||||||
|
changing_parameter = <ls_func>-changing
|
||||||
|
exception_list = <ls_func>-exception
|
||||||
|
parameter_docu = <ls_func>-documentation
|
||||||
|
EXCEPTIONS
|
||||||
|
double_task = 1
|
||||||
|
error_message = 2
|
||||||
|
function_already_exists = 3
|
||||||
|
invalid_function_pool = 4
|
||||||
|
invalid_name = 5
|
||||||
|
too_many_functions = 6
|
||||||
|
no_modify_permission = 7
|
||||||
|
no_show_permission = 8
|
||||||
|
enqueue_system_failure = 9
|
||||||
|
canceled_in_corr = 10
|
||||||
|
OTHERS = 11.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from RS_FUNCTIONMODULE_INSERT' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
INSERT REPORT lv_include FROM lt_source.
|
||||||
|
|
||||||
|
* lcl_objects_activation=>add( iv_type = 'FUNC'
|
||||||
|
* iv_name = <ls_func>-funcname ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize_functions
|
||||||
|
|
||||||
|
METHOD deserialize_includes.
|
||||||
|
|
||||||
|
DATA: lo_xml TYPE REF TO lcl_xml_input,
|
||||||
|
ls_progdir TYPE ty_progdir,
|
||||||
|
lt_includes TYPE rso_t_objnm,
|
||||||
|
lt_tpool TYPE textpool_table,
|
||||||
|
lt_tpool_ext TYPE ty_tpool_tt,
|
||||||
|
lt_source TYPE TABLE OF abaptxt255.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <lv_include> LIKE LINE OF lt_includes.
|
||||||
|
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'INCLUDES'
|
||||||
|
CHANGING cg_data = lt_includes ).
|
||||||
|
|
||||||
|
LOOP AT lt_includes ASSIGNING <lv_include>.
|
||||||
|
|
||||||
|
lt_source = mo_files->read_abap( iv_extra = <lv_include> ).
|
||||||
|
|
||||||
|
lo_xml = mo_files->read_xml( <lv_include> ).
|
||||||
|
|
||||||
|
lo_xml->read( EXPORTING iv_name = 'PROGDIR'
|
||||||
|
CHANGING cg_data = ls_progdir ).
|
||||||
|
|
||||||
|
lo_xml->read( EXPORTING iv_name = 'TPOOL'
|
||||||
|
CHANGING cg_data = lt_tpool_ext ).
|
||||||
|
lt_tpool = read_tpool( lt_tpool_ext ).
|
||||||
|
|
||||||
|
deserialize_program( is_progdir = ls_progdir
|
||||||
|
it_source = lt_source
|
||||||
|
it_tpool = lt_tpool
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize_includes
|
||||||
|
|
||||||
|
METHOD deserialize_xml.
|
||||||
|
|
||||||
|
DATA: lv_complete TYPE rs38l-area,
|
||||||
|
lv_namespace TYPE rs38l-namespace,
|
||||||
|
lv_areat TYPE tlibt-areat,
|
||||||
|
lv_stext TYPE tftit-stext,
|
||||||
|
lv_group TYPE rs38l-area.
|
||||||
|
|
||||||
|
|
||||||
|
lv_complete = ms_item-obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'FUNCTION_INCLUDE_SPLIT'
|
||||||
|
EXPORTING
|
||||||
|
complete_area = lv_complete
|
||||||
|
IMPORTING
|
||||||
|
namespace = lv_namespace
|
||||||
|
group = lv_group
|
||||||
|
EXCEPTIONS
|
||||||
|
include_not_exists = 1
|
||||||
|
group_not_exists = 2
|
||||||
|
no_selections = 3
|
||||||
|
no_function_include = 4
|
||||||
|
no_function_pool = 5
|
||||||
|
delimiter_wrong_position = 6
|
||||||
|
no_customer_function_group = 7
|
||||||
|
no_customer_function_include = 8
|
||||||
|
reserved_name_customer = 9
|
||||||
|
namespace_too_long = 10
|
||||||
|
area_length_error = 11
|
||||||
|
OTHERS = 12.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from FUNCTION_INCLUDE_SPLIT' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'AREAT'
|
||||||
|
CHANGING cg_data = lv_areat ).
|
||||||
|
lv_stext = lv_areat.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_FUNCTION_POOL_INSERT'
|
||||||
|
EXPORTING
|
||||||
|
function_pool = lv_group
|
||||||
|
short_text = lv_stext
|
||||||
|
namespace = lv_namespace
|
||||||
|
devclass = iv_package
|
||||||
|
EXCEPTIONS
|
||||||
|
name_already_exists = 1
|
||||||
|
name_not_correct = 2
|
||||||
|
function_already_exists = 3
|
||||||
|
invalid_function_pool = 4
|
||||||
|
invalid_name = 5
|
||||||
|
too_many_functions = 6
|
||||||
|
no_modify_permission = 7
|
||||||
|
no_show_permission = 8
|
||||||
|
enqueue_system_failure = 9
|
||||||
|
canceled_in_corr = 10
|
||||||
|
undefined_error = 11
|
||||||
|
OTHERS = 12.
|
||||||
|
IF sy-subrc <> 0 AND sy-subrc <> 1 AND sy-subrc <> 3.
|
||||||
|
* todo, change description
|
||||||
|
lcx_exception=>raise( 'error from RS_FUNCTION_POOL_INSERT' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize_xml
|
||||||
|
|
||||||
|
METHOD serialize_xml.
|
||||||
|
|
||||||
|
DATA: lt_functab TYPE ty_rs38l_incl_tt,
|
||||||
|
lt_includes TYPE rso_t_objnm,
|
||||||
|
lv_areat TYPE tlibt-areat.
|
||||||
|
|
||||||
|
|
||||||
|
SELECT SINGLE areat INTO lv_areat
|
||||||
|
FROM tlibt
|
||||||
|
WHERE spras = mv_language
|
||||||
|
AND area = ms_item-obj_name. "#EC CI_GENBUFF
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'not found in TLIBT' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_functab = functions( ).
|
||||||
|
lt_includes = includes( ).
|
||||||
|
|
||||||
|
* todo, dynpros
|
||||||
|
|
||||||
|
io_xml->add( iv_name = 'AREAT'
|
||||||
|
ig_data = lv_areat ).
|
||||||
|
io_xml->add( iv_name = 'INCLUDES'
|
||||||
|
ig_data = lt_includes ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_xml
|
||||||
|
|
||||||
|
METHOD includes.
|
||||||
|
|
||||||
|
DATA: lv_program TYPE program,
|
||||||
|
lv_cnam TYPE reposrc-cnam,
|
||||||
|
lv_tabix LIKE sy-tabix,
|
||||||
|
lt_functab TYPE ty_rs38l_incl_tt.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <lv_include> LIKE LINE OF rt_includes,
|
||||||
|
<ls_func> LIKE LINE OF lt_functab.
|
||||||
|
|
||||||
|
|
||||||
|
lv_program = main_name( ).
|
||||||
|
lt_functab = functions( ).
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_GET_ALL_INCLUDES'
|
||||||
|
EXPORTING
|
||||||
|
program = lv_program
|
||||||
|
* WITH_RESERVED_INCLUDES =
|
||||||
|
* WITH_CLASS_INCLUDES = ' ' hmm, todo
|
||||||
|
TABLES
|
||||||
|
includetab = rt_includes
|
||||||
|
EXCEPTIONS
|
||||||
|
not_existent = 1
|
||||||
|
no_program = 2
|
||||||
|
OTHERS = 3.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from RS_GET_ALL_INCLUDES' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT lt_functab ASSIGNING <ls_func>.
|
||||||
|
DELETE TABLE rt_includes FROM <ls_func>-include.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT rt_includes ASSIGNING <lv_include>.
|
||||||
|
lv_tabix = sy-tabix.
|
||||||
|
|
||||||
|
* skip SAP standard includes
|
||||||
|
SELECT SINGLE cnam FROM reposrc INTO lv_cnam
|
||||||
|
WHERE progname = <lv_include>
|
||||||
|
AND r3state = 'A'
|
||||||
|
AND cnam = 'SAP'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
DELETE rt_includes INDEX lv_tabix.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
* also make sure the include exists
|
||||||
|
SELECT SINGLE cnam FROM reposrc INTO lv_cnam
|
||||||
|
WHERE progname = <lv_include>
|
||||||
|
AND r3state = 'A'.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
DELETE rt_includes INDEX lv_tabix.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
APPEND lv_program TO rt_includes.
|
||||||
|
|
||||||
|
ENDMETHOD. "includes
|
||||||
|
|
||||||
|
METHOD functions.
|
||||||
|
|
||||||
|
DATA: lv_area TYPE rs38l-area.
|
||||||
|
|
||||||
|
|
||||||
|
lv_area = ms_item-obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_FUNCTION_POOL_CONTENTS'
|
||||||
|
EXPORTING
|
||||||
|
function_pool = lv_area
|
||||||
|
TABLES
|
||||||
|
functab = rt_functab
|
||||||
|
EXCEPTIONS
|
||||||
|
function_pool_not_found = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from RS_FUNCTION_POOL_CONTENTS' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "functions
|
||||||
|
|
||||||
|
METHOD main_name.
|
||||||
|
|
||||||
|
DATA: lv_area TYPE rs38l-area,
|
||||||
|
lv_namespace TYPE rs38l-namespace,
|
||||||
|
lv_group TYPE rs38l-area.
|
||||||
|
|
||||||
|
|
||||||
|
lv_area = ms_item-obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'FUNCTION_INCLUDE_SPLIT'
|
||||||
|
EXPORTING
|
||||||
|
complete_area = lv_area
|
||||||
|
IMPORTING
|
||||||
|
namespace = lv_namespace
|
||||||
|
group = lv_group
|
||||||
|
EXCEPTIONS
|
||||||
|
include_not_exists = 1
|
||||||
|
group_not_exists = 2
|
||||||
|
no_selections = 3
|
||||||
|
no_function_include = 4
|
||||||
|
no_function_pool = 5
|
||||||
|
delimiter_wrong_position = 6
|
||||||
|
no_customer_function_group = 7
|
||||||
|
no_customer_function_include = 8
|
||||||
|
reserved_name_customer = 9
|
||||||
|
namespace_too_long = 10
|
||||||
|
area_length_error = 11
|
||||||
|
OTHERS = 12.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from FUNCTION_INCLUDE_SPLIT' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CONCATENATE lv_namespace 'SAPL' lv_group INTO rv_program.
|
||||||
|
|
||||||
|
ENDMETHOD. "main_name
|
||||||
|
|
||||||
|
METHOD serialize_functions.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
lt_source TYPE TABLE OF rssource,
|
||||||
|
lt_functab TYPE ty_rs38l_incl_tt,
|
||||||
|
lt_new_source TYPE rsfb_source.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_func> LIKE LINE OF lt_functab,
|
||||||
|
<ls_ret> LIKE LINE OF rt_functions.
|
||||||
|
|
||||||
|
|
||||||
|
lt_functab = functions( ).
|
||||||
|
|
||||||
|
LOOP AT lt_functab ASSIGNING <ls_func>.
|
||||||
|
* fm RPY_FUNCTIONMODULE_READ does not support source code
|
||||||
|
* lines longer than 72 characters
|
||||||
|
APPEND INITIAL LINE TO rt_functions ASSIGNING <ls_ret>.
|
||||||
|
MOVE-CORRESPONDING <ls_func> TO <ls_ret>.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RPY_FUNCTIONMODULE_READ_NEW'
|
||||||
|
EXPORTING
|
||||||
|
functionname = <ls_func>-funcname
|
||||||
|
IMPORTING
|
||||||
|
global_flag = <ls_ret>-global_flag
|
||||||
|
remote_call = <ls_ret>-remote_call
|
||||||
|
update_task = <ls_ret>-update_task
|
||||||
|
short_text = <ls_ret>-short_text
|
||||||
|
remote_basxml_supported = <ls_ret>-remote_basxml
|
||||||
|
TABLES
|
||||||
|
import_parameter = <ls_ret>-import
|
||||||
|
changing_parameter = <ls_ret>-changing
|
||||||
|
export_parameter = <ls_ret>-export
|
||||||
|
tables_parameter = <ls_ret>-tables
|
||||||
|
exception_list = <ls_ret>-exception
|
||||||
|
documentation = <ls_ret>-documentation
|
||||||
|
source = lt_source
|
||||||
|
CHANGING
|
||||||
|
new_source = lt_new_source
|
||||||
|
EXCEPTIONS
|
||||||
|
error_message = 1
|
||||||
|
function_not_found = 2
|
||||||
|
invalid_name = 3
|
||||||
|
OTHERS = 4.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from RPY_FUNCTIONMODULE_READ_NEW' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF NOT lt_new_source IS INITIAL.
|
||||||
|
mo_files->add_abap( iv_extra = <ls_func>-funcname
|
||||||
|
it_abap = lt_new_source ).
|
||||||
|
ELSE.
|
||||||
|
mo_files->add_abap( iv_extra = <ls_func>-funcname
|
||||||
|
it_abap = lt_source ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_functions
|
||||||
|
|
||||||
|
METHOD serialize_includes.
|
||||||
|
|
||||||
|
DATA: lt_includes TYPE rso_t_objnm.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <lv_include> LIKE LINE OF lt_includes.
|
||||||
|
|
||||||
|
|
||||||
|
lt_includes = includes( ).
|
||||||
|
|
||||||
|
LOOP AT lt_includes ASSIGNING <lv_include>.
|
||||||
|
|
||||||
|
* todo, filename is not correct, a include can be used in several programs
|
||||||
|
serialize_program( is_item = ms_item
|
||||||
|
io_files = mo_files
|
||||||
|
iv_program = <lv_include>
|
||||||
|
iv_extra = <lv_include> ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_includes
|
||||||
|
|
||||||
|
METHOD lif_object~serialize.
|
||||||
|
|
||||||
|
DATA: lt_functions TYPE ty_function_tt,
|
||||||
|
ls_progdir TYPE ty_progdir,
|
||||||
|
lv_program_name TYPE programm,
|
||||||
|
lt_dynpros TYPE ty_dynpro_tt,
|
||||||
|
ls_cua TYPE ty_cua.
|
||||||
|
|
||||||
|
IF lif_object~exists( ) = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
serialize_xml( io_xml ).
|
||||||
|
|
||||||
|
lt_functions = serialize_functions( ).
|
||||||
|
io_xml->add( iv_name = 'FUNCTIONS'
|
||||||
|
ig_data = lt_functions ).
|
||||||
|
|
||||||
|
serialize_includes( ).
|
||||||
|
|
||||||
|
lv_program_name = main_name( ).
|
||||||
|
ls_progdir = read_progdir( lv_program_name ).
|
||||||
|
|
||||||
|
IF ls_progdir-subc = 'F'.
|
||||||
|
lt_dynpros = serialize_dynpros( lv_program_name ).
|
||||||
|
io_xml->add( iv_name = 'DYNPROS'
|
||||||
|
ig_data = lt_dynpros ).
|
||||||
|
|
||||||
|
ls_cua = serialize_cua( lv_program_name ).
|
||||||
|
io_xml->add( iv_name = 'CUA'
|
||||||
|
ig_data = ls_cua ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize
|
||||||
|
|
||||||
|
METHOD lif_object~deserialize.
|
||||||
|
|
||||||
|
DATA: lv_program_name TYPE programm,
|
||||||
|
lt_functions TYPE ty_function_tt,
|
||||||
|
lt_dynpros TYPE ty_dynpro_tt,
|
||||||
|
ls_cua TYPE ty_cua.
|
||||||
|
|
||||||
|
|
||||||
|
deserialize_xml(
|
||||||
|
io_xml = io_xml
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'FUNCTIONS'
|
||||||
|
CHANGING cg_data = lt_functions ).
|
||||||
|
deserialize_functions( lt_functions ).
|
||||||
|
|
||||||
|
deserialize_includes(
|
||||||
|
io_xml = io_xml
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
lv_program_name = main_name( ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'DYNPROS'
|
||||||
|
CHANGING cg_data = lt_dynpros ).
|
||||||
|
deserialize_dynpros( it_dynpros = lt_dynpros ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'CUA'
|
||||||
|
CHANGING cg_data = ls_cua ).
|
||||||
|
deserialize_cua( iv_program_name = lv_program_name
|
||||||
|
is_cua = ls_cua ).
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize
|
||||||
|
|
||||||
|
METHOD lif_object~delete.
|
||||||
|
|
||||||
|
DATA: lv_area TYPE rs38l-area.
|
||||||
|
|
||||||
|
|
||||||
|
lv_area = ms_item-obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_FUNCTION_POOL_DELETE'
|
||||||
|
EXPORTING
|
||||||
|
area = lv_area
|
||||||
|
suppress_popups = abap_true
|
||||||
|
skip_progress_ind = abap_true
|
||||||
|
EXCEPTIONS
|
||||||
|
canceled_in_corr = 1
|
||||||
|
enqueue_system_failure = 2
|
||||||
|
function_exist = 3
|
||||||
|
not_executed = 4
|
||||||
|
no_modify_permission = 5
|
||||||
|
no_show_permission = 6
|
||||||
|
permission_failure = 7
|
||||||
|
pool_not_exist = 8
|
||||||
|
cancelled = 9
|
||||||
|
OTHERS = 10.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from RS_FUNCTION_POOL_DELETE' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "delete
|
||||||
|
|
||||||
|
METHOD lif_object~jump.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||||
|
EXPORTING
|
||||||
|
operation = 'SHOW'
|
||||||
|
object_name = ms_item-obj_name
|
||||||
|
object_type = 'FUGR'
|
||||||
|
in_new_window = abap_true.
|
||||||
|
|
||||||
|
ENDMETHOD. "jump
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_object_fugr IMPLEMENTATION
|
48
src/zabapgit_object_fugr.prog.xml
Normal file
48
src/zabapgit_object_fugr.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_FUGR</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_FUGR</ENTRY>
|
||||||
|
<LENGTH>28</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
156
src/zabapgit_object_prog.prog.abap
Normal file
156
src/zabapgit_object_prog.prog.abap
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_OBJECT_PROG
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_prog DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_prog DEFINITION INHERITING FROM lcl_objects_program FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES lif_object.
|
||||||
|
ALIASES mo_files FOR lif_object~mo_files.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
METHODS deserialize_textpool
|
||||||
|
IMPORTING it_tpool TYPE textpool_table
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_object_prog DEFINITION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_prog IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_prog IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD lif_object~changed_by.
|
||||||
|
SELECT SINGLE unam FROM reposrc INTO rv_user
|
||||||
|
WHERE progname = ms_item-obj_name
|
||||||
|
AND r3state = 'A'.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
rv_user = c_user_unknown.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~get_metadata.
|
||||||
|
rs_metadata = get_metadata( ).
|
||||||
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
|
METHOD lif_object~exists.
|
||||||
|
|
||||||
|
DATA: lv_progname TYPE reposrc-progname.
|
||||||
|
|
||||||
|
|
||||||
|
SELECT SINGLE progname FROM reposrc INTO lv_progname
|
||||||
|
WHERE progname = ms_item-obj_name
|
||||||
|
AND r3state = 'A'.
|
||||||
|
rv_bool = boolc( sy-subrc = 0 ).
|
||||||
|
|
||||||
|
ENDMETHOD. "lif_object~exists
|
||||||
|
|
||||||
|
METHOD lif_object~jump.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||||
|
EXPORTING
|
||||||
|
operation = 'SHOW'
|
||||||
|
object_name = ms_item-obj_name
|
||||||
|
object_type = 'PROG'
|
||||||
|
in_new_window = abap_true.
|
||||||
|
|
||||||
|
ENDMETHOD. "jump
|
||||||
|
|
||||||
|
METHOD lif_object~delete.
|
||||||
|
|
||||||
|
DATA: lv_program LIKE sy-repid.
|
||||||
|
|
||||||
|
|
||||||
|
lv_program = ms_item-obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_DELETE_PROGRAM'
|
||||||
|
EXPORTING
|
||||||
|
program = lv_program
|
||||||
|
suppress_popup = abap_true
|
||||||
|
EXCEPTIONS
|
||||||
|
enqueue_lock = 1
|
||||||
|
object_not_found = 2
|
||||||
|
permission_failure = 3
|
||||||
|
reject_deletion = 4
|
||||||
|
OTHERS = 5.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from RS_DELETE_PROGRAM' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "delete
|
||||||
|
|
||||||
|
METHOD deserialize_textpool.
|
||||||
|
|
||||||
|
READ TABLE it_tpool WITH KEY id = 'R' TRANSPORTING NO FIELDS.
|
||||||
|
IF ( sy-subrc = 0 AND lines( it_tpool ) = 1 ) OR lines( it_tpool ) = 0.
|
||||||
|
RETURN. " no action for includes
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
INSERT TEXTPOOL ms_item-obj_name
|
||||||
|
FROM it_tpool
|
||||||
|
LANGUAGE mv_language
|
||||||
|
STATE 'I'.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lcl_objects_activation=>add( iv_type = 'REPT'
|
||||||
|
iv_name = ms_item-obj_name ).
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize_textpool
|
||||||
|
|
||||||
|
METHOD lif_object~serialize.
|
||||||
|
|
||||||
|
serialize_program( io_xml = io_xml
|
||||||
|
is_item = ms_item
|
||||||
|
io_files = mo_files ).
|
||||||
|
|
||||||
|
ENDMETHOD. "lif_serialize~serialize
|
||||||
|
|
||||||
|
METHOD lif_object~deserialize.
|
||||||
|
|
||||||
|
DATA: lv_program_name TYPE programm,
|
||||||
|
ls_progdir TYPE ty_progdir,
|
||||||
|
lt_tpool TYPE textpool_table,
|
||||||
|
lt_dynpros TYPE ty_dynpro_tt,
|
||||||
|
lt_tpool_ext TYPE ty_tpool_tt,
|
||||||
|
ls_cua TYPE ty_cua,
|
||||||
|
lt_source TYPE abaptxt255_tab.
|
||||||
|
|
||||||
|
lv_program_name = ms_item-obj_name.
|
||||||
|
|
||||||
|
lt_source = mo_files->read_abap( ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'TPOOL'
|
||||||
|
CHANGING cg_data = lt_tpool_ext ).
|
||||||
|
lt_tpool = read_tpool( lt_tpool_ext ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'PROGDIR'
|
||||||
|
CHANGING cg_data = ls_progdir ).
|
||||||
|
deserialize_program( is_progdir = ls_progdir
|
||||||
|
it_source = lt_source
|
||||||
|
it_tpool = lt_tpool
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'DYNPROS'
|
||||||
|
CHANGING cg_data = lt_dynpros ).
|
||||||
|
deserialize_dynpros( it_dynpros = lt_dynpros ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'CUA'
|
||||||
|
CHANGING cg_data = ls_cua ).
|
||||||
|
deserialize_cua( iv_program_name = lv_program_name
|
||||||
|
is_cua = ls_cua ).
|
||||||
|
|
||||||
|
deserialize_textpool( lt_tpool ).
|
||||||
|
|
||||||
|
ENDMETHOD. "lif_serialize~deserialize
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_object_prog IMPLEMENTATION
|
48
src/zabapgit_object_prog.prog.xml
Normal file
48
src/zabapgit_object_prog.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_PROG</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_PROG</ENTRY>
|
||||||
|
<LENGTH>28</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
50
src/zabapgit_object_serializing.prog.abap
Normal file
50
src/zabapgit_object_serializing.prog.abap
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_OBJECT_SERIALIZATION
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
* All object serializing classes
|
||||||
|
|
||||||
|
INCLUDE zabapgit_object_acid.
|
||||||
|
INCLUDE zabapgit_object_auth.
|
||||||
|
INCLUDE zabapgit_object_clas.
|
||||||
|
INCLUDE zabapgit_object_doct.
|
||||||
|
INCLUDE zabapgit_object_docv.
|
||||||
|
INCLUDE zabapgit_object_doma.
|
||||||
|
INCLUDE zabapgit_object_dtel.
|
||||||
|
INCLUDE zabapgit_object_enho.
|
||||||
|
INCLUDE zabapgit_object_enhs.
|
||||||
|
INCLUDE zabapgit_object_enqu.
|
||||||
|
INCLUDE zabapgit_object_ensc.
|
||||||
|
INCLUDE zabapgit_object_fugr.
|
||||||
|
INCLUDE zabapgit_object_iarp.
|
||||||
|
INCLUDE zabapgit_object_iasp.
|
||||||
|
INCLUDE zabapgit_object_iatu.
|
||||||
|
INCLUDE zabapgit_object_msag.
|
||||||
|
INCLUDE zabapgit_object_nrob.
|
||||||
|
INCLUDE zabapgit_object_para.
|
||||||
|
INCLUDE zabapgit_object_pinf.
|
||||||
|
INCLUDE zabapgit_object_prog.
|
||||||
|
INCLUDE zabapgit_object_sfbf.
|
||||||
|
INCLUDE zabapgit_object_sfbs.
|
||||||
|
INCLUDE zabapgit_object_sfsw.
|
||||||
|
INCLUDE zabapgit_object_shi3.
|
||||||
|
INCLUDE zabapgit_object_shlp.
|
||||||
|
INCLUDE zabapgit_object_sicf.
|
||||||
|
INCLUDE zabapgit_object_smim.
|
||||||
|
INCLUDE zabapgit_object_splo.
|
||||||
|
INCLUDE zabapgit_object_ssfo.
|
||||||
|
INCLUDE zabapgit_object_ssst.
|
||||||
|
INCLUDE zabapgit_object_susc.
|
||||||
|
INCLUDE zabapgit_object_suso.
|
||||||
|
INCLUDE zabapgit_object_tabl.
|
||||||
|
INCLUDE zabapgit_object_tobj.
|
||||||
|
INCLUDE zabapgit_object_tran.
|
||||||
|
INCLUDE zabapgit_object_ttyp.
|
||||||
|
INCLUDE zabapgit_object_type.
|
||||||
|
INCLUDE zabapgit_object_vcls.
|
||||||
|
INCLUDE zabapgit_object_view.
|
||||||
|
INCLUDE zabapgit_object_w3xx.
|
||||||
|
INCLUDE zabapgit_object_wdya.
|
||||||
|
INCLUDE zabapgit_object_wdyn.
|
||||||
|
INCLUDE zabapgit_object_webi.
|
||||||
|
INCLUDE zabapgit_object_xslt.
|
48
src/zabapgit_object_serializing.prog.xml
Normal file
48
src/zabapgit_object_serializing.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_SERIALIZING</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_SERIALIZATION</ENTRY>
|
||||||
|
<LENGTH>37</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
676
src/zabapgit_objects_impl.prog.abap
Normal file
676
src/zabapgit_objects_impl.prog.abap
Normal file
|
@ -0,0 +1,676 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_OBJECT
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_objects IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_objects IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD warning_overwrite.
|
||||||
|
|
||||||
|
DATA: lv_index TYPE i,
|
||||||
|
lv_answer TYPE c,
|
||||||
|
lv_question TYPE string,
|
||||||
|
lt_before TYPE lcl_persistence_repo=>ty_local_checksum_tt,
|
||||||
|
lt_current TYPE lcl_persistence_repo=>ty_local_checksum_tt.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_before> LIKE LINE OF lt_before,
|
||||||
|
<ls_current> LIKE LINE OF lt_current,
|
||||||
|
<ls_result> LIKE LINE OF ct_results.
|
||||||
|
|
||||||
|
|
||||||
|
lt_before = io_repo->get_local_checksums( ).
|
||||||
|
lt_current = io_repo->build_local_checksums( ).
|
||||||
|
|
||||||
|
LOOP AT ct_results ASSIGNING <ls_result>.
|
||||||
|
lv_index = sy-tabix.
|
||||||
|
|
||||||
|
READ TABLE lt_before ASSIGNING <ls_before>
|
||||||
|
WITH KEY item-obj_type = <ls_result>-obj_type
|
||||||
|
item-obj_name = <ls_result>-obj_name.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_current ASSIGNING <ls_current>
|
||||||
|
WITH KEY item-obj_type = <ls_result>-obj_type
|
||||||
|
item-obj_name = <ls_result>-obj_name.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF <ls_before>-sha1 <> <ls_current>-sha1.
|
||||||
|
lv_question = |It looks like object { <ls_result>-obj_type
|
||||||
|
} { <ls_result>-obj_name
|
||||||
|
} has been modified locally, overwrite object?|.
|
||||||
|
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
titlebar = 'Warning'
|
||||||
|
text_question = lv_question
|
||||||
|
display_cancel_button = abap_false
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer
|
||||||
|
EXCEPTIONS
|
||||||
|
text_not_found = 1
|
||||||
|
OTHERS = 2 ##NO_TEXT.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_answer = '2'.
|
||||||
|
DELETE ct_results INDEX lv_index.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD warning_package.
|
||||||
|
|
||||||
|
DATA: lv_question TYPE c LENGTH 200,
|
||||||
|
lv_answer TYPE c,
|
||||||
|
ls_tadir TYPE tadir.
|
||||||
|
|
||||||
|
|
||||||
|
ls_tadir = lcl_tadir=>read_single( iv_object = is_item-obj_type
|
||||||
|
iv_obj_name = is_item-obj_name ).
|
||||||
|
IF NOT ls_tadir IS INITIAL AND ls_tadir-devclass <> iv_package.
|
||||||
|
CONCATENATE 'Overwrite object' is_item-obj_type is_item-obj_name
|
||||||
|
'from package' ls_tadir-devclass
|
||||||
|
INTO lv_question SEPARATED BY space. "#EC NOTEXT
|
||||||
|
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
titlebar = 'Warning'
|
||||||
|
text_question = lv_question
|
||||||
|
text_button_1 = 'Ok'
|
||||||
|
icon_button_1 = 'ICON_DELETE'
|
||||||
|
text_button_2 = 'Cancel'
|
||||||
|
icon_button_2 = 'ICON_CANCEL'
|
||||||
|
default_button = '2'
|
||||||
|
display_cancel_button = abap_false
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer
|
||||||
|
EXCEPTIONS
|
||||||
|
text_not_found = 1
|
||||||
|
OTHERS = 2. "#EC NOTEXT
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_answer = '2'.
|
||||||
|
rv_cancel = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "check_warning
|
||||||
|
|
||||||
|
METHOD update_package_tree.
|
||||||
|
|
||||||
|
DATA: lt_packages TYPE lcl_sap_package=>ty_devclass_tt,
|
||||||
|
lv_package LIKE LINE OF lt_packages,
|
||||||
|
lv_tree TYPE dirtree-tname.
|
||||||
|
|
||||||
|
|
||||||
|
lt_packages = lcl_sap_package=>list_subpackages( iv_package ).
|
||||||
|
APPEND iv_package TO lt_packages.
|
||||||
|
|
||||||
|
LOOP AT lt_packages INTO lv_package.
|
||||||
|
* update package tree for SE80
|
||||||
|
lv_tree = 'EU_' && lv_package.
|
||||||
|
CALL FUNCTION 'WB_TREE_ACTUALIZE'
|
||||||
|
EXPORTING
|
||||||
|
tree_name = lv_tree
|
||||||
|
without_crossreference = abap_true
|
||||||
|
with_tcode_index = abap_true.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "update_package_tree
|
||||||
|
|
||||||
|
METHOD create_object.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_obj_serializer_map,
|
||||||
|
item LIKE is_item,
|
||||||
|
metadata LIKE is_metadata,
|
||||||
|
END OF ty_obj_serializer_map.
|
||||||
|
|
||||||
|
STATICS st_obj_serializer_map
|
||||||
|
TYPE SORTED TABLE OF ty_obj_serializer_map WITH UNIQUE KEY item.
|
||||||
|
|
||||||
|
DATA: lv_message TYPE string,
|
||||||
|
lv_class_name TYPE string,
|
||||||
|
ls_obj_serializer_map LIKE LINE OF st_obj_serializer_map.
|
||||||
|
|
||||||
|
|
||||||
|
READ TABLE st_obj_serializer_map
|
||||||
|
INTO ls_obj_serializer_map WITH KEY item = is_item.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
lv_class_name = ls_obj_serializer_map-metadata-class.
|
||||||
|
ELSEIF is_metadata IS NOT INITIAL.
|
||||||
|
* Metadata is provided only on serialization
|
||||||
|
* Once this has been triggered, the same serializer shall be used
|
||||||
|
* for subsequent processes.
|
||||||
|
* Thus, buffer the metadata afterwards
|
||||||
|
ls_obj_serializer_map-item = is_item.
|
||||||
|
ls_obj_serializer_map-metadata = is_metadata.
|
||||||
|
INSERT ls_obj_serializer_map INTO TABLE st_obj_serializer_map.
|
||||||
|
|
||||||
|
lv_class_name = is_metadata-class.
|
||||||
|
ELSE.
|
||||||
|
lv_class_name = class_name( is_item ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
CREATE OBJECT ri_obj TYPE (lv_class_name)
|
||||||
|
EXPORTING
|
||||||
|
is_item = is_item
|
||||||
|
iv_language = iv_language.
|
||||||
|
CATCH cx_sy_create_object_error.
|
||||||
|
TRY.
|
||||||
|
* 2nd step, try looking for plugins
|
||||||
|
CREATE OBJECT ri_obj TYPE lcl_objects_bridge
|
||||||
|
EXPORTING
|
||||||
|
is_item = is_item.
|
||||||
|
CATCH cx_sy_create_object_error.
|
||||||
|
CONCATENATE 'Object type' is_item-obj_type 'not supported, serialize'
|
||||||
|
INTO lv_message
|
||||||
|
SEPARATED BY space. "#EC NOTEXT
|
||||||
|
lcx_exception=>raise( lv_message ).
|
||||||
|
ENDTRY.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD. "create_object
|
||||||
|
|
||||||
|
METHOD is_supported.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
create_object( is_item = is_item
|
||||||
|
iv_language = gc_english ).
|
||||||
|
rv_bool = abap_true.
|
||||||
|
CATCH lcx_exception.
|
||||||
|
rv_bool = abap_false.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD. "is_supported
|
||||||
|
|
||||||
|
METHOD supported_list.
|
||||||
|
|
||||||
|
DATA: lv_type LIKE LINE OF rt_types,
|
||||||
|
lt_snode TYPE TABLE OF snode.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_snode> LIKE LINE OF lt_snode.
|
||||||
|
|
||||||
|
|
||||||
|
CALL FUNCTION 'WB_TREE_ACTUALIZE'
|
||||||
|
EXPORTING
|
||||||
|
tree_name = 'PG_ZABAPGIT'
|
||||||
|
without_crossreference = abap_true
|
||||||
|
with_tcode_index = abap_true
|
||||||
|
TABLES
|
||||||
|
p_tree = lt_snode.
|
||||||
|
|
||||||
|
DELETE lt_snode WHERE type <> 'OPL'
|
||||||
|
OR name NP 'LCL_OBJECT_++++'.
|
||||||
|
|
||||||
|
LOOP AT lt_snode ASSIGNING <ls_snode>.
|
||||||
|
lv_type = <ls_snode>-name+11.
|
||||||
|
APPEND lv_type TO rt_types.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "supported_list
|
||||||
|
|
||||||
|
METHOD exists.
|
||||||
|
|
||||||
|
DATA: li_obj TYPE REF TO lif_object.
|
||||||
|
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
li_obj = create_object( is_item = is_item
|
||||||
|
iv_language = gc_english ).
|
||||||
|
rv_bool = li_obj->exists( ).
|
||||||
|
CATCH lcx_exception.
|
||||||
|
* ignore all errors and assume the object exists
|
||||||
|
rv_bool = abap_true.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD. "exists
|
||||||
|
|
||||||
|
METHOD path_to_package.
|
||||||
|
|
||||||
|
DATA: lv_length TYPE i,
|
||||||
|
lv_path TYPE string.
|
||||||
|
|
||||||
|
|
||||||
|
lv_length = strlen( iv_start ) - 1.
|
||||||
|
lv_path = iv_path+lv_length.
|
||||||
|
|
||||||
|
CONCATENATE iv_top lv_path INTO rv_package.
|
||||||
|
|
||||||
|
TRANSLATE rv_package USING '/_'.
|
||||||
|
|
||||||
|
lv_length = strlen( rv_package ) - 1.
|
||||||
|
|
||||||
|
rv_package = rv_package(lv_length).
|
||||||
|
|
||||||
|
TRANSLATE rv_package TO UPPER CASE.
|
||||||
|
|
||||||
|
IF lcl_sap_package=>exists( rv_package ) = abap_false.
|
||||||
|
lcl_sap_package=>create_child( iv_parent = iv_top
|
||||||
|
iv_child = rv_package ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD class_name.
|
||||||
|
|
||||||
|
CONCATENATE 'LCL_OBJECT_' is_item-obj_type INTO rv_class_name. "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDMETHOD. "class_name
|
||||||
|
|
||||||
|
METHOD jump.
|
||||||
|
|
||||||
|
DATA: li_obj TYPE REF TO lif_object.
|
||||||
|
|
||||||
|
|
||||||
|
li_obj = create_object( is_item = is_item
|
||||||
|
iv_language = gc_english ).
|
||||||
|
|
||||||
|
li_obj->jump( ).
|
||||||
|
|
||||||
|
ENDMETHOD. "jump
|
||||||
|
|
||||||
|
METHOD changed_by.
|
||||||
|
|
||||||
|
DATA: li_obj TYPE REF TO lif_object.
|
||||||
|
|
||||||
|
|
||||||
|
IF is_item IS INITIAL.
|
||||||
|
* eg. ".abapgit.xml" file
|
||||||
|
rv_user = lcl_objects_super=>c_user_unknown.
|
||||||
|
ELSE.
|
||||||
|
li_obj = create_object( is_item = is_item
|
||||||
|
iv_language = gc_english ).
|
||||||
|
rv_user = li_obj->changed_by( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ASSERT NOT rv_user IS INITIAL.
|
||||||
|
|
||||||
|
* todo, fallback to looking at transports if rv_user = 'UNKNOWN'?
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD delete.
|
||||||
|
|
||||||
|
DATA: ls_item TYPE ty_item,
|
||||||
|
lv_tabclass TYPE dd02l-tabclass,
|
||||||
|
lt_tadir LIKE it_tadir.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF it_tadir.
|
||||||
|
|
||||||
|
|
||||||
|
* misuse field KORRNUM to fix deletion sequence
|
||||||
|
|
||||||
|
lt_tadir[] = it_tadir[].
|
||||||
|
|
||||||
|
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||||
|
CASE <ls_tadir>-object.
|
||||||
|
WHEN 'IATU'.
|
||||||
|
<ls_tadir>-korrnum = '5500'.
|
||||||
|
WHEN 'IARP'.
|
||||||
|
<ls_tadir>-korrnum = '5510'.
|
||||||
|
WHEN 'IASP'.
|
||||||
|
<ls_tadir>-korrnum = '5520'.
|
||||||
|
WHEN 'SUSC'.
|
||||||
|
<ls_tadir>-korrnum = '5000'.
|
||||||
|
WHEN 'TTYP' OR 'TABL' OR 'VIEW'.
|
||||||
|
SELECT SINGLE tabclass FROM dd02l
|
||||||
|
INTO lv_tabclass
|
||||||
|
WHERE tabname = <ls_tadir>-obj_name
|
||||||
|
AND as4local = 'A'
|
||||||
|
AND as4vers = '0000'.
|
||||||
|
IF sy-subrc = 0 AND lv_tabclass = 'APPEND'.
|
||||||
|
* delete append structures before database tables
|
||||||
|
<ls_tadir>-korrnum = '6500'.
|
||||||
|
ELSE.
|
||||||
|
<ls_tadir>-korrnum = '7000'.
|
||||||
|
ENDIF.
|
||||||
|
WHEN 'DTEL'.
|
||||||
|
<ls_tadir>-korrnum = '8000'.
|
||||||
|
WHEN 'DOMA'.
|
||||||
|
<ls_tadir>-korrnum = '9000'.
|
||||||
|
WHEN 'PROG'.
|
||||||
|
* delete includes after main programs
|
||||||
|
SELECT COUNT(*) FROM reposrc
|
||||||
|
WHERE progname = <ls_tadir>-obj_name
|
||||||
|
AND r3state = 'A'
|
||||||
|
AND subc = 'I'.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
<ls_tadir>-korrnum = '2000'.
|
||||||
|
ELSE.
|
||||||
|
<ls_tadir>-korrnum = '1000'.
|
||||||
|
ENDIF.
|
||||||
|
WHEN OTHERS.
|
||||||
|
<ls_tadir>-korrnum = '1000'.
|
||||||
|
ENDCASE.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
resolve_ddic( CHANGING ct_tadir = lt_tadir ).
|
||||||
|
|
||||||
|
SORT lt_tadir BY korrnum ASCENDING.
|
||||||
|
|
||||||
|
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||||
|
lcl_progress=>show( iv_key = 'Delete'
|
||||||
|
iv_current = sy-tabix
|
||||||
|
iv_total = lines( lt_tadir )
|
||||||
|
iv_text = <ls_tadir>-obj_name ) ##NO_TEXT.
|
||||||
|
|
||||||
|
CLEAR ls_item.
|
||||||
|
ls_item-obj_type = <ls_tadir>-object.
|
||||||
|
ls_item-obj_name = <ls_tadir>-obj_name.
|
||||||
|
delete_obj( ls_item ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "delete
|
||||||
|
|
||||||
|
METHOD resolve_ddic.
|
||||||
|
* this will make sure the deletion sequence of structures/tables work
|
||||||
|
* in case they have dependencies with .INCLUDE
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_edge,
|
||||||
|
from TYPE ty_item,
|
||||||
|
to TYPE ty_item,
|
||||||
|
END OF ty_edge.
|
||||||
|
|
||||||
|
DATA: lt_nodes TYPE TABLE OF ty_item,
|
||||||
|
lt_edges TYPE TABLE OF ty_edge,
|
||||||
|
lt_findstrings TYPE TABLE OF rsfind,
|
||||||
|
lv_plus TYPE i VALUE 1,
|
||||||
|
lv_find_obj_cls TYPE euobj-id,
|
||||||
|
lv_index TYPE i,
|
||||||
|
lv_before TYPE i,
|
||||||
|
lt_founds TYPE TABLE OF rsfindlst,
|
||||||
|
lt_scope TYPE STANDARD TABLE OF seu_obj.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir,
|
||||||
|
<ls_edge> LIKE LINE OF lt_edges,
|
||||||
|
<ls_found> LIKE LINE OF lt_founds,
|
||||||
|
<ls_node> LIKE LINE OF lt_nodes.
|
||||||
|
|
||||||
|
|
||||||
|
* build nodes
|
||||||
|
LOOP AT ct_tadir ASSIGNING <ls_tadir>
|
||||||
|
WHERE object = 'TABL'
|
||||||
|
OR object = 'TTYP'.
|
||||||
|
APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
|
||||||
|
<ls_node>-obj_name = <ls_tadir>-obj_name.
|
||||||
|
<ls_node>-obj_type = <ls_tadir>-object.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
APPEND 'TABL' TO lt_scope.
|
||||||
|
APPEND 'STRU' TO lt_scope.
|
||||||
|
APPEND 'TTYP' TO lt_scope.
|
||||||
|
|
||||||
|
* build edges
|
||||||
|
LOOP AT lt_nodes ASSIGNING <ls_node>.
|
||||||
|
|
||||||
|
CLEAR lt_findstrings.
|
||||||
|
APPEND <ls_node>-obj_name TO lt_findstrings.
|
||||||
|
lv_find_obj_cls = <ls_node>-obj_type.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_EU_CROSSREF'
|
||||||
|
EXPORTING
|
||||||
|
i_find_obj_cls = lv_find_obj_cls
|
||||||
|
TABLES
|
||||||
|
i_findstrings = lt_findstrings
|
||||||
|
o_founds = lt_founds
|
||||||
|
i_scope_object_cls = lt_scope
|
||||||
|
EXCEPTIONS
|
||||||
|
not_executed = 1
|
||||||
|
not_found = 2
|
||||||
|
illegal_object = 3
|
||||||
|
no_cross_for_this_object = 4
|
||||||
|
batch = 5
|
||||||
|
batchjob_error = 6
|
||||||
|
wrong_type = 7
|
||||||
|
object_not_exist = 8
|
||||||
|
OTHERS = 9.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT lt_founds ASSIGNING <ls_found>.
|
||||||
|
APPEND INITIAL LINE TO lt_edges ASSIGNING <ls_edge>.
|
||||||
|
<ls_edge>-from = <ls_node>.
|
||||||
|
|
||||||
|
<ls_edge>-to-obj_name = <ls_found>-object.
|
||||||
|
CASE <ls_found>-object_cls.
|
||||||
|
WHEN 'DS'
|
||||||
|
OR 'DT'.
|
||||||
|
<ls_edge>-to-obj_type = 'TABL'.
|
||||||
|
WHEN 'DA'.
|
||||||
|
<ls_edge>-to-obj_type = 'TTYP'.
|
||||||
|
WHEN OTHERS.
|
||||||
|
lcx_exception=>raise( 'resolve_ddic, unknown object_cls' ).
|
||||||
|
ENDCASE.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
DO.
|
||||||
|
lv_before = lines( lt_nodes ).
|
||||||
|
LOOP AT lt_nodes ASSIGNING <ls_node>.
|
||||||
|
lv_index = sy-tabix.
|
||||||
|
READ TABLE lt_edges WITH KEY
|
||||||
|
from-obj_name = <ls_node>-obj_name
|
||||||
|
from-obj_type = <ls_node>-obj_type
|
||||||
|
TRANSPORTING NO FIELDS.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
LOOP AT ct_tadir ASSIGNING <ls_tadir>
|
||||||
|
WHERE obj_name = <ls_node>-obj_name
|
||||||
|
AND object = <ls_node>-obj_type.
|
||||||
|
<ls_tadir>-korrnum = <ls_tadir>-korrnum + lv_plus.
|
||||||
|
CONDENSE <ls_tadir>-korrnum.
|
||||||
|
ENDLOOP.
|
||||||
|
DELETE lt_edges
|
||||||
|
WHERE to-obj_name = <ls_node>-obj_name
|
||||||
|
AND to-obj_type = <ls_node>-obj_type.
|
||||||
|
DELETE lt_nodes INDEX lv_index.
|
||||||
|
EXIT. " make sure the sequence is fixed
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
IF lv_before = lines( lt_nodes ).
|
||||||
|
EXIT.
|
||||||
|
ENDIF.
|
||||||
|
lv_plus = lv_plus + 1.
|
||||||
|
ENDDO.
|
||||||
|
|
||||||
|
ENDMETHOD. "resolve_ddic
|
||||||
|
|
||||||
|
METHOD delete_obj.
|
||||||
|
|
||||||
|
DATA: li_obj TYPE REF TO lif_object.
|
||||||
|
|
||||||
|
|
||||||
|
IF is_supported( is_item ) = abap_true.
|
||||||
|
li_obj = create_object( is_item = is_item
|
||||||
|
iv_language = gc_english ).
|
||||||
|
li_obj->delete( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "delete
|
||||||
|
|
||||||
|
METHOD serialize.
|
||||||
|
|
||||||
|
DATA: li_obj TYPE REF TO lif_object,
|
||||||
|
lo_xml TYPE REF TO lcl_xml_output,
|
||||||
|
lo_files TYPE REF TO lcl_objects_files.
|
||||||
|
|
||||||
|
|
||||||
|
IF is_supported( is_item ) = abap_false.
|
||||||
|
IF NOT io_log IS INITIAL.
|
||||||
|
io_log->add( iv_msgv1 = 'Object type ignored, not supported:'
|
||||||
|
iv_msgv2 = is_item-obj_type
|
||||||
|
iv_msgv3 = '-'
|
||||||
|
iv_msgv4 = is_item-obj_name ) ##no_text.
|
||||||
|
ENDIF.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_files
|
||||||
|
EXPORTING
|
||||||
|
is_item = is_item.
|
||||||
|
|
||||||
|
li_obj = create_object( is_item = is_item
|
||||||
|
iv_language = iv_language ).
|
||||||
|
li_obj->mo_files = lo_files.
|
||||||
|
CREATE OBJECT lo_xml.
|
||||||
|
li_obj->serialize( lo_xml ).
|
||||||
|
lo_files->add_xml( io_xml = lo_xml
|
||||||
|
is_metadata = li_obj->get_metadata( ) ).
|
||||||
|
|
||||||
|
rt_files = lo_files->get_files( ).
|
||||||
|
|
||||||
|
check_duplicates( rt_files ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize
|
||||||
|
|
||||||
|
METHOD check_duplicates.
|
||||||
|
|
||||||
|
DATA: lt_files TYPE ty_files_tt.
|
||||||
|
|
||||||
|
|
||||||
|
lt_files[] = it_files[].
|
||||||
|
SORT lt_files BY path ASCENDING filename ASCENDING.
|
||||||
|
DELETE ADJACENT DUPLICATES FROM lt_files COMPARING path filename.
|
||||||
|
IF lines( lt_files ) <> lines( it_files ).
|
||||||
|
lcx_exception=>raise( 'Duplicates' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD prioritize_deser.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||||
|
|
||||||
|
* PROG before internet services, as the services might use the screens
|
||||||
|
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'PROG'.
|
||||||
|
APPEND <ls_result> TO rt_results.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
* ISAP has to be handled before ISRP
|
||||||
|
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'IASP'.
|
||||||
|
APPEND <ls_result> TO rt_results.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
LOOP AT it_results ASSIGNING <ls_result>
|
||||||
|
WHERE obj_type <> 'IASP' AND obj_type <> 'PROG'.
|
||||||
|
APPEND <ls_result> TO rt_results.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "prioritize_deser
|
||||||
|
|
||||||
|
METHOD deserialize.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_late,
|
||||||
|
obj TYPE REF TO lif_object,
|
||||||
|
xml TYPE REF TO lcl_xml_input,
|
||||||
|
package TYPE devclass,
|
||||||
|
END OF ty_late.
|
||||||
|
|
||||||
|
DATA: ls_item TYPE ty_item,
|
||||||
|
lv_cancel TYPE abap_bool,
|
||||||
|
li_obj TYPE REF TO lif_object,
|
||||||
|
lt_remote TYPE ty_files_tt,
|
||||||
|
lv_package TYPE devclass,
|
||||||
|
lo_files TYPE REF TO lcl_objects_files,
|
||||||
|
lo_xml TYPE REF TO lcl_xml_input,
|
||||||
|
lt_results TYPE ty_results_tt,
|
||||||
|
lt_late TYPE TABLE OF ty_late.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
||||||
|
<ls_late> LIKE LINE OF lt_late.
|
||||||
|
|
||||||
|
|
||||||
|
lcl_objects_activation=>clear( ).
|
||||||
|
|
||||||
|
lt_remote = io_repo->get_files_remote( ).
|
||||||
|
|
||||||
|
lt_results = lcl_file_status=>status( io_repo ).
|
||||||
|
DELETE lt_results WHERE match = abap_true.
|
||||||
|
SORT lt_results BY obj_type ASCENDING obj_name ASCENDING.
|
||||||
|
DELETE ADJACENT DUPLICATES FROM lt_results COMPARING obj_type obj_name.
|
||||||
|
|
||||||
|
lt_results = prioritize_deser( lt_results ).
|
||||||
|
|
||||||
|
warning_overwrite( EXPORTING io_repo = io_repo
|
||||||
|
CHANGING ct_results = lt_results ).
|
||||||
|
|
||||||
|
LOOP AT lt_results ASSIGNING <ls_result>.
|
||||||
|
lcl_progress=>show( iv_key = 'Deserialize'
|
||||||
|
iv_current = sy-tabix
|
||||||
|
iv_total = lines( lt_results )
|
||||||
|
iv_text = <ls_result>-obj_name ) ##NO_TEXT.
|
||||||
|
|
||||||
|
CLEAR ls_item.
|
||||||
|
ls_item-obj_type = <ls_result>-obj_type.
|
||||||
|
ls_item-obj_name = <ls_result>-obj_name.
|
||||||
|
* handle namespaces
|
||||||
|
REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'.
|
||||||
|
|
||||||
|
lv_package = path_to_package(
|
||||||
|
iv_top = io_repo->get_package( )
|
||||||
|
iv_start = io_repo->get_dot_abapgit( )->get_starting_folder( )
|
||||||
|
iv_path = <ls_result>-path ).
|
||||||
|
|
||||||
|
lv_cancel = warning_package( is_item = ls_item
|
||||||
|
iv_package = lv_package ).
|
||||||
|
IF lv_cancel = abap_true.
|
||||||
|
lcx_exception=>raise( 'cancelled' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_files
|
||||||
|
EXPORTING
|
||||||
|
is_item = ls_item.
|
||||||
|
lo_files->set_files( lt_remote ).
|
||||||
|
|
||||||
|
* Analyze XML in order to instantiate the proper serializer
|
||||||
|
lo_xml = lo_files->read_xml( ).
|
||||||
|
|
||||||
|
li_obj = create_object( is_item = ls_item
|
||||||
|
iv_language = io_repo->get_master_language( )
|
||||||
|
is_metadata = lo_xml->get_metadata( ) ).
|
||||||
|
|
||||||
|
li_obj->mo_files = lo_files.
|
||||||
|
|
||||||
|
IF li_obj->get_metadata( )-late_deser = abap_true.
|
||||||
|
APPEND INITIAL LINE TO lt_late ASSIGNING <ls_late>.
|
||||||
|
<ls_late>-obj = li_obj.
|
||||||
|
<ls_late>-xml = lo_xml.
|
||||||
|
<ls_late>-package = lv_package.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_obj->deserialize( iv_package = lv_package
|
||||||
|
io_xml = lo_xml ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
lcl_objects_activation=>activate( ).
|
||||||
|
|
||||||
|
LOOP AT lt_late ASSIGNING <ls_late>.
|
||||||
|
<ls_late>-obj->deserialize( iv_package = <ls_late>-package
|
||||||
|
io_xml = <ls_late>-xml ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
update_package_tree( io_repo->get_package( ) ).
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_objects IMPLEMENTATION
|
|
@ -3,7 +3,7 @@
|
||||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
<asx:values>
|
<asx:values>
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT</NAME>
|
<NAME>ZABAPGIT_OBJECTS_IMPL</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
<SQLX/>
|
||||||
<EDTX/>
|
<EDTX/>
|
240
src/zabapgit_page_diff.prog.abap
Normal file
240
src/zabapgit_page_diff.prog.abap
Normal file
|
@ -0,0 +1,240 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_PAGE_DIFF
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS: constructor
|
||||||
|
IMPORTING
|
||||||
|
is_local TYPE ty_file
|
||||||
|
is_remote TYPE ty_file.
|
||||||
|
|
||||||
|
METHODS lif_gui_page~render REDEFINITION.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA: mv_filename TYPE string,
|
||||||
|
mo_diff TYPE REF TO lcl_diff.
|
||||||
|
|
||||||
|
METHODS styles RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
METHODS render_head RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
METHODS render_diff RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
METHODS render_lines RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_page_diff
|
||||||
|
|
||||||
|
CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD constructor.
|
||||||
|
super->constructor( ).
|
||||||
|
|
||||||
|
mv_filename = is_local-filename.
|
||||||
|
|
||||||
|
CREATE OBJECT mo_diff
|
||||||
|
EXPORTING
|
||||||
|
iv_local = is_local-data
|
||||||
|
iv_remote = is_remote-data.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD styles.
|
||||||
|
DATA lo_html TYPE REF TO lcl_html_helper.
|
||||||
|
CREATE OBJECT lo_html.
|
||||||
|
|
||||||
|
lo_html->add( '/* DIFF */' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'div.diff {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' background-color: #f2f2f2;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' padding: 0.7em ' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'div.diff_head {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-bottom: 1px solid #DDD;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' padding-bottom: 0.7em;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'span.diff_name {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' color: grey;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'span.diff_name strong {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' color: #333;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'span.diff_banner {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-style: solid;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-width: 1px;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-radius: 3px;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' padding-left: 0.3em;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' padding-right: 0.3em;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '.diff_ins {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-color: #38e038;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' background-color: #91ee91 !important;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '.diff_del {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-color: #ff8093;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' background-color: #ffb3be !important;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '.diff_upd {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-color: #dada00;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' background-color: #ffffb3 !important;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'div.diff_content {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' background: #fff;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
" Table part
|
||||||
|
lo_html->add( '/* DIFF TABLE */' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'table.diff_tab {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' font-family: Consolas, Courier, monospace;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'table.diff_tab th {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' color: grey;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' text-align: left;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' font-weight: normal;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' padding: 0.5em;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'table.diff_tab td {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' color: #444;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' padding-right: 0.5em;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' font-size: 12pt;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'table.diff_tab td.num, th.num {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' text-align: right;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' color: #ccc;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-left: 1px solid #eee;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-right: 1px solid #eee;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'table.diff_tab td.cmd, th.cmd {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' text-align: center !important;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' white-space: nowrap;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
lo_html->add( 'table.diff_tab tr.diff_nav_line {'). "#EC NOTEXT
|
||||||
|
lo_html->add( ' background-color: #edf2f9;'). "#EC NOTEXT
|
||||||
|
lo_html->add( '}'). "#EC NOTEXT
|
||||||
|
lo_html->add( 'table.diff_tab tr.diff_nav_line td {'). "#EC NOTEXT
|
||||||
|
lo_html->add( ' color: #ccc;'). "#EC NOTEXT
|
||||||
|
lo_html->add( '}'). "#EC NOTEXT
|
||||||
|
lo_html->add( 'table.diff_tab code {' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' font-family: inherit;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' white-space: pre;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ro_html = lo_html.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD render_head.
|
||||||
|
DATA: lo_html TYPE REF TO lcl_html_helper,
|
||||||
|
ls_stats TYPE lcl_diff=>ty_count.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_html.
|
||||||
|
|
||||||
|
ls_stats = mo_diff->stats( ).
|
||||||
|
|
||||||
|
lo_html->add( '<div class="diff_head">' ). "#EC NOTEXT
|
||||||
|
lo_html->add( |<span class="diff_banner diff_ins">+ { ls_stats-insert }</span>| ).
|
||||||
|
lo_html->add( |<span class="diff_banner diff_del">- { ls_stats-delete }</span>| ).
|
||||||
|
lo_html->add( |<span class="diff_banner diff_upd">~ { ls_stats-update }</span>| ).
|
||||||
|
lo_html->add( '<span class="diff_name">' ). "#EC NOTEXT
|
||||||
|
lo_html->add( |{ mv_filename }| ).
|
||||||
|
lo_html->add( '</span>' ). "#EC NOTEXT
|
||||||
|
lo_html->add( '</div>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ro_html = lo_html.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD render_diff.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
ro_html->add( '<div class="diff">' ). "#EC NOTEXT
|
||||||
|
ro_html->add( render_head( ) ).
|
||||||
|
|
||||||
|
" Content
|
||||||
|
ro_html->add( '<div class="diff_content">' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<table width="100%" class="diff_tab">' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th>@LOCAL</th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th>@REMOTE</th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( render_lines( ) ).
|
||||||
|
ro_html->add( '</table>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '</div>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ro_html->add( '</div>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD render_lines.
|
||||||
|
|
||||||
|
DATA: lt_diffs TYPE lcl_diff=>ty_diffs_tt,
|
||||||
|
lv_local TYPE string,
|
||||||
|
lv_remote TYPE string,
|
||||||
|
lv_attr_local TYPE string,
|
||||||
|
lv_attr_remote TYPE string,
|
||||||
|
lv_beacon TYPE string,
|
||||||
|
lv_insert_nav TYPE abap_bool.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_diff> LIKE LINE OF lt_diffs.
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
lt_diffs = mo_diff->get( ).
|
||||||
|
|
||||||
|
LOOP AT lt_diffs ASSIGNING <ls_diff>.
|
||||||
|
IF <ls_diff>-short = abap_false.
|
||||||
|
lv_insert_nav = abap_true.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_insert_nav = abap_true. " Insert separator line with navigation
|
||||||
|
IF <ls_diff>-beacon > 0.
|
||||||
|
READ TABLE mo_diff->mt_beacons INTO lv_beacon INDEX <ls_diff>-beacon.
|
||||||
|
ELSE.
|
||||||
|
lv_beacon = '---'.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<tr class="diff_nav_line">').
|
||||||
|
ro_html->add( '<td class="num"></td>' ).
|
||||||
|
ro_html->add( |<td colspan="3">@@ { <ls_diff>-local_line } @@ { lv_beacon }</td>| ).
|
||||||
|
ro_html->add( '</tr>' ).
|
||||||
|
lv_insert_nav = abap_false.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_local = escape( val = <ls_diff>-local format = cl_abap_format=>e_html_attr ).
|
||||||
|
lv_remote = escape( val = <ls_diff>-remote format = cl_abap_format=>e_html_attr ).
|
||||||
|
|
||||||
|
CLEAR: lv_attr_local, lv_attr_remote. " Class for changed lines
|
||||||
|
CASE <ls_diff>-result.
|
||||||
|
WHEN lcl_diff=>c_diff-insert.
|
||||||
|
lv_attr_local = ' class="diff_ins"'. "#EC NOTEXT
|
||||||
|
WHEN lcl_diff=>c_diff-delete.
|
||||||
|
lv_attr_remote = ' class="diff_del"'. "#EC NOTEXT
|
||||||
|
WHEN lcl_diff=>c_diff-update.
|
||||||
|
lv_attr_local = ' class="diff_upd"'. "#EC NOTEXT
|
||||||
|
lv_attr_remote = ' class="diff_upd"'. "#EC NOTEXT
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( |<td class="num">{ <ls_diff>-local_line }</td>| ). "#EC NOTEXT
|
||||||
|
ro_html->add( |<td{ lv_attr_local }><code>{ lv_local }</code></td>| ). "#EC NOTEXT
|
||||||
|
ro_html->add( |<td class="num">{ <ls_diff>-remote_line }</td>| ). "#EC NOTEXT
|
||||||
|
ro_html->add( |<td{ lv_attr_remote }><code>{ lv_remote }</code></td>| ). "#EC NOTEXT
|
||||||
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_gui_page~render.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||||
|
ro_html->add( title( 'DIFF' ) ).
|
||||||
|
ro_html->add( render_diff( ) ).
|
||||||
|
ro_html->add( footer( ) ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_page_diff
|
48
src/zabapgit_page_diff.prog.xml
Normal file
48
src/zabapgit_page_diff.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_PAGE_DIFF</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_PAGE_DIFF</ENTRY>
|
||||||
|
<LENGTH>26</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
20
src/zabapgit_page_explore.prog.abap
Normal file
20
src/zabapgit_page_explore.prog.abap
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_PAGE_EXPLORE
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
CLASS lcl_gui_page_explore DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS lif_gui_page~render REDEFINITION.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_page_explore DEFINITION
|
||||||
|
|
||||||
|
CLASS lcl_gui_page_explore IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD lif_gui_page~render.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
ro_html->add( redirect( 'http://larshp.github.io/abapGit/explore.html' ) ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_page_explore IMPLEMENTATION
|
48
src/zabapgit_page_explore.prog.xml
Normal file
48
src/zabapgit_page_explore.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_PAGE_EXPLORE</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_PAGE_EXPLORE</ENTRY>
|
||||||
|
<LENGTH>29</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -190,367 +190,6 @@ CLASS lcl_persistence_repo DEFINITION FINAL.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
* CLASS lcl_persistence DEFINITION
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_persistence DEFINITION FINAL FRIENDS lcl_persistence_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 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 ty_sha1
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
METHODS add
|
|
||||||
IMPORTING iv_url TYPE string
|
|
||||||
iv_branch_name TYPE string
|
|
||||||
iv_branch TYPE 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 = gc_english.
|
|
||||||
rs_header-tdname = 'ZABAPGIT'.
|
|
||||||
rs_header-tdobject = 'TEXT'.
|
|
||||||
ENDMETHOD. "header
|
|
||||||
|
|
||||||
METHOD header_offline.
|
|
||||||
rs_header-tdid = 'ST'.
|
|
||||||
rs_header-tdspras = 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_persistence_background DEFINITION FINAL.
|
CLASS lcl_persistence_background DEFINITION FINAL.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
@ -789,209 +428,6 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
||||||
|
|
||||||
ENDCLASS. "lcl_persistence_user DEFINITION
|
ENDCLASS. "lcl_persistence_user DEFINITION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
* CLASS lcl_user DEFINITION
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_user DEFINITION FINAL FRIENDS lcl_persistence_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.
|
|
||||||
|
|
||||||
* this class is obsolete, use LCL_PERSISTENCE_USER instead
|
|
||||||
|
|
||||||
METHOD read.
|
|
||||||
|
|
||||||
DATA: lt_lines TYPE TABLE OF tline,
|
|
||||||
ls_line LIKE LINE OF lt_lines.
|
|
||||||
|
|
||||||
|
|
||||||
CALL FUNCTION 'READ_TEXT'
|
|
||||||
EXPORTING
|
|
||||||
id = 'ST'
|
|
||||||
language = 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 = 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_%'.
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
CLASS lcl_persistence_user IMPLEMENTATION.
|
CLASS lcl_persistence_user IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
|
|
569
src/zabapgit_persistence_old.prog.abap
Normal file
569
src/zabapgit_persistence_old.prog.abap
Normal file
|
@ -0,0 +1,569 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_PERSISTENCE_OLD
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
CLASS lcl_persistence_migrate DEFINITION DEFERRED.
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_persistence DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_persistence DEFINITION FINAL FRIENDS lcl_persistence_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 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 ty_sha1
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS add
|
||||||
|
IMPORTING iv_url TYPE string
|
||||||
|
iv_branch_name TYPE string
|
||||||
|
iv_branch TYPE 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 = gc_english.
|
||||||
|
rs_header-tdname = 'ZABAPGIT'.
|
||||||
|
rs_header-tdobject = 'TEXT'.
|
||||||
|
ENDMETHOD. "header
|
||||||
|
|
||||||
|
METHOD header_offline.
|
||||||
|
rs_header-tdid = 'ST'.
|
||||||
|
rs_header-tdspras = 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_persistence_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.
|
||||||
|
|
||||||
|
* this class is obsolete, use LCL_PERSISTENCE_USER instead
|
||||||
|
|
||||||
|
METHOD read.
|
||||||
|
|
||||||
|
DATA: lt_lines TYPE TABLE OF tline,
|
||||||
|
ls_line LIKE LINE OF lt_lines.
|
||||||
|
|
||||||
|
|
||||||
|
CALL FUNCTION 'READ_TEXT'
|
||||||
|
EXPORTING
|
||||||
|
id = 'ST'
|
||||||
|
language = 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 = 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_%'.
|
||||||
|
|
||||||
|
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
|
48
src/zabapgit_persistence_old.prog.xml
Normal file
48
src/zabapgit_persistence_old.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_PERSISTENCE_OLD</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_PERSISTENCE_OLD</ENTRY>
|
||||||
|
<LENGTH>32</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -5,8 +5,6 @@
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_repo DEFINITION
|
* CLASS lcl_repo DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_repo DEFINITION ABSTRACT.
|
CLASS lcl_repo DEFINITION ABSTRACT.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
@ -134,8 +132,6 @@ ENDCLASS. "lcl_repo_online DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_repo_offline DEFINITION
|
* CLASS lcl_repo_offline DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_repo_offline DEFINITION INHERITING FROM lcl_repo FINAL.
|
CLASS lcl_repo_offline DEFINITION INHERITING FROM lcl_repo FINAL.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
|
@ -959,3 +959,83 @@ CLASS lcl_progress IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_log DEFINITION FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS:
|
||||||
|
add
|
||||||
|
IMPORTING
|
||||||
|
iv_msgv1 TYPE csequence
|
||||||
|
iv_msgv2 TYPE csequence OPTIONAL
|
||||||
|
iv_msgv3 TYPE csequence OPTIONAL
|
||||||
|
iv_msgv4 TYPE csequence OPTIONAL,
|
||||||
|
count
|
||||||
|
RETURNING VALUE(rv_count) TYPE i,
|
||||||
|
to_html
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||||
|
show.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA: mt_log TYPE rs_t_msg.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_log IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD to_html.
|
||||||
|
|
||||||
|
DATA: lv_string TYPE string.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_log> LIKE LINE OF mt_log.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
IF count( ) = 0.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<br>' ).
|
||||||
|
LOOP AT mt_log ASSIGNING <ls_log>.
|
||||||
|
CONCATENATE <ls_log>-msgv1
|
||||||
|
<ls_log>-msgv2
|
||||||
|
<ls_log>-msgv3
|
||||||
|
<ls_log>-msgv4 INTO lv_string SEPARATED BY space.
|
||||||
|
ro_html->add( lv_string ).
|
||||||
|
ro_html->add( '<br>' ).
|
||||||
|
ENDLOOP.
|
||||||
|
ro_html->add( '<br>' ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD add.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_log> LIKE LINE OF mt_log.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO mt_log ASSIGNING <ls_log>.
|
||||||
|
<ls_log>-msgty = 'W'.
|
||||||
|
<ls_log>-msgid = '00'.
|
||||||
|
<ls_log>-msgno = '001'.
|
||||||
|
<ls_log>-msgv1 = iv_msgv1.
|
||||||
|
<ls_log>-msgv2 = iv_msgv2.
|
||||||
|
<ls_log>-msgv3 = iv_msgv3.
|
||||||
|
<ls_log>-msgv4 = iv_msgv4.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD show.
|
||||||
|
CALL FUNCTION 'RSDC_SHOW_MESSAGES_POPUP'
|
||||||
|
EXPORTING
|
||||||
|
i_t_msg = mt_log
|
||||||
|
i_txt = 'Warning'
|
||||||
|
i_with_s_on_empty = abap_false
|
||||||
|
i_one_msg_direct = abap_false
|
||||||
|
i_one_msg_type_s = abap_false
|
||||||
|
##no_text.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD count.
|
||||||
|
rv_count = lines( mt_log ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
Loading…
Reference in New Issue
Block a user