mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
gui changes, close #283
- use top breadcrumb/toc to switch between repositories * move main and background to new includes * done, close #283 - hide/show feature removed - refresh all freature removed - error log moved to before file list * minor changes
This commit is contained in:
parent
a2bd714ef2
commit
5e2991fc35
|
@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
|
|||
* See http://www.abapgit.org
|
||||
|
||||
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.14.0'. "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.15.0'. "#EC NOTEXT
|
||||
|
||||
********************************************************************************
|
||||
* The MIT License (MIT)
|
||||
|
@ -116,6 +116,8 @@ INCLUDE zabapgit_page_merge.
|
|||
INCLUDE zabapgit_page_branch_overview.
|
||||
INCLUDE zabapgit_page_stage.
|
||||
INCLUDE zabapgit_page_db.
|
||||
INCLUDE zabapgit_page_main.
|
||||
INCLUDE zabapgit_page_background.
|
||||
INCLUDE zabapgit_gui.
|
||||
INCLUDE zabapgit_app_impl.
|
||||
INCLUDE zabapgit_unit_test.
|
||||
|
|
|
@ -399,79 +399,6 @@ CLASS lcl_gui_page_explore IMPLEMENTATION.
|
|||
|
||||
ENDCLASS. "lcl_gui_page_explore IMPLEMENTATION
|
||||
|
||||
|
||||
CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS lif_gui_page~render REDEFINITION.
|
||||
METHODS lif_gui_page~get_assets REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES: BEGIN OF ty_repo_item,
|
||||
obj_type TYPE tadir-object,
|
||||
obj_name TYPE tadir-obj_name,
|
||||
is_first TYPE abap_bool,
|
||||
files TYPE tt_repo_files,
|
||||
END OF ty_repo_item.
|
||||
TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY.
|
||||
|
||||
METHODS styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
METHODS render_error
|
||||
IMPORTING ix_error TYPE REF TO lcx_exception
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
METHODS render_toc
|
||||
IMPORTING it_list TYPE lcl_repo_srv=>ty_repo_tt
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS build_main_menu
|
||||
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
METHODS render_repo_menu
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS render_menu_hidden
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS render_repo
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS extract_repo_content
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
EXPORTING et_repo_items TYPE tt_repo_items
|
||||
eo_log TYPE REF TO lcl_log
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS render_repo_item
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
is_item TYPE ty_repo_item
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS render_obj_jump_link
|
||||
IMPORTING iv_obj_type TYPE tadir-object
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rv_html) TYPE string.
|
||||
|
||||
METHODS render_explore
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS needs_installation
|
||||
RETURNING VALUE(rv_not_completely_installed) TYPE abap_bool.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
@ -709,820 +636,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
|||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_background_run DEFINITION FINAL
|
||||
INHERITING FROM lcl_gui_page_super.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
lif_gui_page~on_event REDEFINITION,
|
||||
lif_gui_page~render REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: mt_text TYPE TABLE OF string.
|
||||
|
||||
METHODS: run.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_background_run IMPLEMENTATION.
|
||||
|
||||
METHOD lif_gui_page~on_event.
|
||||
RETURN.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD run.
|
||||
|
||||
DATA: lx_error TYPE REF TO lcx_exception,
|
||||
lv_text TYPE string,
|
||||
lv_line TYPE i VALUE 1.
|
||||
|
||||
|
||||
TRY.
|
||||
lcl_background=>run( ).
|
||||
|
||||
DO.
|
||||
READ LINE lv_line LINE VALUE INTO lv_text.
|
||||
IF sy-subrc <> 0.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
APPEND lv_text TO mt_text.
|
||||
lv_line = lv_line + 1.
|
||||
ENDDO.
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
APPEND lx_error->mv_text TO mt_text.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~render.
|
||||
|
||||
DATA: lv_text LIKE LINE OF mt_text.
|
||||
|
||||
|
||||
run( ).
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'BACKGROUND_RUN' ) ).
|
||||
ro_html->add( '<div id="toc">' ).
|
||||
LOOP AT mt_text INTO lv_text.
|
||||
ro_html->add( '<pre>' && lv_text && '</pre><br>' ).
|
||||
ENDLOOP.
|
||||
ro_html->add( '</div>' ).
|
||||
ro_html->add( footer( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_background DEFINITION FINAL
|
||||
INHERITING FROM lcl_gui_page_super.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
lif_gui_page~on_event REDEFINITION,
|
||||
lif_gui_page~render REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS:
|
||||
parse_fields
|
||||
IMPORTING iv_getdata TYPE clike
|
||||
RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background,
|
||||
render_data
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
save
|
||||
IMPORTING iv_getdata TYPE clike
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_background IMPLEMENTATION.
|
||||
|
||||
METHOD parse_fields.
|
||||
|
||||
DEFINE _field.
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = &1 ##NO_TEXT.
|
||||
IF sy-subrc = 0.
|
||||
rs_fields-&2 = <ls_field>-value.
|
||||
ENDIF.
|
||||
END-OF-DEFINITION.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
lv_string TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
|
||||
lv_string = iv_getdata. " type conversion
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||
|
||||
_field 'key' key.
|
||||
_field 'method' method.
|
||||
_field 'username' username.
|
||||
_field 'password' password.
|
||||
|
||||
ASSERT NOT rs_fields IS INITIAL.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~on_event.
|
||||
|
||||
CASE iv_action.
|
||||
WHEN 'save'.
|
||||
save( iv_getdata ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD save.
|
||||
|
||||
DATA: ls_fields TYPE lcl_persistence_background=>ty_background,
|
||||
lo_persistence TYPE REF TO lcl_persistence_background.
|
||||
|
||||
|
||||
ls_fields = parse_fields( iv_getdata ).
|
||||
|
||||
CREATE OBJECT lo_persistence.
|
||||
|
||||
IF ls_fields-method = lcl_persistence_background=>c_method-nothing.
|
||||
lo_persistence->delete( ls_fields-key ).
|
||||
ELSE.
|
||||
lo_persistence->modify( ls_fields ).
|
||||
ENDIF.
|
||||
|
||||
COMMIT WORK.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_data.
|
||||
|
||||
DATA: lo_repo TYPE REF TO lcl_repo,
|
||||
lo_online TYPE REF TO lcl_repo_online,
|
||||
lo_per TYPE REF TO lcl_persistence_background,
|
||||
lt_per TYPE lcl_persistence_background=>tt_background,
|
||||
ls_per LIKE LINE OF lt_per,
|
||||
lv_nothing TYPE string,
|
||||
lv_push TYPE string,
|
||||
lv_pull TYPE string,
|
||||
lt_list TYPE lcl_repo_srv=>ty_repo_tt.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( '<div id="toc">' ).
|
||||
ro_html->add( 'Listing online repositories' ) ##NO_TEXT.
|
||||
ro_html->add( '<br><br>' ).
|
||||
|
||||
CREATE OBJECT lo_per.
|
||||
lt_per = lo_per->list( ).
|
||||
lt_list = lcl_app=>repo_srv( )->list( ).
|
||||
|
||||
LOOP AT lt_list INTO lo_repo.
|
||||
IF lo_repo->is_offline( ) = abap_false.
|
||||
lo_online ?= lo_repo.
|
||||
|
||||
READ TABLE lt_per INTO ls_per WITH KEY key = lo_online->get_key( ).
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR ls_per.
|
||||
ENDIF.
|
||||
|
||||
CLEAR lv_push.
|
||||
CLEAR lv_pull.
|
||||
CLEAR lv_nothing.
|
||||
CASE ls_per-method.
|
||||
WHEN lcl_persistence_background=>c_method-push.
|
||||
lv_push = ' checked' ##NO_TEXT.
|
||||
WHEN lcl_persistence_background=>c_method-pull.
|
||||
lv_pull = ' checked' ##NO_TEXT.
|
||||
WHEN OTHERS.
|
||||
lv_nothing = ' checked' ##NO_TEXT.
|
||||
ENDCASE.
|
||||
|
||||
ro_html->add( '<h1>' && lo_online->get_name( ) && '</h1>' ).
|
||||
ro_html->add( '<form method="get" action="sapevent:save">' ).
|
||||
ro_html->add( '<input type="hidden" name="key" value="' &&
|
||||
lo_repo->get_key( ) && '">' ).
|
||||
ro_html->add( '<input type="radio" name="method" value="nothing"' &&
|
||||
lv_nothing && '>Do nothing<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '<input type="radio" name="method" value="push"' &&
|
||||
lv_push && '>Automatic push<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '<input type="radio" name="method" value="pull"' &&
|
||||
lv_pull && '>Automatic pull<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '<br>' ).
|
||||
ro_html->add( 'Authentication, optional<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '(password will be saved in clear text)<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '<table>' ).
|
||||
ro_html->add( '<tr>' ).
|
||||
ro_html->add( '<td>Username:</td>' ).
|
||||
ro_html->add( '<td><input type="text" name="username" value="' &&
|
||||
ls_per-username && '"></td>' ).
|
||||
ro_html->add( '</tr>' ).
|
||||
ro_html->add( '<tr>' ).
|
||||
ro_html->add( '<td>Password:</td>' ).
|
||||
ro_html->add( '<td><input type="text" name="password" value="' &&
|
||||
ls_per-password && '"></td>' ).
|
||||
ro_html->add( '</tr>' ).
|
||||
ro_html->add( '<tr><td colspan="2" align="right">' ).
|
||||
ro_html->add( '<input type="submit" value="Save">' ).
|
||||
ro_html->add( '</td></tr>' ).
|
||||
ro_html->add( '</table>' ).
|
||||
ro_html->add( '</form>' ).
|
||||
ro_html->add( '<br>' ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~render.
|
||||
|
||||
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
CREATE OBJECT lo_toolbar.
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Run background logic'
|
||||
iv_act = 'background_run' ) ##NO_TEXT.
|
||||
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( iv_title = 'BACKGROUND' io_menu = lo_toolbar ) ).
|
||||
ro_html->add( render_data( ) ).
|
||||
ro_html->add( footer( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||
|
||||
METHOD render_obj_jump_link.
|
||||
|
||||
DATA: lv_encode TYPE string,
|
||||
lo_html TYPE REF TO lcl_html_helper.
|
||||
|
||||
lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = iv_obj_type
|
||||
iv_obj_name = iv_obj_name ).
|
||||
|
||||
CREATE OBJECT lo_html.
|
||||
lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |jump?{ lv_encode }| ).
|
||||
rv_html = lo_html->mv_html.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_main_menu.
|
||||
|
||||
DATA lo_betasub TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
|
||||
CREATE OBJECT ro_menu.
|
||||
CREATE OBJECT lo_betasub.
|
||||
|
||||
lo_betasub->add( iv_txt = 'Database util' iv_act = 'db' ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Package to zip' iv_act = 'packagezip' ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Transport to zip' iv_act = 'transportzip' ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Background mode' iv_act = 'background' ) ##NO_TEXT.
|
||||
|
||||
ro_menu->add( iv_txt = 'Refresh all' iv_act = 'refresh' ) ##NO_TEXT.
|
||||
ro_menu->add( iv_txt = 'Clone' iv_act = 'install' ) ##NO_TEXT.
|
||||
ro_menu->add( iv_txt = 'Explore' iv_act = 'explore' ) ##NO_TEXT.
|
||||
ro_menu->add( iv_txt = 'New offline repo' iv_act = 'newoffline' ) ##NO_TEXT.
|
||||
IF needs_installation( ) = abap_true.
|
||||
ro_menu->add( iv_txt = 'Get abapGit' iv_act = 'abapgit_installation' ) ##NO_TEXT.
|
||||
ENDIF.
|
||||
ro_menu->add( iv_txt = 'β' io_sub = lo_betasub ).
|
||||
|
||||
ENDMETHOD. "build main_menu
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* REPOSITORY TABLE*/'.
|
||||
_add '.repo_tab {'.
|
||||
_add ' border: 1px solid #DDD;'.
|
||||
_add ' border-radius: 3px;'.
|
||||
_add ' background: #fff;'.
|
||||
_add ' margin-top: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td {'.
|
||||
_add ' border-top: 1px solid #eee;'.
|
||||
_add ' vertical-align: middle;'.
|
||||
_add ' color: #333;'.
|
||||
_add ' padding-top: 2px;'.
|
||||
_add ' padding-bottom: 2px;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.icon {'.
|
||||
_add ' width: 32px;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.type {'.
|
||||
_add ' width: 3em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.object {'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.files {'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.cmd {'.
|
||||
_add ' text-align: right;'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add ' padding-right: 1em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab tr.unsupported { color: lightgrey; }'.
|
||||
_add '.repo_tab tr.firstrow td { border-top: 0px; }'.
|
||||
_add '.repo_tab td.files span { display: block; }'.
|
||||
_add '.repo_tab td.cmd span { display: block; }'.
|
||||
_add '.repo_tab td.cmd a { display: block; }'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_menu_hidden.
|
||||
|
||||
DATA: lv_key TYPE lcl_persistence_db=>ty_value,
|
||||
lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
lv_key = io_repo->get_key( ).
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Show'
|
||||
iv_act = |unhide?{ lv_key }| ).
|
||||
|
||||
ro_html->add( '<div class="paddings right">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_repo_menu.
|
||||
|
||||
DATA: lo_toolbar TYPE REF TO lcl_html_toolbar,
|
||||
lv_key TYPE lcl_persistence_db=>ty_value,
|
||||
lo_sub TYPE REF TO lcl_html_toolbar,
|
||||
lo_repo_online TYPE REF TO lcl_repo_online.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
lv_key = io_repo->get_key( ).
|
||||
|
||||
IF io_repo->is_offline( ) = abap_true.
|
||||
lo_toolbar->add( iv_txt = 'Import ZIP'
|
||||
iv_act = |zipimport?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
lo_toolbar->add( iv_txt = 'Export ZIP'
|
||||
iv_act = |zipexport?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
lo_toolbar->add( iv_txt = 'Export&Commit'
|
||||
iv_act = |files_commit?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ELSE.
|
||||
lo_repo_online ?= io_repo.
|
||||
TRY.
|
||||
IF lo_repo_online->get_sha1_remote( ) <> lo_repo_online->get_sha1_local( ).
|
||||
lo_toolbar->add( iv_txt = 'Pull'
|
||||
iv_act = |pull?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ELSEIF lcl_stage_logic=>count( lo_repo_online ) > 0.
|
||||
lo_toolbar->add( iv_txt = 'Stage'
|
||||
iv_act = |stage?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ENDIF.
|
||||
CATCH lcx_exception ##NO_HANDLER.
|
||||
* authorization error or repository does not exist
|
||||
* ignore error
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT lo_sub.
|
||||
lo_sub->add( iv_txt = 'Remove'
|
||||
iv_act = |remove?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Uninstall'
|
||||
iv_act = |uninstall?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Switch branch'
|
||||
iv_act = |switch_branch?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Reset'
|
||||
iv_act = |reset?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Create branch'
|
||||
iv_act = |create_branch?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Branch overview'
|
||||
iv_act = |branch_overview?{ lv_key }| ).
|
||||
lo_toolbar->add( iv_txt = 'Advanced'
|
||||
io_sub = lo_sub ) ##NO_TEXT.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Refresh'
|
||||
iv_act = |refresh?{ lv_key }| ).
|
||||
lo_toolbar->add( iv_txt = 'Hide'
|
||||
iv_act = |hide?{ lv_key }| ).
|
||||
|
||||
ro_html->add( '<div class="paddings right">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_repo.
|
||||
DATA: lt_repo_items TYPE tt_repo_items,
|
||||
lx_error TYPE REF TO lcx_exception,
|
||||
lo_log TYPE REF TO lcl_log.
|
||||
|
||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
||||
ro_html->add( render_repo_top( io_repo ) ).
|
||||
|
||||
IF lcl_app=>user( )->is_hidden( io_repo->get_key( ) ) = abap_false.
|
||||
TRY.
|
||||
extract_repo_content( EXPORTING io_repo = io_repo
|
||||
IMPORTING et_repo_items = lt_repo_items
|
||||
eo_log = lo_log ).
|
||||
|
||||
* extract_repo_content must be called before rendering the menu
|
||||
* so that lo_log is filled with errors from the serialization
|
||||
ro_html->add( render_repo_menu( io_repo ) ).
|
||||
|
||||
ro_html->add( '<table width="100%" class="repo_tab">' ).
|
||||
|
||||
IF lines( lt_repo_items ) = 0.
|
||||
ro_html->add( '<tr class="unsupported firstrow"><td class="paddings">'
|
||||
&& '<center>Empty package</center>'
|
||||
&& '</td></tr>' ) ##NO_TEXT.
|
||||
ELSE.
|
||||
LOOP AT lt_repo_items ASSIGNING <ls_item>.
|
||||
ro_html->add( render_repo_item( io_repo = io_repo is_item = <ls_item> ) ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '</table>' ).
|
||||
|
||||
IF io_repo->is_offline( ) = abap_false.
|
||||
ro_html->add( '<div class="log">' ).
|
||||
* shows eg. list of unsupported objects
|
||||
ro_html->add( lo_log->to_html( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
ENDIF.
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
ro_html->add( render_repo_menu( io_repo ) ).
|
||||
ro_html->add( render_error( lx_error ) ).
|
||||
ENDTRY.
|
||||
ELSE.
|
||||
ro_html->add( render_menu_hidden( io_repo ) ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extract_repo_content.
|
||||
|
||||
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
|
||||
lt_tadir TYPE ty_tadir_tt,
|
||||
ls_repo_item TYPE ty_repo_item,
|
||||
ls_file TYPE ty_repo_file,
|
||||
lt_results TYPE ty_results_tt.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
||||
<ls_tadir> LIKE LINE OF lt_tadir.
|
||||
|
||||
|
||||
CLEAR et_repo_items.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_true.
|
||||
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
|
||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||
CLEAR ls_repo_item.
|
||||
IF sy-tabix = 1.
|
||||
ls_repo_item-is_first = abap_true.
|
||||
ENDIF.
|
||||
ls_repo_item-obj_type = <ls_tadir>-object.
|
||||
ls_repo_item-obj_name = <ls_tadir>-obj_name.
|
||||
APPEND ls_repo_item TO et_repo_items.
|
||||
ENDLOOP.
|
||||
|
||||
ELSE.
|
||||
CREATE OBJECT eo_log.
|
||||
lo_repo_online ?= io_repo.
|
||||
lt_results = lo_repo_online->status( eo_log ).
|
||||
LOOP AT lt_results ASSIGNING <ls_result>.
|
||||
AT NEW obj_name. "obj_type + obj_name
|
||||
CLEAR ls_repo_item.
|
||||
IF sy-tabix = 1.
|
||||
ls_repo_item-is_first = abap_true.
|
||||
ENDIF.
|
||||
ls_repo_item-obj_type = <ls_result>-obj_type.
|
||||
ls_repo_item-obj_name = <ls_result>-obj_name.
|
||||
ENDAT.
|
||||
|
||||
IF <ls_result>-filename IS NOT INITIAL.
|
||||
ls_file-path = <ls_result>-path.
|
||||
ls_file-filename = <ls_result>-filename.
|
||||
ls_file-is_changed = boolc( NOT <ls_result>-match = abap_true ).
|
||||
APPEND ls_file TO ls_repo_item-files.
|
||||
ENDIF.
|
||||
|
||||
AT END OF obj_name. "obj_type + obj_name
|
||||
APPEND ls_repo_item TO et_repo_items.
|
||||
ENDAT.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_repo_item.
|
||||
DATA:
|
||||
lv_link TYPE string,
|
||||
lv_icon TYPE string,
|
||||
lv_difflink TYPE string,
|
||||
ls_file LIKE LINE OF is_item-files,
|
||||
lv_trclass TYPE string.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
IF is_item-is_first = abap_true. " TR class
|
||||
lv_trclass = 'firstrow' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF is_item-obj_name IS INITIAL.
|
||||
lv_trclass = lv_trclass && ' unsupported' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF lv_trclass IS NOT INITIAL.
|
||||
SHIFT lv_trclass LEFT DELETING LEADING space.
|
||||
lv_trclass = | class="{ lv_trclass }"|.
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( |<tr{ lv_trclass }>| ).
|
||||
|
||||
IF is_item-obj_name IS INITIAL.
|
||||
ro_html->add( '<td colspan="3"></td>' ).
|
||||
ELSE.
|
||||
CASE is_item-obj_type. "TODO ??
|
||||
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
|
||||
lv_icon = |<img src="img/code">|.
|
||||
WHEN 'W3MI' OR 'W3HT'.
|
||||
lv_icon = |<img src="img/bin">|.
|
||||
WHEN ''.
|
||||
" no icon
|
||||
WHEN OTHERS.
|
||||
lv_icon = |<img src="img/obj">|.
|
||||
ENDCASE.
|
||||
|
||||
lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name
|
||||
iv_obj_type = is_item-obj_type ).
|
||||
ro_html->add( |<td class="icon">{ lv_icon }</td>| ).
|
||||
ro_html->add( |<td class="type">{ is_item-obj_type }</td>| ).
|
||||
ro_html->add( |<td class="object">{ lv_link }</td>| ).
|
||||
ENDIF.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_false. " Files for online repos only
|
||||
|
||||
ro_html->add( '<td class="files">' ).
|
||||
LOOP AT is_item-files INTO ls_file.
|
||||
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
|
||||
ENDLOOP.
|
||||
ro_html->add( '</td>' ).
|
||||
|
||||
ro_html->add( '<td class="cmd">' ).
|
||||
IF lines( is_item-files ) = 0.
|
||||
ro_html->add( '<span class="grey">new</span>' ).
|
||||
ELSE.
|
||||
LOOP AT is_item-files INTO ls_file.
|
||||
IF ls_file-is_changed = abap_true.
|
||||
lv_difflink = lcl_html_action_utils=>file_encode(
|
||||
iv_key = io_repo->get_key( )
|
||||
ig_file = ls_file ).
|
||||
ro_html->add_anchor(
|
||||
iv_txt = 'diff'
|
||||
iv_act = |diff?{ lv_difflink }| ).
|
||||
ELSE.
|
||||
ro_html->add( |<span> </span>| ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ro_html->add( '</td>' ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '</tr>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD needs_installation.
|
||||
|
||||
CONSTANTS:
|
||||
lc_abapgit TYPE string VALUE 'https://github.com/larshp/abapGit.git',
|
||||
lc_plugins TYPE string VALUE 'https://github.com/larshp/abapGit-plugins.git' ##NO_TEXT.
|
||||
|
||||
TRY.
|
||||
IF lcl_app=>repo_srv( )->is_repo_installed( lc_abapgit ) = abap_false
|
||||
OR lcl_app=>repo_srv( )->is_repo_installed( lc_plugins ) = abap_false.
|
||||
rv_not_completely_installed = abap_true.
|
||||
ENDIF.
|
||||
CATCH lcx_exception.
|
||||
" cannot be installed anyway in this case, e.g. no connection
|
||||
rv_not_completely_installed = abap_false.
|
||||
ENDTRY.
|
||||
ENDMETHOD. "needs_installation
|
||||
|
||||
METHOD render_toc.
|
||||
|
||||
DATA: lo_repo LIKE LINE OF it_list,
|
||||
lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
IF lines( it_list ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
LOOP AT it_list INTO lo_repo.
|
||||
lo_toolbar->add( iv_txt = lo_repo->get_name( )
|
||||
iv_typ = gc_action_type-url
|
||||
iv_act = |#repo{ lo_repo->get_key( ) }| ).
|
||||
ENDLOOP.
|
||||
|
||||
ro_html->add( '<div id="toc">' ) ##NO_TEXT.
|
||||
ro_html->add( '<img src="img/toc">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_error.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( '<div class="dummydiv attention">' ).
|
||||
ro_html->add( |Error: { ix_error->mv_text }| ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_explore.
|
||||
|
||||
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Explore new projects'
|
||||
iv_act = 'explore' ) ##NO_TEXT.
|
||||
|
||||
ro_html->add( '<div class="dummydiv">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~render.
|
||||
|
||||
DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt,
|
||||
lx_error TYPE REF TO lcx_exception,
|
||||
lo_repo LIKE LINE OF lt_repos.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( title( iv_title = 'HOME' io_menu = build_main_menu( ) ) ).
|
||||
|
||||
TRY.
|
||||
lt_repos = lcl_app=>repo_srv( )->list( ).
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
ro_html->add( render_error( lx_error ) ).
|
||||
ENDTRY.
|
||||
|
||||
ro_html->add( render_toc( lt_repos ) ).
|
||||
|
||||
IF lines( lt_repos ) = 0 AND lx_error IS INITIAL.
|
||||
ro_html->add( render_explore( ) ).
|
||||
ELSE.
|
||||
LOOP AT lt_repos INTO lo_repo.
|
||||
lcl_progress=>show( iv_key = 'Render'
|
||||
iv_current = sy-tabix
|
||||
iv_total = lines( lt_repos )
|
||||
iv_text = lo_repo->get_name( ) ) ##NO_TEXT.
|
||||
ro_html->add( render_repo( lo_repo ) ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( footer( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~get_assets.
|
||||
|
||||
DATA ls_image TYPE ty_web_asset.
|
||||
|
||||
rt_assets = super->lif_gui_page~get_assets( ).
|
||||
|
||||
ls_image-url = 'img/toc' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgIAO39T0AAAABnRSTlMABBCRlMXJzV0oAAAAN0lEQVQIW2NgwABuaWlB'
|
||||
&& 'YWlpDgwJDAxiAgxACshgYwAz0tLY2NISSBWBMYAmg4ADyBZhARCJAQBBchGypGCbQgAA'
|
||||
&& 'AABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/repo_online' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAApVBMVEUAAABQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJz+TJ01AAAANnRSTlMAAQIDBAcJCgwSFBocHygqMTM1NkRHSU1QUWFiZGlweHuDiImL'
|
||||
&& 'lZiio6a5vsfT3uTo6e3x9fsxY2JuAAAAgUlEQVQYGXXB6RaBUBSA0e+IEuIiMs9zhlDn'
|
||||
&& '/R/NZWmt/LA3f1RcoaB50SydCbn20wjedkPu3sKSpMGH21PhLdZ0BATZ+cCXtxtDHGLV'
|
||||
&& 'pgFW9QqJj2U0wvJvMF+5jiNGI3HK9dMQSouH6sRoFGoWd8l1dEDRWlWPQsFS98KPvvDH'
|
||||
&& 'C3HLClrWc70ZAAAAAElFTkSuQmCC'.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/repo_offline' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBB'
|
||||
&& 'ZG9iZSBJbWFnZVJlYWR5ccllPAAAAWNJREFUeNrEkr1KxFAQhe9P/iS6goLWiiB2PoCN'
|
||||
&& 'lYW9ChbbiFhYRAQ7MaS2SOdT2PkSvoGPINiF1YTNz/WceC+sohDYwoFvZ/Zm78mcmZXG'
|
||||
&& 'GDFPKDFn/L+AdEWWZUIptRmG4bLWeglHNXjHjGoppUa9CiaoX3ieJEl/z3MCXdfdIKXT'
|
||||
&& '6bRFju2xYeASJ618338Dl6gf8zw3FOktpGk6QrrFmyPP82J0IgmCHxq1F0URBdbxuzuw'
|
||||
&& '9nMGR2CRltCBbJpG1HUtmNGZcN/tynfAgbPgBMbWxp/DcmIIDaFdWOjtK7S/hbxnDQu0'
|
||||
&& 'LGBFBEHQg7YNbAnCZ5xJWZbnRVFsuw7GM4P8hhXkPLgh0batqKqKFmM8O3FbeAanIOAM'
|
||||
&& 'cJFQWNoBLpAv/e6D4PKEK3UCh+DiN9/sgG8lbhSWCNyDJ2U3MDSOwQa7cfc828rKQIF9'
|
||||
&& '+x9QsxauwAMYDRA4s/kVXLP4FGAAajajeu7yxJkAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/pkg' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA30lEQVQoU43OIUuDcRSF'
|
||||
&& '8fvqhuB0mFwaKLbVBVdkX0GTFss+wYL2H4rJIIgyQQSzZcUPoGHZ9CKCmAwTMS8Y/ga3'
|
||||
&& 'BWVjT7hwOQ+HEzEbMhU7jrTd69q2KhtFRU2nrvS927dm3pyqPXcuNRVD7sxiRIQlDSc+'
|
||||
&& 'PGjZUFDWkYekLfdoV2XYua4rSZ61pZBkEUq2XPty41XuXJIiZGNhPDVZiFCYIMSor+Db'
|
||||
&& '7RQhYnQnCsNvNmGgPFFYMQh1PU9aqrLxyGUNx/p66r9mUc2hFx3JhU9vDtQU4y9KGjaV'
|
||||
&& '/gXT+AGZVIinhU2EAwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/branch' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAqFBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgID/OyosAAAAN3RSTlMAAQIDBAYICQ8TFRweJScoKSo3Oj1FRk1dYWJjZmhzdIaJ'
|
||||
&& 'j5GVm6CwsrS5vsHDyszV19ne7/X583teZAAAAIFJREFUGFdVytkagVAYheFvFzJlnqc0'
|
||||
&& 'EEoR+u//zhxI7dbZ9z4LMJ1op9DmjpntdXiBigHbLiAYqukBVr63+YGRSazgCY/iEooP'
|
||||
&& 'xKZxr0EnSbo14B1Rg4msKzj150fJrQpERPLBv7mIfNxlq+zRbZsu0JYpGlcdwjY9Twfr'
|
||||
&& 'nAbNsr6IKQxJI/U5CgAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/link' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwFMKAAAAHnRSTlMAAwQFBgcK'
|
||||
&& 'FR4gIiMmP0JHSm+RmKDByM/R09rg+/0jN/q+AAAAX0lEQVQYV43Nxw6AIBAE0FGw916Z'
|
||||
&& '//9MRQ0S4sG5bPZlCxqSCyBGXgFUJKUA4A8PUOKONzuQOxOZIjcLkrMvxGQg3skSCFYL'
|
||||
&& 'Kl1Ds5LWz+33yyf4rQOSf6CjnV6rHeAA87gJtKzI8ocAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/code' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAAA1SURBVAhbY2AODQ0NEWBgYGVg'
|
||||
&& 'YGByhNAMKgIMrKyhAQxMDhA+QwCCZgVqIIUP1Q+yJzTUAAAfUAq+Os55uAAAAABJRU5E'
|
||||
&& 'rkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/bin' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAABBSURBVAhbXcqxDYAwAMRAK8h9'
|
||||
&& 'hmAARoANvuD3X4UCiojqZMlsbe8JAuN6ZZ9ozThRCVmsJe9H0HwdXf19W9v2eAA6Fws2'
|
||||
&& 'RotPsQAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/obj' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAIVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgIDcWqnoAAAACnRSTlMABD1AZI+RlcPFIaFe1gAA'
|
||||
&& 'AEVJREFUCFtjYF+1atVKAQYGLgYGBuaJEJrBUgBCM0+A0AwLgLQIgyOIZmwCSgNptgAG'
|
||||
&& '1gQQfzKDhgCSPFw9Kg2yZ9WqAgBWJBENLk6V3AAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_gui_router IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -1617,21 +730,9 @@ CLASS lcl_gui_router IMPLEMENTATION.
|
|||
WHEN 'transportzip'.
|
||||
lcl_transport=>zip( ).
|
||||
ev_state = gc_event_state-no_more_act.
|
||||
WHEN 'hide'.
|
||||
lv_key = iv_getdata.
|
||||
lcl_app=>user( )->hide( lv_key ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
WHEN 'unhide'.
|
||||
lv_key = iv_getdata.
|
||||
lcl_app=>user( )->unhide( lv_key ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
WHEN 'refresh'.
|
||||
lv_key = iv_getdata.
|
||||
IF lv_key IS INITIAL. " Refresh all or single
|
||||
lcl_app=>repo_srv( )->refresh( ).
|
||||
ELSE.
|
||||
lcl_app=>repo_srv( )->get( lv_key )->refresh( ).
|
||||
ENDIF.
|
||||
lcl_app=>repo_srv( )->get( lv_key )->refresh( ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
|
||||
" Repository online actions
|
||||
|
|
|
@ -393,7 +393,6 @@ CLASS lcl_html_helper IMPLEMENTATION.
|
|||
lv_href = | href="sapevent:{ iv_act }"|.
|
||||
WHEN gc_action_type-onclick.
|
||||
lv_href = | onclick="{ iv_act }"|.
|
||||
WHEN OTHERS.
|
||||
ENDCASE.
|
||||
ENDIF.
|
||||
|
||||
|
|
252
src/zabapgit_page_background.prog.abap
Normal file
252
src/zabapgit_page_background.prog.abap
Normal file
|
@ -0,0 +1,252 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_PAGE_BACKGROUND
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_gui_page_background_run DEFINITION FINAL
|
||||
INHERITING FROM lcl_gui_page_super.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
lif_gui_page~on_event REDEFINITION,
|
||||
lif_gui_page~render REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: mt_text TYPE TABLE OF string.
|
||||
|
||||
METHODS: run.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_background_run IMPLEMENTATION.
|
||||
|
||||
METHOD lif_gui_page~on_event.
|
||||
RETURN.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD run.
|
||||
|
||||
DATA: lx_error TYPE REF TO lcx_exception,
|
||||
lv_text TYPE string,
|
||||
lv_line TYPE i VALUE 1.
|
||||
|
||||
|
||||
TRY.
|
||||
lcl_background=>run( ).
|
||||
|
||||
DO.
|
||||
READ LINE lv_line LINE VALUE INTO lv_text.
|
||||
IF sy-subrc <> 0.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
APPEND lv_text TO mt_text.
|
||||
lv_line = lv_line + 1.
|
||||
ENDDO.
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
APPEND lx_error->mv_text TO mt_text.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~render.
|
||||
|
||||
DATA: lv_text LIKE LINE OF mt_text.
|
||||
|
||||
|
||||
run( ).
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'BACKGROUND_RUN' ) ).
|
||||
ro_html->add( '<div id="toc">' ).
|
||||
LOOP AT mt_text INTO lv_text.
|
||||
ro_html->add( '<pre>' && lv_text && '</pre><br>' ).
|
||||
ENDLOOP.
|
||||
ro_html->add( '</div>' ).
|
||||
ro_html->add( footer( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_background DEFINITION FINAL
|
||||
INHERITING FROM lcl_gui_page_super.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
lif_gui_page~on_event REDEFINITION,
|
||||
lif_gui_page~render REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS:
|
||||
parse_fields
|
||||
IMPORTING iv_getdata TYPE clike
|
||||
RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background,
|
||||
render_data
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
save
|
||||
IMPORTING iv_getdata TYPE clike
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_background IMPLEMENTATION.
|
||||
|
||||
METHOD parse_fields.
|
||||
|
||||
DEFINE _field.
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = &1 ##NO_TEXT.
|
||||
IF sy-subrc = 0.
|
||||
rs_fields-&2 = <ls_field>-value.
|
||||
ENDIF.
|
||||
END-OF-DEFINITION.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
lv_string TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
|
||||
lv_string = iv_getdata. " type conversion
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||
|
||||
_field 'key' key.
|
||||
_field 'method' method.
|
||||
_field 'username' username.
|
||||
_field 'password' password.
|
||||
|
||||
ASSERT NOT rs_fields IS INITIAL.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~on_event.
|
||||
|
||||
CASE iv_action.
|
||||
WHEN 'save'.
|
||||
save( iv_getdata ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD save.
|
||||
|
||||
DATA: ls_fields TYPE lcl_persistence_background=>ty_background,
|
||||
lo_persistence TYPE REF TO lcl_persistence_background.
|
||||
|
||||
|
||||
ls_fields = parse_fields( iv_getdata ).
|
||||
|
||||
CREATE OBJECT lo_persistence.
|
||||
|
||||
IF ls_fields-method = lcl_persistence_background=>c_method-nothing.
|
||||
lo_persistence->delete( ls_fields-key ).
|
||||
ELSE.
|
||||
lo_persistence->modify( ls_fields ).
|
||||
ENDIF.
|
||||
|
||||
COMMIT WORK.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_data.
|
||||
|
||||
DATA: lo_repo TYPE REF TO lcl_repo,
|
||||
lo_online TYPE REF TO lcl_repo_online,
|
||||
lo_per TYPE REF TO lcl_persistence_background,
|
||||
lt_per TYPE lcl_persistence_background=>tt_background,
|
||||
ls_per LIKE LINE OF lt_per,
|
||||
lv_nothing TYPE string,
|
||||
lv_push TYPE string,
|
||||
lv_pull TYPE string,
|
||||
lt_list TYPE lcl_repo_srv=>ty_repo_tt.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( '<div id="toc">' ).
|
||||
ro_html->add( 'Listing online repositories' ) ##NO_TEXT.
|
||||
ro_html->add( '<br><br>' ).
|
||||
|
||||
CREATE OBJECT lo_per.
|
||||
lt_per = lo_per->list( ).
|
||||
lt_list = lcl_app=>repo_srv( )->list( ).
|
||||
|
||||
LOOP AT lt_list INTO lo_repo.
|
||||
IF lo_repo->is_offline( ) = abap_false.
|
||||
lo_online ?= lo_repo.
|
||||
|
||||
READ TABLE lt_per INTO ls_per WITH KEY key = lo_online->get_key( ).
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR ls_per.
|
||||
ENDIF.
|
||||
|
||||
CLEAR lv_push.
|
||||
CLEAR lv_pull.
|
||||
CLEAR lv_nothing.
|
||||
CASE ls_per-method.
|
||||
WHEN lcl_persistence_background=>c_method-push.
|
||||
lv_push = ' checked' ##NO_TEXT.
|
||||
WHEN lcl_persistence_background=>c_method-pull.
|
||||
lv_pull = ' checked' ##NO_TEXT.
|
||||
WHEN OTHERS.
|
||||
lv_nothing = ' checked' ##NO_TEXT.
|
||||
ENDCASE.
|
||||
|
||||
ro_html->add( '<h1>' && lo_online->get_name( ) && '</h1>' ).
|
||||
ro_html->add( '<form method="get" action="sapevent:save">' ).
|
||||
ro_html->add( '<input type="hidden" name="key" value="' &&
|
||||
lo_repo->get_key( ) && '">' ).
|
||||
ro_html->add( '<input type="radio" name="method" value="nothing"' &&
|
||||
lv_nothing && '>Do nothing<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '<input type="radio" name="method" value="push"' &&
|
||||
lv_push && '>Automatic push<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '<input type="radio" name="method" value="pull"' &&
|
||||
lv_pull && '>Automatic pull<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '<br>' ).
|
||||
ro_html->add( 'Authentication, optional<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '(password will be saved in clear text)<br>' ) ##NO_TEXT.
|
||||
ro_html->add( '<table>' ).
|
||||
ro_html->add( '<tr>' ).
|
||||
ro_html->add( '<td>Username:</td>' ).
|
||||
ro_html->add( '<td><input type="text" name="username" value="' &&
|
||||
ls_per-username && '"></td>' ).
|
||||
ro_html->add( '</tr>' ).
|
||||
ro_html->add( '<tr>' ).
|
||||
ro_html->add( '<td>Password:</td>' ).
|
||||
ro_html->add( '<td><input type="text" name="password" value="' &&
|
||||
ls_per-password && '"></td>' ).
|
||||
ro_html->add( '</tr>' ).
|
||||
ro_html->add( '<tr><td colspan="2" align="right">' ).
|
||||
ro_html->add( '<input type="submit" value="Save">' ).
|
||||
ro_html->add( '</td></tr>' ).
|
||||
ro_html->add( '</table>' ).
|
||||
ro_html->add( '</form>' ).
|
||||
ro_html->add( '<br>' ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~render.
|
||||
|
||||
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
CREATE OBJECT lo_toolbar.
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Run background logic'
|
||||
iv_act = 'background_run' ) ##NO_TEXT.
|
||||
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( iv_title = 'BACKGROUND' io_menu = lo_toolbar ) ).
|
||||
ro_html->add( render_data( ) ).
|
||||
ro_html->add( footer( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
48
src/zabapgit_page_background.prog.xml
Normal file
48
src/zabapgit_page_background.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_BACKGROUND</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_BACKGROUND</ENTRY>
|
||||
<LENGTH>32</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
661
src/zabapgit_page_main.prog.abap
Normal file
661
src/zabapgit_page_main.prog.abap
Normal file
|
@ -0,0 +1,661 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_PAGE_MAIN
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
constructor
|
||||
RAISING lcx_exception,
|
||||
lif_gui_page~render REDEFINITION,
|
||||
lif_gui_page~on_event REDEFINITION,
|
||||
lif_gui_page~get_assets REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES: BEGIN OF ty_repo_item,
|
||||
obj_type TYPE tadir-object,
|
||||
obj_name TYPE tadir-obj_name,
|
||||
is_first TYPE abap_bool,
|
||||
files TYPE tt_repo_files,
|
||||
END OF ty_repo_item.
|
||||
TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY.
|
||||
|
||||
DATA: mv_show TYPE lcl_persistence_db=>ty_value.
|
||||
|
||||
|
||||
METHODS:
|
||||
check_show
|
||||
RAISING lcx_exception,
|
||||
styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
render_error
|
||||
IMPORTING ix_error TYPE REF TO lcx_exception
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
render_toc
|
||||
IMPORTING it_list TYPE lcl_repo_srv=>ty_repo_tt
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
build_main_menu
|
||||
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar,
|
||||
render_repo_menu
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
render_repo
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
extract_repo_content
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
EXPORTING et_repo_items TYPE tt_repo_items
|
||||
eo_log TYPE REF TO lcl_log
|
||||
RAISING lcx_exception,
|
||||
render_repo_item
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
is_item TYPE ty_repo_item
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
render_obj_jump_link
|
||||
IMPORTING iv_obj_type TYPE tadir-object
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rv_html) TYPE string,
|
||||
render_explore
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
needs_installation
|
||||
RETURNING VALUE(rv_not_completely_installed) TYPE abap_bool.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
super->constructor( ).
|
||||
|
||||
mv_show = lcl_app=>user( )->get_repo_show( ).
|
||||
|
||||
check_show( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_show.
|
||||
|
||||
DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt,
|
||||
lo_repo LIKE LINE OF lt_repos.
|
||||
|
||||
|
||||
TRY.
|
||||
lt_repos = lcl_app=>repo_srv( )->list( ).
|
||||
CATCH lcx_exception.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
IF mv_show IS INITIAL.
|
||||
READ TABLE lt_repos INTO lo_repo INDEX 1.
|
||||
ASSERT sy-subrc = 0.
|
||||
mv_show = lo_repo->get_key( ).
|
||||
ELSE.
|
||||
TRY.
|
||||
* verify the key exists
|
||||
lo_repo = lcl_app=>repo_srv( )->get( mv_show ).
|
||||
CATCH lcx_exception.
|
||||
READ TABLE lt_repos INTO lo_repo INDEX 1.
|
||||
ASSERT sy-subrc = 0.
|
||||
mv_show = lo_repo->get_key( ).
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_obj_jump_link.
|
||||
|
||||
DATA: lv_encode TYPE string,
|
||||
lo_html TYPE REF TO lcl_html_helper.
|
||||
|
||||
lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = iv_obj_type
|
||||
iv_obj_name = iv_obj_name ).
|
||||
|
||||
CREATE OBJECT lo_html.
|
||||
lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |jump?{ lv_encode }| ).
|
||||
rv_html = lo_html->mv_html.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_main_menu.
|
||||
|
||||
DATA lo_betasub TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
|
||||
CREATE OBJECT ro_menu.
|
||||
CREATE OBJECT lo_betasub.
|
||||
|
||||
lo_betasub->add( iv_txt = 'Database util' iv_act = 'db' ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Package to zip' iv_act = 'packagezip' ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Transport to zip' iv_act = 'transportzip' ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Background mode' iv_act = 'background' ) ##NO_TEXT.
|
||||
|
||||
ro_menu->add( iv_txt = 'Clone' iv_act = 'install' ) ##NO_TEXT.
|
||||
ro_menu->add( iv_txt = 'Explore' iv_act = 'explore' ) ##NO_TEXT.
|
||||
ro_menu->add( iv_txt = 'New offline repo' iv_act = 'newoffline' ) ##NO_TEXT.
|
||||
IF needs_installation( ) = abap_true.
|
||||
ro_menu->add( iv_txt = 'Get abapGit' iv_act = 'abapgit_installation' ) ##NO_TEXT.
|
||||
ENDIF.
|
||||
ro_menu->add( iv_txt = 'β' io_sub = lo_betasub ).
|
||||
|
||||
ENDMETHOD. "build main_menu
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* REPOSITORY TABLE*/'.
|
||||
_add '.repo_tab {'.
|
||||
_add ' border: 1px solid #DDD;'.
|
||||
_add ' border-radius: 3px;'.
|
||||
_add ' background: #fff;'.
|
||||
_add ' margin-top: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td {'.
|
||||
_add ' border-top: 1px solid #eee;'.
|
||||
_add ' vertical-align: middle;'.
|
||||
_add ' color: #333;'.
|
||||
_add ' padding-top: 2px;'.
|
||||
_add ' padding-bottom: 2px;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.icon {'.
|
||||
_add ' width: 32px;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.type {'.
|
||||
_add ' width: 3em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.object {'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.files {'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.cmd {'.
|
||||
_add ' text-align: right;'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add ' padding-right: 1em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab tr.unsupported { color: lightgrey; }'.
|
||||
_add '.repo_tab tr.firstrow td { border-top: 0px; }'.
|
||||
_add '.repo_tab td.files span { display: block; }'.
|
||||
_add '.repo_tab td.cmd span { display: block; }'.
|
||||
_add '.repo_tab td.cmd a { display: block; }'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_repo_menu.
|
||||
|
||||
DATA: lo_toolbar TYPE REF TO lcl_html_toolbar,
|
||||
lv_key TYPE lcl_persistence_db=>ty_value,
|
||||
lo_sub TYPE REF TO lcl_html_toolbar,
|
||||
lo_repo_online TYPE REF TO lcl_repo_online.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
lv_key = io_repo->get_key( ).
|
||||
|
||||
IF io_repo->is_offline( ) = abap_true.
|
||||
lo_toolbar->add( iv_txt = 'Import ZIP'
|
||||
iv_act = |zipimport?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
lo_toolbar->add( iv_txt = 'Export ZIP'
|
||||
iv_act = |zipexport?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
lo_toolbar->add( iv_txt = 'Export&Commit'
|
||||
iv_act = |files_commit?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ELSE.
|
||||
lo_repo_online ?= io_repo.
|
||||
TRY.
|
||||
IF lo_repo_online->get_sha1_remote( ) <> lo_repo_online->get_sha1_local( ).
|
||||
lo_toolbar->add( iv_txt = 'Pull'
|
||||
iv_act = |pull?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ELSEIF lcl_stage_logic=>count( lo_repo_online ) > 0.
|
||||
lo_toolbar->add( iv_txt = 'Stage'
|
||||
iv_act = |stage?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ENDIF.
|
||||
CATCH lcx_exception ##NO_HANDLER.
|
||||
* authorization error or repository does not exist
|
||||
* ignore error
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT lo_sub.
|
||||
lo_sub->add( iv_txt = 'Remove'
|
||||
iv_act = |remove?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Uninstall'
|
||||
iv_act = |uninstall?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Switch branch'
|
||||
iv_act = |switch_branch?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Reset'
|
||||
iv_act = |reset?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Create branch'
|
||||
iv_act = |create_branch?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Branch overview'
|
||||
iv_act = |branch_overview?{ lv_key }| ).
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Advanced'
|
||||
io_sub = lo_sub ) ##NO_TEXT.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Refresh'
|
||||
iv_act = |refresh?{ lv_key }| ).
|
||||
|
||||
ro_html->add( '<div class="paddings right">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_repo.
|
||||
|
||||
DATA: lt_repo_items TYPE tt_repo_items,
|
||||
lx_error TYPE REF TO lcx_exception,
|
||||
lo_log TYPE REF TO lcl_log.
|
||||
|
||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
||||
ro_html->add( render_repo_top( io_repo ) ).
|
||||
|
||||
TRY.
|
||||
extract_repo_content( EXPORTING io_repo = io_repo
|
||||
IMPORTING et_repo_items = lt_repo_items
|
||||
eo_log = lo_log ).
|
||||
|
||||
* extract_repo_content must be called before rendering the menu
|
||||
* so that lo_log is filled with errors from the serialization
|
||||
ro_html->add( render_repo_menu( io_repo ) ).
|
||||
|
||||
IF io_repo->is_offline( ) = abap_false.
|
||||
ro_html->add( '<div class="log">' ).
|
||||
* shows eg. list of unsupported objects
|
||||
ro_html->add( lo_log->to_html( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '<table width="100%" class="repo_tab">' ).
|
||||
IF lines( lt_repo_items ) = 0.
|
||||
ro_html->add( '<tr class="unsupported firstrow"><td class="paddings">'
|
||||
&& '<center>Empty package</center>'
|
||||
&& '</td></tr>' ) ##NO_TEXT.
|
||||
ELSE.
|
||||
LOOP AT lt_repo_items ASSIGNING <ls_item>.
|
||||
ro_html->add( render_repo_item( io_repo = io_repo is_item = <ls_item> ) ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ro_html->add( '</table>' ).
|
||||
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
ro_html->add( render_repo_menu( io_repo ) ).
|
||||
ro_html->add( render_error( lx_error ) ).
|
||||
ENDTRY.
|
||||
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extract_repo_content.
|
||||
|
||||
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
|
||||
lt_tadir TYPE ty_tadir_tt,
|
||||
ls_repo_item TYPE ty_repo_item,
|
||||
ls_file TYPE ty_repo_file,
|
||||
lt_results TYPE ty_results_tt.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
||||
<ls_tadir> LIKE LINE OF lt_tadir.
|
||||
|
||||
|
||||
CLEAR et_repo_items.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_true.
|
||||
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
|
||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||
CLEAR ls_repo_item.
|
||||
IF sy-tabix = 1.
|
||||
ls_repo_item-is_first = abap_true.
|
||||
ENDIF.
|
||||
ls_repo_item-obj_type = <ls_tadir>-object.
|
||||
ls_repo_item-obj_name = <ls_tadir>-obj_name.
|
||||
APPEND ls_repo_item TO et_repo_items.
|
||||
ENDLOOP.
|
||||
|
||||
ELSE.
|
||||
CREATE OBJECT eo_log.
|
||||
lo_repo_online ?= io_repo.
|
||||
lt_results = lo_repo_online->status( eo_log ).
|
||||
LOOP AT lt_results ASSIGNING <ls_result>.
|
||||
AT NEW obj_name. "obj_type + obj_name
|
||||
CLEAR ls_repo_item.
|
||||
IF sy-tabix = 1.
|
||||
ls_repo_item-is_first = abap_true.
|
||||
ENDIF.
|
||||
ls_repo_item-obj_type = <ls_result>-obj_type.
|
||||
ls_repo_item-obj_name = <ls_result>-obj_name.
|
||||
ENDAT.
|
||||
|
||||
IF <ls_result>-filename IS NOT INITIAL.
|
||||
ls_file-path = <ls_result>-path.
|
||||
ls_file-filename = <ls_result>-filename.
|
||||
ls_file-is_changed = boolc( NOT <ls_result>-match = abap_true ).
|
||||
APPEND ls_file TO ls_repo_item-files.
|
||||
ENDIF.
|
||||
|
||||
AT END OF obj_name. "obj_type + obj_name
|
||||
APPEND ls_repo_item TO et_repo_items.
|
||||
ENDAT.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_repo_item.
|
||||
DATA:
|
||||
lv_link TYPE string,
|
||||
lv_icon TYPE string,
|
||||
lv_difflink TYPE string,
|
||||
ls_file LIKE LINE OF is_item-files,
|
||||
lv_trclass TYPE string.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
IF is_item-is_first = abap_true. " TR class
|
||||
lv_trclass = 'firstrow' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF is_item-obj_name IS INITIAL.
|
||||
lv_trclass = lv_trclass && ' unsupported' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF lv_trclass IS NOT INITIAL.
|
||||
SHIFT lv_trclass LEFT DELETING LEADING space.
|
||||
lv_trclass = | class="{ lv_trclass }"|.
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( |<tr{ lv_trclass }>| ).
|
||||
|
||||
IF is_item-obj_name IS INITIAL.
|
||||
ro_html->add( '<td colspan="3"></td>' ).
|
||||
ELSE.
|
||||
CASE is_item-obj_type. "TODO ??
|
||||
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
|
||||
lv_icon = |<img src="img/code">|.
|
||||
WHEN 'W3MI' OR 'W3HT'.
|
||||
lv_icon = |<img src="img/bin">|.
|
||||
WHEN ''.
|
||||
lv_icon = space. " no icon
|
||||
WHEN OTHERS.
|
||||
lv_icon = |<img src="img/obj">|.
|
||||
ENDCASE.
|
||||
|
||||
lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name
|
||||
iv_obj_type = is_item-obj_type ).
|
||||
ro_html->add( |<td class="icon">{ lv_icon }</td>| ).
|
||||
ro_html->add( |<td class="type">{ is_item-obj_type }</td>| ).
|
||||
ro_html->add( |<td class="object">{ lv_link }</td>| ).
|
||||
ENDIF.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_false. " Files for online repos only
|
||||
|
||||
ro_html->add( '<td class="files">' ).
|
||||
LOOP AT is_item-files INTO ls_file.
|
||||
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
|
||||
ENDLOOP.
|
||||
ro_html->add( '</td>' ).
|
||||
|
||||
ro_html->add( '<td class="cmd">' ).
|
||||
IF lines( is_item-files ) = 0.
|
||||
ro_html->add( '<span class="grey">new</span>' ).
|
||||
ELSE.
|
||||
LOOP AT is_item-files INTO ls_file.
|
||||
IF ls_file-is_changed = abap_true.
|
||||
lv_difflink = lcl_html_action_utils=>file_encode(
|
||||
iv_key = io_repo->get_key( )
|
||||
ig_file = ls_file ).
|
||||
ro_html->add_anchor(
|
||||
iv_txt = 'diff'
|
||||
iv_act = |diff?{ lv_difflink }| ).
|
||||
ELSE.
|
||||
ro_html->add( |<span> </span>| ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ro_html->add( '</td>' ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '</tr>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD needs_installation.
|
||||
|
||||
CONSTANTS:
|
||||
lc_abapgit TYPE string VALUE 'https://github.com/larshp/abapGit.git',
|
||||
lc_plugins TYPE string VALUE 'https://github.com/larshp/abapGit-plugins.git' ##NO_TEXT.
|
||||
|
||||
TRY.
|
||||
IF lcl_app=>repo_srv( )->is_repo_installed( lc_abapgit ) = abap_false
|
||||
OR lcl_app=>repo_srv( )->is_repo_installed( lc_plugins ) = abap_false.
|
||||
rv_not_completely_installed = abap_true.
|
||||
ENDIF.
|
||||
CATCH lcx_exception.
|
||||
" cannot be installed anyway in this case, e.g. no connection
|
||||
rv_not_completely_installed = abap_false.
|
||||
ENDTRY.
|
||||
ENDMETHOD. "needs_installation
|
||||
|
||||
METHOD render_toc.
|
||||
|
||||
DATA: lo_repo LIKE LINE OF it_list,
|
||||
lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
IF lines( it_list ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
LOOP AT it_list INTO lo_repo.
|
||||
IF mv_show = lo_repo->get_key( ).
|
||||
lo_toolbar->add( iv_txt = lo_repo->get_name( )
|
||||
iv_act = |show?{ lo_repo->get_key( ) }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ELSE.
|
||||
lo_toolbar->add( iv_txt = lo_repo->get_name( )
|
||||
iv_act = |show?{ lo_repo->get_key( ) }| ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ro_html->add( '<div id="toc">' ) ##NO_TEXT.
|
||||
ro_html->add( '<img src="img/toc">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_error.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( '<div class="dummydiv attention">' ).
|
||||
ro_html->add( |Error: { ix_error->mv_text }| ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_explore.
|
||||
|
||||
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Explore new projects'
|
||||
iv_act = 'explore' ) ##NO_TEXT.
|
||||
|
||||
ro_html->add( '<div class="dummydiv">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~on_event.
|
||||
|
||||
CASE iv_action.
|
||||
WHEN 'show'.
|
||||
mv_show = iv_getdata.
|
||||
lcl_app=>user( )->set_repo_show( mv_show ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~render.
|
||||
|
||||
DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt,
|
||||
lx_error TYPE REF TO lcx_exception,
|
||||
lo_repo LIKE LINE OF lt_repos.
|
||||
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( title( iv_title = 'HOME'
|
||||
io_menu = build_main_menu( ) ) ).
|
||||
|
||||
TRY.
|
||||
lt_repos = lcl_app=>repo_srv( )->list( ).
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
ro_html->add( render_error( lx_error ) ).
|
||||
ENDTRY.
|
||||
|
||||
ro_html->add( render_toc( lt_repos ) ).
|
||||
|
||||
IF lines( lt_repos ) = 0 AND lx_error IS INITIAL.
|
||||
ro_html->add( render_explore( ) ).
|
||||
ELSE.
|
||||
check_show( ).
|
||||
lo_repo = lcl_app=>repo_srv( )->get( mv_show ).
|
||||
ro_html->add( render_repo( lo_repo ) ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( footer( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_gui_page~get_assets.
|
||||
|
||||
DATA ls_image TYPE ty_web_asset.
|
||||
|
||||
rt_assets = super->lif_gui_page~get_assets( ).
|
||||
|
||||
ls_image-url = 'img/toc' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgIAO39T0AAAABnRSTlMABBCRlMXJzV0oAAAAN0lEQVQIW2NgwABuaWlB'
|
||||
&& 'YWlpDgwJDAxiAgxACshgYwAz0tLY2NISSBWBMYAmg4ADyBZhARCJAQBBchGypGCbQgAA'
|
||||
&& 'AABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/repo_online' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAApVBMVEUAAABQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJz+TJ01AAAANnRSTlMAAQIDBAcJCgwSFBocHygqMTM1NkRHSU1QUWFiZGlweHuDiImL'
|
||||
&& 'lZiio6a5vsfT3uTo6e3x9fsxY2JuAAAAgUlEQVQYGXXB6RaBUBSA0e+IEuIiMs9zhlDn'
|
||||
&& '/R/NZWmt/LA3f1RcoaB50SydCbn20wjedkPu3sKSpMGH21PhLdZ0BATZ+cCXtxtDHGLV'
|
||||
&& 'pgFW9QqJj2U0wvJvMF+5jiNGI3HK9dMQSouH6sRoFGoWd8l1dEDRWlWPQsFS98KPvvDH'
|
||||
&& 'C3HLClrWc70ZAAAAAElFTkSuQmCC'.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/repo_offline' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBB'
|
||||
&& 'ZG9iZSBJbWFnZVJlYWR5ccllPAAAAWNJREFUeNrEkr1KxFAQhe9P/iS6goLWiiB2PoCN'
|
||||
&& 'lYW9ChbbiFhYRAQ7MaS2SOdT2PkSvoGPINiF1YTNz/WceC+sohDYwoFvZ/Zm78mcmZXG'
|
||||
&& 'GDFPKDFn/L+AdEWWZUIptRmG4bLWeglHNXjHjGoppUa9CiaoX3ieJEl/z3MCXdfdIKXT'
|
||||
&& '6bRFju2xYeASJ618338Dl6gf8zw3FOktpGk6QrrFmyPP82J0IgmCHxq1F0URBdbxuzuw'
|
||||
&& '9nMGR2CRltCBbJpG1HUtmNGZcN/tynfAgbPgBMbWxp/DcmIIDaFdWOjtK7S/hbxnDQu0'
|
||||
&& 'LGBFBEHQg7YNbAnCZ5xJWZbnRVFsuw7GM4P8hhXkPLgh0batqKqKFmM8O3FbeAanIOAM'
|
||||
&& 'cJFQWNoBLpAv/e6D4PKEK3UCh+DiN9/sgG8lbhSWCNyDJ2U3MDSOwQa7cfc828rKQIF9'
|
||||
&& '+x9QsxauwAMYDRA4s/kVXLP4FGAAajajeu7yxJkAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/pkg' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA30lEQVQoU43OIUuDcRSF'
|
||||
&& '8fvqhuB0mFwaKLbVBVdkX0GTFss+wYL2H4rJIIgyQQSzZcUPoGHZ9CKCmAwTMS8Y/ga3'
|
||||
&& 'BWVjT7hwOQ+HEzEbMhU7jrTd69q2KhtFRU2nrvS927dm3pyqPXcuNRVD7sxiRIQlDSc+'
|
||||
&& 'PGjZUFDWkYekLfdoV2XYua4rSZ61pZBkEUq2XPty41XuXJIiZGNhPDVZiFCYIMSor+Db'
|
||||
&& '7RQhYnQnCsNvNmGgPFFYMQh1PU9aqrLxyGUNx/p66r9mUc2hFx3JhU9vDtQU4y9KGjaV'
|
||||
&& '/gXT+AGZVIinhU2EAwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/branch' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAqFBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgID/OyosAAAAN3RSTlMAAQIDBAYICQ8TFRweJScoKSo3Oj1FRk1dYWJjZmhzdIaJ'
|
||||
&& 'j5GVm6CwsrS5vsHDyszV19ne7/X583teZAAAAIFJREFUGFdVytkagVAYheFvFzJlnqc0'
|
||||
&& 'EEoR+u//zhxI7dbZ9z4LMJ1op9DmjpntdXiBigHbLiAYqukBVr63+YGRSazgCY/iEooP'
|
||||
&& 'xKZxr0EnSbo14B1Rg4msKzj150fJrQpERPLBv7mIfNxlq+zRbZsu0JYpGlcdwjY9Twfr'
|
||||
&& 'nAbNsr6IKQxJI/U5CgAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/link' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwFMKAAAAHnRSTlMAAwQFBgcK'
|
||||
&& 'FR4gIiMmP0JHSm+RmKDByM/R09rg+/0jN/q+AAAAX0lEQVQYV43Nxw6AIBAE0FGw916Z'
|
||||
&& '//9MRQ0S4sG5bPZlCxqSCyBGXgFUJKUA4A8PUOKONzuQOxOZIjcLkrMvxGQg3skSCFYL'
|
||||
&& 'Kl1Ds5LWz+33yyf4rQOSf6CjnV6rHeAA87gJtKzI8ocAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/code' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAAA1SURBVAhbY2AODQ0NEWBgYGVg'
|
||||
&& 'YGByhNAMKgIMrKyhAQxMDhA+QwCCZgVqIIUP1Q+yJzTUAAAfUAq+Os55uAAAAABJRU5E'
|
||||
&& 'rkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/bin' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAABBSURBVAhbXcqxDYAwAMRAK8h9'
|
||||
&& 'hmAARoANvuD3X4UCiojqZMlsbe8JAuN6ZZ9ozThRCVmsJe9H0HwdXf19W9v2eAA6Fws2'
|
||||
&& 'RotPsQAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/obj' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAIVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgIDcWqnoAAAACnRSTlMABD1AZI+RlcPFIaFe1gAA'
|
||||
&& 'AEVJREFUCFtjYF+1atVKAQYGLgYGBuaJEJrBUgBCM0+A0AwLgLQIgyOIZmwCSgNptgAG'
|
||||
&& '1gQQfzKDhgCSPFw9Kg2yZ9WqAgBWJBENLk6V3AAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
48
src/zabapgit_page_main.prog.xml
Normal file
48
src/zabapgit_page_main.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_MAIN</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_MAIN</ENTRY>
|
||||
<LENGTH>26</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -684,17 +684,12 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
|||
RETURNING VALUE(rv_email) TYPE string
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS is_hidden
|
||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||
RETURNING VALUE(rv_hidden) TYPE abap_bool
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS hide
|
||||
METHODS set_repo_show
|
||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS unhide
|
||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||
METHODS get_repo_show
|
||||
RETURNING VALUE(rv_key) TYPE lcl_persistence_repo=>ty_repo-key
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
@ -708,9 +703,9 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
|||
WITH DEFAULT KEY.
|
||||
|
||||
TYPES: BEGIN OF ty_user,
|
||||
username TYPE string,
|
||||
email TYPE string,
|
||||
repo_hidden TYPE ty_repo_hidden_tt,
|
||||
username TYPE string,
|
||||
email TYPE string,
|
||||
repo_show TYPE lcl_persistence_repo=>ty_repo-key,
|
||||
END OF ty_user.
|
||||
|
||||
METHODS constructor
|
||||
|
@ -982,6 +977,23 @@ CLASS lcl_persistence_user IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_repo_show.
|
||||
|
||||
DATA: ls_user TYPE ty_user.
|
||||
|
||||
|
||||
ls_user = read( ).
|
||||
ls_user-repo_show = iv_key.
|
||||
update( ls_user ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_repo_show.
|
||||
|
||||
rv_key = read( )-repo_show.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD update.
|
||||
|
||||
DATA: lv_xml TYPE string.
|
||||
|
@ -1014,43 +1026,6 @@ CLASS lcl_persistence_user IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_hidden.
|
||||
|
||||
DATA: lt_hidden TYPE ty_repo_hidden_tt.
|
||||
|
||||
|
||||
lt_hidden = read( )-repo_hidden.
|
||||
READ TABLE lt_hidden FROM iv_key TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc = 0.
|
||||
rv_hidden = abap_true.
|
||||
ELSE.
|
||||
rv_hidden = abap_false.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD hide.
|
||||
|
||||
DATA: ls_user TYPE ty_user.
|
||||
|
||||
|
||||
ls_user = read( ).
|
||||
APPEND iv_key TO ls_user-repo_hidden.
|
||||
update( ls_user ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unhide.
|
||||
|
||||
DATA: ls_user TYPE ty_user.
|
||||
|
||||
|
||||
ls_user = read( ).
|
||||
DELETE TABLE ls_user-repo_hidden FROM iv_key.
|
||||
update( ls_user ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_email.
|
||||
|
||||
DATA: ls_user TYPE ty_user.
|
||||
|
|
Loading…
Reference in New Issue
Block a user