From 41c9e0880b9371d0886879da19ee082509790010 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Aug 2021 08:20:05 +0200 Subject: [PATCH] ajson, Automatic Update (#4895) --- .github/workflows/ajson_mirror.yaml | 3 + src/data/zcl_abapgit_data_config.clas.abap | 6 +- .../zcl_abapgit_data_deserializer.clas.abap | 4 +- .../zcl_abapgit_pr_enum_github.clas.abap | 9 +- src/http/zif_abapgit_http_response.intf.abap | 2 +- src/json/zcl_abapgit_ajson.clas.abap | 289 ++++++++++-------- .../zcl_abapgit_ajson.clas.locals_imp.abap | 8 +- .../zcl_abapgit_ajson.clas.testclasses.abap | 115 ++++--- src/json/zcl_abapgit_ajson_mapping.clas.abap | 10 +- .../zcl_abapgit_ajson_utilities.clas.abap | 6 +- src/json/zif_abapgit_ajson.intf.abap | 222 ++++++++++++-- src/json/zif_abapgit_ajson_reader.intf.abap | 72 ----- src/json/zif_abapgit_ajson_reader.intf.xml | 15 - src/json/zif_abapgit_ajson_writer.intf.abap | 86 ------ src/json/zif_abapgit_ajson_writer.intf.xml | 15 - 15 files changed, 438 insertions(+), 424 deletions(-) delete mode 100644 src/json/zif_abapgit_ajson_reader.intf.abap delete mode 100644 src/json/zif_abapgit_ajson_reader.intf.xml delete mode 100644 src/json/zif_abapgit_ajson_writer.intf.abap delete mode 100644 src/json/zif_abapgit_ajson_writer.intf.xml diff --git a/.github/workflows/ajson_mirror.yaml b/.github/workflows/ajson_mirror.yaml index 7c6b7a668..744d91351 100644 --- a/.github/workflows/ajson_mirror.yaml +++ b/.github/workflows/ajson_mirror.yaml @@ -29,8 +29,11 @@ jobs: if: github.repository == 'abapGit/abapGit' with: title: ajson, Automatic Update + branch: automatic/ajson body: | Automatic update from mirror https://github.com/abapGit/ajson_mirror Make manual change to trigger CI + + Note: manual changes might be overwritten when the branch updates, so keep changes small, and merge fast diff --git a/src/data/zcl_abapgit_data_config.clas.abap b/src/data/zcl_abapgit_data_config.clas.abap index c98404a00..46891fb46 100644 --- a/src/data/zcl_abapgit_data_config.clas.abap +++ b/src/data/zcl_abapgit_data_config.clas.abap @@ -22,7 +22,7 @@ ENDCLASS. -CLASS zcl_abapgit_data_config IMPLEMENTATION. +CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION. METHOD dump. @@ -32,7 +32,7 @@ CLASS zcl_abapgit_data_config IMPLEMENTATION. TRY. lo_ajson = zcl_abapgit_ajson=>create_empty( ). - lo_ajson->zif_abapgit_ajson_writer~set( + lo_ajson->zif_abapgit_ajson~set( iv_path = '/' iv_val = is_config ). rv_json = zcl_abapgit_convert=>string_to_xstring_utf8( lo_ajson->stringify( 2 ) ). @@ -69,7 +69,7 @@ CLASS zcl_abapgit_data_config IMPLEMENTATION. AND filename CP |*.{ zif_abapgit_data_config=>c_config }.{ zif_abapgit_data_config=>c_default_format }|. TRY. lo_ajson = zcl_abapgit_ajson=>parse( zcl_abapgit_convert=>xstring_to_string_utf8( ls_file-data ) ). - lo_ajson->zif_abapgit_ajson_reader~to_abap( IMPORTING ev_container = ls_config ). + lo_ajson->zif_abapgit_ajson~to_abap( IMPORTING ev_container = ls_config ). CATCH zcx_abapgit_ajson_error INTO lx_ajson. zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ). ENDTRY. diff --git a/src/data/zcl_abapgit_data_deserializer.clas.abap b/src/data/zcl_abapgit_data_deserializer.clas.abap index 6444da9a3..b4b831286 100644 --- a/src/data/zcl_abapgit_data_deserializer.clas.abap +++ b/src/data/zcl_abapgit_data_deserializer.clas.abap @@ -45,7 +45,7 @@ ENDCLASS. -CLASS zcl_abapgit_data_deserializer IMPLEMENTATION. +CLASS ZCL_ABAPGIT_DATA_DESERIALIZER IMPLEMENTATION. METHOD convert_json_to_itab. @@ -59,7 +59,7 @@ CLASS zcl_abapgit_data_deserializer IMPLEMENTATION. TRY. lo_ajson = zcl_abapgit_ajson=>parse( zcl_abapgit_convert=>xstring_to_string_utf8( is_file-data ) ). - lo_ajson->zif_abapgit_ajson_reader~to_abap( IMPORTING ev_container = ). + lo_ajson->zif_abapgit_ajson~to_abap( IMPORTING ev_container = ). CATCH zcx_abapgit_ajson_error INTO lx_ajson. zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ). ENDTRY. diff --git a/src/git_platform/zcl_abapgit_pr_enum_github.clas.abap b/src/git_platform/zcl_abapgit_pr_enum_github.clas.abap index c2509aedb..70cbd5aa3 100644 --- a/src/git_platform/zcl_abapgit_pr_enum_github.clas.abap +++ b/src/git_platform/zcl_abapgit_pr_enum_github.clas.abap @@ -18,7 +18,7 @@ CLASS zcl_abapgit_pr_enum_github DEFINITION TYPES: BEGIN OF ty_info, - repo_json TYPE REF TO zif_abapgit_ajson_reader, + repo_json TYPE REF TO zif_abapgit_ajson, pulls TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests, END OF ty_info. @@ -35,7 +35,7 @@ CLASS zcl_abapgit_pr_enum_github DEFINITION METHODS convert_list IMPORTING - ii_json TYPE REF TO zif_abapgit_ajson_reader + ii_json TYPE REF TO zif_abapgit_ajson RETURNING VALUE(rt_pulls) TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests. @@ -44,12 +44,11 @@ CLASS zcl_abapgit_pr_enum_github DEFINITION iv_url TYPE string RETURNING VALUE(rv_url) TYPE string. - ENDCLASS. -CLASS zcl_abapgit_pr_enum_github IMPLEMENTATION. +CLASS ZCL_ABAPGIT_PR_ENUM_GITHUB IMPLEMENTATION. METHOD clean_url. @@ -101,7 +100,7 @@ CLASS zcl_abapgit_pr_enum_github IMPLEMENTATION. METHOD fetch_repo_by_url. - DATA li_pulls_json TYPE REF TO zif_abapgit_ajson_reader. + DATA li_pulls_json TYPE REF TO zif_abapgit_ajson. DATA lv_pull_url TYPE string. DATA li_response TYPE REF TO zif_abapgit_http_response. DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error. diff --git a/src/http/zif_abapgit_http_response.intf.abap b/src/http/zif_abapgit_http_response.intf.abap index ebd59e913..b3f5e475e 100644 --- a/src/http/zif_abapgit_http_response.intf.abap +++ b/src/http/zif_abapgit_http_response.intf.abap @@ -10,7 +10,7 @@ INTERFACE zif_abapgit_http_response VALUE(rv_data) TYPE string . METHODS json RETURNING - VALUE(ri_json) TYPE REF TO zif_abapgit_ajson_reader + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson RAISING zcx_abapgit_ajson_error . METHODS is_ok diff --git a/src/json/zcl_abapgit_ajson.clas.abap b/src/json/zcl_abapgit_ajson.clas.abap index 443603aeb..f0fda0795 100644 --- a/src/json/zcl_abapgit_ajson.clas.abap +++ b/src/json/zcl_abapgit_ajson.clas.abap @@ -7,32 +7,32 @@ CLASS zcl_abapgit_ajson DEFINITION INTERFACES zif_abapgit_ajson . ALIASES: - exists FOR zif_abapgit_ajson_reader~exists, - members FOR zif_abapgit_ajson_reader~members, - get FOR zif_abapgit_ajson_reader~get, - get_boolean FOR zif_abapgit_ajson_reader~get_boolean, - get_integer FOR zif_abapgit_ajson_reader~get_integer, - get_number FOR zif_abapgit_ajson_reader~get_number, - get_date FOR zif_abapgit_ajson_reader~get_date, - get_timestamp FOR zif_abapgit_ajson_reader~get_timestamp, - get_string FOR zif_abapgit_ajson_reader~get_string, - slice FOR zif_abapgit_ajson_reader~slice, - to_abap FOR zif_abapgit_ajson_reader~to_abap, - array_to_string_table FOR zif_abapgit_ajson_reader~array_to_string_table. + exists FOR zif_abapgit_ajson~exists, + members FOR zif_abapgit_ajson~members, + get FOR zif_abapgit_ajson~get, + get_boolean FOR zif_abapgit_ajson~get_boolean, + get_integer FOR zif_abapgit_ajson~get_integer, + get_number FOR zif_abapgit_ajson~get_number, + get_date FOR zif_abapgit_ajson~get_date, + get_timestamp FOR zif_abapgit_ajson~get_timestamp, + get_string FOR zif_abapgit_ajson~get_string, + slice FOR zif_abapgit_ajson~slice, + to_abap FOR zif_abapgit_ajson~to_abap, + array_to_string_table FOR zif_abapgit_ajson~array_to_string_table. ALIASES: - clear FOR zif_abapgit_ajson_writer~clear, - set FOR zif_abapgit_ajson_writer~set, - set_boolean FOR zif_abapgit_ajson_writer~set_boolean, - set_string FOR zif_abapgit_ajson_writer~set_string, - set_integer FOR zif_abapgit_ajson_writer~set_integer, - set_date FOR zif_abapgit_ajson_writer~set_date, - set_timestamp FOR zif_abapgit_ajson_writer~set_timestamp, - set_null FOR zif_abapgit_ajson_writer~set_null, - delete FOR zif_abapgit_ajson_writer~delete, - touch_array FOR zif_abapgit_ajson_writer~touch_array, - push FOR zif_abapgit_ajson_writer~push, - stringify FOR zif_abapgit_ajson_writer~stringify. + clear FOR zif_abapgit_ajson~clear, + set FOR zif_abapgit_ajson~set, + set_boolean FOR zif_abapgit_ajson~set_boolean, + set_string FOR zif_abapgit_ajson~set_string, + set_integer FOR zif_abapgit_ajson~set_integer, + set_date FOR zif_abapgit_ajson~set_date, + set_timestamp FOR zif_abapgit_ajson~set_timestamp, + set_null FOR zif_abapgit_ajson~set_null, + delete FOR zif_abapgit_ajson~delete, + touch_array FOR zif_abapgit_ajson~touch_array, + push FOR zif_abapgit_ajson~push, + stringify FOR zif_abapgit_ajson~stringify. ALIASES: mt_json_tree FOR zif_abapgit_ajson~mt_json_tree, @@ -217,7 +217,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~array_to_string_table. + METHOD zif_abapgit_ajson~array_to_string_table. DATA lv_normalized_path TYPE string. DATA lr_node TYPE REF TO zif_abapgit_ajson=>ty_node. @@ -256,7 +256,36 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~exists. + METHOD zif_abapgit_ajson~clear. + + IF mv_read_only = abap_true. + zcx_abapgit_ajson_error=>raise( 'This json instance is read only' ). + ENDIF. + + CLEAR mt_json_tree. + + ENDMETHOD. + + + METHOD zif_abapgit_ajson~delete. + + IF mv_read_only = abap_true. + zcx_abapgit_ajson_error=>raise( 'This json instance is read only' ). + ENDIF. + + DATA ls_split_path TYPE zif_abapgit_ajson=>ty_path_name. + ls_split_path = lcl_utils=>split_path( iv_path ). + + delete_subtree( + iv_path = ls_split_path-path + iv_name = ls_split_path-name ). + + ri_json = me. + + ENDMETHOD. + + + METHOD zif_abapgit_ajson~exists. DATA lv_item TYPE REF TO zif_abapgit_ajson=>ty_node. lv_item = get_item( iv_path ). @@ -267,7 +296,12 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~get. + METHOD zif_abapgit_ajson~freeze. + mv_read_only = abap_true. + ENDMETHOD. + + + METHOD zif_abapgit_ajson~get. DATA lv_item TYPE REF TO zif_abapgit_ajson=>ty_node. lv_item = get_item( iv_path ). @@ -278,7 +312,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~get_boolean. + METHOD zif_abapgit_ajson~get_boolean. DATA lv_item TYPE REF TO zif_abapgit_ajson=>ty_node. lv_item = get_item( iv_path ). @@ -293,7 +327,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~get_date. + METHOD zif_abapgit_ajson~get_date. DATA lv_item TYPE REF TO zif_abapgit_ajson=>ty_node. DATA lv_y TYPE c LENGTH 4. @@ -312,7 +346,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~get_integer. + METHOD zif_abapgit_ajson~get_integer. DATA lv_item TYPE REF TO zif_abapgit_ajson=>ty_node. lv_item = get_item( iv_path ). @@ -323,7 +357,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~get_node_type. + METHOD zif_abapgit_ajson~get_node_type. DATA lv_item TYPE REF TO zif_abapgit_ajson=>ty_node. lv_item = get_item( iv_path ). @@ -334,7 +368,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~get_number. + METHOD zif_abapgit_ajson~get_number. DATA lv_item TYPE REF TO zif_abapgit_ajson=>ty_node. lv_item = get_item( iv_path ). @@ -345,7 +379,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~get_string. + METHOD zif_abapgit_ajson~get_string. DATA lv_item TYPE REF TO zif_abapgit_ajson=>ty_node. lv_item = get_item( iv_path ). @@ -356,7 +390,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~get_timestamp. + METHOD zif_abapgit_ajson~get_timestamp. DATA lo_to_abap TYPE REF TO lcl_json_to_abap. DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node. @@ -378,7 +412,13 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~members. + METHOD zif_abapgit_ajson~keep_item_order. + mv_keep_item_order = abap_true. + ri_json = me. + ENDMETHOD. + + + METHOD zif_abapgit_ajson~members. DATA lv_normalized_path TYPE string. FIELD-SYMBOLS LIKE LINE OF mt_json_tree. @@ -392,82 +432,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_reader~slice. - - DATA lo_section TYPE REF TO zcl_abapgit_ajson. - DATA ls_item LIKE LINE OF mt_json_tree. - DATA lv_normalized_path TYPE string. - DATA ls_path_parts TYPE zif_abapgit_ajson=>ty_path_name. - DATA lv_path_len TYPE i. - - CREATE OBJECT lo_section. - lv_normalized_path = lcl_utils=>normalize_path( iv_path ). - lv_path_len = strlen( lv_normalized_path ). - ls_path_parts = lcl_utils=>split_path( lv_normalized_path ). - - LOOP AT mt_json_tree INTO ls_item. - " TODO potentially improve performance due to sorted tree (all path started from same prefix go in a row) - IF strlen( ls_item-path ) >= lv_path_len - AND substring( val = ls_item-path - len = lv_path_len ) = lv_normalized_path. - ls_item-path = substring( val = ls_item-path - off = lv_path_len - 1 ). " less closing '/' - INSERT ls_item INTO TABLE lo_section->mt_json_tree. - ELSEIF ls_item-path = ls_path_parts-path AND ls_item-name = ls_path_parts-name. - CLEAR: ls_item-path, ls_item-name. " this becomes a new root - INSERT ls_item INTO TABLE lo_section->mt_json_tree. - ENDIF. - ENDLOOP. - - ri_json = lo_section. - - ENDMETHOD. - - - METHOD zif_abapgit_ajson_reader~to_abap. - - DATA lo_to_abap TYPE REF TO lcl_json_to_abap. - - CLEAR ev_container. - lcl_json_to_abap=>bind( - EXPORTING - ii_custom_mapping = mi_custom_mapping - CHANGING - c_obj = ev_container - co_instance = lo_to_abap ). - lo_to_abap->to_abap( mt_json_tree ). - - ENDMETHOD. - - - METHOD zif_abapgit_ajson_writer~clear. - - IF mv_read_only = abap_true. - zcx_abapgit_ajson_error=>raise( 'This json instance is read only' ). - ENDIF. - - CLEAR mt_json_tree. - - ENDMETHOD. - - - METHOD zif_abapgit_ajson_writer~delete. - - IF mv_read_only = abap_true. - zcx_abapgit_ajson_error=>raise( 'This json instance is read only' ). - ENDIF. - - DATA ls_split_path TYPE zif_abapgit_ajson=>ty_path_name. - ls_split_path = lcl_utils=>split_path( iv_path ). - - delete_subtree( - iv_path = ls_split_path-path - iv_name = ls_split_path-name ). - - ENDMETHOD. - - - METHOD zif_abapgit_ajson_writer~push. + METHOD zif_abapgit_ajson~push. DATA lr_parent TYPE REF TO zif_abapgit_ajson=>ty_node. DATA lr_new_node TYPE REF TO zif_abapgit_ajson=>ty_node. @@ -504,10 +469,12 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. lr_parent->children = lr_parent->children + 1. INSERT LINES OF lt_new_nodes INTO TABLE mt_json_tree. + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson_writer~set. + METHOD zif_abapgit_ajson~set. DATA ls_split_path TYPE zif_abapgit_ajson=>ty_path_name. DATA lr_parent TYPE REF TO zif_abapgit_ajson=>ty_node. @@ -587,22 +554,26 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. lr_parent->children = lr_parent->children + 1. INSERT LINES OF lt_new_nodes INTO TABLE mt_json_tree. + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson_writer~set_boolean. + METHOD zif_abapgit_ajson~set_boolean. DATA lv_bool TYPE abap_bool. lv_bool = boolc( iv_val IS NOT INITIAL ). - zif_abapgit_ajson_writer~set( + zif_abapgit_ajson~set( iv_ignore_empty = abap_false iv_path = iv_path iv_val = lv_bool ). + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson_writer~set_date. + METHOD zif_abapgit_ajson~set_date. DATA lv_val TYPE string. @@ -610,51 +581,60 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. lv_val = iv_val+0(4) && '-' && iv_val+4(2) && '-' && iv_val+6(2). ENDIF. - zif_abapgit_ajson_writer~set( + zif_abapgit_ajson~set( iv_ignore_empty = abap_false iv_path = iv_path iv_val = lv_val ). + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson_writer~set_integer. + METHOD zif_abapgit_ajson~set_integer. - zif_abapgit_ajson_writer~set( + zif_abapgit_ajson~set( iv_ignore_empty = abap_false iv_path = iv_path iv_val = iv_val ). + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson_writer~set_null. + METHOD zif_abapgit_ajson~set_null. DATA lv_null_ref TYPE REF TO data. - zif_abapgit_ajson_writer~set( + zif_abapgit_ajson~set( iv_ignore_empty = abap_false iv_path = iv_path iv_val = lv_null_ref ). + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson_writer~set_string. + METHOD zif_abapgit_ajson~set_string. DATA lv_val TYPE string. lv_val = iv_val. - zif_abapgit_ajson_writer~set( + zif_abapgit_ajson~set( iv_ignore_empty = abap_false iv_path = iv_path iv_val = lv_val ). + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson_writer~set_timestamp. + METHOD zif_abapgit_ajson~set_timestamp. + + CONSTANTS lc_utc TYPE c LENGTH 6 VALUE 'UTC'. DATA: - lv_tz TYPE tznzone, lv_date TYPE d, lv_time TYPE t, lv_timestamp_iso TYPE string. @@ -664,8 +644,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. lv_date = '00010101'. ELSE. - lv_tz = 'UTC'. - CONVERT TIME STAMP iv_val TIME ZONE lv_tz + CONVERT TIME STAMP iv_val TIME ZONE lc_utc INTO DATE lv_date TIME lv_time. ENDIF. @@ -676,15 +655,49 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. lv_time+0(2) && '-' && lv_time+2(2) && '-' && lv_time+4(2) && 'Z'. - zif_abapgit_ajson_writer~set( + zif_abapgit_ajson~set( iv_ignore_empty = abap_false iv_path = iv_path iv_val = lv_timestamp_iso ). + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson_writer~stringify. + METHOD zif_abapgit_ajson~slice. + + DATA lo_section TYPE REF TO zcl_abapgit_ajson. + DATA ls_item LIKE LINE OF mt_json_tree. + DATA lv_normalized_path TYPE string. + DATA ls_path_parts TYPE zif_abapgit_ajson=>ty_path_name. + DATA lv_path_len TYPE i. + + CREATE OBJECT lo_section. + lv_normalized_path = lcl_utils=>normalize_path( iv_path ). + lv_path_len = strlen( lv_normalized_path ). + ls_path_parts = lcl_utils=>split_path( lv_normalized_path ). + + LOOP AT mt_json_tree INTO ls_item. + " TODO potentially improve performance due to sorted tree (all path started from same prefix go in a row) + IF strlen( ls_item-path ) >= lv_path_len + AND substring( val = ls_item-path + len = lv_path_len ) = lv_normalized_path. + ls_item-path = substring( val = ls_item-path + off = lv_path_len - 1 ). " less closing '/' + INSERT ls_item INTO TABLE lo_section->mt_json_tree. + ELSEIF ls_item-path = ls_path_parts-path AND ls_item-name = ls_path_parts-name. + CLEAR: ls_item-path, ls_item-name. " this becomes a new root + INSERT ls_item INTO TABLE lo_section->mt_json_tree. + ENDIF. + ENDLOOP. + + ri_json = lo_section. + + ENDMETHOD. + + + METHOD zif_abapgit_ajson~stringify. rv_json = lcl_json_serializer=>stringify( it_json_tree = mt_json_tree @@ -694,7 +707,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_ajson_writer~touch_array. + METHOD zif_abapgit_ajson~touch_array. DATA lr_node TYPE REF TO zif_abapgit_ajson=>ty_node. DATA ls_new_node LIKE LINE OF mt_json_tree. @@ -740,15 +753,23 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION. zcx_abapgit_ajson_error=>raise( |Path [{ iv_path }] already used and is not array| ). ENDIF. + ri_json = me. + ENDMETHOD. - METHOD zif_abapgit_ajson~freeze. - mv_read_only = abap_true. - ENDMETHOD. + METHOD zif_abapgit_ajson~to_abap. + DATA lo_to_abap TYPE REF TO lcl_json_to_abap. + + CLEAR ev_container. + lcl_json_to_abap=>bind( + EXPORTING + ii_custom_mapping = mi_custom_mapping + CHANGING + c_obj = ev_container + co_instance = lo_to_abap ). + lo_to_abap->to_abap( mt_json_tree ). - METHOD zif_abapgit_ajson~keep_item_order. - mv_keep_item_order = abap_true. ENDMETHOD. ENDCLASS. diff --git a/src/json/zcl_abapgit_ajson.clas.locals_imp.abap b/src/json/zcl_abapgit_ajson.clas.locals_imp.abap index d91a7f474..eed8b96f1 100644 --- a/src/json/zcl_abapgit_ajson.clas.locals_imp.abap +++ b/src/json/zcl_abapgit_ajson.clas.locals_imp.abap @@ -700,11 +700,11 @@ CLASS lcl_json_to_abap IMPLEMENTATION. METHOD to_timestamp. - CONSTANTS lc_tzone_utc TYPE tznzone VALUE `UTC`. + CONSTANTS lc_utc TYPE c LENGTH 6 VALUE 'UTC'. CONSTANTS lc_regex_ts_with_hour TYPE string - VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(\+)(\d{2}):(\d{2})`. + VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(\+)(\d{2}):(\d{2})`. CONSTANTS lc_regex_ts_utc TYPE string - VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(Z|$)`. + VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(Z|$)`. DATA: BEGIN OF ls_timestamp, @@ -751,7 +751,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION. CONCATENATE ls_timestamp-year ls_timestamp-month ls_timestamp-day INTO lv_date. CONCATENATE ls_timestamp-hour ls_timestamp-minute ls_timestamp-second INTO lv_time. - CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_timestamp TIME ZONE lc_tzone_utc. + CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_timestamp TIME ZONE lc_utc. TRY. diff --git a/src/json/zcl_abapgit_ajson.clas.testclasses.abap b/src/json/zcl_abapgit_ajson.clas.testclasses.abap index 372dac1b9..1fe56167a 100644 --- a/src/json/zcl_abapgit_ajson.clas.testclasses.abap +++ b/src/json/zcl_abapgit_ajson.clas.testclasses.abap @@ -1,5 +1,3 @@ - - ********************************************************************** * UTIL ********************************************************************** @@ -863,7 +861,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_cut = zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). - lo_cut ?= lo_cut->zif_abapgit_ajson_reader~slice( '/issues' ). + lo_cut ?= lo_cut->zif_abapgit_ajson~slice( '/issues' ). cl_abap_unit_assert=>assert_equals( act = lo_cut->mt_json_tree exp = lo_nodes->sorted( ) ). @@ -902,7 +900,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_nodes->add( '/issues/2/ |filename |str |./zxxx.prog.abap | |0' ). lo_cut = zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). - lo_cut ?= lo_cut->zif_abapgit_ajson_reader~slice( '/' ). + lo_cut ?= lo_cut->zif_abapgit_ajson~slice( '/' ). cl_abap_unit_assert=>assert_equals( act = lo_cut->mt_json_tree exp = lo_nodes->sorted( ) ). @@ -915,7 +913,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_nodes->add( '/ |col |num |21 | |0' ). lo_cut = zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). - lo_cut ?= lo_cut->zif_abapgit_ajson_reader~slice( '/issues/2/start/' ). + lo_cut ?= lo_cut->zif_abapgit_ajson~slice( '/issues/2/start/' ). cl_abap_unit_assert=>assert_equals( act = lo_cut->mt_json_tree exp = lo_nodes->sorted( ) ). @@ -924,7 +922,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. METHOD get_value. - DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader. + DATA lo_cut TYPE REF TO zif_abapgit_ajson. lo_cut ?= zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). cl_abap_unit_assert=>assert_equals( @@ -947,7 +945,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. METHOD get_node_type. - DATA li_cut TYPE REF TO zif_abapgit_ajson_reader. + DATA li_cut TYPE REF TO zif_abapgit_ajson. li_cut = zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). cl_abap_unit_assert=>assert_equals( @@ -995,7 +993,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_cut->mt_json_tree = lo_nodes->mt_nodes. cl_abap_unit_assert=>assert_equals( - act = lo_cut->zif_abapgit_ajson_reader~get_date( '/date1' ) + act = lo_cut->zif_abapgit_ajson~get_date( '/date1' ) exp = lv_exp ). CREATE OBJECT lo_nodes. @@ -1004,7 +1002,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_cut->mt_json_tree = lo_nodes->mt_nodes. cl_abap_unit_assert=>assert_equals( - act = lo_cut->zif_abapgit_ajson_reader~get_date( '/date1' ) + act = lo_cut->zif_abapgit_ajson~get_date( '/date1' ) exp = lv_exp ). CREATE OBJECT lo_nodes. @@ -1013,7 +1011,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_cut->mt_json_tree = lo_nodes->mt_nodes. cl_abap_unit_assert=>assert_equals( - act = lo_cut->zif_abapgit_ajson_reader~get_date( '/date1' ) + act = lo_cut->zif_abapgit_ajson~get_date( '/date1' ) exp = '' ). ENDMETHOD. @@ -1032,14 +1030,14 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_cut->mt_json_tree = lo_nodes->mt_nodes. cl_abap_unit_assert=>assert_equals( - act = lo_cut->zif_abapgit_ajson_reader~get_timestamp( '/timestamp' ) + act = lo_cut->zif_abapgit_ajson~get_timestamp( '/timestamp' ) exp = lv_exp ). ENDMETHOD. METHOD exists. - DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader. + DATA lo_cut TYPE REF TO zif_abapgit_ajson. lo_cut ?= zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). @@ -1063,7 +1061,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. METHOD value_integer. - DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader. + DATA lo_cut TYPE REF TO zif_abapgit_ajson. lo_cut ?= zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). cl_abap_unit_assert=>assert_equals( @@ -1082,7 +1080,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. METHOD value_number. - DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader. + DATA lo_cut TYPE REF TO zif_abapgit_ajson. lo_cut ?= zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). cl_abap_unit_assert=>assert_equals( @@ -1101,7 +1099,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. METHOD value_boolean. - DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader. + DATA lo_cut TYPE REF TO zif_abapgit_ajson. lo_cut ?= zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). cl_abap_unit_assert=>assert_equals( @@ -1124,7 +1122,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. METHOD value_string. - DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader. + DATA lo_cut TYPE REF TO zif_abapgit_ajson. lo_cut ?= zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). cl_abap_unit_assert=>assert_equals( @@ -1148,7 +1146,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. METHOD members. DATA lt_exp TYPE string_table. - DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader. + DATA lo_cut TYPE REF TO zif_abapgit_ajson. lo_cut ?= zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). CLEAR lt_exp. @@ -1193,7 +1191,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. CREATE OBJECT lo_cut. lo_cut->mt_json_tree = lo_nodes->mt_nodes. - lt_act = lo_cut->zif_abapgit_ajson_reader~array_to_string_table( '/' ). + lt_act = lo_cut->zif_abapgit_ajson~array_to_string_table( '/' ). cl_abap_unit_assert=>assert_equals( act = lt_act exp = lt_exp ). @@ -1207,7 +1205,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_cut->mt_json_tree = lo_nodes->mt_nodes. TRY. - lo_cut->zif_abapgit_ajson_reader~array_to_string_table( '/x' ). + lo_cut->zif_abapgit_ajson~array_to_string_table( '/x' ). cl_abap_unit_assert=>fail( ). CATCH zcx_abapgit_ajson_error INTO lx. cl_abap_unit_assert=>assert_equals( @@ -1216,7 +1214,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. ENDTRY. TRY. - lo_cut->zif_abapgit_ajson_reader~array_to_string_table( '/' ). + lo_cut->zif_abapgit_ajson~array_to_string_table( '/' ). cl_abap_unit_assert=>fail( ). CATCH zcx_abapgit_ajson_error INTO lx. cl_abap_unit_assert=>assert_equals( @@ -1225,7 +1223,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. ENDTRY. TRY. - lo_cut->zif_abapgit_ajson_reader~array_to_string_table( '/a' ). + lo_cut->zif_abapgit_ajson~array_to_string_table( '/a' ). cl_abap_unit_assert=>fail( ). CATCH zcx_abapgit_ajson_error INTO lx. cl_abap_unit_assert=>assert_equals( @@ -1239,7 +1237,7 @@ CLASS ltcl_reader_test IMPLEMENTATION. lo_cut->mt_json_tree = lo_nodes->mt_nodes. TRY. - lo_cut->zif_abapgit_ajson_reader~array_to_string_table( '/' ). + lo_cut->zif_abapgit_ajson~array_to_string_table( '/' ). cl_abap_unit_assert=>fail( ). CATCH zcx_abapgit_ajson_error INTO lx. cl_abap_unit_assert=>assert_equals( @@ -1679,7 +1677,7 @@ CLASS ltcl_writer_test DEFINITION FINAL METHODS set_with_type_slice IMPORTING io_json_in TYPE REF TO zcl_abapgit_ajson - io_json_out TYPE REF TO zif_abapgit_ajson_writer + io_json_out TYPE REF TO zif_abapgit_ajson iv_path TYPE string RAISING zcx_abapgit_ajson_error. @@ -1770,7 +1768,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. lo_nodes_exp->add( ' | |object | ||1' ). lo_nodes_exp->add( '/ |a |object | ||0' ). - lo_cut->zif_abapgit_ajson_writer~delete( iv_path = '/a/b' ). + lo_cut->zif_abapgit_ajson~delete( iv_path = '/a/b' ). cl_abap_unit_assert=>assert_equals( act = lo_cut->mt_json_tree @@ -1789,7 +1787,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. lo_nodes_exp->add( ' | |object | ||1' ). lo_nodes_exp->add( '/ |a |object | ||0' ). - lo_cut->zif_abapgit_ajson_writer~delete( iv_path = '/a/b/' ). + lo_cut->zif_abapgit_ajson~delete( iv_path = '/a/b/' ). cl_abap_unit_assert=>assert_equals( act = lo_cut->mt_json_tree @@ -1802,7 +1800,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_nodes TYPE REF TO lcl_nodes_helper. DATA lo_src TYPE REF TO zcl_abapgit_ajson. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. lo_src = zcl_abapgit_ajson=>create_empty( ). lo_cut = zcl_abapgit_ajson=>create_empty( ). @@ -1871,7 +1869,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_nodes TYPE REF TO lcl_nodes_helper. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. lo_cut = zcl_abapgit_ajson=>create_empty( ). li_writer = lo_cut. @@ -1902,7 +1900,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_nodes TYPE REF TO lcl_nodes_helper. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. lo_cut = zcl_abapgit_ajson=>create_empty( ). li_writer = lo_cut. @@ -1940,7 +1938,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_nodes TYPE REF TO lcl_nodes_helper. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA: BEGIN OF ls_struc, @@ -1971,7 +1969,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_nodes TYPE REF TO lcl_nodes_helper. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA lt_tab TYPE string_table. lo_cut = zcl_abapgit_ajson=>create_empty( ). @@ -2000,7 +1998,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_nodes TYPE REF TO lcl_nodes_helper. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA lt_tab TYPE HASHED TABLE OF string WITH UNIQUE DEFAULT KEY. lo_cut = zcl_abapgit_ajson=>create_empty( ). @@ -2029,7 +2027,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. lo_cut = zcl_abapgit_ajson=>create_empty( ). li_writer = lo_cut. @@ -2124,7 +2122,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. METHOD arrays_negative. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. lo_cut = zcl_abapgit_ajson=>create_empty( ). li_writer = lo_cut. @@ -2211,7 +2209,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA: BEGIN OF ls_dummy, x TYPE string VALUE 'hello', @@ -2281,7 +2279,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA lt_tab TYPE string_table. " abap_bool @@ -2349,7 +2347,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA lv_date TYPE d. lo_cut = zcl_abapgit_ajson=>create_empty( ). @@ -2381,7 +2379,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. lo_cut = zcl_abapgit_ajson=>create_empty( ). li_writer = lo_cut. @@ -2403,7 +2401,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA lv_date TYPE d. lo_cut = zcl_abapgit_ajson=>create_empty( ). @@ -2427,7 +2425,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA lv_timestamp TYPE timestamp. lo_cut = zcl_abapgit_ajson=>create_empty( ). @@ -2450,7 +2448,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. METHOD read_only. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. lo_cut = zcl_abapgit_ajson=>create_empty( ). li_writer = lo_cut. @@ -2506,7 +2504,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. CREATE OBJECT lo_nodes_exp. lo_nodes_exp->add( ' | |object | | |1' ). @@ -2547,7 +2545,7 @@ CLASS ltcl_writer_test IMPLEMENTATION. DATA lo_sample TYPE REF TO zcl_abapgit_ajson. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. lo_sample = zcl_abapgit_ajson=>parse( ltcl_parser_test=>sample_json( ) ). @@ -2634,6 +2632,7 @@ CLASS ltcl_integrated DEFINITION METHODS array_simple FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS stringify FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS item_order_integrated FOR TESTING RAISING zcx_abapgit_ajson_error. + METHODS chaining FOR TESTING RAISING zcx_abapgit_ajson_error. ENDCLASS. @@ -2657,7 +2656,7 @@ CLASS ltcl_integrated IMPLEMENTATION. ENDDO. lv_src = lv_src && ']'. - DATA li_reader TYPE REF TO zif_abapgit_ajson_reader. + DATA li_reader TYPE REF TO zif_abapgit_ajson. li_reader = zcl_abapgit_ajson=>parse( lv_src ). li_reader->to_abap( IMPORTING ev_container = lt_act ). @@ -2685,7 +2684,7 @@ CLASS ltcl_integrated IMPLEMENTATION. ENDDO. lv_src = lv_src && ']'. - DATA li_reader TYPE REF TO zif_abapgit_ajson_reader. + DATA li_reader TYPE REF TO zif_abapgit_ajson. li_reader = zcl_abapgit_ajson=>parse( lv_src ). li_reader->to_abap( IMPORTING ev_container = lt_act ). @@ -2698,7 +2697,7 @@ CLASS ltcl_integrated IMPLEMENTATION. METHOD reader. DATA lv_source TYPE string. - DATA li_reader TYPE REF TO zif_abapgit_ajson_reader. + DATA li_reader TYPE REF TO zif_abapgit_ajson. lv_source = ltcl_parser_test=>sample_json( ). li_reader = zcl_abapgit_ajson=>parse( lv_source ). @@ -2747,7 +2746,7 @@ CLASS ltcl_integrated IMPLEMENTATION. METHOD stringify. DATA lo_cut TYPE REF TO zcl_abapgit_ajson. - DATA li_writer TYPE REF TO zif_abapgit_ajson_writer. + DATA li_writer TYPE REF TO zif_abapgit_ajson. DATA lv_exp TYPE string. DATA: BEGIN OF ls_dummy, x TYPE i, END OF ls_dummy. @@ -2865,6 +2864,30 @@ CLASS ltcl_integrated IMPLEMENTATION. ENDMETHOD. + METHOD chaining. + + DATA li_cut TYPE REF TO zif_abapgit_ajson. + + li_cut = zcl_abapgit_ajson=>create_empty( ). + + cl_abap_unit_assert=>assert_bound( + li_cut->set( + iv_path = '/a' + iv_val = 1 ) ). + + cl_abap_unit_assert=>assert_bound( li_cut->delete( iv_path = '/a' ) ). + + cl_abap_unit_assert=>assert_bound( li_cut->touch_array( iv_path = '/array' ) ). + + cl_abap_unit_assert=>assert_bound( + li_cut->push( + iv_path = '/array' + iv_val = '1' ) ). + + cl_abap_unit_assert=>assert_bound( li_cut->keep_item_order( ) ). + + ENDMETHOD. + ENDCLASS. ********************************************************************** diff --git a/src/json/zcl_abapgit_ajson_mapping.clas.abap b/src/json/zcl_abapgit_ajson_mapping.clas.abap index f35de2ff9..08e8f838c 100644 --- a/src/json/zcl_abapgit_ajson_mapping.clas.abap +++ b/src/json/zcl_abapgit_ajson_mapping.clas.abap @@ -50,9 +50,9 @@ CLASS zcl_abapgit_ajson_mapping IMPLEMENTATION. ENDMETHOD. - METHOD create_upper_case. + METHOD create_field_mapping. - CREATE OBJECT ri_mapping TYPE lcl_mapping_to_upper + CREATE OBJECT ri_mapping TYPE lcl_mapping_fields EXPORTING it_mapping_fields = it_mapping_fields. @@ -68,13 +68,11 @@ CLASS zcl_abapgit_ajson_mapping IMPLEMENTATION. ENDMETHOD. - METHOD create_field_mapping. + METHOD create_upper_case. - CREATE OBJECT ri_mapping TYPE lcl_mapping_fields + CREATE OBJECT ri_mapping TYPE lcl_mapping_to_upper EXPORTING it_mapping_fields = it_mapping_fields. ENDMETHOD. - - ENDCLASS. diff --git a/src/json/zcl_abapgit_ajson_utilities.clas.abap b/src/json/zcl_abapgit_ajson_utilities.clas.abap index e7845b424..0a6375d19 100644 --- a/src/json/zcl_abapgit_ajson_utilities.clas.abap +++ b/src/json/zcl_abapgit_ajson_utilities.clas.abap @@ -30,9 +30,9 @@ CLASS zcl_abapgit_ajson_utilities DEFINITION DATA mo_json_a TYPE REF TO zif_abapgit_ajson . DATA mo_json_b TYPE REF TO zif_abapgit_ajson . - DATA mo_insert TYPE REF TO zif_abapgit_ajson_writer . - DATA mo_delete TYPE REF TO zif_abapgit_ajson_writer . - DATA mo_change TYPE REF TO zif_abapgit_ajson_writer . + DATA mo_insert TYPE REF TO zif_abapgit_ajson . + DATA mo_delete TYPE REF TO zif_abapgit_ajson . + DATA mo_change TYPE REF TO zif_abapgit_ajson . METHODS diff_a_b IMPORTING diff --git a/src/json/zif_abapgit_ajson.intf.abap b/src/json/zif_abapgit_ajson.intf.abap index fe1dfba05..50455b8f9 100644 --- a/src/json/zif_abapgit_ajson.intf.abap +++ b/src/json/zif_abapgit_ajson.intf.abap @@ -1,11 +1,9 @@ INTERFACE zif_abapgit_ajson - PUBLIC . + PUBLIC. - CONSTANTS version TYPE string VALUE 'v1.0.4'. - CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. - - INTERFACES zif_abapgit_ajson_reader. - INTERFACES zif_abapgit_ajson_writer. + CONSTANTS version TYPE string VALUE 'v1.1.0-pre1'. "#EC NOTEXT + CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT + CONSTANTS license TYPE string VALUE 'MIT'. "#EC NOTEXT CONSTANTS: BEGIN OF node_type, @@ -47,34 +45,194 @@ INTERFACE zif_abapgit_ajson " METHODS METHODS freeze. - METHODS keep_item_order. + METHODS keep_item_order + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson. - " METHODS (merged from reader/writer), maybe will completely move to this IF in future ! + " METHODS ex.reader - ALIASES: - exists FOR zif_abapgit_ajson_reader~exists, - members FOR zif_abapgit_ajson_reader~members, - get FOR zif_abapgit_ajson_reader~get, - get_boolean FOR zif_abapgit_ajson_reader~get_boolean, - get_integer FOR zif_abapgit_ajson_reader~get_integer, - get_number FOR zif_abapgit_ajson_reader~get_number, - get_date FOR zif_abapgit_ajson_reader~get_date, - get_string FOR zif_abapgit_ajson_reader~get_string, - slice FOR zif_abapgit_ajson_reader~slice, - to_abap FOR zif_abapgit_ajson_reader~to_abap, - array_to_string_table FOR zif_abapgit_ajson_reader~array_to_string_table. + METHODS exists + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_exists) TYPE abap_bool. - ALIASES: - clear FOR zif_abapgit_ajson_writer~clear, - set FOR zif_abapgit_ajson_writer~set, - set_boolean FOR zif_abapgit_ajson_writer~set_boolean, - set_string FOR zif_abapgit_ajson_writer~set_string, - set_integer FOR zif_abapgit_ajson_writer~set_integer, - set_date FOR zif_abapgit_ajson_writer~set_date, - set_null FOR zif_abapgit_ajson_writer~set_null, - delete FOR zif_abapgit_ajson_writer~delete, - touch_array FOR zif_abapgit_ajson_writer~touch_array, - push FOR zif_abapgit_ajson_writer~push, - stringify FOR zif_abapgit_ajson_writer~stringify. + METHODS members + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rt_members) TYPE string_table. + + METHODS get + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_value) TYPE string. + + METHODS get_node_type + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_node_type) TYPE string. + + METHODS get_boolean + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_value) TYPE abap_bool. + + METHODS get_integer + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_value) TYPE i. + + METHODS get_number + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_value) TYPE f. + + METHODS get_date + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_value) TYPE d. + + METHODS get_timestamp + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_value) TYPE timestamp. + + METHODS get_string + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_value) TYPE string. + + METHODS slice + IMPORTING + iv_path TYPE string + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson. + + METHODS to_abap + EXPORTING + ev_container TYPE any + RAISING + zcx_abapgit_ajson_error. + + METHODS array_to_string_table + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rt_string_table) TYPE string_table + RAISING + zcx_abapgit_ajson_error. + + " METHODS ex.writer + + METHODS clear + RAISING + zcx_abapgit_ajson_error. + + METHODS set + IMPORTING + iv_path TYPE string + iv_val TYPE any + iv_ignore_empty TYPE abap_bool DEFAULT abap_true + iv_node_type TYPE string OPTIONAL + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS set_boolean + IMPORTING + iv_path TYPE string + iv_val TYPE any + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS set_string + IMPORTING + iv_path TYPE string + iv_val TYPE clike + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS set_integer + IMPORTING + iv_path TYPE string + iv_val TYPE i + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS set_date + IMPORTING + iv_path TYPE string + iv_val TYPE d + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS set_timestamp + IMPORTING + iv_path TYPE string + iv_val TYPE timestamp + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS set_null + IMPORTING + iv_path TYPE string + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS delete + IMPORTING + iv_path TYPE string + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS touch_array + IMPORTING + iv_path TYPE string + iv_clear TYPE abap_bool DEFAULT abap_false + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS push + IMPORTING + iv_path TYPE string + iv_val TYPE any + RETURNING + VALUE(ri_json) TYPE REF TO zif_abapgit_ajson + RAISING + zcx_abapgit_ajson_error. + + METHODS stringify + IMPORTING + iv_indent TYPE i DEFAULT 0 + RETURNING + VALUE(rv_json) TYPE string + RAISING + zcx_abapgit_ajson_error. ENDINTERFACE. diff --git a/src/json/zif_abapgit_ajson_reader.intf.abap b/src/json/zif_abapgit_ajson_reader.intf.abap deleted file mode 100644 index 64cfeb8a1..000000000 --- a/src/json/zif_abapgit_ajson_reader.intf.abap +++ /dev/null @@ -1,72 +0,0 @@ -INTERFACE zif_abapgit_ajson_reader - PUBLIC . - - METHODS exists - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_exists) TYPE abap_bool. - METHODS members - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rt_members) TYPE string_table. - METHODS get - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_value) TYPE string. - METHODS get_node_type - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_node_type) TYPE string. - METHODS get_boolean - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_value) TYPE abap_bool. - METHODS get_integer - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_value) TYPE i. - METHODS get_number - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_value) TYPE f. - METHODS get_date - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_value) TYPE d. - METHODS get_timestamp - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_value) TYPE timestamp. - METHODS get_string - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rv_value) TYPE string. - METHODS slice - IMPORTING - iv_path TYPE string - RETURNING - VALUE(ri_json) TYPE REF TO zif_abapgit_ajson_reader. - METHODS to_abap - EXPORTING - ev_container TYPE any - RAISING - zcx_abapgit_ajson_error. - METHODS array_to_string_table - IMPORTING - iv_path TYPE string - RETURNING - VALUE(rt_string_table) TYPE string_table - RAISING - zcx_abapgit_ajson_error. - -ENDINTERFACE. diff --git a/src/json/zif_abapgit_ajson_reader.intf.xml b/src/json/zif_abapgit_ajson_reader.intf.xml deleted file mode 100644 index 69952631d..000000000 --- a/src/json/zif_abapgit_ajson_reader.intf.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - ZIF_ABAPGIT_AJSON_READER - E - AJSON reader interface - 2 - 1 - X - - - - diff --git a/src/json/zif_abapgit_ajson_writer.intf.abap b/src/json/zif_abapgit_ajson_writer.intf.abap deleted file mode 100644 index ce8eb54c6..000000000 --- a/src/json/zif_abapgit_ajson_writer.intf.abap +++ /dev/null @@ -1,86 +0,0 @@ -INTERFACE zif_abapgit_ajson_writer - PUBLIC . - - METHODS clear - RAISING - zcx_abapgit_ajson_error. - - METHODS set - IMPORTING - iv_path TYPE string - iv_val TYPE any - iv_ignore_empty TYPE abap_bool DEFAULT abap_true - iv_node_type TYPE string OPTIONAL - RAISING - zcx_abapgit_ajson_error. - - METHODS set_boolean - IMPORTING - iv_path TYPE string - iv_val TYPE any - RAISING - zcx_abapgit_ajson_error. - - METHODS set_string - IMPORTING - iv_path TYPE string - iv_val TYPE clike - RAISING - zcx_abapgit_ajson_error. - - METHODS set_integer - IMPORTING - iv_path TYPE string - iv_val TYPE i - RAISING - zcx_abapgit_ajson_error. - - METHODS set_date - IMPORTING - iv_path TYPE string - iv_val TYPE d - RAISING - zcx_abapgit_ajson_error. - - METHODS set_timestamp - IMPORTING - iv_path TYPE string - iv_val TYPE timestamp - RAISING - zcx_abapgit_ajson_error. - - METHODS set_null - IMPORTING - iv_path TYPE string - RAISING - zcx_abapgit_ajson_error. - - METHODS delete - IMPORTING - iv_path TYPE string - RAISING - zcx_abapgit_ajson_error. - - METHODS touch_array - IMPORTING - iv_path TYPE string - iv_clear TYPE abap_bool DEFAULT abap_false - RAISING - zcx_abapgit_ajson_error. - - METHODS push - IMPORTING - iv_path TYPE string - iv_val TYPE any - RAISING - zcx_abapgit_ajson_error. - - METHODS stringify - IMPORTING - iv_indent TYPE i DEFAULT 0 - RETURNING - VALUE(rv_json) TYPE string - RAISING - zcx_abapgit_ajson_error. - -ENDINTERFACE. diff --git a/src/json/zif_abapgit_ajson_writer.intf.xml b/src/json/zif_abapgit_ajson_writer.intf.xml deleted file mode 100644 index c13f5e249..000000000 --- a/src/json/zif_abapgit_ajson_writer.intf.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - ZIF_ABAPGIT_AJSON_WRITER - E - AJSON writer interface - 2 - 1 - X - - - -