Merge pull request #351 from sbcgua/master

UI: Main page, hide file list, adjust diff #347
This commit is contained in:
Lars Hvam 2016-09-21 15:25:14 +02:00 committed by GitHub
commit 2387508b41
14 changed files with 505 additions and 272 deletions

View File

@ -53,7 +53,7 @@ TYPES: BEGIN OF ty_repo_file,
path TYPE string,
filename TYPE string,
is_changed TYPE abap_bool,
remote_only TYPE abap_bool,
new TYPE char1,
END OF ty_repo_file.
TYPES tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY.
@ -95,12 +95,17 @@ TYPES: BEGIN OF ty_result,
filename TYPE string,
package TYPE devclass,
path TYPE string,
remote_only TYPE abap_bool,
new TYPE char1,
END OF ty_result.
TYPES: ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY.
TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
CONSTANTS: BEGIN OF gc_new,
local TYPE char1 VALUE 'L',
remote TYPE char1 VALUE 'R',
END OF gc_new.
CONSTANTS: BEGIN OF gc_chmod,
file TYPE ty_chmod VALUE '100644',
executable TYPE ty_chmod VALUE '100755',

View File

@ -104,8 +104,8 @@ CLASS lcl_file_status IMPLEMENTATION.
IF lt_files[] IS INITIAL.
* item does not exist locally
ls_result-filename = <ls_remote>-filename.
ls_result-remote_only = abap_true.
ls_result-filename = <ls_remote>-filename.
ls_result-new = gc_new-remote.
APPEND ls_result TO rt_results.
CONTINUE. " current loop
ENDIF.
@ -162,6 +162,7 @@ CLASS lcl_file_status IMPLEMENTATION.
ls_result-match = abap_true.
ls_result-obj_type = <ls_tadir>-object.
ls_result-obj_name = <ls_tadir>-obj_name.
ls_result-new = gc_new-local.
APPEND ls_result TO rt_results.
ENDIF.
@ -171,6 +172,7 @@ CLASS lcl_file_status IMPLEMENTATION.
AND path IS INITIAL.
* new file added locally to existing object
<ls_result>-path = io_repo->get_dot_abapgit( )->get_starting_folder( ) && <ls_tadir>-path.
<ls_result>-new = gc_new-local.
ENDLOOP.
ENDLOOP.

View File

@ -8,10 +8,10 @@ INCLUDE zabapgit_html_action_utils.
INCLUDE zabapgit_page.
INCLUDE zabapgit_page_commit.
INCLUDE zabapgit_page_merge.
INCLUDE zabapgit_page_branch_overview.
INCLUDE zabapgit_page_stage.
INCLUDE zabapgit_page_db.
INCLUDE zabapgit_page_main.
INCLUDE zabapgit_page_background.
INCLUDE zabapgit_page_branch_overview.
INCLUDE zabapgit_page_db.
INCLUDE zabapgit_page_diff.
INCLUDE zabapgit_page_explore.
INCLUDE zabapgit_page_explore.
INCLUDE zabapgit_page_main.
INCLUDE zabapgit_page_stage.

View File

@ -238,42 +238,22 @@ CLASS lcl_gui_router IMPLEMENTATION.
METHOD get_page_diff.
DATA: lt_remote TYPE ty_files_tt,
lt_local TYPE ty_files_item_tt,
DATA: ls_file TYPE ty_file,
ls_object TYPE ty_item,
lo_page TYPE REF TO lcl_gui_page_diff,
lo_repo TYPE REF TO lcl_repo_online,
ls_file TYPE ty_repo_file,
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF lt_remote,
<ls_local> LIKE LINE OF lt_local.
lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata
IMPORTING ev_key = lv_key
eg_file = ls_file ).
lo_repo ?= lcl_app=>repo_srv( )->get( lv_key ).
lt_remote = lo_repo->get_files_remote( ).
lt_local = lo_repo->get_files_local( ).
READ TABLE lt_remote ASSIGNING <ls_remote>
WITH KEY filename = ls_file-filename
path = ls_file-path.
IF sy-subrc <> 0.
lcx_exception=>raise( 'file not found remotely' ).
ENDIF.
READ TABLE lt_local ASSIGNING <ls_local>
WITH KEY file-filename = ls_file-filename
file-path = ls_file-path.
IF sy-subrc <> 0.
lcx_exception=>raise( 'file not found locally' ).
ENDIF.
lcl_html_action_utils=>file_obj_decode( EXPORTING iv_string = iv_getdata
IMPORTING ev_key = lv_key
eg_file = ls_file
eg_object = ls_object ).
CREATE OBJECT lo_page
EXPORTING
is_local = <ls_local>-file
is_remote = <ls_remote>.
iv_key = lv_key
is_file = ls_file
is_object = ls_object.
ri_page = lo_page.

View File

