From 5e2991fc35de99c9cdc391dd25f5f0fc9294621e Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 8 Jul 2016 09:33:57 +0200 Subject: [PATCH] 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 --- src/zabapgit.prog.abap | 4 +- src/zabapgit_gui.prog.abap | 901 +------------------------ src/zabapgit_html.prog.abap | 1 - src/zabapgit_page_background.prog.abap | 252 +++++++ src/zabapgit_page_background.prog.xml | 48 ++ src/zabapgit_page_main.prog.abap | 661 ++++++++++++++++++ src/zabapgit_page_main.prog.xml | 48 ++ src/zabapgit_persistence.prog.abap | 71 +- 8 files changed, 1036 insertions(+), 950 deletions(-) create mode 100644 src/zabapgit_page_background.prog.abap create mode 100644 src/zabapgit_page_background.prog.xml create mode 100644 src/zabapgit_page_main.prog.abap create mode 100644 src/zabapgit_page_main.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 2d67a86f9..36faa3297 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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. diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index 76d7da871..ddbfc9f80 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -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( '
' ). - LOOP AT mt_text INTO lv_text. - ro_html->add( '
' && lv_text && '

' ). - ENDLOOP. - ro_html->add( '
' ). - 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 WITH KEY name = &1 ##NO_TEXT. - IF sy-subrc = 0. - rs_fields-&2 = -value. - ENDIF. - END-OF-DEFINITION. - - DATA: lt_fields TYPE tihttpnvp, - lv_string TYPE string. - - FIELD-SYMBOLS: 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( '
' ). - ro_html->add( 'Listing online repositories' ) ##NO_TEXT. - ro_html->add( '

' ). - - 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( '

' && lo_online->get_name( ) && '

' ). - ro_html->add( '
' ). - ro_html->add( '' ). - ro_html->add( 'Do nothing
' ) ##NO_TEXT. - ro_html->add( 'Automatic push
' ) ##NO_TEXT. - ro_html->add( 'Automatic pull
' ) ##NO_TEXT. - ro_html->add( '
' ). - ro_html->add( 'Authentication, optional
' ) ##NO_TEXT. - ro_html->add( '(password will be saved in clear text)
' ) ##NO_TEXT. - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '
Username:
Password:
' ). - ro_html->add( '' ). - ro_html->add( '
' ). - ro_html->add( '
' ). - ro_html->add( '
' ). - ENDIF. - ENDLOOP. - - ro_html->add( '
' ). - - 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( '
' ). - ro_html->add( lo_toolbar->render( ) ). - ro_html->add( '
' ). - - 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( '
' ). - ro_html->add( lo_toolbar->render( ) ). - ro_html->add( '
' ). - - 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 LIKE LINE OF lt_repo_items. - - - CREATE OBJECT ro_html. - - ro_html->add( |
| ). - 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( '' ). - - IF lines( lt_repo_items ) = 0. - ro_html->add( '' ) ##NO_TEXT. - ELSE. - LOOP AT lt_repo_items ASSIGNING . - ro_html->add( render_repo_item( io_repo = io_repo is_item = ) ). - ENDLOOP. - ENDIF. - - ro_html->add( '
' - && '
Empty package
' - && '
' ). - - IF io_repo->is_offline( ) = abap_false. - ro_html->add( '
' ). -* shows eg. list of unsupported objects - ro_html->add( lo_log->to_html( ) ). - ro_html->add( '
' ). - 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( '
' ). - - 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: LIKE LINE OF lt_results, - 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 . - CLEAR ls_repo_item. - IF sy-tabix = 1. - ls_repo_item-is_first = abap_true. - ENDIF. - ls_repo_item-obj_type = -object. - ls_repo_item-obj_name = -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 . - 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 = -obj_type. - ls_repo_item-obj_name = -obj_name. - ENDAT. - - IF -filename IS NOT INITIAL. - ls_file-path = -path. - ls_file-filename = -filename. - ls_file-is_changed = boolc( NOT -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( || ). - - IF is_item-obj_name IS INITIAL. - ro_html->add( '' ). - ELSE. - CASE is_item-obj_type. "TODO ?? - WHEN 'PROG' OR 'CLAS' OR 'FUGR'. - lv_icon = ||. - WHEN 'W3MI' OR 'W3HT'. - lv_icon = ||. - WHEN ''. - " no icon - WHEN OTHERS. - lv_icon = ||. - ENDCASE. - - lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name - iv_obj_type = is_item-obj_type ). - ro_html->add( |{ lv_icon }| ). - ro_html->add( |{ is_item-obj_type }| ). - ro_html->add( |{ lv_link }| ). - ENDIF. - - IF io_repo->is_offline( ) = abap_false. " Files for online repos only - - ro_html->add( '' ). - LOOP AT is_item-files INTO ls_file. - ro_html->add( |{ ls_file-path && ls_file-filename }| ). - ENDLOOP. - ro_html->add( '' ). - - ro_html->add( '' ). - IF lines( is_item-files ) = 0. - ro_html->add( 'new' ). - 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( | | ). - ENDIF. - ENDLOOP. - ENDIF. - ro_html->add( '' ). - - ENDIF. - - ro_html->add( '' ). - - 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( '
' ) ##NO_TEXT. - ro_html->add( '' ). - ro_html->add( lo_toolbar->render( ) ). - ro_html->add( '
' ). - - ENDMETHOD. - - METHOD render_error. - - CREATE OBJECT ro_html. - - ro_html->add( '
' ). - ro_html->add( |Error: { ix_error->mv_text }| ). - ro_html->add( '
' ). - - 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( '
' ). - ro_html->add( lo_toolbar->render( ) ). - ro_html->add( '
' ). - - 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 diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 15343cd3c..17b1748d5 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -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. diff --git a/src/zabapgit_page_background.prog.abap b/src/zabapgit_page_background.prog.abap new file mode 100644 index 000000000..b1eafa895 --- /dev/null +++ b/src/zabapgit_page_background.prog.abap @@ -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( '
' ). + LOOP AT mt_text INTO lv_text. + ro_html->add( '
' && lv_text && '

