mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00

* ZCL_ABAPGIT_GUI_CHUNK_LIB move 2 methods private * HTML_ACTION_UTILS move two methods private * move calculate_skip_testclass to private * move BUILD_ASX_NODE to private
149 lines
3.7 KiB
ABAP
149 lines
3.7 KiB
ABAP
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 render
|
|
IMPORTING
|
|
!iv_normalize TYPE abap_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 .
|
|
|
|
METHODS build_asx_node
|
|
RETURNING
|
|
VALUE(ri_element) 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_version=>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.
|
|
|
|
|
|
METHOD set_raw.
|
|
mi_raw = ii_raw.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|