@ -194,6 +194,7 @@ CLASS lcl_html_toolbar DEFINITION FINAL.
iv_no_separator TYPE abap_bool OPTIONAL
iv_vertical TYPE abap_bool OPTIONAL
iv_sort TYPE abap_bool OPTIONAL
iv_as_angle TYPE abap_bool OPTIONAL
RETURNING
VALUE(ro_html) TYPE REF TO lcl_html_helper.
@ -237,32 +238,40 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
METHOD render.
DATA: lv_class TYPE string,
lv_last TYPE abap_bool.
DATA: lv_class TYPE string,
lv_is_drop TYPE abap_bool,
lv_last TYPE abap_bool.
FIELD-SYMBOLS <ls_item> LIKE LINE OF mt_items.
CREATE OBJECT ro_html.
lv_is_drop = boolc( iv_as_droplist_with_label IS NOT INITIAL OR iv_as_angle IS NOT INITIAL ).
IF iv_as_droplist_with_label IS INITIAL.
IF lv_is_drop = abap_false. " Normal menu
IF iv_vertical = abap_true.
lv_class = 'menu_vertical' ##NO_TEXT.
ELSE.
lv_class = 'menu' ##NO_TEXT.
ENDIF.
ELSEIF iv_as_angle IS NOT INITIAL.
lv_class = 'dropdown dropdown_angle' ##NO_TEXT.
ELSE.
lv_class = 'dropdown' ##NO_TEXT.
ENDIF.
ro_html->add( |<div class="{ lv_class }">| ).
IF iv_as_droplist_with_label IS NOT INITIAL.
lv_class = 'dropbtn'.
IF iv_no_separator = abap_true.
lv_class = lv_class && ' menu_end' ##NO_TEXT.
IF lv_is_drop = abap_true. " Dropdown
IF iv_as_angle = abap_true.
ro_html->add( '<div class="dropbtn_angle"></div>' ).
ELSE.
lv_class = 'dropbtn'.
IF iv_no_separator = abap_true.
lv_class = lv_class && ' menu_end' ##NO_TEXT.
ENDIF.
ro_html->add( |<a class="{ lv_class }">{ iv_as_droplist_with_label }</a>| ).
ENDIF.
ro_html->add( |<a class="{ lv_class }">{ iv_as_droplist_with_label }</a>| ).
ro_html->add( '<div class="dropdown_content">' ).
ENDIF.
@ -293,7 +302,7 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
ENDLOOP.
IF iv_as_droplist_with_label IS NOT INITIAL.
IF lv_is_drop = abap_true. " Dropdown
ro_html->add( '</div>' ).
ENDIF.

View File

