mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
lcl_xml to global class
This commit is contained in:
parent
f4a319a426
commit
7ecbc07e19
10
src/xml/package.devc.xml
Normal file
10
src/xml/package.devc.xml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<DEVC>
|
||||||
|
<CTEXT>XML</CTEXT>
|
||||||
|
</DEVC>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
161
src/xml/zcl_abapgit_xml.clas.abap
Normal file
161
src/xml/zcl_abapgit_xml.clas.abap
Normal file
|
@ -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.
|
19
src/xml/zcl_abapgit_xml.clas.xml
Normal file
19
src/xml/zcl_abapgit_xml.clas.xml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_XML</CLSNAME>
|
||||||
|
<VERSION>1</VERSION>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>XML</DESCRIPT>
|
||||||
|
<EXPOSURE>2</EXPOSURE>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSABSTRCT>X</CLSABSTRCT>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
96
src/xml/zcl_abapgit_xml_input.clas.abap
Normal file
96
src/xml/zcl_abapgit_xml_input.clas.abap
Normal file
|
@ -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: <ls_rtab> 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 <ls_rtab>.
|
||||||
|
<ls_rtab>-name = iv_name.
|
||||||
|
GET REFERENCE OF cg_data INTO <ls_rtab>-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.
|
127
src/xml/zcl_abapgit_xml_input.clas.testclasses.abap
Normal file
127
src/xml/zcl_abapgit_xml_input.clas.testclasses.abap
Normal file
|
@ -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.
|
19
src/xml/zcl_abapgit_xml_input.clas.xml
Normal file
19
src/xml/zcl_abapgit_xml_input.clas.xml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_XML_INPUT</CLSNAME>
|
||||||
|
<VERSION>1</VERSION>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>XML Input</DESCRIPT>
|
||||||
|
<EXPOSURE>2</EXPOSURE>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
147
src/xml/zcl_abapgit_xml_output.clas.abap
Normal file
147
src/xml/zcl_abapgit_xml_output.clas.abap
Normal file
|
@ -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: <ls_stab> 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 <ls_stab>.
|
||||||
|
<ls_stab>-name = iv_name.
|
||||||
|
GET REFERENCE OF ig_data INTO <ls_stab>-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.
|
18
src/xml/zcl_abapgit_xml_output.clas.xml
Normal file
18
src/xml/zcl_abapgit_xml_output.clas.xml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_XML_OUTPUT</CLSNAME>
|
||||||
|
<VERSION>1</VERSION>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>XML Output</DESCRIPT>
|
||||||
|
<EXPOSURE>2</EXPOSURE>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
63
src/xml/zcl_abapgit_xml_pretty.clas.abap
Normal file
63
src/xml/zcl_abapgit_xml_pretty.clas.abap
Normal file
|
@ -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.
|
18
src/xml/zcl_abapgit_xml_pretty.clas.xml
Normal file
18
src/xml/zcl_abapgit_xml_pretty.clas.xml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_XML_PRETTY</CLSNAME>
|
||||||
|
<VERSION>1</VERSION>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>XML pretty printer</DESCRIPT>
|
||||||
|
<EXPOSURE>2</EXPOSURE>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -146,7 +146,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
||||||
SOURCE data = is_data
|
SOURCE data = is_data
|
||||||
RESULT XML rv_xml.
|
RESULT XML rv_xml.
|
||||||
|
|
||||||
rv_xml = lcl_xml_pretty=>print( rv_xml ).
|
rv_xml = zcl_abapgit_xml_pretty=>print( rv_xml ).
|
||||||
|
|
||||||
REPLACE FIRST OCCURRENCE
|
REPLACE FIRST OCCURRENCE
|
||||||
OF REGEX '<\?xml version="1\.0" encoding="[\w-]+"\?>'
|
OF REGEX '<\?xml version="1\.0" encoding="[\w-]+"\?>'
|
||||||
|
|
|
@ -23,21 +23,21 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
deserialize_abap
|
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
|
iv_package TYPE devclass
|
||||||
RAISING zcx_abapgit_exception,
|
RAISING zcx_abapgit_exception,
|
||||||
deserialize_docu
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
deserialize_tpool
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
deserialize_sotr
|
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
|
iv_package TYPE devclass
|
||||||
RAISING zcx_abapgit_exception,
|
RAISING zcx_abapgit_exception,
|
||||||
serialize_xml
|
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.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
ENDCLASS. "lcl_object_dtel DEFINITION
|
ENDCLASS. "lcl_object_dtel DEFINITION
|
||||||
|
|
|
@ -33,10 +33,10 @@ CLASS lcl_object_doma DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
serialize_texts
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
deserialize_texts
|
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
|
is_dd01v TYPE dd01v
|
||||||
it_dd07v TYPE dd07v_tab
|
it_dd07v TYPE dd07v_tab
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
|
@ -27,10 +27,10 @@ CLASS lcl_object_dtel DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
serialize_texts
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
deserialize_texts
|
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
|
is_dd04v TYPE dd04v
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,11 @@ INTERFACE lif_object_enho.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
deserialize
|
deserialize
|
||||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
|
||||||
iv_package TYPE devclass
|
iv_package TYPE devclass
|
||||||
RAISING zcx_abapgit_exception,
|
RAISING zcx_abapgit_exception,
|
||||||
serialize
|
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
|
ii_enh_tool TYPE REF TO if_enh_tool
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
@ -269,12 +269,12 @@ CLASS lcl_object_enho_clif DEFINITION.
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
CLASS-METHODS:
|
CLASS-METHODS:
|
||||||
deserialize
|
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
|
io_clif TYPE REF TO cl_enh_tool_clif
|
||||||
RAISING zcx_abapgit_exception
|
RAISING zcx_abapgit_exception
|
||||||
cx_enh_root,
|
cx_enh_root,
|
||||||
serialize
|
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_files TYPE REF TO lcl_objects_files
|
||||||
io_clif TYPE REF TO cl_enh_tool_clif
|
io_clif TYPE REF TO cl_enh_tool_clif
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
|
@ -8,13 +8,13 @@ INTERFACE lif_object_enhs.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
deserialize
|
deserialize
|
||||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
|
||||||
iv_package TYPE devclass
|
iv_package TYPE devclass
|
||||||
ii_enh_spot_tool TYPE REF TO if_enh_spot_tool
|
ii_enh_spot_tool TYPE REF TO if_enh_spot_tool
|
||||||
RAISING zcx_abapgit_exception,
|
RAISING zcx_abapgit_exception,
|
||||||
|
|
||||||
serialize
|
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
|
ii_enh_spot_tool TYPE REF TO if_enh_spot_tool
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
|
|
@ -192,7 +192,7 @@ CLASS lcl_object_form IMPLEMENTATION.
|
||||||
DATA: ls_form_data TYPE tys_form_data.
|
DATA: ls_form_data TYPE tys_form_data.
|
||||||
DATA: lt_text_header TYPE tyt_text_header.
|
DATA: lt_text_header TYPE tyt_text_header.
|
||||||
DATA: lt_lines TYPE tyt_lines.
|
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.
|
DATA: lv_form_found TYPE flag.
|
||||||
FIELD-SYMBOLS: <ls_text_header> LIKE LINE OF lt_text_header.
|
FIELD-SYMBOLS: <ls_text_header> LIKE LINE OF lt_text_header.
|
||||||
|
|
||||||
|
@ -315,7 +315,7 @@ CLASS lcl_object_form IMPLEMENTATION.
|
||||||
METHOD _extract_tdlines.
|
METHOD _extract_tdlines.
|
||||||
|
|
||||||
DATA lv_string TYPE string.
|
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 =
|
lv_string = mo_files->read_string( iv_extra =
|
||||||
_build_extra_from_header( is_form_data-form_header )
|
_build_extra_from_header( is_form_data-form_header )
|
||||||
|
@ -353,7 +353,7 @@ CLASS lcl_object_form IMPLEMENTATION.
|
||||||
METHOD _compress_lines.
|
METHOD _compress_lines.
|
||||||
|
|
||||||
DATA lv_string TYPE string.
|
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.
|
CREATE OBJECT lo_xml.
|
||||||
lo_xml->add( iv_name = c_objectname_tdlines
|
lo_xml->add( iv_name = c_objectname_tdlines
|
||||||
|
|
|
@ -55,11 +55,11 @@ CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL.
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
METHODS serialize_xml
|
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.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
METHODS deserialize_xml
|
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
|
iv_package TYPE devclass
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL.
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
METHODS deserialize_includes
|
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
|
iv_package TYPE devclass
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
@ -299,7 +299,7 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD deserialize_includes.
|
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,
|
ls_progdir TYPE ty_progdir,
|
||||||
lt_includes TYPE rso_t_objnm,
|
lt_includes TYPE rso_t_objnm,
|
||||||
lt_tpool TYPE textpool_table,
|
lt_tpool TYPE textpool_table,
|
||||||
|
|
|
@ -17,19 +17,19 @@ CLASS lcl_object_intf DEFINITION FINAL INHERITING FROM lcl_objects_program.
|
||||||
iv_language TYPE spras.
|
iv_language TYPE spras.
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
METHODS deserialize_abap
|
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
|
iv_package TYPE devclass
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
METHODS deserialize_docu
|
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.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
DATA mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc.
|
DATA mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc.
|
||||||
|
|
||||||
METHODS serialize_xml
|
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.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
ENDCLASS. "lcl_object_intf DEFINITION
|
ENDCLASS. "lcl_object_intf DEFINITION
|
||||||
|
|
|
@ -23,10 +23,10 @@ CLASS lcl_object_msag DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
serialize_texts
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
deserialize_texts
|
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.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,10 @@ CLASS lcl_object_prog DEFINITION INHERITING FROM lcl_objects_program FINAL.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
serialize_texts
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
deserialize_texts
|
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.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
ENDCLASS. "lcl_object_prog DEFINITION
|
ENDCLASS. "lcl_object_prog DEFINITION
|
||||||
|
|
|
@ -457,8 +457,8 @@ CLASS lcl_object_tabl IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~compare_to_remote_version.
|
METHOD lif_object~compare_to_remote_version.
|
||||||
DATA: lo_table_validation TYPE REF TO lcl_object_tabl_valid,
|
DATA: lo_table_validation TYPE REF TO lcl_object_tabl_valid,
|
||||||
lo_local_version_output TYPE REF TO lcl_xml_output,
|
lo_local_version_output TYPE REF TO zcl_abapgit_xml_output,
|
||||||
lo_local_version_input TYPE REF TO lcl_xml_input,
|
lo_local_version_input TYPE REF TO zcl_abapgit_xml_input,
|
||||||
lv_validation_text TYPE string.
|
lv_validation_text TYPE string.
|
||||||
|
|
||||||
CREATE OBJECT lo_local_version_output.
|
CREATE OBJECT lo_local_version_output.
|
||||||
|
|
|
@ -6,8 +6,8 @@ CLASS lcl_object_tabl_valid DEFINITION FINAL.
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
METHODS validate
|
METHODS validate
|
||||||
IMPORTING
|
IMPORTING
|
||||||
io_remote_version TYPE REF TO lcl_xml_input
|
io_remote_version TYPE REF TO zcl_abapgit_xml_input
|
||||||
io_local_version TYPE REF TO lcl_xml_input
|
io_local_version TYPE REF TO zcl_abapgit_xml_input
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_message) TYPE string
|
VALUE(rv_message) TYPE string
|
||||||
RAISING
|
RAISING
|
||||||
|
@ -105,10 +105,10 @@ CLASS lct_table_validation DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION S
|
||||||
zcx_abapgit_exception.
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
DATA: mo_table_validator TYPE REF TO lcl_object_tabl_valid,
|
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_out_xml TYPE REF TO zcl_abapgit_xml_output,
|
||||||
mo_previous_version_input_xml TYPE REF TO lcl_xml_input,
|
mo_previous_version_input_xml TYPE REF TO zcl_abapgit_xml_input,
|
||||||
mo_current_version_out_xml TYPE REF TO lcl_xml_output,
|
mo_current_version_out_xml TYPE REF TO zcl_abapgit_xml_output,
|
||||||
mo_current_version_input_xml TYPE REF TO lcl_xml_input,
|
mo_current_version_input_xml TYPE REF TO zcl_abapgit_xml_input,
|
||||||
mt_previous_table_fields TYPE TABLE OF dd03p,
|
mt_previous_table_fields TYPE TABLE OF dd03p,
|
||||||
mt_current_table_fields TYPE TABLE OF dd03p,
|
mt_current_table_fields TYPE TABLE OF dd03p,
|
||||||
mv_validation_message TYPE string.
|
mv_validation_message TYPE string.
|
||||||
|
|
|
@ -40,11 +40,11 @@ CLASS lcl_object_tran DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||||
CHANGING cg_value TYPE any,
|
CHANGING cg_value TYPE any,
|
||||||
|
|
||||||
serialize_texts
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
|
|
||||||
deserialize_texts
|
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.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
ENDCLASS. "lcl_object_TRAN DEFINITION
|
ENDCLASS. "lcl_object_TRAN DEFINITION
|
||||||
|
|
|
@ -181,7 +181,7 @@ CLASS lcl_objects_files DEFINITION.
|
||||||
RAISING zcx_abapgit_exception,
|
RAISING zcx_abapgit_exception,
|
||||||
add_xml
|
add_xml
|
||||||
IMPORTING iv_extra TYPE clike OPTIONAL
|
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
|
iv_normalize TYPE sap_bool DEFAULT abap_true
|
||||||
is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
|
is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
|
||||||
RAISING zcx_abapgit_exception,
|
RAISING zcx_abapgit_exception,
|
||||||
|
@ -193,7 +193,7 @@ CLASS lcl_objects_files DEFINITION.
|
||||||
RAISING zcx_abapgit_exception ##called,
|
RAISING zcx_abapgit_exception ##called,
|
||||||
read_xml
|
read_xml
|
||||||
IMPORTING iv_extra TYPE clike OPTIONAL
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
read_abap
|
read_abap
|
||||||
IMPORTING iv_extra TYPE clike OPTIONAL
|
IMPORTING iv_extra TYPE clike OPTIONAL
|
||||||
|
@ -276,11 +276,11 @@ INTERFACE lif_object.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
serialize
|
serialize
|
||||||
IMPORTING io_xml TYPE REF TO lcl_xml_output
|
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
|
||||||
RAISING zcx_abapgit_exception,
|
RAISING zcx_abapgit_exception,
|
||||||
deserialize
|
deserialize
|
||||||
IMPORTING iv_package TYPE devclass
|
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,
|
RAISING zcx_abapgit_exception,
|
||||||
delete
|
delete
|
||||||
RAISING zcx_abapgit_exception,
|
RAISING zcx_abapgit_exception,
|
||||||
|
@ -300,7 +300,7 @@ INTERFACE lif_object.
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
METHODS:
|
METHODS:
|
||||||
compare_to_remote_version
|
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
|
RETURNING VALUE(ro_comparison_result) TYPE REF TO lif_comparison_result
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
@ -485,7 +485,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
|
||||||
* xml-object in the plugin can only be typed to object.
|
* xml-object in the plugin can only be typed to object.
|
||||||
* ABAP does not perform implicit type casts (also if compatible) in signatures,
|
* ABAP does not perform implicit type casts (also if compatible) in signatures,
|
||||||
* therefore this method's signature is typed ref to object
|
* 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.
|
lo_xml ?= io_xml.
|
||||||
|
|
||||||
|
@ -845,7 +845,7 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super.
|
||||||
END OF ty_progdir.
|
END OF ty_progdir.
|
||||||
|
|
||||||
METHODS serialize_program
|
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
|
is_item TYPE zif_abapgit_definitions=>ty_item
|
||||||
io_files TYPE REF TO lcl_objects_files
|
io_files TYPE REF TO lcl_objects_files
|
||||||
iv_program TYPE programm OPTIONAL
|
iv_program TYPE programm OPTIONAL
|
||||||
|
@ -1003,7 +1003,7 @@ CLASS lcl_objects_program IMPLEMENTATION.
|
||||||
lt_source TYPE TABLE OF abaptxt255,
|
lt_source TYPE TABLE OF abaptxt255,
|
||||||
lt_tpool TYPE textpool_table,
|
lt_tpool TYPE textpool_table,
|
||||||
ls_tpool LIKE LINE OF lt_tpool,
|
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.
|
IF iv_program IS INITIAL.
|
||||||
lv_program_name = is_item-obj_name.
|
lv_program_name = is_item-obj_name.
|
||||||
|
@ -2275,7 +2275,7 @@ CLASS lcl_objects DEFINITION FINAL.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_deserialization,
|
TYPES: BEGIN OF ty_deserialization,
|
||||||
obj TYPE REF TO lif_object,
|
obj TYPE REF TO lif_object,
|
||||||
xml TYPE REF TO lcl_xml_input,
|
xml TYPE REF TO zcl_abapgit_xml_input,
|
||||||
package TYPE devclass,
|
package TYPE devclass,
|
||||||
item TYPE zif_abapgit_definitions=>ty_item,
|
item TYPE zif_abapgit_definitions=>ty_item,
|
||||||
END OF ty_deserialization.
|
END OF ty_deserialization.
|
||||||
|
|
|
@ -343,7 +343,7 @@ CLASS lcl_objects IMPLEMENTATION.
|
||||||
METHOD serialize.
|
METHOD serialize.
|
||||||
|
|
||||||
DATA: li_obj TYPE REF TO lif_object,
|
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.
|
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,
|
lt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
|
||||||
lv_package TYPE devclass,
|
lv_package TYPE devclass,
|
||||||
lo_files TYPE REF TO lcl_objects_files,
|
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_results TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||||
lt_ddic TYPE TABLE OF ty_deserialization,
|
lt_ddic TYPE TABLE OF ty_deserialization,
|
||||||
lt_rest 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
|
* only the main XML file is used for comparison
|
||||||
|
|
||||||
DATA: ls_remote_file TYPE zif_abapgit_definitions=>ty_file,
|
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,
|
lv_count TYPE i,
|
||||||
lo_comparison_result TYPE REF TO lif_comparison_result.
|
lo_comparison_result TYPE REF TO lif_comparison_result.
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ CLASS lcl_gui_page_db_dis IMPLEMENTATION.
|
||||||
ls_action-type = ms_key-type.
|
ls_action-type = ms_key-type.
|
||||||
ls_action-value = ms_key-value.
|
ls_action-value = ms_key-value.
|
||||||
lv_action = lcl_html_action_utils=>dbkey_encode( ls_action ).
|
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 ro_html.
|
||||||
CREATE OBJECT lo_toolbar.
|
CREATE OBJECT lo_toolbar.
|
||||||
|
@ -117,7 +117,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
|
||||||
iv_type = ms_key-type
|
iv_type = ms_key-type
|
||||||
iv_value = ms_key-value ).
|
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 ).
|
format = cl_abap_format=>e_html_attr ).
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
|
@ -1006,7 +1006,7 @@ CLASS lcl_persistence_db IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD validate_and_unprettify_xml.
|
METHOD validate_and_unprettify_xml.
|
||||||
|
|
||||||
rv_xml = lcl_xml_pretty=>print(
|
rv_xml = zcl_abapgit_xml_pretty=>print(
|
||||||
iv_xml = iv_xml
|
iv_xml = iv_xml
|
||||||
iv_unpretty = abap_true
|
iv_unpretty = abap_true
|
||||||
iv_ignore_errors = abap_false ).
|
iv_ignore_errors = abap_false ).
|
||||||
|
@ -1836,7 +1836,7 @@ CLASS lcl_settings IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD get_settings_xml.
|
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.
|
CREATE OBJECT lr_output.
|
||||||
|
|
||||||
|
@ -1849,7 +1849,7 @@ CLASS lcl_settings IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD set_xml_settings.
|
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.
|
CREATE OBJECT lr_input EXPORTING iv_xml = iv_settings_xml.
|
||||||
|
|
||||||
|
|
|
@ -376,133 +376,6 @@ CLASS ltcl_git_porcelain IMPLEMENTATION.
|
||||||
|
|
||||||
ENDCLASS.
|
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
|
* CLASS ltcl_url DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
|
|
@ -219,10 +219,11 @@ CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
|
||||||
DATA:
|
DATA:
|
||||||
mo_spy_oo_object_functions TYPE REF TO ltd_spy_oo_object,
|
mo_spy_oo_object_functions TYPE REF TO ltd_spy_oo_object,
|
||||||
mo_fake_object_files TYPE REF TO ltd_fake_object_files,
|
mo_fake_object_files TYPE REF TO ltd_fake_object_files,
|
||||||
mo_xml_input TYPE REF TO lcl_xml_input,
|
mo_xml_input TYPE REF TO zcl_abapgit_xml_input,
|
||||||
mo_xml_out TYPE REF TO lcl_xml_output,
|
mo_xml_out TYPE REF TO zcl_abapgit_xml_output,
|
||||||
mo_oo_object TYPE REF TO lif_object,
|
mo_oo_object TYPE REF TO lif_object,
|
||||||
ms_item TYPE zif_abapgit_definitions=>ty_item.
|
ms_item TYPE zif_abapgit_definitions=>ty_item.
|
||||||
|
|
||||||
METHODS: when_deserializing
|
METHODS: when_deserializing
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception,
|
zcx_abapgit_exception,
|
||||||
|
@ -247,6 +248,7 @@ CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
|
||||||
should_serialize_with_obj_key.
|
should_serialize_with_obj_key.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
CLASS ltc_oo_test IMPLEMENTATION.
|
CLASS ltc_oo_test IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD should_serialize_with_obj_key.
|
METHOD should_serialize_with_obj_key.
|
||||||
|
|
|
@ -2,459 +2,4 @@
|
||||||
*& Include ZABAPGIT_XML
|
*& Include ZABAPGIT_XML
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
* todo, include will be deleted later
|
||||||
* 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: <ls_stab> 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 <ls_stab>.
|
|
||||||
<ls_stab>-name = iv_name.
|
|
||||||
GET REFERENCE OF ig_data INTO <ls_stab>-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: <ls_rtab> 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 <ls_rtab>.
|
|
||||||
<ls_rtab>-name = iv_name.
|
|
||||||
GET REFERENCE OF cg_data INTO <ls_rtab>-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.
|
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
*& Include ZABAPGIT_ZLIB
|
*& 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?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user