background mode, persistence and ui, #236

This commit is contained in:
larshp 2016-06-01 08:44:24 +00:00
parent f0491871b2
commit 11b8dca003

View File

@ -3,7 +3,7 @@ REPORT zabapgit.
* See http://www.abapgit.org
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.10.2'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.10.3'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)
@ -424,9 +424,9 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
CREATE OBJECT ro_html.
IF iv_as_droplist_with_label IS INITIAL.
lv_class = 'menu'.
lv_class = 'menu' ##NO_TEXT.
ELSE.
lv_class = 'dropdown'.
lv_class = 'dropdown' ##NO_TEXT.
ENDIF.
ro_html->add( |<div class="{ lv_class }">| ).
@ -434,7 +434,7 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
IF iv_as_droplist_with_label IS NOT INITIAL.
lv_class = 'dropbtn'.
IF iv_no_separator = abap_true.
lv_class = lv_class && ' menu_end'.
lv_class = lv_class && ' menu_end' ##NO_TEXT.
ENDIF.
ro_html->add( |<a class="{ lv_class }">{ iv_as_droplist_with_label }</a>| ).
ro_html->add( '<div class="dropdown_content">' ).
@ -449,10 +449,10 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
lv_class = 'menu_end'.
ENDIF.
IF <ls_item>-emphasis = abap_true.
lv_class = lv_class && ' emphasis'.
lv_class = lv_class && ' emphasis' ##NO_TEXT.
ENDIF.
IF <ls_item>-cancel = abap_true.
lv_class = lv_class && ' attention'.
lv_class = lv_class && ' attention' ##NO_TEXT.
ENDIF.
IF lv_class IS NOT INITIAL.
SHIFT lv_class LEFT DELETING LEADING space.
@ -12863,7 +12863,7 @@ CLASS lcl_persistence_db DEFINITION FINAL.
value TYPE ty_value,
data_str TYPE string,
END OF ty_content,
tt_content TYPE SORTED TABLE OF ty_content WITH UNIQUE KEY value.
tt_content TYPE SORTED TABLE OF ty_content WITH UNIQUE KEY type value.
METHODS list_by_type
IMPORTING iv_type TYPE ty_type
@ -12909,6 +12909,123 @@ CLASS lcl_persistence_db DEFINITION FINAL.
ENDCLASS.
CLASS lcl_persistence_background DEFINITION FINAL.
PUBLIC SECTION.
CONSTANTS: BEGIN OF c_method,
nothing TYPE string VALUE 'nothing',
pull TYPE string VALUE 'pull',
push TYPE string VALUE 'push',
END OF c_method.
TYPES: BEGIN OF ty_xml,
method TYPE string,
username TYPE string,
password TYPE string,
END OF ty_xml.
TYPES: BEGIN OF ty_background,
key TYPE lcl_persistence_db=>ty_value.
INCLUDE TYPE ty_xml.
TYPES: END OF ty_background.
TYPES: tt_background TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY.
METHODS constructor.
METHODS list
RETURNING VALUE(rt_list) TYPE tt_background
RAISING lcx_exception.
METHODS modify
IMPORTING is_data TYPE ty_background
RAISING lcx_exception.
METHODS delete
IMPORTING iv_key TYPE ty_background-key
RAISING lcx_exception.
PRIVATE SECTION.
CONSTANTS c_type TYPE lcl_persistence_db=>ty_type VALUE 'BACKGROUND'.
DATA: mo_db TYPE REF TO lcl_persistence_db.
METHODS from_xml
IMPORTING iv_string TYPE string
RETURNING VALUE(rs_xml) TYPE ty_xml
RAISING lcx_exception.
METHODS to_xml
IMPORTING is_background TYPE ty_background
RETURNING VALUE(rv_string) TYPE string.
ENDCLASS.
CLASS lcl_persistence_background IMPLEMENTATION.
METHOD constructor.
CREATE OBJECT mo_db.
ENDMETHOD.
METHOD list.
DATA: lt_list TYPE lcl_persistence_db=>tt_content,
ls_xml TYPE ty_xml.
FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list,
<ls_output> LIKE LINE OF rt_list.
lt_list = mo_db->list_by_type( c_type ).
LOOP AT lt_list ASSIGNING <ls_list>.
ls_xml = from_xml( <ls_list>-data_str ).
APPEND INITIAL LINE TO rt_list ASSIGNING <ls_output>.
MOVE-CORRESPONDING ls_xml TO <ls_output>.
<ls_output>-key = <ls_list>-value.
ENDLOOP.
ENDMETHOD.
METHOD modify.
mo_db->modify(
iv_type = c_type
iv_value = is_data-key
iv_data = to_xml( is_data ) ).
ENDMETHOD.
METHOD delete.
TRY.
mo_db->read( iv_type = c_type
iv_value = iv_key ).
CATCH lcx_not_found.
RETURN.
ENDTRY.
mo_db->delete( iv_type = c_type
iv_value = iv_key ).
ENDMETHOD.
METHOD from_xml.
CALL TRANSFORMATION id
OPTIONS value_handling = 'accept_data_loss'
SOURCE XML iv_string
RESULT data = rs_xml ##NO_TEXT.
ENDMETHOD.
METHOD to_xml.
DATA: ls_xml TYPE ty_xml.
MOVE-CORRESPONDING is_background TO ls_xml.
CALL TRANSFORMATION id
SOURCE data = ls_xml
RESULT XML rv_string.
ENDMETHOD.
ENDCLASS.
CLASS lcl_persistence_repo DEFINITION FINAL.
PUBLIC SECTION.
@ -13668,7 +13785,6 @@ CLASS lcl_sap_package IMPLEMENTATION.
METHOD create.
DATA: lv_err TYPE string,
li_super TYPE REF TO if_package,
ls_package LIKE is_package.
@ -13725,25 +13841,6 @@ CLASS lcl_sap_package IMPLEMENTATION.
_raise lv_err.
ENDIF.
* IF NOT ls_package-pdevclass IS INITIAL.
* cl_package_factory=>load_package(
* EXPORTING
* i_package_name = is_package-pdevclass
* IMPORTING
* e_package = li_super
* EXCEPTIONS
* object_not_existing = 1
* unexpected_error = 2
* intern_err = 3
* no_access = 4
* object_locked_and_modified = 5 ).
* IF sy-subrc <> 0.
* _raise 'error reading super package'.
* ENDIF.
* ri_package->set_super_package_name( PARENTCL ).
* ENDIF.
ri_package->save(
* EXPORTING
* i_suppress_dialog = abap_true " Controls whether popups can be transmitted
@ -19062,31 +19159,92 @@ CLASS lcl_gui_page_background DEFINITION FINAL INHERITING FROM lcl_gui_page_supe
lif_gui_page~render REDEFINITION.
PRIVATE SECTION.
METHODS:
parse_fields
IMPORTING iv_getdata TYPE clike
RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background,
render_data
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RAISING lcx_exception,
save
IMPORTING iv_getdata TYPE clike
RAISING lcx_exception.
ENDCLASS.
CLASS lcl_gui_page_background IMPLEMENTATION.
METHOD parse_fields.
DEFINE _field.
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = &1.
IF sy-subrc = 0.
rs_fields-&2 = <ls_field>-value.
ENDIF.
END-OF-DEFINITION.
DATA: lt_fields TYPE tihttpnvp,
lv_string TYPE string.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
lv_string = iv_getdata. " type conversion
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
_field 'key' key.
_field 'method' method.
_field 'username' username.
_field 'password' password.
ASSERT NOT rs_fields IS INITIAL.
ENDMETHOD.
METHOD lif_gui_page~on_event.
CASE iv_action.
* WHEN 'apush'.
* WHEN 'apull'.
WHEN 'save'.
save( iv_getdata ).
lcl_gui=>render( ).
WHEN OTHERS.
_raise 'Unknown action, background'.
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,
lt_list TYPE lcl_repo_srv=>ty_repo_tt.
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.
@ -19095,12 +19253,57 @@ CLASS lcl_gui_page_background IMPLEMENTATION.
ro_html->add( 'Listing online repositories' ).
ro_html->add( '<br><br>' ).
CREATE OBJECT lo_per.
lt_per = lo_per->list( ).
lt_list = lcl_repo_srv=>list( ).
LOOP AT lt_list INTO lo_repo.
IF lo_repo->is_offline( ) = abap_false.
lo_online ?= lo_repo.
ro_html->add( lo_online->get_name( ) && '<br>' ).
ro_html->add( 'Automatic push | Automatic pull' && '<br>' ).
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'.
WHEN lcl_persistence_background=>c_method-pull.
lv_pull = ' checked'.
WHEN OTHERS.
lv_nothing = ' checked'.
ENDCASE.
ro_html->add( '<h1>' && lo_online->get_name( ) && '</h1>' ).
ro_html->add( '<form method="get" action="sapevent:save">' ).
ro_html->add( '<input type="hidden" name="key" value="' &&
lo_repo->get_key( ) && '">' ).
ro_html->add( '<input type="radio" name="method" value="nothing"' &&
lv_nothing && '>Do nothing<br>' ).
ro_html->add( '<input type="radio" name="method" value="push"' &&
lv_push && '>Automatic push<br>' ).
ro_html->add( '<input type="radio" name="method" value="pull"' &&
lv_pull && '>Automatic pull<br>' ).
ro_html->add( '<br>' ).
ro_html->add( 'Authentication, optional(password will be saved in clear text)<br>' ).
ro_html->add( '<table>' ).
ro_html->add( '<tr>' ).
ro_html->add( '<td>Username:</td><td><input type="text" name="username" value="' &&
ls_per-username && '"></td>' ).
ro_html->add( '</tr>' ).
ro_html->add( '<tr>' ).
ro_html->add( '<td>Password:</td><td><input type="text" name="password" value="' &&
ls_per-password && '"></td>' ).
ro_html->add( '</tr>' ).
ro_html->add( '<tr><td colspan="2" align="right">' ).
ro_html->add( '<input type="submit" value="Save">' ).
ro_html->add( '</td></tr>' ).
ro_html->add( '</table>' ).
ro_html->add( '</form>' ).
ro_html->add( '<br>' ).
ENDIF.
ENDLOOP.
@ -20325,6 +20528,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
<ls_tadir> LIKE LINE OF lt_tadir.
CLEAR et_repo_items.
IF io_repo->is_offline( ) = abap_true.
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
@ -20445,7 +20651,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
ls_data TYPE lcl_persistence_repo=>ty_repo,
lv_returncode TYPE c,
lv_url TYPE string,
lv_package TYPE devclass,
lt_fields TYPE TABLE OF sval.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
@ -22365,6 +22570,11 @@ CLASS lcl_persistence_repo IMPLEMENTATION.
METHOD delete.
DATA: lo_background TYPE REF TO lcl_persistence_background.
CREATE OBJECT lo_background.
lo_background->delete( iv_key ).
mo_db->delete( iv_type = c_type_repo
iv_value = iv_key ).