@ -8,13 +8,18 @@
CLASS lcl_html_action_utils DEFINITION FINAL.
PUBLIC SECTION.
TYPES: BEGIN OF ty_commit_fields, "TODO refactor ! Move to normal place
repo_key TYPE lcl_persistence_repo=>ty_repo-key,
username TYPE string,
email TYPE string,
comment TYPE string,
body TYPE string,
END OF ty_commit_fields.
CLASS-METHODS field_keys_to_upper
CHANGING ct_fields TYPE tihttpnvp.
CLASS-METHODS add_field
IMPORTING name TYPE string
iv TYPE any
CHANGING ct TYPE tihttpnvp.
CLASS-METHODS get_field
IMPORTING name TYPE string
it TYPE tihttpnvp
CHANGING cv TYPE any.
CLASS-METHODS jump_encode
IMPORTING iv_obj_type TYPE tadir-object
@ -29,13 +34,19 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
CLASS-METHODS file_encode
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
ig_file TYPE any "ty_repo_file
ig_file TYPE any "assuming ty_file
RETURNING VALUE(rv_string) TYPE string.
CLASS-METHODS file_decode
CLASS-METHODS obj_encode
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
ig_object TYPE any "assuming ty_item
RETURNING VALUE(rv_string) TYPE string.
CLASS-METHODS file_obj_decode
IMPORTING iv_string TYPE clike
EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key
eg_file TYPE any "ty_repo_file
eg_file TYPE any "assuming ty_file
eg_object TYPE any "assuming ty_item
RAISING lcx_exception.
CLASS-METHODS dbkey_encode
@ -52,7 +63,7 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
CLASS-METHODS parse_commit_request
IMPORTING it_postdata TYPE cnht_post_data_tab
RETURNING VALUE(rs_fields) TYPE ty_commit_fields.
EXPORTING es_fields TYPE any.
CLASS-METHODS repo_key_encode
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
@ -62,8 +73,6 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
IMPORTING iv_getdata TYPE clike
RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background.
CLASS-METHODS field_keys_to_upper
CHANGING ct_fields TYPE tihttpnvp.
ENDCLASS. "lcl_html_action_utils DEFINITION
@ -72,19 +81,70 @@ ENDCLASS. "lcl_html_action_utils DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_html_action_utils IMPLEMENTATION.
METHOD field_keys_to_upper.
FIELD-SYMBOLS <field> LIKE LINE OF ct_fields.
LOOP AT ct_fields ASSIGNING <field>.
<field>-name = to_upper( <field>-name ).
ENDLOOP.
ENDMETHOD. "field_keys_to_upper
METHOD add_field.
DATA ls_field LIKE LINE OF ct.
FIELD-SYMBOLS <src> TYPE any.
ls_field-name = name.
CASE cl_abap_typedescr=>describe_by_data( iv )->kind.
WHEN cl_abap_typedescr=>kind_elem.
ls_field-value = iv.
WHEN cl_abap_typedescr=>kind_struct.
ASSIGN COMPONENT name OF STRUCTURE iv TO <src>.
ASSERT <src> IS ASSIGNED.
ls_field-value = <src>.
WHEN OTHERS.
ASSERT 2 = 1.
ENDCASE.
APPEND ls_field TO ct.
ENDMETHOD. "add_field
METHOD get_field.
FIELD-SYMBOLS <ls_field> LIKE LINE OF it.
FIELD-SYMBOLS <dest> TYPE any.
READ TABLE it ASSIGNING <ls_field> WITH KEY name = name.
IF sy-subrc IS NOT INITIAL.
RETURN.
ENDIF.
CASE cl_abap_typedescr=>describe_by_data( cv )->kind.
WHEN cl_abap_typedescr=>kind_elem.
cv = <ls_field>-value.
WHEN cl_abap_typedescr=>kind_struct.
ASSIGN COMPONENT name OF STRUCTURE cv TO <dest>.
ASSERT <dest> IS ASSIGNED.
<dest> = <ls_field>-value.
WHEN OTHERS.
ASSERT 2 = 1.
ENDCASE.
ENDMETHOD. "get_field
METHOD jump_encode.
DATA: lt_fields TYPE tihttpnvp,
ls_field LIKE LINE OF lt_fields.
DATA: lt_fields TYPE tihttpnvp.
ls_field-name = 'TYPE'.
ls_field-value = iv_obj_type.
APPEND ls_field TO lt_fields.
ls_field-name = 'NAME'.
ls_field-value = iv_obj_name.
APPEND ls_field TO lt_fields.
add_field( EXPORTING name = 'TYPE' iv = iv_obj_type CHANGING ct = lt_fields ).
add_field( EXPORTING name = 'NAME' iv = iv_obj_name CHANGING ct = lt_fields ).
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
@ -92,103 +152,71 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
METHOD jump_decode.
DATA: lt_fields TYPE tihttpnvp,
lv_string TYPE string.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
DATA: lt_fields TYPE tihttpnvp.
lv_string = iv_string. " type conversion
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
IF sy-subrc = 0.
ev_obj_type = <ls_field>-value.
ELSE.
CLEAR ev_obj_type.
ENDIF.
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'NAME'.
IF sy-subrc = 0.
ev_obj_name = <ls_field>-value.
ELSE.
CLEAR ev_obj_name.
ENDIF.
get_field( EXPORTING name = 'TYPE' it = lt_fields CHANGING cv = ev_obj_type ).
get_field( EXPORTING name = 'NAME' it = lt_fields CHANGING cv = ev_obj_name ).
ENDMETHOD. "jump_decode
METHOD file_encode.
DATA: lt_fields TYPE tihttpnvp,
ls_field LIKE LINE OF lt_fields.
DATA: lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS <lv_field> TYPE string.
ls_field-name = 'KEY'.
ls_field-value = iv_key.
APPEND ls_field TO lt_fields.
ls_field-name = 'PATH'.
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
ASSERT <lv_field> IS ASSIGNED.
ls_field-value = <lv_field>.
APPEND ls_field TO lt_fields.
ls_field-name = 'FILENAME'.
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
ASSERT <lv_field> IS ASSIGNED.
ls_field-value = <lv_field>.
APPEND ls_field TO lt_fields.
add_field( EXPORTING name = 'KEY' iv = iv_key CHANGING ct = lt_fields ).
add_field( EXPORTING name = 'PATH' iv = ig_file CHANGING ct = lt_fields ).
add_field( EXPORTING name = 'FILENAME' iv = ig_file CHANGING ct = lt_fields ).
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
ENDMETHOD. "file_encode
METHOD file_decode.
METHOD obj_encode.
DATA: lt_fields TYPE tihttpnvp,
lv_string TYPE string.
DATA: lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields,
<lv_field> TYPE string.
CLEAR: ev_key, eg_file.
lv_string = iv_string. " type conversion
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
add_field( EXPORTING name = 'KEY' iv = iv_key CHANGING ct = lt_fields ).
add_field( EXPORTING name = 'OBJ_TYPE' iv = ig_object CHANGING ct = lt_fields ).
add_field( EXPORTING name = 'OBJ_NAME' iv = ig_object CHANGING ct = lt_fields ).
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'KEY'.
IF sy-subrc = 0.
ev_key = <ls_field>-value.
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
ENDMETHOD. "obj_encode
METHOD file_obj_decode.
DATA: lt_fields TYPE tihttpnvp.
ASSERT eg_file IS SUPPLIED OR eg_object IS SUPPLIED.
CLEAR: ev_key, eg_file, eg_object.
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
get_field( EXPORTING name = 'KEY' it = lt_fields CHANGING cv = ev_key ).
IF eg_file IS SUPPLIED.
get_field( EXPORTING name = 'PATH' it = lt_fields CHANGING cv = eg_file ).
get_field( EXPORTING name = 'FILENAME' it = lt_fields CHANGING cv = eg_file ).
ENDIF.
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'PATH'.
IF sy-subrc = 0.
ASSIGN COMPONENT 'PATH' OF STRUCTURE eg_file TO <lv_field>.
ASSERT <lv_field> IS ASSIGNED.
<lv_field> = <ls_field>-value.
ENDIF.
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'FILENAME'.
IF sy-subrc = 0.
ASSIGN COMPONENT 'FILENAME' OF STRUCTURE eg_file TO <lv_field>.
ASSERT <lv_field> IS ASSIGNED.
<lv_field> = <ls_field>-value.
IF eg_object IS SUPPLIED.
get_field( EXPORTING name = 'OBJ_TYPE' it = lt_fields CHANGING cv = eg_object ).
get_field( EXPORTING name = 'OBJ_NAME' it = lt_fields CHANGING cv = eg_object ).
ENDIF.
ENDMETHOD. "file_decode
METHOD dbkey_encode.
DATA: lt_fields TYPE tihttpnvp,
ls_field LIKE LINE OF lt_fields.
DATA: lt_fields TYPE tihttpnvp.
ls_field-name = 'TYPE'.
ls_field-value = is_key-type.
APPEND ls_field TO lt_fields.
ls_field-name = 'VALUE'.
ls_field-value = is_key-value.
APPEND ls_field TO lt_fields.
add_field( EXPORTING name = 'TYPE' iv = is_key-type CHANGING ct = lt_fields ).
add_field( EXPORTING name = 'VALUE' iv = is_key-value CHANGING ct = lt_fields ).
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
@ -196,24 +224,13 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
METHOD dbkey_decode.
DATA: lt_fields TYPE tihttpnvp,
lv_string TYPE string.
DATA: lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
lv_string = iv_string. " type conversion
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
IF sy-subrc = 0.
rs_key-type = <ls_field>-value.
ENDIF.
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'VALUE'.
IF sy-subrc = 0.
rs_key-value = <ls_field>-value.
ENDIF.
get_field( EXPORTING name = 'TYPE' it = lt_fields CHANGING cv = rs_key-type ).
get_field( EXPORTING name = 'VALUE' it = lt_fields CHANGING cv = rs_key-value ).
ENDMETHOD. "dbkey_decode
@ -230,9 +247,11 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'XMLDATA' ##NO_TEXT.
IF sy-subrc = 0 AND <ls_field>-value(1) <> '<'.
rs_content-data_str = <ls_field>-value+1. " hmm
get_field( EXPORTING name = 'XMLDATA' it = lt_fields CHANGING cv = rs_content-data_str ).
IF rs_content-data_str(1) <> '<' AND rs_content-data_str+1(1) = '<'. " Hmmm ???
rs_content-data_str = rs_content-data_str+1.
ELSE.
CLEAR rs_content-data_str.
ENDIF.
ENDMETHOD. "dbcontent_decode
@ -244,35 +263,26 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
DATA: lv_string TYPE string,
lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
FIELD-SYMBOLS <body> TYPE string.
CLEAR es_fields.
CONCATENATE LINES OF it_postdata INTO lv_string.
REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace.
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'key' ##NO_TEXT.
ASSERT sy-subrc = 0.
rs_fields-repo_key = <ls_field>-value.
get_field( EXPORTING name = 'REPO_KEY' it = lt_fields CHANGING cv = es_fields ).
get_field( EXPORTING name = 'USERNAME' it = lt_fields CHANGING cv = es_fields ).
get_field( EXPORTING name = 'EMAIL' it = lt_fields CHANGING cv = es_fields ).
get_field( EXPORTING name = 'COMMENT' it = lt_fields CHANGING cv = es_fields ).
get_field( EXPORTING name = 'BODY' it = lt_fields CHANGING cv = es_fields ).
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'username' ##NO_TEXT.
ASSERT sy-subrc = 0.
rs_fields-username = <ls_field>-value.
ASSIGN COMPONENT 'BODY' OF STRUCTURE es_fields TO <body>.
ASSERT <body> IS ASSIGNED.
REPLACE ALL OCCURRENCES OF lc_replace IN <body> WITH gc_newline.
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'email' ##NO_TEXT.
ASSERT sy-subrc = 0.
rs_fields-email = <ls_field>-value.
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'comment' ##NO_TEXT.
ASSERT sy-subrc = 0.
rs_fields-comment = <ls_field>-value.
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'body' ##NO_TEXT.
ASSERT sy-subrc = 0.
rs_fields-body = <ls_field>-value.
REPLACE ALL OCCURRENCES OF lc_replace IN rs_fields-body WITH gc_newline.
ASSERT es_fields IS NOT INITIAL.
ENDMETHOD. "parse_commit_request
@ -281,46 +291,26 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
DATA: lt_fields TYPE tihttpnvp,
ls_field LIKE LINE OF lt_fields.
ls_field-name = 'KEY'.
ls_field-value = iv_key.
APPEND ls_field TO lt_fields.
add_field( EXPORTING name = 'KEY' iv = iv_key CHANGING ct = lt_fields ).
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
ENDMETHOD. "repo_key_encode
METHOD field_keys_to_upper.
FIELD-SYMBOLS <field> LIKE LINE OF ct_fields.
LOOP AT ct_fields ASSIGNING <field>.
<field>-name = to_upper( <field>-name ).
ENDLOOP.
ENDMETHOD. "field_keys_to_upper
METHOD decode_bg_update.
DEFINE _field. " TODO refactor and use globally in html actions
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.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_getdata }| ).
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
_field 'METHOD' method.
_field 'USERNAME' username.
_field 'PASSWORD' password.
_field 'AMETHOD' amethod.
_field 'ANAME' aname.
_field 'AMAIL' amail.
get_field( EXPORTING name = 'METHOD' it = lt_fields CHANGING cv = rs_fields ).
get_field( EXPORTING name = 'USERNAME' it = lt_fields CHANGING cv = rs_fields ).
get_field( EXPORTING name = 'PASSWORD' it = lt_fields CHANGING cv = rs_fields ).
get_field( EXPORTING name = 'AMETHOD' it = lt_fields CHANGING cv = rs_fields ).
get_field( EXPORTING name = 'ANAME' it = lt_fields CHANGING cv = rs_fields ).
get_field( EXPORTING name = 'AMAIL' it = lt_fields CHANGING cv = rs_fields ).
ASSERT NOT rs_fields IS INITIAL.

