diff --git a/src/objects/ecatt/package.devc.xml b/src/objects/ecatt/package.devc.xml
new file mode 100644
index 000000000..14ea51151
--- /dev/null
+++ b/src/objects/ecatt/package.devc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ $ABAPGIT_OBJECTS_ECATT
+
+
+
+
diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_data_downl.clas.abap b/src/objects/ecatt/zcl_abapgit_ecatt_data_downl.clas.abap
new file mode 100644
index 000000000..ccd017807
--- /dev/null
+++ b/src/objects/ecatt/zcl_abapgit_ecatt_data_downl.clas.abap
@@ -0,0 +1,124 @@
+CLASS zcl_abapgit_ecatt_data_downl DEFINITION
+ PUBLIC
+ INHERITING FROM cl_apl_ecatt_data_download
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS:
+ download REDEFINITION,
+
+ set_generate_xml_no_download
+ IMPORTING
+ iv_generate_xml_no_download TYPE abap_bool,
+
+ get_xml_stream
+ RETURNING
+ VALUE(rv_xml_stream) TYPE xstring,
+
+ get_xml_stream_size
+ RETURNING
+ VALUE(rv_xml_stream_size) TYPE int4.
+
+ PROTECTED SECTION.
+ METHODS:
+ download_data REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA:
+ mv_generate_xml_no_download TYPE abap_bool,
+ mv_xml_stream TYPE xstring,
+ mv_xml_stream_size TYPE int4.
+
+ENDCLASS.
+
+
+CLASS zcl_abapgit_ecatt_data_downl IMPLEMENTATION.
+
+
+ METHOD download.
+
+ " Downport
+
+ DATA: lv_partyp TYPE string.
+
+ load_help = im_load_help.
+
+ TRY.
+ cl_apl_ecatt_object=>show_object(
+ EXPORTING
+ im_obj_type = im_object_type
+ im_name = im_object_name
+ im_version = im_object_version
+ IMPORTING
+ re_object = ecatt_object ).
+ CATCH cx_ecatt INTO ex_ecatt.
+ RETURN.
+ ENDTRY.
+
+ typ = im_object_type.
+
+ lv_partyp = cl_apl_ecatt_const=>params_type_par.
+
+ ecatt_data ?= ecatt_object.
+* build_schema( ).
+* set_attributes_to_schema( ).
+ set_attributes_to_template( ).
+* set_params_to_schema( ).
+ get_general_params_data( im_params = ecatt_data->params
+ im_ptyp = lv_partyp ).
+
+ LOOP AT parm INTO wa_parm.
+ set_general_params_data_to_dom( ).
+ IF NOT wa_parm-val_type IS INITIAL.
+ set_deep_stru_to_dom( ecatt_data->params ).
+ set_deep_data_to_dom( im_params = ecatt_data->params
+ im_pindex = wa_parm-pindex ).
+ ENDIF.
+ ENDLOOP.
+
+* MS180406
+ set_var_mode_to_dom( ).
+* ENDMS180406
+ set_variants_to_dom( im_params = ecatt_data->params ).
+
+* download_schema( ).
+ download_data( ).
+
+ ENDMETHOD.
+
+
+ METHOD download_data.
+
+ " Downport
+
+ zcl_abapgit_ecatt_download=>z_download_data(
+ EXPORTING
+ ii_template_over_all = template_over_all
+ IMPORTING
+ ev_xml_stream = mv_xml_stream
+ ev_xml_stream_size = mv_xml_stream_size ).
+
+ ENDMETHOD.
+
+
+ METHOD get_xml_stream.
+
+ rv_xml_stream = mv_xml_stream.
+
+ ENDMETHOD.
+
+
+ METHOD get_xml_stream_size.
+
+ rv_xml_stream_size = mv_xml_stream_size.
+
+ ENDMETHOD.
+
+
+ METHOD set_generate_xml_no_download.
+
+ mv_generate_xml_no_download = iv_generate_xml_no_download.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_data_downl.clas.xml b/src/objects/ecatt/zcl_abapgit_ecatt_data_downl.clas.xml
new file mode 100644
index 000000000..75e454e1e
--- /dev/null
+++ b/src/objects/ecatt/zcl_abapgit_ecatt_data_downl.clas.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZCL_ABAPGIT_ECATT_DATA_DOWNL
+ 1
+ E
+ zcl_abapgit_ecatt_download
+ 2
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_data_upload.clas.abap b/src/objects/ecatt/zcl_abapgit_ecatt_data_upload.clas.abap
new file mode 100644
index 000000000..723c5de68
--- /dev/null
+++ b/src/objects/ecatt/zcl_abapgit_ecatt_data_upload.clas.abap
@@ -0,0 +1,76 @@
+CLASS zcl_abapgit_ecatt_data_upload DEFINITION
+ PUBLIC
+ INHERITING FROM cl_apl_ecatt_data_upload
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS:
+ z_set_stream_for_upload
+ IMPORTING
+ im_xml TYPE xstring.
+
+ PROTECTED SECTION.
+ METHODS:
+ upload_data_from_stream REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA: mv_external_xml TYPE xstring.
+
+ENDCLASS.
+
+
+
+CLASS zcl_abapgit_ecatt_data_upload IMPLEMENTATION.
+
+
+ METHOD upload_data_from_stream.
+
+ " Downport
+
+ DATA:
+ lt_eing TYPE etxml_xline_tabtype,
+ lo_xml TYPE REF TO cl_apl_ecatt_xml,
+ lv_xstr TYPE xstring,
+ lv_nc_xmlref_typ TYPE REF TO if_ixml_node_collection,
+ lv_n_xmlref_typ TYPE REF TO if_ixml_node,
+ lv_index TYPE i VALUE 0,
+ lv_count TYPE i.
+
+ lv_xstr = mv_external_xml.
+
+ lo_xml = cl_apl_ecatt_xml=>create( im_type = if_apl_ecatt_xml=>co_xml ).
+
+* whitespace stripping needs a namespace
+* remove white spaces only at the time of upload
+ lo_xml->stream_to_dom( im_xstream = lv_xstr
+ im_ignore_white_space = 'X'
+ im_uri = cl_apl_xml_const=>schema_uri ).
+
+ lo_xml->get_attributes(
+ IMPORTING
+ ex_dom = template_over_all ).
+
+* MD: Workaround, because nodes starting with "XML" are not allowed
+ lv_nc_xmlref_typ = template_over_all->get_elements_by_tag_name_ns(
+ 'XMLREF_TYP' ). "#EC NOTEXT
+ lv_count = lv_nc_xmlref_typ->get_length( ).
+ WHILE lv_index LT lv_count.
+ lv_n_xmlref_typ = lv_nc_xmlref_typ->get_item( lv_index ).
+ lv_n_xmlref_typ->set_name( 'X-MLREF_TYP' ).
+ lv_index = lv_index + 1.
+ ENDWHILE.
+
+ FREE: lt_eing.
+ CLEAR: lo_xml, lv_xstr.
+
+ ENDMETHOD.
+
+
+ METHOD z_set_stream_for_upload.
+
+ " donwnpoort from CL_ABAPGIT_ECATT_DATA_UPLOAD SET_STREAM_FOR_UPLOAD
+ mv_external_xml = im_xml.
+
+ ENDMETHOD.
+ENDCLASS.
diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_data_upload.clas.xml b/src/objects/ecatt/zcl_abapgit_ecatt_data_upload.clas.xml
new file mode 100644
index 000000000..d983c925c
--- /dev/null
+++ b/src/objects/ecatt/zcl_abapgit_ecatt_data_upload.clas.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ ZCL_ABAPGIT_ECATT_DATA_UPLOAD
+ 1
+ E
+ ZCL_APL_ECATT_DATA_UPLOAD
+ 2
+ 1
+ X
+ X
+ X
+ X
+
+
+
+
diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_download.clas.abap b/src/objects/ecatt/zcl_abapgit_ecatt_download.clas.abap
new file mode 100644
index 000000000..7095e5315
--- /dev/null
+++ b/src/objects/ecatt/zcl_abapgit_ecatt_download.clas.abap
@@ -0,0 +1,124 @@
+CLASS zcl_abapgit_ecatt_download DEFINITION
+ PUBLIC
+ INHERITING FROM cl_apl_ecatt_download
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ CLASS-METHODS:
+ z_build_xml_of_object
+ IMPORTING
+ im_object_name TYPE etobj_name
+ im_object_version TYPE etobj_ver
+ im_object_type TYPE etobj_type
+ EXPORTING
+ ex_xml_stream TYPE xstring
+ ex_xml_stream_size TYPE int4
+ RAISING
+ zcx_abapgit_exception,
+
+ z_download_data
+ IMPORTING
+ ii_template_over_all TYPE REF TO if_ixml_document
+ EXPORTING
+ ev_xml_stream TYPE xstring
+ ev_xml_stream_size TYPE i.
+
+ENDCLASS.
+
+
+
+CLASS zcl_abapgit_ecatt_download IMPLEMENTATION.
+
+
+ METHOD z_build_xml_of_object.
+
+ " Downport of CL_APL_ECATT_DOWNLOAD=>BUILD_XML_OF_OBJECT
+
+ DATA: lo_download TYPE REF TO cl_apl_ecatt_download,
+ lo_load_help_dummy TYPE REF TO cl_apl_ecatt_load_help,
+ lx_ecatt TYPE REF TO cx_ecatt_apl,
+ lv_text TYPE string.
+
+ CASE im_object_type.
+* WHEN cl_apl_ecatt_const=>obj_type_ecatt.
+* CREATE OBJECT lo_download TYPE cl_apl_ecatt_script_download.
+ WHEN cl_apl_ecatt_const=>obj_type_test_data.
+ CREATE OBJECT lo_download TYPE zcl_abapgit_ecatt_data_downl.
+* WHEN cl_apl_ecatt_const=>obj_type_system_data.
+* CREATE OBJECT lo_download TYPE cl_apl_ecatt_systems_download.
+* WHEN cl_apl_ecatt_const=>obj_type_test_config.
+* CREATE OBJECT lo_download TYPE cl_apl_ecatt_config_download.
+* WHEN cl_apl_ecatt_const=>obj_type_ecatt_vo.
+* CREATE OBJECT lo_download TYPE cl_apl_ecatt_vo_download.
+* WHEN cl_apl_ecatt_const=>obj_type_start_profile.
+* CREATE OBJECT lo_download TYPE cl_apl_ecatt_sp_download.
+ ENDCASE.
+
+ IF lo_download IS NOT BOUND.
+ zcx_abapgit_exception=>raise( |ECATT: Download not possible { im_object_type } { im_object_name }| ).
+ ENDIF.
+
+ CALL METHOD lo_download->('SET_GENERATE_XML_NO_DOWNLOAD')
+ EXPORTING
+ iv_generate_xml_no_download = abap_true.
+
+ "download method will create the xml stream
+ "note: it's the redefined download( ) of each object type specific download, which is called
+ TRY.
+ CREATE OBJECT lo_load_help_dummy
+ EXPORTING
+ im_maintain_function = ''.
+
+ lo_download->download( im_object_name = im_object_name
+ im_object_version = im_object_version
+ im_object_type = im_object_type
+ im_load_help = lo_load_help_dummy ).
+
+ CATCH cx_ecatt_apl INTO lx_ecatt.
+ lv_text = lx_ecatt->get_text( ).
+ zcx_abapgit_exception=>raise( lv_text ).
+ CATCH cx_ecatt_ui_attachment.
+ "will never be raised from download, when called with mv_generate_xml_no_download = 'X'.
+ ENDTRY.
+
+ CALL METHOD lo_download->('GET_XML_STREAM')
+ RECEIVING
+ rv_xml_stream = ex_xml_stream.
+
+ CALL METHOD lo_download->('GET_XML_STREAM_SIZE')
+ RECEIVING
+ rv_xml_stream_size = ex_xml_stream_size.
+
+ ENDMETHOD.
+
+
+ METHOD z_download_data.
+
+ DATA:
+ lv_xtab TYPE etxml_xline_tabtype,
+ lo_xml TYPE REF TO cl_apl_ecatt_xml,
+ lv_size TYPE int4,
+ lx_ecatt TYPE REF TO cx_ecatt_apl_xml.
+
+ CLEAR: ev_xml_stream,
+ ev_xml_stream_size.
+
+ TRY.
+ lo_xml = cl_apl_ecatt_xml=>create( im_type = if_apl_ecatt_xml=>co_xml ).
+
+ lo_xml->set_attributes( im_dom = ii_template_over_all ).
+
+ lo_xml->get_attributes(
+ IMPORTING
+ ex_xtab = lv_xtab
+ ex_size_xstring = lv_size
+ ex_xml = ev_xml_stream ).
+
+ ev_xml_stream_size = lv_size.
+
+ CATCH cx_ecatt_apl_xml INTO lx_ecatt.
+ RETURN.
+ ENDTRY.
+
+ ENDMETHOD.
+ENDCLASS.
diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_download.clas.xml b/src/objects/ecatt/zcl_abapgit_ecatt_download.clas.xml
new file mode 100644
index 000000000..c84775bec
--- /dev/null
+++ b/src/objects/ecatt/zcl_abapgit_ecatt_download.clas.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZCL_ABAPGIT_ECATT_DOWNLOAD
+ 1
+ E
+ zcl_abapgit_ecatt_download
+ 2
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/objects/zcl_abapgit_object_ectd.clas.abap b/src/objects/zcl_abapgit_object_ectd.clas.abap
index 93cd25b60..570d0efc8 100644
--- a/src/objects/zcl_abapgit_object_ectd.clas.abap
+++ b/src/objects/zcl_abapgit_object_ectd.clas.abap
@@ -62,7 +62,7 @@ CLASS zcl_abapgit_object_ectd DEFINITION
CHANGING
co_versions_node TYPE REF TO if_ixml_element
RAISING
- cx_ecatt,
+ zcx_abapgit_exception,
get_changed_date
IMPORTING
@@ -88,7 +88,8 @@ CLASS zcl_abapgit_object_ectd DEFINITION
RETURNING
VALUE(rs_change_information) TYPE ty_last_changed
RAISING
- cx_ecatt_apl,
+ cx_ecatt_apl
+ zcx_abapgit_exception,
is_change_more_recent_than
IMPORTING
@@ -101,7 +102,7 @@ ENDCLASS.
-CLASS ZCL_ABAPGIT_OBJECT_ECTD IMPLEMENTATION.
+CLASS zcl_abapgit_object_ectd IMPLEMENTATION.
METHOD clear_attributes.
@@ -166,7 +167,7 @@ CLASS ZCL_ABAPGIT_OBJECT_ECTD IMPLEMENTATION.
METHOD deserialize_version.
DATA: ls_object TYPE etmobjects,
- lo_upload TYPE REF TO cl_apl_ecatt_data_upload,
+ lo_upload TYPE REF TO zcl_abapgit_ecatt_data_upload,
lv_xml TYPE xstring,
lv_text TYPE string,
li_document TYPE REF TO if_ixml_document,
@@ -186,8 +187,7 @@ CLASS ZCL_ABAPGIT_OBJECT_ECTD IMPLEMENTATION.
lv_xml = cl_ixml_80_20=>render_to_xstring( li_document ).
-* lo_upload->set_stream_for_upload( lv_xml ).
- zcx_abapgit_exception=>raise( 'ECTD temporarily disabled' ).
+ lo_upload->z_set_stream_for_upload( lv_xml ).
ls_object-d_obj_name = mv_object_name.
ls_object-s_obj_type = ms_item-obj_type.
@@ -264,12 +264,12 @@ CLASS ZCL_ABAPGIT_OBJECT_ECTD IMPLEMENTATION.
METHOD get_change_information.
DATA: li_document TYPE REF TO if_ixml_document,
- lo_download TYPE REF TO cl_apl_ecatt_data_download,
+ lo_download TYPE REF TO zcl_abapgit_ecatt_data_downl,
lv_xml TYPE xstring.
CREATE OBJECT lo_download.
- lo_download->build_xml_of_object(
+ zcl_abapgit_ecatt_download=>z_build_xml_of_object(
EXPORTING
im_object_name = mv_object_name
im_object_version = is_version_info-version
@@ -318,13 +318,13 @@ CLASS ZCL_ABAPGIT_OBJECT_ECTD IMPLEMENTATION.
METHOD serialize_version.
DATA: li_document TYPE REF TO if_ixml_document,
- lo_download TYPE REF TO cl_apl_ecatt_data_download,
+ lo_download TYPE REF TO zcl_abapgit_ecatt_data_downl,
lv_xml TYPE xstring,
lo_node TYPE REF TO if_ixml_element.
CREATE OBJECT lo_download.
- lo_download->build_xml_of_object(
+ zcl_abapgit_ecatt_download=>z_build_xml_of_object(
EXPORTING
im_object_name = mv_object_name
im_object_version = is_version_info-version
@@ -406,6 +406,8 @@ CLASS ZCL_ABAPGIT_OBJECT_ECTD IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
+ DATA: lx_error TYPE REF TO cx_ecatt_apl.
+
TRY.
cl_apl_ecatt_object=>delete_object( im_obj_type = ms_item-obj_type
im_name = mv_object_name
@@ -414,8 +416,8 @@ CLASS ZCL_ABAPGIT_OBJECT_ECTD IMPLEMENTATION.
im_version = co_default_version
im_delete_all_versions = abap_true ).
- CATCH cx_ecatt_apl INTO DATA(error).
- zcx_abapgit_exception=>raise( error->get_text( ) ).
+ CATCH cx_ecatt_apl INTO lx_error.
+ zcx_abapgit_exception=>raise( lx_error->get_text( ) ).
ENDTRY.
ENDMETHOD.