refactoring: align offline and online deserializat

This commit is contained in:
larshp 2016-05-16 09:37:55 +00:00
parent e1187d88fc
commit 8cf34838ec

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.7.12'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.7.13'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)
@ -12315,7 +12315,6 @@ ENDCLASS. "lcl_object_W3MI DEFINITION
CLASS lcl_object_w3ht DEFINITION INHERITING FROM lcl_object_w3super FINAL.
ENDCLASS. "lcl_object_W3HT DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_file_status DEFINITION
*----------------------------------------------------------------------*
@ -12351,6 +12350,180 @@ CLASS lcl_file_status DEFINITION FINAL.
ENDCLASS. "lcl_file_status DEFINITION
CLASS lcl_persistence_db DEFINITION FINAL.
PUBLIC SECTION.
CONSTANTS:
c_tabname TYPE tabname VALUE 'ZABAPGIT',
c_lock TYPE viewname VALUE 'EZABAPGIT'.
TYPES: ty_type TYPE c LENGTH 12.
TYPES: ty_value TYPE c LENGTH 12.
TYPES: BEGIN OF ty_content,
type TYPE ty_type,
value TYPE ty_value,
data_str TYPE string,
END OF ty_content,
tt_content TYPE SORTED TABLE OF ty_content WITH UNIQUE KEY value.
METHODS list_by_type
IMPORTING iv_type TYPE ty_type
RETURNING VALUE(rt_content) TYPE tt_content.
METHODS list
RETURNING VALUE(rt_content) TYPE tt_content.
METHODS add
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
iv_data TYPE ty_content-data_str
RAISING lcx_exception.
METHODS delete
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
RAISING lcx_exception.
METHODS update
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
iv_data TYPE ty_content-data_str
RAISING lcx_exception.
METHODS modify
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
iv_data TYPE ty_content-data_str
RAISING lcx_exception.
METHODS read
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
RETURNING VALUE(rv_data) TYPE ty_content-data_str
RAISING lcx_not_found.
METHODS lock
IMPORTING iv_mode TYPE enqmode DEFAULT 'E'
iv_type TYPE ty_type
iv_value TYPE ty_content-value
RAISING lcx_exception.
ENDCLASS.
CLASS lcl_persistence_repo DEFINITION FINAL.
PUBLIC SECTION.
TYPES: BEGIN OF ty_repo_xml,
url TYPE string,
branch_name TYPE string,
sha1 TYPE ty_sha1,
package TYPE devclass,
offline TYPE sap_bool,
END OF ty_repo_xml.
TYPES: BEGIN OF ty_repo,
key TYPE lcl_persistence_db=>ty_value.
INCLUDE TYPE ty_repo_xml.
TYPES: END OF ty_repo.
TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY.
METHODS constructor.
METHODS list
RETURNING VALUE(rt_repos) TYPE tt_repo
RAISING lcx_exception.
METHODS update
IMPORTING iv_key TYPE ty_repo-key
iv_branch_sha1 TYPE ty_sha1
RAISING lcx_exception.
METHODS add
IMPORTING iv_url TYPE string
iv_branch_name TYPE string
iv_branch TYPE ty_sha1 OPTIONAL
iv_package TYPE devclass
iv_offline TYPE sap_bool DEFAULT abap_false
RETURNING VALUE(rv_key) TYPE ty_repo-key
RAISING lcx_exception.
METHODS delete
IMPORTING iv_key TYPE ty_repo-key
RAISING lcx_exception.
METHODS read
IMPORTING iv_key TYPE ty_repo-key
RETURNING VALUE(rs_repo) TYPE ty_repo
RAISING lcx_exception
lcx_not_found.
METHODS lock
IMPORTING iv_mode TYPE enqmode
iv_key TYPE ty_repo-key
RAISING lcx_exception.
PRIVATE SECTION.
CONSTANTS c_type_repo TYPE lcl_persistence_db=>ty_type VALUE 'REPO'.
DATA: mo_db TYPE REF TO lcl_persistence_db.
METHODS from_xml
IMPORTING iv_repo_xml_string TYPE string
RETURNING VALUE(rs_repo) TYPE ty_repo_xml
RAISING lcx_exception.
METHODS to_xml
IMPORTING is_repo TYPE ty_repo
RETURNING VALUE(rv_repo_xml_string) TYPE string.
METHODS get_next_id
RETURNING VALUE(rv_next_repo_id) TYPE lcl_persistence_db=>ty_content-value
RAISING lcx_exception.
ENDCLASS.
*----------------------------------------------------------------------*
* CLASS lcl_repo DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_repo DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS:
constructor
IMPORTING is_data TYPE lcl_persistence_repo=>ty_repo,
get_key
RETURNING VALUE(rv_key) TYPE lcl_persistence_db=>ty_value,
get_name
RETURNING VALUE(rv_name) TYPE string
RAISING lcx_exception,
get_files_local
RETURNING VALUE(rt_files) TYPE ty_files_tt
RAISING lcx_exception,
get_files_remote
RETURNING VALUE(rt_files) TYPE ty_files_tt
RAISING lcx_exception,
get_package
RETURNING VALUE(rv_package) TYPE lcl_persistence_repo=>ty_repo-package,
delete
RAISING lcx_exception,
deserialize
RAISING lcx_exception,
refresh
RAISING lcx_exception,
is_offline
RETURNING VALUE(rv_offline) TYPE abap_bool
RAISING lcx_exception.
PROTECTED SECTION.
DATA: mt_local TYPE ty_files_tt,
mt_remote TYPE ty_files_tt,
ms_data TYPE lcl_persistence_repo=>ty_repo.
ENDCLASS. "lcl_repo DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_object DEFINITION
*----------------------------------------------------------------------*
@ -12367,8 +12540,7 @@ CLASS lcl_objects DEFINITION FINAL.
RAISING lcx_exception.
CLASS-METHODS deserialize
IMPORTING it_files TYPE ty_files_tt
iv_package TYPE devclass
IMPORTING io_repo TYPE REF TO lcl_repo
RAISING lcx_exception.
CLASS-METHODS delete
@ -12594,9 +12766,10 @@ CLASS lcl_file_status IMPLEMENTATION.
ls_item TYPE ty_item,
lt_tadir TYPE lcl_tadir=>ty_tadir_tt,
ls_tadir TYPE tadir,
lt_remote TYPE ty_files_tt,
lv_ext TYPE string.
FIELD-SYMBOLS: <ls_file> LIKE LINE OF it_files,
FIELD-SYMBOLS: <ls_file> TYPE ty_file,
<ls_tadir> LIKE LINE OF lt_tadir,
<ls_result> LIKE LINE OF rt_results,
<ls_gen> LIKE LINE OF lt_files.
@ -12655,7 +12828,8 @@ CLASS lcl_file_status IMPLEMENTATION.
lt_tadir = lcl_tadir=>read( iv_package ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
READ TABLE rt_results
WITH KEY obj_type = <ls_tadir>-object obj_name = <ls_tadir>-obj_name
WITH KEY obj_type = <ls_tadir>-object
obj_name = <ls_tadir>-obj_name
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
CLEAR ls_result.
@ -13356,6 +13530,7 @@ CLASS lcl_objects IMPLEMENTATION.
DATA: ls_item TYPE ty_item,
lv_cancel TYPE abap_bool,
li_obj TYPE REF TO lif_object,
lt_remote TYPE ty_files_tt,
lo_files TYPE REF TO lcl_objects_files,
lo_xml TYPE REF TO lcl_xml_input,
lt_results TYPE lcl_file_status=>ty_results_tt,
@ -13367,8 +13542,10 @@ CLASS lcl_objects IMPLEMENTATION.
lcl_objects_activation=>clear( ).
lt_results = lcl_file_status=>status( it_files = it_files
iv_package = iv_package ).
lt_remote = io_repo->get_files_remote( ).
lt_results = lcl_file_status=>status( it_files = lt_remote
iv_package = io_repo->get_package( ) ).
DELETE lt_results WHERE match = abap_true.
SORT lt_results BY obj_type ASCENDING obj_name ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_results COMPARING obj_type obj_name.
@ -13387,7 +13564,7 @@ CLASS lcl_objects IMPLEMENTATION.
REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'.
lv_cancel = check_warning( is_item = ls_item
iv_package = iv_package ).
iv_package = io_repo->get_package( ) ).
IF lv_cancel = abap_true.
RETURN.
ENDIF.
@ -13395,9 +13572,9 @@ CLASS lcl_objects IMPLEMENTATION.
CREATE OBJECT lo_files
EXPORTING
is_item = ls_item.
lo_files->set_files( it_files ).
lo_files->set_files( lt_remote ).
* Analyze XML in order to instantiate the proper serializer
* Analyze XML in order to instantiate the proper serializer
lo_xml = lo_files->read_xml( ).
li_obj = create_object( is_item = ls_item
@ -13412,7 +13589,7 @@ CLASS lcl_objects IMPLEMENTATION.
CONTINUE.
ENDIF.
li_obj->deserialize( iv_package = iv_package
li_obj->deserialize( iv_package = io_repo->get_package( )
io_xml = lo_xml ).
ENDLOOP.
@ -13420,11 +13597,11 @@ CLASS lcl_objects IMPLEMENTATION.
lcl_objects_activation=>activate( ).
LOOP AT lt_late ASSIGNING <ls_late>.
<ls_late>-obj->deserialize( iv_package = iv_package
<ls_late>-obj->deserialize( iv_package = io_repo->get_package( )
io_xml = <ls_late>-xml ).
ENDLOOP.
update_package_tree( iv_package ).
update_package_tree( io_repo->get_package( ) ).
ENDMETHOD. "deserialize
@ -14536,174 +14713,6 @@ CLASS lcl_persistence IMPLEMENTATION.
ENDCLASS. "lcl_persistence IMPLEMENTATION
CLASS lcl_persistence_db DEFINITION FINAL.
PUBLIC SECTION.
CONSTANTS:
c_tabname TYPE tabname VALUE 'ZABAPGIT',
c_lock TYPE viewname VALUE 'EZABAPGIT'.
TYPES: ty_type TYPE c LENGTH 12.
TYPES: ty_value TYPE c LENGTH 12.
TYPES: BEGIN OF ty_content,
type TYPE ty_type,
value TYPE ty_value,
data_str TYPE string,
END OF ty_content,
tt_content TYPE SORTED TABLE OF ty_content WITH UNIQUE KEY value.
METHODS list_by_type
IMPORTING iv_type TYPE ty_type
RETURNING VALUE(rt_content) TYPE tt_content.
METHODS list
RETURNING VALUE(rt_content) TYPE tt_content.
METHODS add
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
iv_data TYPE ty_content-data_str
RAISING lcx_exception.
METHODS delete
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
RAISING lcx_exception.
METHODS update
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
iv_data TYPE ty_content-data_str
RAISING lcx_exception.
METHODS modify
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
iv_data TYPE ty_content-data_str
RAISING lcx_exception.
METHODS read
IMPORTING iv_type TYPE ty_type
iv_value TYPE ty_content-value
RETURNING VALUE(rv_data) TYPE ty_content-data_str
RAISING lcx_not_found.
METHODS lock
IMPORTING iv_mode TYPE enqmode DEFAULT 'E'
iv_type TYPE ty_type
iv_value TYPE ty_content-value
RAISING lcx_exception.
ENDCLASS.
CLASS lcl_persistence_repo DEFINITION FINAL.
PUBLIC SECTION.
TYPES: BEGIN OF ty_repo_xml,
url TYPE string,
branch_name TYPE string,
sha1 TYPE ty_sha1,
package TYPE devclass,
offline TYPE sap_bool,
END OF ty_repo_xml.
TYPES: BEGIN OF ty_repo,
key TYPE lcl_persistence_db=>ty_value.
INCLUDE TYPE ty_repo_xml.
TYPES: END OF ty_repo.
TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY.
METHODS constructor.
METHODS list
RETURNING VALUE(rt_repos) TYPE tt_repo
RAISING lcx_exception.
METHODS update
IMPORTING iv_key TYPE ty_repo-key
iv_branch_sha1 TYPE ty_sha1
RAISING lcx_exception.
METHODS add
IMPORTING iv_url TYPE string
iv_branch_name TYPE string
iv_branch TYPE ty_sha1 OPTIONAL
iv_package TYPE devclass
iv_offline TYPE sap_bool DEFAULT abap_false
RETURNING VALUE(rv_key) TYPE ty_repo-key
RAISING lcx_exception.
METHODS delete
IMPORTING iv_key TYPE ty_repo-key
RAISING lcx_exception.
METHODS read
IMPORTING iv_key TYPE ty_repo-key
RETURNING VALUE(rs_repo) TYPE ty_repo
RAISING lcx_exception
lcx_not_found.
METHODS lock
IMPORTING iv_mode TYPE enqmode
iv_key TYPE ty_repo-key
RAISING lcx_exception.
PRIVATE SECTION.
CONSTANTS c_type_repo TYPE lcl_persistence_db=>ty_type VALUE 'REPO'.
DATA: mo_db TYPE REF TO lcl_persistence_db.
METHODS from_xml
IMPORTING iv_repo_xml_string TYPE string
RETURNING VALUE(rs_repo) TYPE ty_repo_xml
RAISING lcx_exception.
METHODS to_xml
IMPORTING is_repo TYPE ty_repo
RETURNING VALUE(rv_repo_xml_string) TYPE string.
METHODS get_next_id
RETURNING VALUE(rv_next_repo_id) TYPE lcl_persistence_db=>ty_content-value
RAISING lcx_exception.
ENDCLASS.
*----------------------------------------------------------------------*
* CLASS lcl_repo DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_repo DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS:
constructor
IMPORTING is_data TYPE lcl_persistence_repo=>ty_repo,
get_key
RETURNING VALUE(rv_key) TYPE lcl_persistence_db=>ty_value,
get_name
RETURNING VALUE(rv_name) TYPE string
RAISING lcx_exception,
get_files_local
RETURNING VALUE(rt_files) TYPE ty_files_tt
RAISING lcx_exception,
get_package
RETURNING VALUE(rv_package) TYPE lcl_persistence_repo=>ty_repo-package,
delete
RAISING lcx_exception,
refresh
RAISING lcx_exception,
is_offline
RETURNING VALUE(rv_offline) TYPE abap_bool
RAISING lcx_exception.
PROTECTED SECTION.
DATA: mt_local TYPE ty_files_tt,
ms_data TYPE lcl_persistence_repo=>ty_repo.
ENDCLASS. "lcl_repo DEFINITION
CLASS lcl_stage DEFINITION FINAL.
PUBLIC SECTION.
@ -14783,14 +14792,11 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
get_sha1_remote
RETURNING VALUE(rv_sha1) TYPE lcl_persistence_repo=>ty_repo-sha1
RAISING lcx_exception,
get_files_remote
RETURNING VALUE(rt_files) TYPE ty_files_tt
RAISING lcx_exception,
get_files_remote REDEFINITION,
get_objects
RETURNING VALUE(rt_objects) TYPE lcl_git_pack=>ty_objects_tt
RAISING lcx_exception,
deserialize
RAISING lcx_exception,
deserialize REDEFINITION,
status
RETURNING VALUE(rt_results) TYPE lcl_file_status=>ty_results_tt
RAISING lcx_exception,
@ -14801,10 +14807,9 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
PRIVATE SECTION.
DATA:
mt_files_remote TYPE ty_files_tt,
mt_objects TYPE lcl_git_pack=>ty_objects_tt,
mv_branch TYPE ty_sha1,
mv_initialized TYPE abap_bool.
mt_objects TYPE lcl_git_pack=>ty_objects_tt,
mv_branch TYPE ty_sha1,
mv_initialized TYPE abap_bool.
METHODS:
initialize
@ -14877,6 +14882,11 @@ ENDCLASS.
*----------------------------------------------------------------------*
CLASS lcl_repo_offline DEFINITION INHERITING FROM lcl_repo FINAL.
PUBLIC SECTION.
METHODS:
set_files_remote
IMPORTING it_files TYPE ty_files_tt.
ENDCLASS. "lcl_repo_offline DEFINITION
CLASS ltcl_git_porcelain DEFINITION DEFERRED.
@ -15161,6 +15171,12 @@ ENDCLASS. "lcl_gui DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_repo_offline IMPLEMENTATION.
METHOD set_files_remote.
mt_remote = it_files.
ENDMETHOD.
ENDCLASS. "lcl_repo_offline IMPLEMENTATION
*----------------------------------------------------------------------*
@ -15248,7 +15264,7 @@ CLASS lcl_repo_online IMPLEMENTATION.
initialize( ).
rt_results = lcl_file_status=>status( it_files = mt_files_remote
rt_results = lcl_file_status=>status( it_files = mt_remote
iv_package = get_package( ) ).
ENDMETHOD. "status
@ -15257,8 +15273,7 @@ CLASS lcl_repo_online IMPLEMENTATION.
initialize( ).
lcl_objects=>deserialize( it_files = mt_files_remote
iv_package = get_package( ) ).
super->deserialize( ).
set_sha1( mv_branch ).
@ -15269,7 +15284,7 @@ CLASS lcl_repo_online IMPLEMENTATION.
super->refresh( ).
lcl_git_porcelain=>pull( EXPORTING io_repo = me
IMPORTING et_files = mt_files_remote
IMPORTING et_files = mt_remote
et_objects = mt_objects
ev_branch = mv_branch ).
@ -15286,7 +15301,7 @@ CLASS lcl_repo_online IMPLEMENTATION.
METHOD get_files_remote.
initialize( ).
rt_files = mt_files_remote.
rt_files = mt_remote.
ENDMETHOD. "get_files
METHOD get_objects.
@ -15353,6 +15368,16 @@ CLASS lcl_repo IMPLEMENTATION.
ENDMETHOD. "constructor
METHOD get_files_remote.
rt_files = mt_remote.
ENDMETHOD.
METHOD deserialize.
lcl_objects=>deserialize( me ).
ENDMETHOD.
METHOD get_files_local.
DATA: lt_tadir TYPE lcl_tadir=>ty_tadir_tt,
@ -16490,28 +16515,25 @@ CLASS lcl_zip IMPLEMENTATION.
lo_repo = lcl_repo_srv=>get( iv_key ).
export( iv_package = lo_repo->get_package( )
iv_zip = iv_zip ).
iv_zip = iv_zip ).
ENDMETHOD. "export_key
METHOD import.
DATA: lt_files TYPE ty_files_tt,
lo_repo TYPE REF TO lcl_repo.
DATA: lo_repo TYPE REF TO lcl_repo_offline.
lo_repo = lcl_repo_srv=>get( iv_key ).
lt_files = unzip_file( file_upload( ) ).
lcl_objects=>deserialize( it_files = lt_files
iv_package = lo_repo->get_package( ) ).
lo_repo ?= lcl_repo_srv=>get( iv_key ).
lo_repo->set_files_remote( unzip_file( file_upload( ) ) ).
lo_repo->deserialize( ).
lcl_gui=>render( ).
ENDMETHOD. "import
METHOD export.
* todo, align this method with lcl_repo->get_files_local()
DATA: lt_tadir TYPE lcl_tadir=>ty_tadir_tt,
ls_item TYPE ty_item,
@ -19044,7 +19066,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
ro_html->add( '<div class="mixedbar right menu">' ).
IF go_user->is_hidden( iv_key ) = abap_true.
ro_html->add( '<a class="menu_end" href="sapevent:unhide?' && iv_key && '">Unhide</a>' ).
ro_html->add( '<a class="menu_end" href="sapevent:unhide?' && iv_key && '">Show</a>' ).
ELSE.
ro_html->add( '<a href="sapevent:remove?' && iv_key && '">Remove</a>' ).
ro_html->add( '<a href="sapevent:uninstall?' && iv_key && '">Uninstall</a>' ).