View File

@ -341,12 +341,25 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
_add ' position: relative;'.
_add ' display: inline;'.
_add '}'.
_add '.dropdown_angle {'.
_add ' position: absolute !important;'.
_add ' right: -2px;'.
_add '}'.
_add '.dropbtn_angle {'.
_add ' width: 0;'.
_add ' height: 0;'.
_add ' border-left: 5px solid transparent;'.
_add ' border-right: 5px solid transparent;'.
_add ' border-bottom: 5px solid #4078c0;'.
_add ' transform: rotate(45deg);'.
_add ' -ms-transform: rotate(45deg);'.
_add '}'.
_add '.dropdown_content {'.
_add ' display: none;'.
_add ' z-index: 1;'.
_add ' position: absolute;'.
_add ' right: 0;'.
_add ' top: 1.1em; /*IE7 woraround*/'.
* _add ' top: 1.1em; /*IE7 woraround*/'.
_add ' background-color: #f9f9f9;'.
_add ' white-space: nowrap;'.
* _add ' min-width: 10em;'.

View File

@ -5,6 +5,15 @@
CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
PUBLIC SECTION.
TYPES: BEGIN OF ty_commit_fields,
repo_key TYPE lcl_persistence_repo=>ty_repo-key,
username TYPE string,
email TYPE string,
comment TYPE string,
body TYPE string,
END OF ty_commit_fields.
METHODS:
constructor
IMPORTING io_repo TYPE REF TO lcl_repo_online
@ -104,7 +113,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
ro_html->add( '<div class="form_div">' ).
ro_html->add( '<form id="commit_form" method="post" action="sapevent:commit_post">' ).
ro_html->add( |<input name="key" type="hidden" value="{ lv_key }">| ).
ro_html->add( |<input name="repo_key" type="hidden" value="{ lv_key }">| ).
ro_html->add( '<table>' ).
ro_html->add( '<tr>' ).
@ -245,12 +254,13 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
METHOD commit_push.
DATA: ls_fields TYPE lcl_html_action_utils=>ty_commit_fields,
DATA: ls_fields TYPE ty_commit_fields,
ls_comment TYPE ty_comment,
lo_user TYPE REF TO lcl_persistence_user.
ls_fields = lcl_html_action_utils=>parse_commit_request( it_postdata ).
lcl_html_action_utils=>parse_commit_request( EXPORTING it_postdata = it_postdata
IMPORTING es_fields = ls_fields ).
lo_user = lcl_app=>user( ).
lo_user->set_repo_username( iv_url = mo_repo->get_url( ) iv_username = ls_fields-username ).

