mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
commit
33ce832d5f
|
@ -38,72 +38,27 @@ INCLUDE zabapgit_password_dialog. " !!! Contains SELECTION SCREEN
|
|||
INCLUDE zabapgit_definitions.
|
||||
INCLUDE zabapgit_exceptions.
|
||||
INCLUDE zabapgit_zlib.
|
||||
INCLUDE zabapgit_html.
|
||||
INCLUDE zabapgit_util.
|
||||
INCLUDE zabapgit_xml.
|
||||
|
||||
CLASS lcl_gui DEFINITION DEFERRED.
|
||||
CLASS lcl_persistence_user DEFINITION DEFERRED.
|
||||
CLASS lcl_repo_srv DEFINITION DEFERRED.
|
||||
CLASS lcl_persistence_db DEFINITION DEFERRED.
|
||||
|
||||
INCLUDE zabapgit_app.
|
||||
INCLUDE zabapgit_app. " Some deferred definitions here
|
||||
INCLUDE zabapgit_persistence_old.
|
||||
INCLUDE zabapgit_persistence.
|
||||
INCLUDE zabapgit_html.
|
||||
INCLUDE zabapgit_dot_abapgit.
|
||||
INCLUDE zabapgit_sap_package.
|
||||
|
||||
CLASS lcl_repo_online DEFINITION DEFERRED.
|
||||
|
||||
INCLUDE zabapgit_stage.
|
||||
INCLUDE zabapgit_git_helpers.
|
||||
INCLUDE zabapgit_repo.
|
||||
INCLUDE zabapgit_git.
|
||||
INCLUDE zabapgit_stage_logic.
|
||||
INCLUDE zabapgit_git.
|
||||
INCLUDE zabapgit_objects.
|
||||
INCLUDE zabapgit_tadir.
|
||||
INCLUDE zabapgit_file_status.
|
||||
INCLUDE zabapgit_object.
|
||||
INCLUDE zabapgit_object_acid.
|
||||
INCLUDE zabapgit_object_auth.
|
||||
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_objects_impl.
|
||||
|
||||
INCLUDE zabapgit_object_serializing. " All serializing classes here
|
||||
|
||||
INCLUDE zabapgit_repo_impl.
|
||||
INCLUDE zabapgit_background.
|
||||
|
@ -111,19 +66,15 @@ INCLUDE zabapgit_zip.
|
|||
INCLUDE zabapgit_transport.
|
||||
INCLUDE zabapgit_popups.
|
||||
|
||||
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_gui_pages. " All GUI pages here
|
||||
INCLUDE zabapgit_gui_router.
|
||||
INCLUDE zabapgit_gui.
|
||||
|
||||
INCLUDE zabapgit_app_impl.
|
||||
INCLUDE zabapgit_unit_test.
|
||||
INCLUDE zabapgit_forms.
|
||||
|
||||
**********************************************************************
|
||||
INITIALIZATION.
|
||||
lcl_password_dialog=>on_screen_init( ).
|
||||
|
||||
|
|
|
@ -2,6 +2,11 @@
|
|||
*& 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
|
||||
*----------------------------------------------------------------------*
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
*& Include ZABAPGIT_FORMS
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
|
||||
*&---------------------------------------------------------------------*
|
||||
*& Form run
|
||||
*&---------------------------------------------------------------------*
|
||||
|
|
|
@ -2,81 +2,6 @@
|
|||
*& 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
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -133,9 +58,7 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
|||
ENDCLASS. "lcl_gui DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_view IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
* CLASS lcl_gui IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_gui IMPLEMENTATION.
|
||||
|
||||
|
@ -347,827 +270,4 @@ CLASS lcl_gui IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "cache_image
|
||||
|
||||
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
|
||||
ENDCLASS. "lcl_gui IMPLEMENTATION
|
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.
|
||||
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
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -558,84 +301,4 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "render
|
||||
|
||||
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.
|
||||
ENDCLASS. "lcl_html_toolbar IMPLEMENTATION
|
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:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_OBJECT</NAME>
|
||||
<NAME>ZABAPGIT_OBJECTS_IMPL</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<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.
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* 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.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
@ -789,209 +428,6 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
|||
|
||||
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.
|
||||
|
||||
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 ABSTRACT.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
@ -134,8 +132,6 @@ ENDCLASS. "lcl_repo_online DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_repo_offline DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_repo_offline DEFINITION INHERITING FROM lcl_repo FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
|
|
@ -958,4 +958,84 @@ CLASS lcl_progress IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
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