diff --git a/src/xml/package.devc.xml b/src/xml/package.devc.xml
new file mode 100644
index 000000000..6869d5ced
--- /dev/null
+++ b/src/xml/package.devc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ XML
+
+
+
+
diff --git a/src/xml/zcl_abapgit_xml.clas.abap b/src/xml/zcl_abapgit_xml.clas.abap
new file mode 100644
index 000000000..7c4eebcbd
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml.clas.abap
@@ -0,0 +1,161 @@
+CLASS zcl_abapgit_xml DEFINITION
+ PUBLIC
+ ABSTRACT
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS:
+ constructor.
+
+ PROTECTED SECTION.
+ DATA: mi_ixml TYPE REF TO if_ixml,
+ mi_xml_doc TYPE REF TO if_ixml_document,
+ ms_metadata TYPE zif_abapgit_definitions=>ty_metadata.
+
+ 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.
+
+ METHODS to_xml
+ IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true
+ RETURNING VALUE(rv_xml) TYPE string.
+
+ METHODS parse
+ IMPORTING iv_normalize TYPE abap_bool DEFAULT abap_true
+ iv_xml TYPE string
+ RAISING zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ METHODS error
+ IMPORTING ii_parser TYPE REF TO if_ixml_parser
+ RAISING zcx_abapgit_exception.
+
+ METHODS display_xml_error
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+
+
+
+CLASS ZCL_ABAPGIT_XML IMPLEMENTATION.
+
+
+ METHOD constructor.
+ mi_ixml = cl_ixml=>create( ).
+ mi_xml_doc = mi_ixml->create_document( ).
+ ENDMETHOD. "constructor
+
+
+ METHOD display_xml_error.
+
+ DATA: lv_version TYPE string.
+
+
+ lv_version = |abapGit version: { zif_abapgit_definitions=>gc_abap_version }|.
+
+ CALL FUNCTION 'POPUP_TO_INFORM'
+ EXPORTING
+ titel = 'abapGit XML version mismatch'
+ txt1 = 'abapGit XML version mismatch'
+ txt2 = 'See http://larshp.github.io/abapGit/other-xml-mismatch.html'
+ txt3 = lv_version. "#EC NOTEXT
+
+ zcx_abapgit_exception=>raise( 'XML error' ).
+
+ ENDMETHOD. "display_xml_error
+
+
+ METHOD error.
+
+ DATA: lv_error TYPE i,
+ lv_txt1 TYPE string,
+ lv_txt2 TYPE string,
+ lv_txt3 TYPE string,
+ lv_times TYPE i,
+ li_error TYPE REF TO if_ixml_parse_error.
+
+
+ IF ii_parser->num_errors( ) <> 0.
+ lv_times = ii_parser->num_errors( ).
+ DO lv_times TIMES.
+ lv_error = sy-index - 1.
+ li_error = ii_parser->get_error( lv_error ).
+
+ lv_txt1 = li_error->get_column( ).
+ CONCATENATE 'Column:' lv_txt1 INTO lv_txt1. "#EC NOTEXT
+ lv_txt2 = li_error->get_line( ).
+ CONCATENATE 'Line:' lv_txt2 INTO lv_txt2. "#EC NOTEXT
+ lv_txt3 = li_error->get_reason( ).
+
+ CALL FUNCTION 'POPUP_TO_INFORM'
+ EXPORTING
+ titel = 'Error from XML parser' "#EC NOTEXT
+ txt1 = lv_txt1
+ txt2 = lv_txt2
+ txt3 = lv_txt3.
+ ENDDO.
+ ENDIF.
+
+ zcx_abapgit_exception=>raise( 'Error while parsing XML' ).
+ ENDMETHOD. "error
+
+
+ METHOD parse.
+
+ DATA: li_stream_factory TYPE REF TO if_ixml_stream_factory,
+ li_istream TYPE REF TO if_ixml_istream,
+ li_element TYPE REF TO if_ixml_element,
+ li_version TYPE REF TO if_ixml_node,
+ li_parser TYPE REF TO if_ixml_parser.
+
+
+ ASSERT NOT iv_xml IS INITIAL.
+
+ li_stream_factory = mi_ixml->create_stream_factory( ).
+ li_istream = li_stream_factory->create_istream_string( iv_xml ).
+ li_parser = mi_ixml->create_parser( stream_factory = li_stream_factory
+ istream = li_istream
+ document = mi_xml_doc ).
+ li_parser->set_normalizing( iv_normalize ).
+ IF li_parser->parse( ) <> 0.
+ error( li_parser ).
+ ENDIF.
+
+ li_istream->close( ).
+
+
+ li_element = mi_xml_doc->find_from_name_ns( depth = 0 name = c_abapgit_tag ).
+ li_version = li_element->if_ixml_node~get_attributes(
+ )->get_named_item_ns( c_attr_version ) ##no_text.
+ IF li_version->get_value( ) <> zif_abapgit_definitions=>gc_xml_version.
+ display_xml_error( ).
+ ENDIF.
+
+* 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 ).
+
+ ENDMETHOD. "parse
+
+
+ METHOD to_xml.
+* will render to codepage UTF-16
+
+ DATA: li_ostream TYPE REF TO if_ixml_ostream,
+ li_renderer TYPE REF TO if_ixml_renderer,
+ li_streamfactory TYPE REF TO if_ixml_stream_factory.
+
+
+ li_streamfactory = mi_ixml->create_stream_factory( ).
+
+ li_ostream = li_streamfactory->create_ostream_cstring( rv_xml ).
+
+ li_renderer = mi_ixml->create_renderer( ostream = li_ostream
+ document = mi_xml_doc ).
+ li_renderer->set_normalizing( iv_normalize ).
+
+ li_renderer->render( ).
+
+ ENDMETHOD. "to_xml
+ENDCLASS.
diff --git a/src/xml/zcl_abapgit_xml.clas.xml b/src/xml/zcl_abapgit_xml.clas.xml
new file mode 100644
index 000000000..dc1d7ac63
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml.clas.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ ZCL_ABAPGIT_XML
+ 1
+ E
+ XML
+ 2
+ 1
+ X
+ X
+ X
+ X
+
+
+
+
diff --git a/src/xml/zcl_abapgit_xml_input.clas.abap b/src/xml/zcl_abapgit_xml_input.clas.abap
new file mode 100644
index 000000000..5fa245b04
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml_input.clas.abap
@@ -0,0 +1,96 @@
+class ZCL_ABAPGIT_XML_INPUT definition
+ public
+ inheriting from ZCL_ABAPGIT_XML
+ create public .
+
+public section.
+
+ methods CONSTRUCTOR
+ importing
+ !IV_XML type CLIKE
+ raising
+ ZCX_ABAPGIT_EXCEPTION .
+ methods READ
+ importing
+ !IV_NAME type CLIKE
+ changing
+ !CG_DATA type ANY
+ raising
+ ZCX_ABAPGIT_EXCEPTION .
+ methods GET_RAW
+ returning
+ value(RI_RAW) type ref to IF_IXML_DOCUMENT .
+* todo, add read_xml to match add_xml in lcl_xml_output
+ methods GET_METADATA
+ returning
+ value(RS_METADATA) type ZIF_ABAPGIT_DEFINITIONS=>TY_METADATA .
+ PRIVATE SECTION.
+ METHODS: fix_xml.
+
+ENDCLASS.
+
+
+
+CLASS ZCL_ABAPGIT_XML_INPUT IMPLEMENTATION.
+
+
+ METHOD constructor.
+
+ super->constructor( ).
+ parse( iv_xml ).
+ fix_xml( ).
+
+ ENDMETHOD. "constructor
+
+
+ METHOD fix_xml.
+
+ DATA: li_git TYPE REF TO if_ixml_element,
+ li_abap TYPE REF TO if_ixml_node.
+
+
+ li_git ?= mi_xml_doc->find_from_name_ns( depth = 0 name = c_abapgit_tag ).
+ li_abap = li_git->get_first_child( ).
+
+ mi_xml_doc->get_root( )->remove_child( li_git ).
+ mi_xml_doc->get_root( )->append_child( li_abap ).
+
+ ENDMETHOD. "fix_xml
+
+
+ METHOD get_metadata.
+ rs_metadata = ms_metadata.
+ ENDMETHOD. "get_metadata
+
+
+ METHOD get_raw.
+ ri_raw = mi_xml_doc.
+ ENDMETHOD. "get_raw
+
+
+ METHOD read.
+
+ DATA: lx_error TYPE REF TO cx_transformation_error,
+ lt_rtab TYPE abap_trans_resbind_tab.
+
+ FIELD-SYMBOLS: LIKE LINE OF lt_rtab.
+
+ ASSERT NOT iv_name IS INITIAL.
+
+ CLEAR cg_data. "Initialize result to avoid problems with empty values
+
+ APPEND INITIAL LINE TO lt_rtab ASSIGNING .
+ -name = iv_name.
+ GET REFERENCE OF cg_data INTO -value.
+
+ TRY.
+ CALL TRANSFORMATION id
+ OPTIONS value_handling = 'accept_data_loss'
+ SOURCE XML mi_xml_doc
+ RESULT (lt_rtab) ##no_text.
+ CATCH cx_transformation_error INTO lx_error.
+ zcx_abapgit_exception=>raise( lx_error->if_message~get_text( ) ).
+ ENDTRY.
+
+ ENDMETHOD. "read
+ENDCLASS.
diff --git a/src/xml/zcl_abapgit_xml_input.clas.testclasses.abap b/src/xml/zcl_abapgit_xml_input.clas.testclasses.abap
new file mode 100644
index 000000000..569e80909
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml_input.clas.testclasses.abap
@@ -0,0 +1,127 @@
+CLASS ltcl_xml DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
+
+ PUBLIC SECTION.
+ METHODS:
+ up FOR TESTING
+ RAISING zcx_abapgit_exception,
+ empty FOR TESTING
+ RAISING zcx_abapgit_exception,
+ down FOR TESTING
+ RAISING zcx_abapgit_exception.
+
+ TYPES: BEGIN OF st_old,
+ foo TYPE i,
+ bar TYPE c LENGTH 1,
+ END OF st_old.
+
+ TYPES: BEGIN OF st_new,
+ foo TYPE i,
+ bar TYPE c LENGTH 1,
+ moo TYPE f,
+ END OF st_new.
+
+ENDCLASS. "ltcl_Xml
+
+
+CLASS ltcl_xml IMPLEMENTATION.
+
+ METHOD empty.
+
+ DATA: ls_old TYPE st_old,
+ ls_new TYPE st_new,
+ lv_xml TYPE string,
+ lo_input TYPE REF TO zcl_abapgit_xml_input,
+ lo_output TYPE REF TO zcl_abapgit_xml_output.
+
+
+ CLEAR ls_old.
+
+ CREATE OBJECT lo_output.
+ lo_output->add( iv_name = 'DATA'
+ ig_data = ls_old ).
+ lv_xml = lo_output->render( ).
+
+ CREATE OBJECT lo_input
+ EXPORTING
+ iv_xml = lv_xml.
+ lo_input->read( EXPORTING iv_name = 'DATA'
+ CHANGING cg_data = ls_new ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_new-foo
+ exp = ls_old-foo ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_new-bar
+ exp = ls_old-bar ).
+
+ ENDMETHOD.
+
+ METHOD up.
+
+ DATA: ls_old TYPE st_old,
+ ls_new TYPE st_new,
+ lv_xml TYPE string,
+ lo_input TYPE REF TO zcl_abapgit_xml_input,
+ lo_output TYPE REF TO zcl_abapgit_xml_output.
+
+
+ ls_old-foo = 2.
+ ls_old-bar = 'A'.
+
+ CREATE OBJECT lo_output.
+ lo_output->add( iv_name = 'DATA'
+ ig_data = ls_old ).
+ lv_xml = lo_output->render( ).
+
+ CREATE OBJECT lo_input
+ EXPORTING
+ iv_xml = lv_xml.
+ lo_input->read( EXPORTING iv_name = 'DATA'
+ CHANGING cg_data = ls_new ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_new-foo
+ exp = ls_old-foo ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_new-bar
+ exp = ls_old-bar ).
+
+ ENDMETHOD.
+
+ METHOD down.
+
+ DATA: ls_old TYPE st_old,
+ ls_new TYPE st_new,
+ lv_xml TYPE string,
+ lo_input TYPE REF TO zcl_abapgit_xml_input,
+ lo_output TYPE REF TO zcl_abapgit_xml_output.
+
+
+ ls_new-foo = 2.
+ ls_new-bar = 'A'.
+ ls_new-moo = 5.
+
+ CREATE OBJECT lo_output.
+ lo_output->add( iv_name = 'DATA'
+ ig_data = ls_new ).
+ lv_xml = lo_output->render( ).
+
+ CREATE OBJECT lo_input
+ EXPORTING
+ iv_xml = lv_xml.
+ lo_input->read( EXPORTING iv_name = 'DATA'
+ CHANGING cg_data = ls_old ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_old-foo
+ exp = ls_new-foo ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_old-bar
+ exp = ls_new-bar ).
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/xml/zcl_abapgit_xml_input.clas.xml b/src/xml/zcl_abapgit_xml_input.clas.xml
new file mode 100644
index 000000000..ccdc7a18d
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml_input.clas.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ ZCL_ABAPGIT_XML_INPUT
+ 1
+ E
+ XML Input
+ 2
+ 1
+ X
+ X
+ X
+ X
+
+
+
+
diff --git a/src/xml/zcl_abapgit_xml_output.clas.abap b/src/xml/zcl_abapgit_xml_output.clas.abap
new file mode 100644
index 000000000..8c6f2c914
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml_output.clas.abap
@@ -0,0 +1,147 @@
+CLASS zcl_abapgit_xml_output DEFINITION
+ PUBLIC
+ INHERITING FROM zcl_abapgit_xml
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS add
+ IMPORTING
+ !iv_name TYPE clike
+ !ig_data TYPE any
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_raw
+ IMPORTING
+ !ii_raw TYPE REF TO if_ixml_element .
+ METHODS add_xml
+ IMPORTING
+ !iv_name TYPE clike
+ !ii_xml TYPE REF TO if_ixml_element .
+ METHODS build_asx_node
+ RETURNING
+ VALUE(ri_element) TYPE REF TO if_ixml_element .
+ METHODS render
+ IMPORTING
+ !iv_normalize TYPE sap_bool DEFAULT abap_true
+ !is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
+ RETURNING
+ VALUE(rv_xml) TYPE string .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mi_raw TYPE REF TO if_ixml_element.
+
+ENDCLASS.
+
+
+
+CLASS ZCL_ABAPGIT_XML_OUTPUT IMPLEMENTATION.
+
+
+ METHOD add.
+
+ DATA: li_node TYPE REF TO if_ixml_node,
+ li_doc TYPE REF TO if_ixml_document,
+ lt_stab TYPE abap_trans_srcbind_tab.
+
+ FIELD-SYMBOLS: LIKE LINE OF lt_stab.
+
+
+ ASSERT NOT iv_name IS INITIAL.
+
+ IF ig_data IS INITIAL.
+ RETURN.
+ ENDIF.
+
+ APPEND INITIAL LINE TO lt_stab ASSIGNING .
+ -name = iv_name.
+ GET REFERENCE OF ig_data INTO -value.
+
+ li_doc = cl_ixml=>create( )->create_document( ).
+
+ CALL TRANSFORMATION id
+ OPTIONS initial_components = 'suppress'
+ SOURCE (lt_stab)
+ RESULT XML li_doc.
+
+ li_node = mi_xml_doc->get_root( )->get_first_child( ).
+ IF li_node IS BOUND.
+ mi_xml_doc->get_root( )->get_first_child( )->get_first_child( )->append_child(
+ li_doc->get_root( )->get_first_child( )->get_first_child( )->get_first_child( ) ).
+ ELSE.
+ mi_xml_doc->get_root( )->append_child( li_doc->get_root( )->get_first_child( ) ).
+ ENDIF.
+
+ ENDMETHOD.
+
+
+ METHOD add_xml.
+
+ DATA: li_element TYPE REF TO if_ixml_element.
+
+ li_element = mi_xml_doc->create_element( iv_name ).
+ li_element->append_child( ii_xml ).
+
+ mi_xml_doc->get_root( )->get_first_child( )->get_first_child( )->append_child( li_element ).
+
+ ENDMETHOD.
+
+
+ METHOD build_asx_node.
+
+ DATA: li_attr TYPE REF TO if_ixml_attribute.
+
+
+ ri_element = mi_xml_doc->create_element_ns(
+ name = 'abap'
+ prefix = 'asx' ).
+
+ li_attr = mi_xml_doc->create_attribute_ns( 'version' ).
+ li_attr->if_ixml_node~set_value( '1.0' ).
+ ri_element->set_attribute_node_ns( li_attr ).
+
+ li_attr = mi_xml_doc->create_attribute_ns(
+ name = 'asx'
+ prefix = 'xmlns' ).
+ li_attr->if_ixml_node~set_value( 'http://www.sap.com/abapxml' ).
+ ri_element->set_attribute_node_ns( li_attr ).
+
+ ENDMETHOD.
+
+
+ METHOD render.
+
+ DATA: li_git TYPE REF TO if_ixml_element,
+ li_abap TYPE REF TO if_ixml_element.
+
+
+ IF mi_raw IS INITIAL.
+ li_abap ?= mi_xml_doc->get_root( )->get_first_child( ).
+ mi_xml_doc->get_root( )->remove_child( li_abap ).
+ IF li_abap IS INITIAL.
+ li_abap = build_asx_node( ).
+ ENDIF.
+ ELSE.
+ li_abap = mi_raw.
+ ENDIF.
+
+ li_git = mi_xml_doc->create_element( c_abapgit_tag ).
+ li_git->set_attribute( name = c_attr_version value = zif_abapgit_definitions=>gc_xml_version ).
+ IF NOT is_metadata IS INITIAL.
+ li_git->set_attribute( name = c_attr_serializer
+ value = is_metadata-class ).
+ li_git->set_attribute( name = c_attr_serializer_version
+ value = is_metadata-version ).
+ ENDIF.
+ li_git->append_child( li_abap ).
+ mi_xml_doc->get_root( )->append_child( li_git ).
+
+ rv_xml = to_xml( iv_normalize ).
+
+ ENDMETHOD. "render
+
+
+ METHOD set_raw.
+ mi_raw = ii_raw.
+ ENDMETHOD. "set_raw
+ENDCLASS.
diff --git a/src/xml/zcl_abapgit_xml_output.clas.xml b/src/xml/zcl_abapgit_xml_output.clas.xml
new file mode 100644
index 000000000..5ec4a45bd
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml_output.clas.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZCL_ABAPGIT_XML_OUTPUT
+ 1
+ E
+ XML Output
+ 2
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/xml/zcl_abapgit_xml_pretty.clas.abap b/src/xml/zcl_abapgit_xml_pretty.clas.abap
new file mode 100644
index 000000000..fe54a726b
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml_pretty.clas.abap
@@ -0,0 +1,63 @@
+CLASS zcl_abapgit_xml_pretty DEFINITION
+ PUBLIC
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ CLASS-METHODS: print
+ IMPORTING iv_xml TYPE string
+ iv_ignore_errors TYPE abap_bool DEFAULT abap_true
+ iv_unpretty TYPE abap_bool DEFAULT abap_false
+ RETURNING VALUE(rv_xml) TYPE string
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+
+
+
+CLASS ZCL_ABAPGIT_XML_PRETTY IMPLEMENTATION.
+
+
+ METHOD print.
+
+ DATA: li_ixml TYPE REF TO if_ixml,
+ li_xml_doc TYPE REF TO if_ixml_document,
+ li_stream_factory TYPE REF TO if_ixml_stream_factory,
+ li_istream TYPE REF TO if_ixml_istream,
+ li_parser TYPE REF TO if_ixml_parser,
+ li_ostream TYPE REF TO if_ixml_ostream,
+ li_renderer TYPE REF TO if_ixml_renderer.
+
+
+ ASSERT NOT iv_xml IS INITIAL.
+
+ li_ixml = cl_ixml=>create( ).
+ li_xml_doc = li_ixml->create_document( ).
+
+ li_stream_factory = li_ixml->create_stream_factory( ).
+ li_istream = li_stream_factory->create_istream_string( iv_xml ).
+ li_parser = li_ixml->create_parser( stream_factory = li_stream_factory
+ istream = li_istream
+ document = li_xml_doc ).
+ li_parser->set_normalizing( abap_true ).
+ IF li_parser->parse( ) <> 0.
+ IF iv_ignore_errors = abap_true.
+ rv_xml = iv_xml.
+ RETURN.
+ ELSE.
+ zcx_abapgit_exception=>raise( 'error parsing xml' ).
+ ENDIF.
+ ENDIF.
+ li_istream->close( ).
+
+
+ li_ostream = li_stream_factory->create_ostream_cstring( rv_xml ).
+
+ li_renderer = li_ixml->create_renderer( ostream = li_ostream
+ document = li_xml_doc ).
+
+ li_renderer->set_normalizing( boolc( iv_unpretty = abap_false ) ).
+
+ li_renderer->render( ).
+
+ ENDMETHOD.
+ENDCLASS.
diff --git a/src/xml/zcl_abapgit_xml_pretty.clas.xml b/src/xml/zcl_abapgit_xml_pretty.clas.xml
new file mode 100644
index 000000000..e18cd5bf3
--- /dev/null
+++ b/src/xml/zcl_abapgit_xml_pretty.clas.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZCL_ABAPGIT_XML_PRETTY
+ 1
+ E
+ XML pretty printer
+ 2
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap
index 14522f435..3e6f65bd0 100644
--- a/src/zabapgit_dot_abapgit.prog.abap
+++ b/src/zabapgit_dot_abapgit.prog.abap
@@ -146,7 +146,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
SOURCE data = is_data
RESULT XML rv_xml.
- rv_xml = lcl_xml_pretty=>print( rv_xml ).
+ rv_xml = zcl_abapgit_xml_pretty=>print( rv_xml ).
REPLACE FIRST OCCURRENCE
OF REGEX '<\?xml version="1\.0" encoding="[\w-]+"\?>'
diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap
index fc616d4c2..13b6bd3f9 100644
--- a/src/zabapgit_object_clas.prog.abap
+++ b/src/zabapgit_object_clas.prog.abap
@@ -23,21 +23,21 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
METHODS:
deserialize_abap
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
RAISING zcx_abapgit_exception,
deserialize_docu
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception,
deserialize_tpool
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception,
deserialize_sotr
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
RAISING zcx_abapgit_exception,
serialize_xml
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception.
ENDCLASS. "lcl_object_dtel DEFINITION
diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap
index 8bc29586a..cc356fc8a 100644
--- a/src/zabapgit_object_doma.prog.abap
+++ b/src/zabapgit_object_doma.prog.abap
@@ -33,10 +33,10 @@ CLASS lcl_object_doma DEFINITION INHERITING FROM lcl_objects_super FINAL.
METHODS:
serialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception,
deserialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
is_dd01v TYPE dd01v
it_dd07v TYPE dd07v_tab
RAISING zcx_abapgit_exception.
diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap
index cfa49b27a..72f08bf72 100644
--- a/src/zabapgit_object_dtel.prog.abap
+++ b/src/zabapgit_object_dtel.prog.abap
@@ -27,10 +27,10 @@ CLASS lcl_object_dtel DEFINITION INHERITING FROM lcl_objects_super FINAL.
METHODS:
serialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception,
deserialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
is_dd04v TYPE dd04v
RAISING zcx_abapgit_exception.
diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap
index e23de3450..7246423a3 100644
--- a/src/zabapgit_object_enho.prog.abap
+++ b/src/zabapgit_object_enho.prog.abap
@@ -8,11 +8,11 @@ INTERFACE lif_object_enho.
METHODS:
deserialize
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
RAISING zcx_abapgit_exception,
serialize
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
ii_enh_tool TYPE REF TO if_enh_tool
RAISING zcx_abapgit_exception.
@@ -269,12 +269,12 @@ CLASS lcl_object_enho_clif DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
deserialize
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
io_clif TYPE REF TO cl_enh_tool_clif
RAISING zcx_abapgit_exception
cx_enh_root,
serialize
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
io_files TYPE REF TO lcl_objects_files
io_clif TYPE REF TO cl_enh_tool_clif
RAISING zcx_abapgit_exception.
diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap
index c598667f6..5d44bf543 100644
--- a/src/zabapgit_object_enhs.prog.abap
+++ b/src/zabapgit_object_enhs.prog.abap
@@ -8,13 +8,13 @@ INTERFACE lif_object_enhs.
METHODS:
deserialize
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
ii_enh_spot_tool TYPE REF TO if_enh_spot_tool
RAISING zcx_abapgit_exception,
serialize
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
ii_enh_spot_tool TYPE REF TO if_enh_spot_tool
RAISING zcx_abapgit_exception.
diff --git a/src/zabapgit_object_form.prog.abap b/src/zabapgit_object_form.prog.abap
index 2764c1ea5..04e6418ef 100644
--- a/src/zabapgit_object_form.prog.abap
+++ b/src/zabapgit_object_form.prog.abap
@@ -192,7 +192,7 @@ CLASS lcl_object_form IMPLEMENTATION.
DATA: ls_form_data TYPE tys_form_data.
DATA: lt_text_header TYPE tyt_text_header.
DATA: lt_lines TYPE tyt_lines.
- DATA: lo_xml TYPE REF TO lcl_xml_output.
+ DATA: lo_xml TYPE REF TO zcl_abapgit_xml_output.
DATA: lv_form_found TYPE flag.
FIELD-SYMBOLS: LIKE LINE OF lt_text_header.
@@ -315,7 +315,7 @@ CLASS lcl_object_form IMPLEMENTATION.
METHOD _extract_tdlines.
DATA lv_string TYPE string.
- DATA lo_xml TYPE REF TO lcl_xml_input.
+ DATA lo_xml TYPE REF TO zcl_abapgit_xml_input.
lv_string = mo_files->read_string( iv_extra =
_build_extra_from_header( is_form_data-form_header )
@@ -353,7 +353,7 @@ CLASS lcl_object_form IMPLEMENTATION.
METHOD _compress_lines.
DATA lv_string TYPE string.
- DATA lo_xml TYPE REF TO lcl_xml_output.
+ DATA lo_xml TYPE REF TO zcl_abapgit_xml_output.
CREATE OBJECT lo_xml.
lo_xml->add( iv_name = c_objectname_tdlines
diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap
index 30a36533e..3976be30c 100644
--- a/src/zabapgit_object_fugr.prog.abap
+++ b/src/zabapgit_object_fugr.prog.abap
@@ -55,11 +55,11 @@ CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL.
RAISING zcx_abapgit_exception.
METHODS serialize_xml
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception.
METHODS deserialize_xml
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
RAISING zcx_abapgit_exception.
@@ -67,7 +67,7 @@ CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL.
RAISING zcx_abapgit_exception.
METHODS deserialize_includes
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
RAISING zcx_abapgit_exception.
@@ -299,7 +299,7 @@ CLASS lcl_object_fugr IMPLEMENTATION.
METHOD deserialize_includes.
- DATA: lo_xml TYPE REF TO lcl_xml_input,
+ DATA: lo_xml TYPE REF TO zcl_abapgit_xml_input,
ls_progdir TYPE ty_progdir,
lt_includes TYPE rso_t_objnm,
lt_tpool TYPE textpool_table,
diff --git a/src/zabapgit_object_intf.prog.abap b/src/zabapgit_object_intf.prog.abap
index 5e72b6093..600a6e69f 100644
--- a/src/zabapgit_object_intf.prog.abap
+++ b/src/zabapgit_object_intf.prog.abap
@@ -17,19 +17,19 @@ CLASS lcl_object_intf DEFINITION FINAL INHERITING FROM lcl_objects_program.
iv_language TYPE spras.
PROTECTED SECTION.
METHODS deserialize_abap
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
RAISING zcx_abapgit_exception.
METHODS deserialize_docu
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception.
PRIVATE SECTION.
DATA mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc.
METHODS serialize_xml
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception.
ENDCLASS. "lcl_object_intf DEFINITION
diff --git a/src/zabapgit_object_msag.prog.abap b/src/zabapgit_object_msag.prog.abap
index 578e0d32d..b252a25c3 100644
--- a/src/zabapgit_object_msag.prog.abap
+++ b/src/zabapgit_object_msag.prog.abap
@@ -23,10 +23,10 @@ CLASS lcl_object_msag DEFINITION INHERITING FROM lcl_objects_super FINAL.
METHODS:
serialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception,
deserialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception.
diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap
index 0c4377d08..0ff0fae55 100644
--- a/src/zabapgit_object_prog.prog.abap
+++ b/src/zabapgit_object_prog.prog.abap
@@ -22,10 +22,10 @@ CLASS lcl_object_prog DEFINITION INHERITING FROM lcl_objects_program FINAL.
METHODS:
serialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception,
deserialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception.
ENDCLASS. "lcl_object_prog DEFINITION
diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap
index db05a0a32..95533da7e 100644
--- a/src/zabapgit_object_tabl.prog.abap
+++ b/src/zabapgit_object_tabl.prog.abap
@@ -457,8 +457,8 @@ CLASS lcl_object_tabl IMPLEMENTATION.
METHOD lif_object~compare_to_remote_version.
DATA: lo_table_validation TYPE REF TO lcl_object_tabl_valid,
- lo_local_version_output TYPE REF TO lcl_xml_output,
- lo_local_version_input TYPE REF TO lcl_xml_input,
+ lo_local_version_output TYPE REF TO zcl_abapgit_xml_output,
+ lo_local_version_input TYPE REF TO zcl_abapgit_xml_input,
lv_validation_text TYPE string.
CREATE OBJECT lo_local_version_output.
diff --git a/src/zabapgit_object_tabl_valid.prog.abap b/src/zabapgit_object_tabl_valid.prog.abap
index c2f01197b..56132088e 100644
--- a/src/zabapgit_object_tabl_valid.prog.abap
+++ b/src/zabapgit_object_tabl_valid.prog.abap
@@ -6,8 +6,8 @@ CLASS lcl_object_tabl_valid DEFINITION FINAL.
PUBLIC SECTION.
METHODS validate
IMPORTING
- io_remote_version TYPE REF TO lcl_xml_input
- io_local_version TYPE REF TO lcl_xml_input
+ io_remote_version TYPE REF TO zcl_abapgit_xml_input
+ io_local_version TYPE REF TO zcl_abapgit_xml_input
RETURNING
VALUE(rv_message) TYPE string
RAISING
@@ -105,10 +105,10 @@ CLASS lct_table_validation DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION S
zcx_abapgit_exception.
DATA: mo_table_validator TYPE REF TO lcl_object_tabl_valid,
- mo_previous_version_out_xml TYPE REF TO lcl_xml_output,
- mo_previous_version_input_xml TYPE REF TO lcl_xml_input,
- mo_current_version_out_xml TYPE REF TO lcl_xml_output,
- mo_current_version_input_xml TYPE REF TO lcl_xml_input,
+ mo_previous_version_out_xml TYPE REF TO zcl_abapgit_xml_output,
+ mo_previous_version_input_xml TYPE REF TO zcl_abapgit_xml_input,
+ mo_current_version_out_xml TYPE REF TO zcl_abapgit_xml_output,
+ mo_current_version_input_xml TYPE REF TO zcl_abapgit_xml_input,
mt_previous_table_fields TYPE TABLE OF dd03p,
mt_current_table_fields TYPE TABLE OF dd03p,
mv_validation_message TYPE string.
diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap
index 749455808..0e1cf330d 100644
--- a/src/zabapgit_object_tran.prog.abap
+++ b/src/zabapgit_object_tran.prog.abap
@@ -40,11 +40,11 @@ CLASS lcl_object_tran DEFINITION INHERITING FROM lcl_objects_super FINAL.
CHANGING cg_value TYPE any,
serialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception,
deserialize_texts
- IMPORTING io_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception.
ENDCLASS. "lcl_object_TRAN DEFINITION
diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap
index 2f87d06ce..20ae7e514 100644
--- a/src/zabapgit_objects.prog.abap
+++ b/src/zabapgit_objects.prog.abap
@@ -181,7 +181,7 @@ CLASS lcl_objects_files DEFINITION.
RAISING zcx_abapgit_exception,
add_xml
IMPORTING iv_extra TYPE clike OPTIONAL
- io_xml TYPE REF TO lcl_xml_output
+ io_xml TYPE REF TO zcl_abapgit_xml_output
iv_normalize TYPE sap_bool DEFAULT abap_true
is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
RAISING zcx_abapgit_exception,
@@ -193,7 +193,7 @@ CLASS lcl_objects_files DEFINITION.
RAISING zcx_abapgit_exception ##called,
read_xml
IMPORTING iv_extra TYPE clike OPTIONAL
- RETURNING VALUE(ro_xml) TYPE REF TO lcl_xml_input
+ RETURNING VALUE(ro_xml) TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception,
read_abap
IMPORTING iv_extra TYPE clike OPTIONAL
@@ -276,11 +276,11 @@ INTERFACE lif_object.
METHODS:
serialize
- IMPORTING io_xml TYPE REF TO lcl_xml_output
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception,
deserialize
IMPORTING iv_package TYPE devclass
- io_xml TYPE REF TO lcl_xml_input
+ io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception,
delete
RAISING zcx_abapgit_exception,
@@ -300,7 +300,7 @@ INTERFACE lif_object.
RAISING zcx_abapgit_exception.
METHODS:
compare_to_remote_version
- IMPORTING io_remote_version_xml TYPE REF TO lcl_xml_input
+ IMPORTING io_remote_version_xml TYPE REF TO zcl_abapgit_xml_input
RETURNING VALUE(ro_comparison_result) TYPE REF TO lif_comparison_result
RAISING zcx_abapgit_exception.
@@ -485,7 +485,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
* xml-object in the plugin can only be typed to object.
* ABAP does not perform implicit type casts (also if compatible) in signatures,
* therefore this method's signature is typed ref to object
- DATA lo_xml TYPE REF TO lcl_xml_output.
+ DATA lo_xml TYPE REF TO zcl_abapgit_xml_output.
lo_xml ?= io_xml.
@@ -845,7 +845,7 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super.
END OF ty_progdir.
METHODS serialize_program
- IMPORTING io_xml TYPE REF TO lcl_xml_output OPTIONAL
+ IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output OPTIONAL
is_item TYPE zif_abapgit_definitions=>ty_item
io_files TYPE REF TO lcl_objects_files
iv_program TYPE programm OPTIONAL
@@ -1003,7 +1003,7 @@ CLASS lcl_objects_program IMPLEMENTATION.
lt_source TYPE TABLE OF abaptxt255,
lt_tpool TYPE textpool_table,
ls_tpool LIKE LINE OF lt_tpool,
- lo_xml TYPE REF TO lcl_xml_output.
+ lo_xml TYPE REF TO zcl_abapgit_xml_output.
IF iv_program IS INITIAL.
lv_program_name = is_item-obj_name.
@@ -2275,7 +2275,7 @@ CLASS lcl_objects DEFINITION FINAL.
TYPES: BEGIN OF ty_deserialization,
obj TYPE REF TO lif_object,
- xml TYPE REF TO lcl_xml_input,
+ xml TYPE REF TO zcl_abapgit_xml_input,
package TYPE devclass,
item TYPE zif_abapgit_definitions=>ty_item,
END OF ty_deserialization.
diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap
index aa0d8ea36..85c74a31b 100644
--- a/src/zabapgit_objects_impl.prog.abap
+++ b/src/zabapgit_objects_impl.prog.abap
@@ -343,7 +343,7 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD serialize.
DATA: li_obj TYPE REF TO lif_object,
- lo_xml TYPE REF TO lcl_xml_output,
+ lo_xml TYPE REF TO zcl_abapgit_xml_output,
lo_files TYPE REF TO lcl_objects_files.
@@ -430,7 +430,7 @@ CLASS lcl_objects IMPLEMENTATION.
lt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
lv_package TYPE devclass,
lo_files TYPE REF TO lcl_objects_files,
- lo_xml TYPE REF TO lcl_xml_input,
+ lo_xml TYPE REF TO zcl_abapgit_xml_input,
lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
lt_ddic TYPE TABLE OF ty_deserialization,
lt_rest TYPE TABLE OF ty_deserialization,
@@ -572,7 +572,7 @@ CLASS lcl_objects IMPLEMENTATION.
* only the main XML file is used for comparison
DATA: ls_remote_file TYPE zif_abapgit_definitions=>ty_file,
- lo_remote_version TYPE REF TO lcl_xml_input,
+ lo_remote_version TYPE REF TO zcl_abapgit_xml_input,
lv_count TYPE i,
lo_comparison_result TYPE REF TO lif_comparison_result.
diff --git a/src/zabapgit_page_db.prog.abap b/src/zabapgit_page_db.prog.abap
index a30a12672..32474e1a6 100644
--- a/src/zabapgit_page_db.prog.abap
+++ b/src/zabapgit_page_db.prog.abap
@@ -58,7 +58,7 @@ CLASS lcl_gui_page_db_dis IMPLEMENTATION.
ls_action-type = ms_key-type.
ls_action-value = ms_key-value.
lv_action = lcl_html_action_utils=>dbkey_encode( ls_action ).
- lv_data = lo_highlighter->process_line( lcl_xml_pretty=>print( lv_data ) ).
+ lv_data = lo_highlighter->process_line( zcl_abapgit_xml_pretty=>print( lv_data ) ).
CREATE OBJECT ro_html.
CREATE OBJECT lo_toolbar.
@@ -117,7 +117,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
iv_type = ms_key-type
iv_value = ms_key-value ).
- lv_data = escape( val = lcl_xml_pretty=>print( lv_data )
+ lv_data = escape( val = zcl_abapgit_xml_pretty=>print( lv_data )
format = cl_abap_format=>e_html_attr ).
CREATE OBJECT ro_html.
diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap
index be8ebd3b8..f5a67f5bc 100644
--- a/src/zabapgit_persistence.prog.abap
+++ b/src/zabapgit_persistence.prog.abap
@@ -1006,7 +1006,7 @@ CLASS lcl_persistence_db IMPLEMENTATION.
METHOD validate_and_unprettify_xml.
- rv_xml = lcl_xml_pretty=>print(
+ rv_xml = zcl_abapgit_xml_pretty=>print(
iv_xml = iv_xml
iv_unpretty = abap_true
iv_ignore_errors = abap_false ).
@@ -1836,7 +1836,7 @@ CLASS lcl_settings IMPLEMENTATION.
METHOD get_settings_xml.
- DATA: lr_output TYPE REF TO lcl_xml_output.
+ DATA: lr_output TYPE REF TO zcl_abapgit_xml_output.
CREATE OBJECT lr_output.
@@ -1849,7 +1849,7 @@ CLASS lcl_settings IMPLEMENTATION.
METHOD set_xml_settings.
- DATA: lr_input TYPE REF TO lcl_xml_input.
+ DATA: lr_input TYPE REF TO zcl_abapgit_xml_input.
CREATE OBJECT lr_input EXPORTING iv_xml = iv_settings_xml.
diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap
index e068a0363..3a4ac8df1 100644
--- a/src/zabapgit_unit_test.prog.abap
+++ b/src/zabapgit_unit_test.prog.abap
@@ -376,133 +376,6 @@ CLASS ltcl_git_porcelain IMPLEMENTATION.
ENDCLASS.
-CLASS ltcl_xml DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
-
- PUBLIC SECTION.
- METHODS:
- up FOR TESTING
- RAISING zcx_abapgit_exception,
- empty FOR TESTING
- RAISING zcx_abapgit_exception,
- down FOR TESTING
- RAISING zcx_abapgit_exception.
-
- TYPES: BEGIN OF st_old,
- foo TYPE i,
- bar TYPE c LENGTH 1,
- END OF st_old.
-
- TYPES: BEGIN OF st_new,
- foo TYPE i,
- bar TYPE c LENGTH 1,
- moo TYPE f,
- END OF st_new.
-
-ENDCLASS.
-
-CLASS ltcl_xml IMPLEMENTATION.
-
- METHOD empty.
-
- DATA: ls_old TYPE st_old,
- ls_new TYPE st_new,
- lv_xml TYPE string,
- lo_input TYPE REF TO lcl_xml_input,
- lo_output TYPE REF TO lcl_xml_output.
-
-
- CLEAR ls_old.
-
- CREATE OBJECT lo_output.
- lo_output->add( iv_name = 'DATA'
- ig_data = ls_old ).
- lv_xml = lo_output->render( ).
-
- CREATE OBJECT lo_input
- EXPORTING
- iv_xml = lv_xml.
- lo_input->read( EXPORTING iv_name = 'DATA'
- CHANGING cg_data = ls_new ).
-
- cl_abap_unit_assert=>assert_equals(
- act = ls_new-foo
- exp = ls_old-foo ).
-
- cl_abap_unit_assert=>assert_equals(
- act = ls_new-bar
- exp = ls_old-bar ).
-
- ENDMETHOD.
-
- METHOD up.
-
- DATA: ls_old TYPE st_old,
- ls_new TYPE st_new,
- lv_xml TYPE string,
- lo_input TYPE REF TO lcl_xml_input,
- lo_output TYPE REF TO lcl_xml_output.
-
-
- ls_old-foo = 2.
- ls_old-bar = 'A'.
-
- CREATE OBJECT lo_output.
- lo_output->add( iv_name = 'DATA'
- ig_data = ls_old ).
- lv_xml = lo_output->render( ).
-
- CREATE OBJECT lo_input
- EXPORTING
- iv_xml = lv_xml.
- lo_input->read( EXPORTING iv_name = 'DATA'
- CHANGING cg_data = ls_new ).
-
- cl_abap_unit_assert=>assert_equals(
- act = ls_new-foo
- exp = ls_old-foo ).
-
- cl_abap_unit_assert=>assert_equals(
- act = ls_new-bar
- exp = ls_old-bar ).
-
- ENDMETHOD.
-
- METHOD down.
-
- DATA: ls_old TYPE st_old,
- ls_new TYPE st_new,
- lv_xml TYPE string,
- lo_input TYPE REF TO lcl_xml_input,
- lo_output TYPE REF TO lcl_xml_output.
-
-
- ls_new-foo = 2.
- ls_new-bar = 'A'.
- ls_new-moo = 5.
-
- CREATE OBJECT lo_output.
- lo_output->add( iv_name = 'DATA'
- ig_data = ls_new ).
- lv_xml = lo_output->render( ).
-
- CREATE OBJECT lo_input
- EXPORTING
- iv_xml = lv_xml.
- lo_input->read( EXPORTING iv_name = 'DATA'
- CHANGING cg_data = ls_old ).
-
- cl_abap_unit_assert=>assert_equals(
- act = ls_old-foo
- exp = ls_new-foo ).
-
- cl_abap_unit_assert=>assert_equals(
- act = ls_old-bar
- exp = ls_new-bar ).
-
- ENDMETHOD.
-
-ENDCLASS.
-
*----------------------------------------------------------------------*
* CLASS ltcl_url DEFINITION
*----------------------------------------------------------------------*
diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap
index 53b57b288..7884c63e6 100644
--- a/src/zabapgit_unit_test_clas_intf.prog.abap
+++ b/src/zabapgit_unit_test_clas_intf.prog.abap
@@ -219,10 +219,11 @@ CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
DATA:
mo_spy_oo_object_functions TYPE REF TO ltd_spy_oo_object,
mo_fake_object_files TYPE REF TO ltd_fake_object_files,
- mo_xml_input TYPE REF TO lcl_xml_input,
- mo_xml_out TYPE REF TO lcl_xml_output,
+ mo_xml_input TYPE REF TO zcl_abapgit_xml_input,
+ mo_xml_out TYPE REF TO zcl_abapgit_xml_output,
mo_oo_object TYPE REF TO lif_object,
ms_item TYPE zif_abapgit_definitions=>ty_item.
+
METHODS: when_deserializing
RAISING
zcx_abapgit_exception,
@@ -247,6 +248,7 @@ CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
should_serialize_with_obj_key.
ENDCLASS.
+
CLASS ltc_oo_test IMPLEMENTATION.
METHOD should_serialize_with_obj_key.
diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap
index a3e20ba08..5510ae742 100644
--- a/src/zabapgit_xml.prog.abap
+++ b/src/zabapgit_xml.prog.abap
@@ -2,459 +2,4 @@
*& Include ZABAPGIT_XML
*&---------------------------------------------------------------------*
-*----------------------------------------------------------------------*
-* CLASS lcl_xml DEFINITION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_xml DEFINITION ABSTRACT.
-
- PUBLIC SECTION.
- METHODS:
- constructor.
-
- PROTECTED SECTION.
- DATA: mi_ixml TYPE REF TO if_ixml,
- mi_xml_doc TYPE REF TO if_ixml_document,
- ms_metadata TYPE zif_abapgit_definitions=>ty_metadata.
-
- 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.
-
- METHODS to_xml
- IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true
- RETURNING VALUE(rv_xml) TYPE string.
-
- METHODS parse
- IMPORTING iv_normalize TYPE abap_bool DEFAULT abap_true
- iv_xml TYPE string
- RAISING zcx_abapgit_exception.
-
- PRIVATE SECTION.
- METHODS error
- IMPORTING ii_parser TYPE REF TO if_ixml_parser
- RAISING zcx_abapgit_exception.
-
- METHODS display_xml_error
- RAISING zcx_abapgit_exception.
-
-ENDCLASS. "lcl_xml DEFINITION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_xml IMPLEMENTATION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_xml IMPLEMENTATION.
-
- METHOD constructor.
- mi_ixml = cl_ixml=>create( ).
- mi_xml_doc = mi_ixml->create_document( ).
- ENDMETHOD. "constructor
-
- METHOD parse.
-
- DATA: li_stream_factory TYPE REF TO if_ixml_stream_factory,
- li_istream TYPE REF TO if_ixml_istream,
- li_element TYPE REF TO if_ixml_element,
- li_version TYPE REF TO if_ixml_node,
- li_parser TYPE REF TO if_ixml_parser.
-
-
- ASSERT NOT iv_xml IS INITIAL.
-
- li_stream_factory = mi_ixml->create_stream_factory( ).
- li_istream = li_stream_factory->create_istream_string( iv_xml ).
- li_parser = mi_ixml->create_parser( stream_factory = li_stream_factory
- istream = li_istream
- document = mi_xml_doc ).
- li_parser->set_normalizing( iv_normalize ).
- IF li_parser->parse( ) <> 0.
- error( li_parser ).
- ENDIF.
-
- li_istream->close( ).
-
-
- li_element = mi_xml_doc->find_from_name_ns( depth = 0 name = c_abapgit_tag ).
- li_version = li_element->if_ixml_node~get_attributes(
- )->get_named_item_ns( c_attr_version ) ##no_text.
- IF li_version->get_value( ) <> zif_abapgit_definitions=>gc_xml_version.
- display_xml_error( ).
- ENDIF.
-
-* 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 ).
-
- ENDMETHOD. "parse
-
- METHOD display_xml_error.
-
- DATA: lv_version TYPE string.
-
-
- lv_version = |abapGit version: { zif_abapgit_definitions=>gc_abap_version }|.
-
- CALL FUNCTION 'POPUP_TO_INFORM'
- EXPORTING
- titel = 'abapGit XML version mismatch'
- txt1 = 'abapGit XML version mismatch'
- txt2 = 'See http://larshp.github.io/abapGit/other-xml-mismatch.html'
- txt3 = lv_version. "#EC NOTEXT
-
- zcx_abapgit_exception=>raise( 'XML error' ).
-
- ENDMETHOD. "display_xml_error
-
- METHOD to_xml.
-* will render to codepage UTF-16
-
- DATA: li_ostream TYPE REF TO if_ixml_ostream,
- li_renderer TYPE REF TO if_ixml_renderer,
- li_streamfactory TYPE REF TO if_ixml_stream_factory.
-
-
- li_streamfactory = mi_ixml->create_stream_factory( ).
-
- li_ostream = li_streamfactory->create_ostream_cstring( rv_xml ).
-
- li_renderer = mi_ixml->create_renderer( ostream = li_ostream
- document = mi_xml_doc ).
- li_renderer->set_normalizing( iv_normalize ).
-
- li_renderer->render( ).
-
- ENDMETHOD. "to_xml
-
- METHOD error.
-
- DATA: lv_error TYPE i,
- lv_txt1 TYPE string,
- lv_txt2 TYPE string,
- lv_txt3 TYPE string,
- lv_times TYPE i,
- li_error TYPE REF TO if_ixml_parse_error.
-
-
- IF ii_parser->num_errors( ) <> 0.
- lv_times = ii_parser->num_errors( ).
- DO lv_times TIMES.
- lv_error = sy-index - 1.
- li_error = ii_parser->get_error( lv_error ).
-
- lv_txt1 = li_error->get_column( ).
- CONCATENATE 'Column:' lv_txt1 INTO lv_txt1. "#EC NOTEXT
- lv_txt2 = li_error->get_line( ).
- CONCATENATE 'Line:' lv_txt2 INTO lv_txt2. "#EC NOTEXT
- lv_txt3 = li_error->get_reason( ).
-
- CALL FUNCTION 'POPUP_TO_INFORM'
- EXPORTING
- titel = 'Error from XML parser' "#EC NOTEXT
- txt1 = lv_txt1
- txt2 = lv_txt2
- txt3 = lv_txt3.
- ENDDO.
- ENDIF.
-
- zcx_abapgit_exception=>raise( 'Error while parsing XML' ).
- ENDMETHOD. "error
-
-ENDCLASS. "lcl_xml IMPLEMENTATION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_xml_output DEFINITION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_xml_output DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC.
-
- PUBLIC SECTION.
- METHODS:
- add
- IMPORTING iv_name TYPE clike
- ig_data TYPE any
- RAISING zcx_abapgit_exception,
- set_raw
- IMPORTING ii_raw TYPE REF TO if_ixml_element,
- add_xml
- IMPORTING iv_name TYPE clike
- ii_xml TYPE REF TO if_ixml_element,
- build_asx_node
- RETURNING VALUE(ri_element) TYPE REF TO if_ixml_element,
- render
- IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true
- is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
- RETURNING VALUE(rv_xml) TYPE string.
-
- PRIVATE SECTION.
- DATA: mi_raw TYPE REF TO if_ixml_element.
-
-ENDCLASS. "lcl_xml_output DEFINITION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_xml_output IMPLEMENTATION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_xml_output IMPLEMENTATION.
-
- METHOD set_raw.
- mi_raw = ii_raw.
- ENDMETHOD. "set_raw
-
- METHOD add.
-
- DATA: li_node TYPE REF TO if_ixml_node,
- li_doc TYPE REF TO if_ixml_document,
- lt_stab TYPE abap_trans_srcbind_tab.
-
- FIELD-SYMBOLS: LIKE LINE OF lt_stab.
-
-
- ASSERT NOT iv_name IS INITIAL.
-
- IF ig_data IS INITIAL.
- RETURN.
- ENDIF.
-
- APPEND INITIAL LINE TO lt_stab ASSIGNING .
- -name = iv_name.
- GET REFERENCE OF ig_data INTO -value.
-
- li_doc = cl_ixml=>create( )->create_document( ).
-
- CALL TRANSFORMATION id
- OPTIONS initial_components = 'suppress'
- SOURCE (lt_stab)
- RESULT XML li_doc.
-
- li_node = mi_xml_doc->get_root( )->get_first_child( ).
- IF li_node IS BOUND.
- mi_xml_doc->get_root( )->get_first_child( )->get_first_child( )->append_child(
- li_doc->get_root( )->get_first_child( )->get_first_child( )->get_first_child( ) ).
- ELSE.
- mi_xml_doc->get_root( )->append_child( li_doc->get_root( )->get_first_child( ) ).
- ENDIF.
-
- ENDMETHOD.
-
- METHOD add_xml.
-
- DATA: li_element TYPE REF TO if_ixml_element.
-
- li_element = mi_xml_doc->create_element( iv_name ).
- li_element->append_child( ii_xml ).
-
- mi_xml_doc->get_root( )->get_first_child( )->get_first_child( )->append_child( li_element ).
-
- ENDMETHOD.
-
- METHOD render.
-
- DATA: li_git TYPE REF TO if_ixml_element,
- li_abap TYPE REF TO if_ixml_element.
-
-
- IF mi_raw IS INITIAL.
- li_abap ?= mi_xml_doc->get_root( )->get_first_child( ).
- mi_xml_doc->get_root( )->remove_child( li_abap ).
- IF li_abap IS INITIAL.
- li_abap = build_asx_node( ).
- ENDIF.
- ELSE.
- li_abap = mi_raw.
- ENDIF.
-
- li_git = mi_xml_doc->create_element( c_abapgit_tag ).
- li_git->set_attribute( name = c_attr_version value = zif_abapgit_definitions=>gc_xml_version ).
- IF NOT is_metadata IS INITIAL.
- li_git->set_attribute( name = c_attr_serializer
- value = is_metadata-class ).
- li_git->set_attribute( name = c_attr_serializer_version
- value = is_metadata-version ).
- ENDIF.
- li_git->append_child( li_abap ).
- mi_xml_doc->get_root( )->append_child( li_git ).
-
- rv_xml = to_xml( iv_normalize ).
-
- ENDMETHOD. "render
-
- METHOD build_asx_node.
-
- DATA: li_attr TYPE REF TO if_ixml_attribute.
-
-
- ri_element = mi_xml_doc->create_element_ns(
- name = 'abap'
- prefix = 'asx' ).
-
- li_attr = mi_xml_doc->create_attribute_ns( 'version' ).
- li_attr->if_ixml_node~set_value( '1.0' ).
- ri_element->set_attribute_node_ns( li_attr ).
-
- li_attr = mi_xml_doc->create_attribute_ns(
- name = 'asx'
- prefix = 'xmlns' ).
- li_attr->if_ixml_node~set_value( 'http://www.sap.com/abapxml' ).
- ri_element->set_attribute_node_ns( li_attr ).
-
- ENDMETHOD.
-
-ENDCLASS. "lcl_xml_output IMPLEMENTATION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_xml_input DEFINITION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_xml_input DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC.
-
- PUBLIC SECTION.
- METHODS:
- constructor
- IMPORTING iv_xml TYPE clike
- RAISING zcx_abapgit_exception,
- read
- IMPORTING iv_name TYPE clike
- CHANGING cg_data TYPE any
- RAISING zcx_abapgit_exception,
- get_raw
- RETURNING VALUE(ri_raw) TYPE REF TO if_ixml_document,
-* todo, add read_xml to match add_xml in lcl_xml_output
- get_metadata
- RETURNING VALUE(rs_metadata) TYPE zif_abapgit_definitions=>ty_metadata.
-
- PRIVATE SECTION.
- METHODS: fix_xml.
-
-ENDCLASS. "lcl_xml_input DEFINITION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_xml_input IMPLEMENTATION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_xml_input IMPLEMENTATION.
-
- METHOD constructor.
-
- super->constructor( ).
- parse( iv_xml ).
- fix_xml( ).
-
- ENDMETHOD. "constructor
-
- METHOD get_raw.
- ri_raw = mi_xml_doc.
- ENDMETHOD. "get_raw
-
- METHOD fix_xml.
-
- DATA: li_git TYPE REF TO if_ixml_element,
- li_abap TYPE REF TO if_ixml_node.
-
-
- li_git ?= mi_xml_doc->find_from_name_ns( depth = 0 name = c_abapgit_tag ).
- li_abap = li_git->get_first_child( ).
-
- mi_xml_doc->get_root( )->remove_child( li_git ).
- mi_xml_doc->get_root( )->append_child( li_abap ).
-
- ENDMETHOD. "fix_xml
-
- METHOD read.
-
- DATA: lx_error TYPE REF TO cx_transformation_error,
- lt_rtab TYPE abap_trans_resbind_tab.
-
- FIELD-SYMBOLS: LIKE LINE OF lt_rtab.
-
- ASSERT NOT iv_name IS INITIAL.
-
- CLEAR cg_data. "Initialize result to avoid problems with empty values
-
- APPEND INITIAL LINE TO lt_rtab ASSIGNING .
- -name = iv_name.
- GET REFERENCE OF cg_data INTO -value.
-
- TRY.
- CALL TRANSFORMATION id
- OPTIONS value_handling = 'accept_data_loss'
- SOURCE XML mi_xml_doc
- RESULT (lt_rtab) ##no_text.
- CATCH cx_transformation_error INTO lx_error.
- zcx_abapgit_exception=>raise( lx_error->if_message~get_text( ) ).
- ENDTRY.
-
- ENDMETHOD. "read
-
- METHOD get_metadata.
- rs_metadata = ms_metadata.
- ENDMETHOD. "get_metadata
-
-ENDCLASS. "lcl_xml_input IMPLEMENTATION
-
-CLASS lcl_xml_pretty DEFINITION FINAL.
-
- PUBLIC SECTION.
- CLASS-METHODS: print
- IMPORTING iv_xml TYPE string
- iv_ignore_errors TYPE abap_bool DEFAULT abap_true
- iv_unpretty TYPE abap_bool DEFAULT abap_false
- RETURNING VALUE(rv_xml) TYPE string
- RAISING zcx_abapgit_exception.
-
-ENDCLASS.
-
-CLASS lcl_xml_pretty IMPLEMENTATION.
-
- METHOD print.
-
- DATA: li_ixml TYPE REF TO if_ixml,
- li_xml_doc TYPE REF TO if_ixml_document,
- li_stream_factory TYPE REF TO if_ixml_stream_factory,
- li_istream TYPE REF TO if_ixml_istream,
- li_parser TYPE REF TO if_ixml_parser,
- li_ostream TYPE REF TO if_ixml_ostream,
- li_renderer TYPE REF TO if_ixml_renderer.
-
-
- ASSERT NOT iv_xml IS INITIAL.
-
- li_ixml = cl_ixml=>create( ).
- li_xml_doc = li_ixml->create_document( ).
-
- li_stream_factory = li_ixml->create_stream_factory( ).
- li_istream = li_stream_factory->create_istream_string( iv_xml ).
- li_parser = li_ixml->create_parser( stream_factory = li_stream_factory
- istream = li_istream
- document = li_xml_doc ).
- li_parser->set_normalizing( abap_true ).
- IF li_parser->parse( ) <> 0.
- IF iv_ignore_errors = abap_true.
- rv_xml = iv_xml.
- RETURN.
- ELSE.
- zcx_abapgit_exception=>raise( 'error parsing xml' ).
- ENDIF.
- ENDIF.
- li_istream->close( ).
-
-
- li_ostream = li_stream_factory->create_ostream_cstring( rv_xml ).
-
- li_renderer = li_ixml->create_renderer( ostream = li_ostream
- document = li_xml_doc ).
-
- li_renderer->set_normalizing( boolc( iv_unpretty = abap_false ) ).
-
- li_renderer->render( ).
-
- ENDMETHOD.
-
-ENDCLASS.
+* todo, include will be deleted later
diff --git a/src/zabapgit_zlib.prog.abap b/src/zabapgit_zlib.prog.abap
index 15753f148..ccb81049d 100644
--- a/src/zabapgit_zlib.prog.abap
+++ b/src/zabapgit_zlib.prog.abap
@@ -2,4 +2,4 @@
*& Include ZABAPGIT_ZLIB
*&---------------------------------------------------------------------*
-* lets wait deleting the includes? and delete multiple at a time?
+* todo, lets wait deleting the includes? and delete multiple at a time?