late deserialization #206, few changes

This commit is contained in:
larshp 2016-05-14 06:36:21 +00:00
parent d913fe66d2
commit dd883aca0e

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.5.1'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.5.2'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)
@ -1139,8 +1139,7 @@ CLASS lcl_xml DEFINITION ABSTRACT.
CONSTANTS: c_abapgit_tag TYPE string VALUE 'abapGit' ##NO_TEXT,
c_attr_version TYPE string VALUE 'version' ##NO_TEXT,
c_attr_serializer TYPE string VALUE 'serializer' ##NO_TEXT,
c_attr_serializer_version TYPE string VALUE 'serializer_version' ##NO_TEXT,
c_attr_late_deserialize TYPE string VALUE 'late_deserialize' ##NO_TEXT.
c_attr_serializer_version TYPE string VALUE 'serializer_version' ##NO_TEXT.
METHODS to_xml
IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true
@ -1204,10 +1203,9 @@ CLASS lcl_xml IMPLEMENTATION.
display_xml_error( ).
ENDIF.
* buffer serializer metadata. Git node will be removed lateron
* buffer serializer metadata. Git node will be removed lateron
ms_metadata-class = li_element->get_attribute_ns( c_attr_serializer ).
ms_metadata-version = li_element->get_attribute_ns( c_attr_serializer_version ).
ms_metadata-late_deser = li_element->get_attribute_ns( c_attr_late_deserialize ).
ENDMETHOD. "parse
@ -1372,8 +1370,6 @@ CLASS lcl_xml_output IMPLEMENTATION.
value = is_metadata-class ). "#EC NOTEXT
li_git->set_attribute( name = c_attr_serializer_version
value = is_metadata-version ). "#EC NOTEXT
li_git->set_attribute( name = c_attr_late_deserialize
value = is_metadata-late_deser ). "#EC NOTEXT
ENDIF.
li_git->append_child( li_abap ).
mi_xml_doc->get_root( )->append_child( li_git ).
@ -2503,7 +2499,7 @@ CLASS lcl_objects_super DEFINITION ABSTRACT.
PROTECTED SECTION.
TYPES: BEGIN OF ty_tpool.
INCLUDE TYPE textpool.
INCLUDE TYPE textpool.
TYPES: split TYPE c LENGTH 8.
TYPES: END OF ty_tpool.
@ -13259,15 +13255,21 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD deserialize.
DATA: ls_item TYPE ty_item,
lv_cancel TYPE abap_bool,
li_obj TYPE REF TO lif_object,
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,
lt_late_deser_results TYPE lcl_file_status=>ty_results_tt.
TYPES: BEGIN OF ty_late,
obj TYPE REF TO lif_object,
xml TYPE REF TO lcl_xml_input,
END OF ty_late.
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results.
DATA: ls_item TYPE ty_item,
lv_cancel TYPE abap_bool,
li_obj TYPE REF TO lif_object,
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,
lt_late TYPE TABLE OF ty_late.
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
<ls_late> LIKE LINE OF lt_late.
lcl_objects_activation=>clear( ).
@ -13305,16 +13307,18 @@ CLASS lcl_objects IMPLEMENTATION.
* Analyze XML in order to instantiate the proper serializer
lo_xml = lo_files->read_xml( ).
IF lo_xml->get_metadata( )-late_deser EQ abap_true.
APPEND <ls_result> TO lt_late_deser_results.
CONTINUE.
ENDIF.
li_obj = create_object( is_item = ls_item
is_metadata = lo_xml->get_metadata( ) ).
li_obj = create_object( is_item = ls_item
is_metadata = lo_xml->get_metadata( ) ).
li_obj->mo_files = lo_files.
IF li_obj->get_metadata( )-late_deser = abap_true.
APPEND INITIAL LINE TO lt_late ASSIGNING <ls_late>.
<ls_late>-obj = li_obj.
<ls_late>-xml = lo_xml.
CONTINUE.
ENDIF.
li_obj->deserialize( iv_package = iv_package
io_xml = lo_xml ).
@ -13322,40 +13326,9 @@ CLASS lcl_objects IMPLEMENTATION.
lcl_objects_activation=>activate( ).
LOOP AT lt_late_deser_results ASSIGNING <ls_result>.
show_progress( iv_current = sy-tabix
iv_total = lines( lt_late_deser_results )
iv_obj_name = <ls_result>-obj_name ).
CLEAR ls_item.
ls_item-obj_type = <ls_result>-obj_type.
ls_item-obj_name = <ls_result>-obj_name.
* handle namespaces
REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'.
lv_cancel = check_warning( is_item = ls_item
iv_package = iv_package ).
IF lv_cancel = abap_true.
RETURN.
ENDIF.
CREATE OBJECT lo_files
EXPORTING
is_item = ls_item.
lo_files->set_files( it_files ).
* Analyze XML in order to instantiate the proper serializer
lo_xml = lo_files->read_xml( ).
li_obj = create_object( is_item = ls_item
is_metadata = lo_xml->get_metadata( ) ).
li_obj->mo_files = lo_files.
li_obj->deserialize( iv_package = iv_package
io_xml = lo_xml ).
LOOP AT lt_late ASSIGNING <ls_late>.
<ls_late>-obj->deserialize( iv_package = iv_package
io_xml = <ls_late>-xml ).
ENDLOOP.
update_package_tree( iv_package ).
@ -14541,7 +14514,7 @@ CLASS lcl_persistence_repo DEFINITION FINAL.
TYPES: BEGIN OF ty_repo,
key TYPE lcl_persistence_db=>ty_value.
INCLUDE TYPE ty_repo_xml.
INCLUDE TYPE ty_repo_xml.
TYPES: END OF ty_repo.
TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY.
@ -20543,4 +20516,4 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.
ENDCLASS.