View File

@ -5,38 +5,133 @@
CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
PUBLIC SECTION.
TYPES: begin of ty_file_diff,
filename TYPE string,
o_diff TYPE REF TO lcl_diff,
end of ty_file_diff,
tt_file_diff TYPE STANDARD TABLE OF ty_file_diff.
METHODS: constructor
IMPORTING
is_local TYPE ty_file
is_remote TYPE ty_file.
iv_key TYPE lcl_persistence_repo=>ty_repo-key
is_file TYPE ty_file OPTIONAL
is_object TYPE ty_item OPTIONAL
RAISING lcx_exception.
METHODS lif_gui_page~render REDEFINITION.
PRIVATE SECTION.
DATA: mv_filename TYPE string,
mo_diff TYPE REF TO lcl_diff.
DATA: mt_diff_files TYPE tt_file_diff.
METHODS styles RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_head RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_diff RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_lines RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_diff
IMPORTING is_diff TYPE ty_file_diff
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_head
IMPORTING is_diff TYPE ty_file_diff
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_lines
IMPORTING is_diff TYPE ty_file_diff
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS append_diff
IMPORTING it_remote TYPE ty_files_tt
it_local TYPE ty_files_item_tt
iv_path TYPE string
iv_filename TYPE string
RAISING lcx_exception.
ENDCLASS. "lcl_gui_page_diff
CLASS lcl_gui_page_diff IMPLEMENTATION.
METHOD constructor.
DATA: lt_remote TYPE ty_files_tt,
lt_local TYPE ty_files_item_tt,
lt_results TYPE ty_results_tt,
lo_repo TYPE REF TO lcl_repo_online.
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results.
super->constructor( ).
mv_filename = is_local-filename.
ASSERT is_file IS SUPPLIED OR is_object IS SUPPLIED.
ASSERT is_file IS INITIAL OR is_object IS INITIAL. " just one passed
CREATE OBJECT mo_diff
EXPORTING
iv_local = is_local-data
iv_remote = is_remote-data.
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
lt_remote = lo_repo->get_files_remote( ).
lt_local = lo_repo->get_files_local( ).
IF is_file IS NOT INITIAL.
append_diff( it_remote = lt_remote
it_local = lt_local
iv_path = is_file-path
iv_filename = is_file-filename ).
ELSE. " is_object is supplied
lt_results = lo_repo->status( ).
LOOP AT lt_results ASSIGNING <ls_result>
WHERE obj_type = is_object-obj_type
AND obj_name = is_object-obj_name
AND match IS INITIAL.
append_diff( it_remote = lt_remote
it_local = lt_local
iv_path = <ls_result>-path
iv_filename = <ls_result>-filename ).
ENDLOOP.
ENDIF.
IF lines( mt_diff_files ) = 0.
lcx_exception=>raise( 'PAGE_DIFF ERROR: No diff files found' ).
ENDIF.
ENDMETHOD.
METHOD append_diff.
DATA:
ls_r_dummy LIKE LINE OF it_remote ##NEEDED,
ls_l_dummy LIKE LINE OF it_local ##NEEDED,
ls_diff_file LIKE LINE OF mt_diff_files.
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF it_remote,
<ls_local> LIKE LINE OF it_local.
READ TABLE it_remote ASSIGNING <ls_remote>
WITH KEY filename = iv_filename
path = iv_path.
IF sy-subrc <> 0.
ASSIGN ls_r_dummy TO <ls_remote>.
ENDIF.
READ TABLE it_local ASSIGNING <ls_local>
WITH KEY file-filename = iv_filename
file-path = iv_path.
IF sy-subrc <> 0.
ASSIGN ls_l_dummy TO <ls_local>.
ENDIF.
IF <ls_local> IS INITIAL AND <ls_remote> IS INITIAL.
lcx_exception=>raise( |DIFF: file not found { iv_filename }| ).
ENDIF.
CREATE OBJECT ls_diff_file-o_diff
EXPORTING
iv_local = <ls_local>-file-data
iv_remote = <ls_remote>-data.
ls_diff_file-filename = iv_filename.
APPEND ls_diff_file TO mt_diff_files.
ENDMETHOD. "append_diff
METHOD styles.
DATA lo_html TYPE REF TO lcl_html_helper.
CREATE OBJECT lo_html.
@ -47,7 +142,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
lo_html->add( ' padding: 0.7em ' ). "#EC NOTEXT
lo_html->add( '}' ). "#EC NOTEXT
lo_html->add( 'div.diff_head {' ). "#EC NOTEXT
lo_html->add( ' border-bottom: 1px solid #DDD;' ). "#EC NOTEXT
lo_html->add( ' padding-bottom: 0.7em;' ). "#EC NOTEXT
lo_html->add( '}' ). "#EC NOTEXT
lo_html->add( 'span.diff_name {' ). "#EC NOTEXT
@ -78,6 +172,8 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
lo_html->add( '}' ). "#EC NOTEXT
lo_html->add( 'div.diff_content {' ). "#EC NOTEXT
lo_html->add( ' background: #fff;' ). "#EC NOTEXT
lo_html->add( ' border-top: 1px solid #DDD;' ). "#EC NOTEXT
lo_html->add( ' border-bottom: 1px solid #DDD;' ). "#EC NOTEXT
lo_html->add( '}' ). "#EC NOTEXT
" Table part
@ -86,16 +182,18 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
lo_html->add( ' font-family: Consolas, Courier, monospace;' ). "#EC NOTEXT
lo_html->add( '}' ). "#EC NOTEXT
lo_html->add( 'table.diff_tab th {' ). "#EC NOTEXT
lo_html->add( ' color: grey;' ). "#EC NOTEXT
lo_html->add( ' color: #EEE;' ). "#EC NOTEXT
lo_html->add( ' background-color: #BBB;' ). "#EC NOTEXT
lo_html->add( ' text-align: left;' ). "#EC NOTEXT
lo_html->add( ' font-weight: normal;' ). "#EC NOTEXT
lo_html->add( ' padding: 0.5em;' ). "#EC NOTEXT
lo_html->add( ' font-weight: bold;' ). "#EC NOTEXT
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
lo_html->add( ' font-size: 9pt;' ). "#EC NOTEXT
lo_html->add( '}' ). "#EC NOTEXT
lo_html->add( 'table.diff_tab td {' ). "#EC NOTEXT
lo_html->add( ' color: #444;' ). "#EC NOTEXT
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
lo_html->add( ' padding-right: 0.5em;' ). "#EC NOTEXT
lo_html->add( ' font-size: 12pt;' ). "#EC NOTEXT
lo_html->add( ' font-size: 10pt;' ). "#EC NOTEXT
lo_html->add( '}' ). "#EC NOTEXT
lo_html->add( 'table.diff_tab td.num, th.num {' ). "#EC NOTEXT
lo_html->add( ' text-align: right;' ). "#EC NOTEXT
@ -127,14 +225,14 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
CREATE OBJECT lo_html.
ls_stats = mo_diff->stats( ).
ls_stats = is_diff-o_diff->stats( ).
lo_html->add( '<div class="diff_head">' ). "#EC NOTEXT
lo_html->add( |<span class="diff_banner diff_ins">+ { ls_stats-insert }</span>| ).
lo_html->add( |<span class="diff_banner diff_del">- { ls_stats-delete }</span>| ).
lo_html->add( |<span class="diff_banner diff_upd">~ { ls_stats-update }</span>| ).
lo_html->add( '<span class="diff_name">' ). "#EC NOTEXT
lo_html->add( |{ mv_filename }| ).
lo_html->add( |{ is_diff-filename }| ).
lo_html->add( '</span>' ). "#EC NOTEXT
lo_html->add( '</div>' ). "#EC NOTEXT
@ -146,18 +244,18 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( '<div class="diff">' ). "#EC NOTEXT
ro_html->add( render_head( ) ).
ro_html->add( render_head( is_diff ) ).
" Content
ro_html->add( '<div class="diff_content">' ). "#EC NOTEXT
ro_html->add( '<table width="100%" class="diff_tab">' ). "#EC NOTEXT
ro_html->add( '<tr>' ). "#EC NOTEXT
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
ro_html->add( '<th>@LOCAL</th>' ). "#EC NOTEXT
ro_html->add( '<th>LOCAL</th>' ). "#EC NOTEXT
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
ro_html->add( '<th>@REMOTE</th>' ). "#EC NOTEXT
ro_html->add( '<th>REMOTE</th>' ). "#EC NOTEXT
ro_html->add( '</tr>' ). "#EC NOTEXT
ro_html->add( render_lines( ) ).
ro_html->add( render_lines( is_diff ) ).
ro_html->add( '</table>' ). "#EC NOTEXT
ro_html->add( '</div>' ). "#EC NOTEXT
@ -179,7 +277,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
CREATE OBJECT ro_html.
lt_diffs = mo_diff->get( ).
lt_diffs = is_diff-o_diff->get( ).
LOOP AT lt_diffs ASSIGNING <ls_diff>.
IF <ls_diff>-short = abap_false.
@ -189,7 +287,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
IF lv_insert_nav = abap_true. " Insert separator line with navigation
IF <ls_diff>-beacon > 0.
READ TABLE mo_diff->mt_beacons INTO lv_beacon INDEX <ls_diff>-beacon.
READ TABLE is_diff-o_diff->mt_beacons INTO lv_beacon INDEX <ls_diff>-beacon.
ELSE.
lv_beacon = '---'.
ENDIF.
@ -228,11 +326,17 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
METHOD lif_gui_page~render.
DATA ls_diff_file LIKE LINE OF mt_diff_files.
CREATE OBJECT ro_html.
ro_html->add( header( io_include_style = styles( ) ) ).
ro_html->add( title( 'DIFF' ) ).
ro_html->add( render_diff( ) ).
LOOP AT mt_diff_files INTO ls_diff_file.
ro_html->add( render_diff( ls_diff_file ) ).
ENDLOOP.
ro_html->add( footer( ) ).
ENDMETHOD.