' ). + ENDLOOP. + ro_html->add( '
' ). + 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 WITH KEY name = &1 ##NO_TEXT. + IF sy-subrc = 0. + rs_fields-&2 = -value. + ENDIF. + END-OF-DEFINITION. + + DATA: lt_fields TYPE tihttpnvp, + lv_string TYPE string. + + FIELD-SYMBOLS: 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( '
' ). + ro_html->add( 'Listing online repositories' ) ##NO_TEXT. + ro_html->add( '

' ). + + 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( '

' && lo_online->get_name( ) && '

' ). + ro_html->add( '
' ). + ro_html->add( '' ). + ro_html->add( 'Do nothing
' ) ##NO_TEXT. + ro_html->add( 'Automatic push
' ) ##NO_TEXT. + ro_html->add( 'Automatic pull
' ) ##NO_TEXT. + ro_html->add( '
' ). + ro_html->add( 'Authentication, optional
' ) ##NO_TEXT. + ro_html->add( '(password will be saved in clear text)
' ) ##NO_TEXT. + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '
Username:
Password:
' ). + ro_html->add( '' ). + ro_html->add( '
' ). + ro_html->add( '
' ). + ro_html->add( '
' ). + ENDIF. + ENDLOOP. + + ro_html->add( '
' ). + + 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. \ No newline at end of file diff --git a/src/zabapgit_page_background.prog.xml b/src/zabapgit_page_background.prog.xml new file mode 100644 index 000000000..8edbac35e --- /dev/null +++ b/src/zabapgit_page_background.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_PAGE_BACKGROUND + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_PAGE_BACKGROUND + 32 + + + + + + diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap new file mode 100644 index 000000000..7f665bfe3 --- /dev/null +++ b/src/zabapgit_page_main.prog.abap @@ -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( '
' ). + ro_html->add( lo_toolbar->render( ) ). + ro_html->add( '
' ). + + 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 LIKE LINE OF lt_repo_items. + + + CREATE OBJECT ro_html. + + ro_html->add( |
| ). + 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( '
' ). +* shows eg. list of unsupported objects + ro_html->add( lo_log->to_html( ) ). + ro_html->add( '
' ). + ENDIF. + + ro_html->add( '' ). + IF lines( lt_repo_items ) = 0. + ro_html->add( '' ) ##NO_TEXT. + ELSE. + LOOP AT lt_repo_items ASSIGNING . + ro_html->add( render_repo_item( io_repo = io_repo is_item = ) ). + ENDLOOP. + ENDIF. + ro_html->add( '
' + && '
Empty package
' + && '
' ). + + 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( '
' ). + + 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: LIKE LINE OF lt_results, + 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 . + CLEAR ls_repo_item. + IF sy-tabix = 1. + ls_repo_item-is_first = abap_true. + ENDIF. + ls_repo_item-obj_type = -object. + ls_repo_item-obj_name = -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 . + 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 = -obj_type. + ls_repo_item-obj_name = -obj_name. + ENDAT. + + IF -filename IS NOT INITIAL. + ls_file-path = -path. + ls_file-filename = -filename. + ls_file-is_changed = boolc( NOT -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( || ). + + IF is_item-obj_name IS INITIAL. + ro_html->add( '' ). + ELSE. + CASE is_item-obj_type. "TODO ?? + WHEN 'PROG' OR 'CLAS' OR 'FUGR'. + lv_icon = ||. + WHEN 'W3MI' OR 'W3HT'. + lv_icon = ||. + WHEN ''. + lv_icon = space. " no icon + WHEN OTHERS. + lv_icon = ||. + ENDCASE. + + lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name + iv_obj_type = is_item-obj_type ). + ro_html->add( |{ lv_icon }| ). + ro_html->add( |{ is_item-obj_type }| ). + ro_html->add( |{ lv_link }| ). + ENDIF. + + IF io_repo->is_offline( ) = abap_false. " Files for online repos only + + ro_html->add( '' ). + LOOP AT is_item-files INTO ls_file. + ro_html->add( |{ ls_file-path && ls_file-filename }| ). + ENDLOOP. + ro_html->add( '' ). + + ro_html->add( '' ). + IF lines( is_item-files ) = 0. + ro_html->add( 'new' ). + 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( | | ). + ENDIF. + ENDLOOP. + ENDIF. + ro_html->add( '' ). + + ENDIF. + + ro_html->add( '' ). + + 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( '
' ) ##NO_TEXT. + ro_html->add( '' ). + ro_html->add( lo_toolbar->render( ) ). + ro_html->add( '
' ). + + ENDMETHOD. + + METHOD render_error. + + CREATE OBJECT ro_html. + + ro_html->add( '
' ). + ro_html->add( |Error: { ix_error->mv_text }| ). + ro_html->add( '
' ). + + 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( '
' ). + ro_html->add( lo_toolbar->render( ) ). + ro_html->add( '
' ). + + 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. \ No newline at end of file diff --git a/src/zabapgit_page_main.prog.xml b/src/zabapgit_page_main.prog.xml new file mode 100644 index 000000000..3ac53fc8d --- /dev/null +++ b/src/zabapgit_page_main.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_PAGE_MAIN + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_PAGE_MAIN + 26 + + + + + + diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 6f96edd2e..a8d2cd706 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -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.