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?