View File

@ -14,7 +14,8 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
PRIVATE SECTION.
CONSTANTS: BEGIN OF c_actions,
show TYPE string VALUE 'show' ##NO_TEXT,
show TYPE string VALUE 'show' ##NO_TEXT,
toggle_hide_files TYPE string VALUE 'toggle_hide_files' ##NO_TEXT,
END OF c_actions.
CONSTANTS: c_default_sortkey TYPE i VALUE 9999.
@ -25,10 +26,12 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
is_first TYPE abap_bool,
files TYPE tt_repo_files,
sortkey TYPE i,
changes TYPE i,
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.
DATA: mv_show TYPE lcl_persistence_db=>ty_value,
mv_hide_files TYPE abap_bool.
METHODS:
retrieve_active_repo
@ -157,6 +160,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
CREATE OBJECT ro_html.
_add '/* REPOSITORY TABLE*/'.
_add 'div.repo_container {'.
_add ' position: relative;'.
_add '}'.
_add '.repo_tab {'.
_add ' border: 1px solid #DDD;'.
_add ' border-radius: 3px;'.
@ -301,12 +307,13 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
METHOD render_repo.
DATA: lt_repo_items TYPE tt_repo_items,
lo_tab_menu TYPE REF TO lcl_html_toolbar,
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 lo_tab_menu.
CREATE OBJECT ro_html.
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
@ -317,17 +324,26 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
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
" 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.
IF io_repo->is_offline( ) = abap_false and lo_log->count( ) > 0.
ro_html->add( '<div class="log">' ).
* shows eg. list of unsupported objects
ro_html->add( lo_log->to_html( ) ).
ro_html->add( lo_log->to_html( ) ). " shows eg. list of unsupported objects
ro_html->add( '</div>' ).
ENDIF.
ro_html->add( '<div class="repo_container">' ).
IF io_repo->is_offline( ) = abap_false.
IF mv_hide_files = abap_true.
lo_tab_menu->add( iv_txt = 'Show files' iv_act = c_actions-toggle_hide_files ).
ELSE.
lo_tab_menu->add( iv_txt = 'Hide files' iv_act = c_actions-toggle_hide_files ).
ENDIF.
ro_html->add( lo_tab_menu->render( iv_as_angle = abap_true ) ).
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">'
@ -339,6 +355,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
ENDLOOP.
ENDIF.
ro_html->add( '</table>' ).
ro_html->add( '</div>' ).
CATCH lcx_exception INTO lx_error.
ro_html->add( render_repo_menu( io_repo ) ).
@ -384,17 +401,19 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
<ls_repo_item>-obj_type = <ls_result>-obj_type.
<ls_repo_item>-obj_name = <ls_result>-obj_name.
<ls_repo_item>-sortkey = c_default_sortkey. " Default sort key
<ls_repo_item>-changes = 0.
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 ).
ls_file-remote_only = <ls_result>-remote_only.
ls_file-new = <ls_result>-new.
APPEND ls_file TO <ls_repo_item>-files.
IF ls_file-is_changed = abap_true.
IF ls_file-is_changed = abap_true OR ls_file-new IS NOT INITIAL.
<ls_repo_item>-sortkey = 2. " Changed files
<ls_repo_item>-changes = <ls_repo_item>-changes + 1.
ENDIF.
ENDIF.
@ -444,7 +463,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
ro_html->add( |<tr{ lv_trclass }>| ).
IF is_item-obj_name IS INITIAL.
ro_html->add( '<td colspan="3"></td>' ).
ro_html->add( '<td colspan="2"></td>'
&& '<td class="object"><i class="grey">non-code and meta files</i></td>' ).
ELSE.
CASE is_item-obj_type. "TODO ??
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
@ -467,29 +487,42 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
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.
IF mv_hide_files = abap_false OR is_item-obj_type IS INITIAL.
LOOP AT is_item-files INTO ls_file.
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
ENDLOOP.
ENDIF.
ro_html->add( '</td>' ).
ro_html->add( '<td class="cmd">' ).
IF lines( is_item-files ) = 0.
ro_html->add( '<span class="grey">Only Local</span>' ).
ELSE.
LOOP AT is_item-files INTO ls_file.
IF ls_file-remote_only = abap_true.
ro_html->add( '<span class="grey">Only Remote</span>' ).
ELSEIF 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 = |{ gc_action-go_diff }?{ lv_difflink }| ).
ELSE.
ro_html->add( |<span>&nbsp;</span>| ).
ENDIF.
ENDLOOP.
ro_html->add( '<span class="grey">new @local</span>' ).
ELSEIF is_item-changes > 0.
IF mv_hide_files = abap_true AND is_item-obj_name IS NOT INITIAL.
lv_difflink = lcl_html_action_utils=>obj_encode(
iv_key = io_repo->get_key( )
ig_object = is_item ).
ro_html->add_anchor(
iv_txt = |diff ({ is_item-changes })|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
ELSE.
LOOP AT is_item-files INTO ls_file.
IF ls_file-new = gc_new-remote.
ro_html->add( '<span class="grey">new @remote</span>' ).
ELSEIF ls_file-new = gc_new-local.
ro_html->add( '<span class="grey">new @local</span>' ).
ELSEIF 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 = |{ gc_action-go_diff }?{ lv_difflink }| ).
ELSE.
ro_html->add( |<span>&nbsp;</span>| ).
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ro_html->add( '</td>' ).
@ -632,6 +665,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
WHEN c_actions-show. " Change displayed repo
lcl_app=>user( )->set_repo_show( lv_key ).
ev_state = gc_event_state-re_render.
WHEN c_actions-toggle_hide_files. " Toggle file diplay
lcl_app=>user( )->toggle_hide_files( ).
ev_state = gc_event_state-re_render.
ENDCASE.
ENDMETHOD.
@ -643,6 +679,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
lo_repo LIKE LINE OF lt_repos.
retrieve_active_repo( ). " Get and validate key of user default repo
mv_hide_files = lcl_app=>user( )->get_hide_files( ).
CREATE OBJECT ro_html.

View File

@ -56,8 +56,8 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
IF iv_action <> 'stage_all'.
lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata
IMPORTING eg_file = ls_file ).
lcl_html_action_utils=>file_obj_decode( EXPORTING iv_string = iv_getdata
IMPORTING eg_file = ls_file ).
ENDIF.
CASE iv_action.

View File

@ -377,6 +377,13 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
RETURNING VALUE(rv_email) TYPE string
RAISING lcx_exception.
METHODS toggle_hide_files
RAISING lcx_exception.
METHODS get_hide_files
RETURNING VALUE(rv_hide) TYPE abap_bool
RAISING lcx_exception.
PRIVATE SECTION.
CONSTANTS c_type_user TYPE lcl_persistence_db=>ty_type VALUE 'USER'.
@ -399,6 +406,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
email TYPE string,
repo_show TYPE lcl_persistence_repo=>ty_repo-key,
repo_config TYPE ty_repo_config_tt,
hide_files TYPE abap_bool,
END OF ty_user.
METHODS constructor
@ -606,6 +614,22 @@ CLASS lcl_persistence_user IMPLEMENTATION.
ENDMETHOD. "get_repo_email
METHOD toggle_hide_files.
DATA ls_user TYPE ty_user.
ls_user = read( ).
ls_user-hide_files = boolc( ls_user-hide_files = abap_false ).
update( ls_user ).
ENDMETHOD. "toggle_hide_files
METHOD get_hide_files.
rv_hide = read( )-hide_files.
ENDMETHOD. "get_hide_files
ENDCLASS.
CLASS lcl_persistence_db IMPLEMENTATION.

View File

@ -1558,4 +1558,63 @@ CLASS ltcl_login_manager IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.
ENDCLASS.
CLASS ltcl_html_action_utils DEFINITION
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
INHERITING FROM CL_AUNIT_ASSERT.
PUBLIC SECTION.
METHODS add_field FOR TESTING.
METHODS get_field FOR TESTING.
ENDCLASS. "ltcl_html_action_utils
CLASS ltcl_html_action_utils IMPLEMENTATION.
METHOD add_field.
DATA: lt_fields TYPE tihttpnvp,
lt_answer TYPE tihttpnvp,
ls_field LIKE LINE OF lt_fields.
ls_field-name = 'NAME'.
ls_field-value = 'TEST'.
APPEND ls_field TO lt_answer.
ls_field-name = 'VALUE'.
ls_field-value = 'TEST'.
APPEND ls_field TO lt_answer.
lcl_html_action_utils=>add_field( EXPORTING name = 'NAME' iv = 'TEST'
CHANGING ct = lt_fields ).
lcl_html_action_utils=>add_field( EXPORTING name = 'VALUE' iv = ls_field
CHANGING ct = lt_fields ).
assert_equals( act = lt_fields exp = lt_answer ).
ENDMETHOD. "add_field
METHOD get_field.
DATA: lt_fields TYPE tihttpnvp,
ls_answer LIKE LINE OF lt_fields,
ls_field LIKE LINE OF lt_fields.
ls_answer-name = 'NAME'.
ls_answer-value = 'TEST'.
APPEND ls_answer TO lt_fields.
lcl_html_action_utils=>get_field( EXPORTING name = 'NAME' it = lt_fields
CHANGING cv = ls_field-value ).
lcl_html_action_utils=>get_field( EXPORTING name = 'NAME' it = lt_fields
CHANGING cv = ls_field ).
ls_answer-name = 'TEST'.
ls_answer-value = 'TEST'.
assert_equals( act = ls_field exp = ls_answer ). " Both field are filled!
ENDMETHOD. "get_field
ENDCLASS. "ltcl_html_action_utils

View File

@ -458,8 +458,8 @@ CLASS lcl_diff DEFINITION FINAL.
RETURNING VALUE(rs_count) TYPE ty_count.
PRIVATE SECTION.
DATA mt_diff TYPE ty_diffs_tt.
DATA ms_stats TYPE ty_count.
DATA mt_diff TYPE ty_diffs_tt.
DATA ms_stats TYPE ty_count.
CLASS-METHODS:
unpack
@ -537,7 +537,7 @@ CLASS lcl_diff IMPLEMENTATION.
FIELD-SYMBOLS: <ls_diff> LIKE LINE OF mt_diff.
IF lines( mt_diff ) < 200.
IF lines( mt_diff ) < 100.
LOOP AT mt_diff ASSIGNING <ls_diff>.
<ls_diff>-short = abap_true.
ENDLOOP.
@ -546,7 +546,7 @@ CLASS lcl_diff IMPLEMENTATION.
WHERE NOT result IS INITIAL AND short = abap_false.
lv_index = sy-tabix.
DO 20 TIMES. " Backward
DO 10 TIMES. " Backward
READ TABLE mt_diff INDEX ( lv_index - sy-index ) ASSIGNING <ls_diff>.
IF sy-subrc <> 0 OR <ls_diff>-short = abap_true. " tab bound or prev marker
EXIT.
@ -554,7 +554,7 @@ CLASS lcl_diff IMPLEMENTATION.
<ls_diff>-short = abap_true.
ENDDO.
DO 20 TIMES. " Forward
DO 10 TIMES. " Forward
READ TABLE mt_diff INDEX ( lv_index + sy-index - 1 ) ASSIGNING <ls_diff>.
IF sy-subrc <> 0. " tab bound reached
EXIT.