ajson, Automatic Update (#6041)

Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
github-actions[bot] 2023-02-06 07:51:54 +01:00 committed by GitHub
parent 14d0982fa9
commit b7eab01b6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 324 additions and 255 deletions

View File

@ -100,21 +100,21 @@ CLASS zcl_abapgit_ajson DEFINITION
IMPORTING
iv_path TYPE string
RETURNING
VALUE(rv_item) TYPE REF TO zif_abapgit_ajson=>ty_node.
VALUE(rv_item) TYPE REF TO zif_abapgit_ajson_types=>ty_node.
METHODS prove_path_exists
IMPORTING
iv_path TYPE string
RETURNING
VALUE(rr_end_node) TYPE REF TO zif_abapgit_ajson=>ty_node
VALUE(rr_end_node) TYPE REF TO zif_abapgit_ajson_types=>ty_node
RAISING
zcx_abapgit_ajson_error.
METHODS delete_subtree
IMPORTING
iv_path TYPE string
iv_name TYPE string
ir_parent TYPE REF TO zif_abapgit_ajson=>ty_node OPTIONAL
ir_parent TYPE REF TO zif_abapgit_ajson_types=>ty_node OPTIONAL
RETURNING
VALUE(rs_top_node) TYPE zif_abapgit_ajson=>ty_node.
VALUE(rs_top_node) TYPE zif_abapgit_ajson_types=>ty_node.
METHODS read_only_watchdog
RAISING
zcx_abapgit_ajson_error.
@ -210,7 +210,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD get_item.
FIELD-SYMBOLS <item> LIKE LINE OF mt_json_tree.
DATA ls_path_name TYPE zif_abapgit_ajson=>ty_path_name.
DATA ls_path_name TYPE zif_abapgit_ajson_types=>ty_path_name.
ls_path_name = lcl_utils=>split_path( iv_path ).
READ TABLE mt_json_tree
@ -270,7 +270,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
CLEAR ls_new_node.
IF lr_node_parent IS NOT INITIAL. " if has parent
lr_node_parent->children = lr_node_parent->children + 1.
IF lr_node_parent->type = zif_abapgit_ajson=>node_type-array.
IF lr_node_parent->type = zif_abapgit_ajson_types=>node_type-array.
ls_new_node-index = lcl_utils=>validate_array_index(
iv_path = lv_cur_path
iv_index = lv_cur_name ).
@ -278,7 +278,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
ENDIF.
ls_new_node-path = lv_cur_path.
ls_new_node-name = lv_cur_name.
ls_new_node-type = zif_abapgit_ajson=>node_type-object.
ls_new_node-type = zif_abapgit_ajson_types=>node_type-object.
INSERT ls_new_node INTO TABLE mt_json_tree REFERENCE INTO rr_end_node.
ENDIF.
lv_cur_path = lv_cur_path && lv_cur_name && '/'.
@ -301,7 +301,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
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.
DATA lr_node TYPE REF TO zif_abapgit_ajson_types=>ty_node.
FIELD-SYMBOLS <item> LIKE LINE OF mt_json_tree.
lv_normalized_path = lcl_utils=>normalize_path( iv_path ).
@ -310,17 +310,17 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
IF lr_node IS INITIAL.
zcx_abapgit_ajson_error=>raise( |Path not found: { iv_path }| ).
ENDIF.
IF lr_node->type <> zif_abapgit_ajson=>node_type-array.
IF lr_node->type <> zif_abapgit_ajson_types=>node_type-array.
zcx_abapgit_ajson_error=>raise( |Array expected at: { iv_path }| ).
ENDIF.
LOOP AT mt_json_tree ASSIGNING <item> WHERE path = lv_normalized_path.
CASE <item>-type.
WHEN zif_abapgit_ajson=>node_type-number OR zif_abapgit_ajson=>node_type-string.
WHEN zif_abapgit_ajson_types=>node_type-number OR zif_abapgit_ajson_types=>node_type-string.
APPEND <item>-value TO rt_string_table.
WHEN zif_abapgit_ajson=>node_type-null.
WHEN zif_abapgit_ajson_types=>node_type-null.
APPEND '' TO rt_string_table.
WHEN zif_abapgit_ajson=>node_type-boolean.
WHEN zif_abapgit_ajson_types=>node_type-boolean.
DATA lv_tmp TYPE string.
IF <item>-value = 'true'.
lv_tmp = abap_true.
@ -354,7 +354,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
read_only_watchdog( ).
DATA ls_split_path TYPE zif_abapgit_ajson=>ty_path_name.
DATA ls_split_path TYPE zif_abapgit_ajson_types=>ty_path_name.
ls_split_path = lcl_utils=>split_path( iv_path ).
delete_subtree(
@ -391,7 +391,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~get.
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA lr_item TYPE REF TO zif_abapgit_ajson_types=>ty_node.
lr_item = get_item( iv_path ).
IF lr_item IS NOT INITIAL.
rv_value = lr_item->value.
@ -402,11 +402,11 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~get_boolean.
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA lr_item TYPE REF TO zif_abapgit_ajson_types=>ty_node.
lr_item = get_item( iv_path ).
IF lr_item IS INITIAL OR lr_item->type = zif_abapgit_ajson=>node_type-null.
IF lr_item IS INITIAL OR lr_item->type = zif_abapgit_ajson_types=>node_type-null.
RETURN.
ELSEIF lr_item->type = zif_abapgit_ajson=>node_type-boolean.
ELSEIF lr_item->type = zif_abapgit_ajson_types=>node_type-boolean.
rv_value = boolc( lr_item->value = 'true' ).
ELSEIF lr_item->value IS NOT INITIAL.
rv_value = abap_true.
@ -417,14 +417,14 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~get_date.
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA lr_item TYPE REF TO zif_abapgit_ajson_types=>ty_node.
DATA lv_y TYPE c LENGTH 4.
DATA lv_m TYPE c LENGTH 2.
DATA lv_d TYPE c LENGTH 2.
lr_item = get_item( iv_path ).
IF lr_item IS NOT INITIAL AND lr_item->type = zif_abapgit_ajson=>node_type-string.
IF lr_item IS NOT INITIAL AND lr_item->type = zif_abapgit_ajson_types=>node_type-string.
FIND FIRST OCCURRENCE OF REGEX '^(\d{4})-(\d{2})-(\d{2})(T|$)'
IN lr_item->value
SUBMATCHES lv_y lv_m lv_d.
@ -436,9 +436,9 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~get_integer.
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA lr_item TYPE REF TO zif_abapgit_ajson_types=>ty_node.
lr_item = get_item( iv_path ).
IF lr_item IS NOT INITIAL AND lr_item->type = zif_abapgit_ajson=>node_type-number.
IF lr_item IS NOT INITIAL AND lr_item->type = zif_abapgit_ajson_types=>node_type-number.
rv_value = lr_item->value.
ENDIF.
@ -447,7 +447,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~get_node_type.
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA lr_item TYPE REF TO zif_abapgit_ajson_types=>ty_node.
lr_item = get_item( iv_path ).
IF lr_item IS NOT INITIAL.
rv_node_type = lr_item->type.
@ -458,9 +458,9 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~get_number.
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA lr_item TYPE REF TO zif_abapgit_ajson_types=>ty_node.
lr_item = get_item( iv_path ).
IF lr_item IS NOT INITIAL AND lr_item->type = zif_abapgit_ajson=>node_type-number.
IF lr_item IS NOT INITIAL AND lr_item->type = zif_abapgit_ajson_types=>node_type-number.
rv_value = lr_item->value.
ENDIF.
@ -469,9 +469,9 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~get_string.
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA lr_item TYPE REF TO zif_abapgit_ajson_types=>ty_node.
lr_item = get_item( iv_path ).
IF lr_item IS NOT INITIAL AND lr_item->type <> zif_abapgit_ajson=>node_type-null.
IF lr_item IS NOT INITIAL AND lr_item->type <> zif_abapgit_ajson_types=>node_type-null.
rv_value = lr_item->value.
ENDIF.
@ -481,7 +481,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
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.
DATA lr_item TYPE REF TO zif_abapgit_ajson_types=>ty_node.
lr_item = get_item( iv_path ).
@ -539,8 +539,8 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
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.
DATA lr_parent TYPE REF TO zif_abapgit_ajson_types=>ty_node.
DATA lr_new_node TYPE REF TO zif_abapgit_ajson_types=>ty_node.
read_only_watchdog( ).
@ -550,12 +550,12 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
zcx_abapgit_ajson_error=>raise( |Path [{ iv_path }] does not exist| ).
ENDIF.
IF lr_parent->type <> zif_abapgit_ajson=>node_type-array.
IF lr_parent->type <> zif_abapgit_ajson_types=>node_type-array.
zcx_abapgit_ajson_error=>raise( |Path [{ iv_path }] is not array| ).
ENDIF.
DATA lt_new_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA ls_new_path TYPE zif_abapgit_ajson=>ty_path_name.
DATA lt_new_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA ls_new_path TYPE zif_abapgit_ajson_types=>ty_path_name.
DATA lv_new_index TYPE i.
lv_new_index = lr_parent->children + 1.
@ -581,9 +581,9 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
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.
DATA ls_deleted_node TYPE zif_abapgit_ajson=>ty_node.
DATA ls_split_path TYPE zif_abapgit_ajson_types=>ty_path_name.
DATA lr_parent TYPE REF TO zif_abapgit_ajson_types=>ty_node.
DATA ls_deleted_node TYPE zif_abapgit_ajson_types=>ty_node.
read_only_watchdog( ).
@ -594,8 +594,8 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
ENDIF.
IF iv_node_type IS NOT INITIAL
AND iv_node_type <> zif_abapgit_ajson=>node_type-boolean AND iv_node_type <> zif_abapgit_ajson=>node_type-null
AND iv_node_type <> zif_abapgit_ajson=>node_type-number AND iv_node_type <> zif_abapgit_ajson=>node_type-string.
AND iv_node_type <> zif_abapgit_ajson_types=>node_type-boolean AND iv_node_type <> zif_abapgit_ajson_types=>node_type-null
AND iv_node_type <> zif_abapgit_ajson_types=>node_type-number AND iv_node_type <> zif_abapgit_ajson_types=>node_type-string.
zcx_abapgit_ajson_error=>raise( |Unexpected type { iv_node_type }| ).
ENDIF.
@ -629,10 +629,10 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
iv_name = ls_split_path-name ).
" convert to json
DATA lt_new_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_new_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lv_array_index TYPE i.
IF lr_parent->type = zif_abapgit_ajson=>node_type-array.
IF lr_parent->type = zif_abapgit_ajson_types=>node_type-array.
lv_array_index = lcl_utils=>validate_array_index(
iv_path = ls_split_path-path
iv_index = ls_split_path-name ).
@ -824,7 +824,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
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 ls_path_parts TYPE zif_abapgit_ajson_types=>ty_path_name.
DATA lv_path_len TYPE i.
CREATE OBJECT lo_section.
@ -863,10 +863,10 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
METHOD zif_abapgit_ajson~touch_array.
DATA lr_node TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA ls_deleted_node TYPE zif_abapgit_ajson=>ty_node.
DATA lr_node TYPE REF TO zif_abapgit_ajson_types=>ty_node.
DATA ls_deleted_node TYPE zif_abapgit_ajson_types=>ty_node.
DATA ls_new_node LIKE LINE OF mt_json_tree.
DATA ls_split_path TYPE zif_abapgit_ajson=>ty_path_name.
DATA ls_split_path TYPE zif_abapgit_ajson_types=>ty_path_name.
read_only_watchdog( ).
@ -874,7 +874,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
IF ls_split_path IS INITIAL. " Assign root, exceptional processing
ls_new_node-path = ls_split_path-path.
ls_new_node-name = ls_split_path-name.
ls_new_node-type = zif_abapgit_ajson=>node_type-array.
ls_new_node-type = zif_abapgit_ajson_types=>node_type-array.
INSERT ls_new_node INTO TABLE mt_json_tree.
RETURN.
ENDIF.
@ -889,7 +889,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
IF lr_node IS INITIAL. " Or node was cleared
DATA lr_parent TYPE REF TO zif_abapgit_ajson=>ty_node.
DATA lr_parent TYPE REF TO zif_abapgit_ajson_types=>ty_node.
lr_parent = prove_path_exists( ls_split_path-path ).
ASSERT lr_parent IS NOT INITIAL.
@ -897,7 +897,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
ls_new_node-path = ls_split_path-path.
ls_new_node-name = ls_split_path-name.
ls_new_node-type = zif_abapgit_ajson=>node_type-array.
ls_new_node-type = zif_abapgit_ajson_types=>node_type-array.
IF ms_opts-keep_item_order = abap_true AND ls_deleted_node IS NOT INITIAL.
ls_new_node-order = ls_deleted_node-order.
@ -905,7 +905,7 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
INSERT ls_new_node INTO TABLE mt_json_tree.
ELSEIF lr_node->type <> zif_abapgit_ajson=>node_type-array.
ELSEIF lr_node->type <> zif_abapgit_ajson_types=>node_type-array.
zcx_abapgit_ajson_error=>raise( |Path [{ iv_path }] already used and is not array| ).
ENDIF.

View File

@ -66,7 +66,7 @@ CLASS lcl_utils DEFINITION FINAL.
IMPORTING
iv_path TYPE string
RETURNING
VALUE(rv_path_name) TYPE zif_abapgit_ajson=>ty_path_name.
VALUE(rv_path_name) TYPE zif_abapgit_ajson_types=>ty_path_name.
CLASS-METHODS validate_array_index
IMPORTING
iv_path TYPE string
@ -75,11 +75,44 @@ CLASS lcl_utils DEFINITION FINAL.
VALUE(rv_index) TYPE i
RAISING
zcx_abapgit_ajson_error.
CLASS-METHODS string_to_xstring_utf8
IMPORTING
iv_str TYPE string
RETURNING
VALUE(rv_xstr) TYPE xstring.
ENDCLASS.
CLASS lcl_utils IMPLEMENTATION.
METHOD string_to_xstring_utf8.
DATA lo_conv TYPE REF TO object.
TRY.
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_out
RECEIVING
instance = lo_conv.
CALL METHOD lo_conv->('IF_ABAP_CONV_OUT~CONVERT')
EXPORTING
source = iv_str
RECEIVING
result = rv_xstr.
CATCH cx_sy_dyn_call_illegal_class.
CALL METHOD ('CL_ABAP_CONV_OUT_CE')=>create
EXPORTING
encoding = 'UTF-8'
RECEIVING
conv = lo_conv.
CALL METHOD lo_conv->('CONVERT')
EXPORTING
data = iv_str
IMPORTING
buffer = rv_xstr.
ENDTRY.
ENDMETHOD.
METHOD validate_array_index.
IF NOT iv_index CO '0123456789'.
@ -154,14 +187,14 @@ CLASS lcl_json_parser DEFINITION FINAL.
IMPORTING
iv_json TYPE string
RETURNING
VALUE(rt_json_tree) TYPE zif_abapgit_ajson=>ty_nodes_tt
VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
PRIVATE SECTION.
TYPES:
ty_stack_tt TYPE STANDARD TABLE OF REF TO zif_abapgit_ajson=>ty_node.
ty_stack_tt TYPE STANDARD TABLE OF REF TO zif_abapgit_ajson_types=>ty_node.
DATA mt_stack TYPE ty_stack_tt.
DATA mv_stack_path TYPE string.
@ -176,7 +209,7 @@ CLASS lcl_json_parser DEFINITION FINAL.
IMPORTING
iv_json TYPE string
RETURNING
VALUE(rt_json_tree) TYPE zif_abapgit_ajson=>ty_nodes_tt
VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error cx_sxml_error.
@ -263,7 +296,7 @@ CLASS lcl_json_parser IMPLEMENTATION.
IF iv_json IS INITIAL.
RETURN.
ENDIF.
lo_reader = cl_sxml_string_reader=>create( cl_abap_codepage=>convert_to( iv_json ) ).
lo_reader = cl_sxml_string_reader=>create( lcl_utils=>string_to_xstring_utf8( iv_json ) ).
" TODO: self protection, check non-empty, check starting from object ...
@ -361,7 +394,7 @@ CLASS lcl_json_serializer DEFINITION FINAL CREATE PRIVATE.
CLASS-METHODS stringify
IMPORTING
it_json_tree TYPE zif_abapgit_ajson=>ty_nodes_ts
it_json_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts
iv_indent TYPE i DEFAULT 0
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
RETURNING
@ -375,7 +408,7 @@ CLASS lcl_json_serializer DEFINITION FINAL CREATE PRIVATE.
CLASS-DATA gv_comma_with_lf TYPE string.
DATA mt_json_tree TYPE zif_abapgit_ajson=>ty_nodes_ts.
DATA mt_json_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts.
DATA mv_keep_item_order TYPE abap_bool.
DATA mt_buffer TYPE string_table.
DATA mv_indent_step TYPE i.
@ -395,7 +428,7 @@ CLASS lcl_json_serializer DEFINITION FINAL CREATE PRIVATE.
METHODS stringify_node
IMPORTING
is_node TYPE zif_abapgit_ajson=>ty_node
is_node TYPE zif_abapgit_ajson_types=>ty_node
RAISING
zcx_abapgit_ajson_error.
@ -462,15 +495,15 @@ CLASS lcl_json_serializer IMPLEMENTATION.
ENDIF.
CASE is_node-type.
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
lv_item = lv_item && '['.
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
lv_item = lv_item && '{'.
WHEN zif_abapgit_ajson=>node_type-string.
WHEN zif_abapgit_ajson_types=>node_type-string.
lv_item = lv_item && |"{ escape_string( is_node-value ) }"|.
WHEN zif_abapgit_ajson=>node_type-boolean OR zif_abapgit_ajson=>node_type-number.
WHEN zif_abapgit_ajson_types=>node_type-boolean OR zif_abapgit_ajson_types=>node_type-number.
lv_item = lv_item && is_node-value.
WHEN zif_abapgit_ajson=>node_type-null.
WHEN zif_abapgit_ajson_types=>node_type-null.
lv_item = lv_item && 'null'.
WHEN OTHERS.
zcx_abapgit_ajson_error=>raise(
@ -479,7 +512,7 @@ CLASS lcl_json_serializer IMPLEMENTATION.
ENDCASE.
IF mv_indent_step > 0
AND ( is_node-type = zif_abapgit_ajson=>node_type-array OR is_node-type = zif_abapgit_ajson=>node_type-object )
AND ( is_node-type = zif_abapgit_ajson_types=>node_type-array OR is_node-type = zif_abapgit_ajson_types=>node_type-object )
AND is_node-children > 0.
mv_level = mv_level + 1.
lv_item = lv_item && cl_abap_char_utilities=>newline.
@ -489,21 +522,21 @@ CLASS lcl_json_serializer IMPLEMENTATION.
" finish complex item
IF is_node-type = zif_abapgit_ajson=>node_type-array OR is_node-type = zif_abapgit_ajson=>node_type-object.
IF is_node-type = zif_abapgit_ajson_types=>node_type-array OR is_node-type = zif_abapgit_ajson_types=>node_type-object.
DATA lv_children_path TYPE string.
DATA lv_tail TYPE string.
lv_children_path = is_node-path && is_node-name && '/'. " for root: path = '' and name = '', so result is '/'
CASE is_node-type.
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
IF is_node-children > 0.
stringify_set(
iv_parent_path = lv_children_path
iv_array = abap_true ).
ENDIF.
lv_tail = ']'.
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
IF is_node-children > 0.
stringify_set(
iv_parent_path = lv_children_path
@ -605,7 +638,7 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
METHODS to_abap
IMPORTING
it_nodes TYPE zif_abapgit_ajson=>ty_nodes_ts
it_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_ts
CHANGING
c_container TYPE any
RAISING
@ -613,7 +646,7 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
METHODS to_timestamp
IMPORTING
iv_value TYPE zif_abapgit_ajson=>ty_node-value
iv_value TYPE zif_abapgit_ajson_types=>ty_node-value
RETURNING
VALUE(rv_result) TYPE timestamp
RAISING
@ -621,7 +654,7 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
METHODS to_date
IMPORTING
iv_value TYPE zif_abapgit_ajson=>ty_node-value
iv_value TYPE zif_abapgit_ajson_types=>ty_node-value
RETURNING
VALUE(rv_result) TYPE d
RAISING
@ -639,7 +672,7 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
END OF ty_type_cache.
DATA mt_node_type_cache TYPE HASHED TABLE OF ty_type_cache WITH UNIQUE KEY type_path.
DATA mr_nodes TYPE REF TO zif_abapgit_ajson=>ty_nodes_ts.
DATA mr_nodes TYPE REF TO zif_abapgit_ajson_types=>ty_nodes_ts.
DATA mi_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping.
DATA mv_corresponding TYPE abap_bool.
@ -653,7 +686,7 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
METHODS value_to_abap
IMPORTING
is_node TYPE zif_abapgit_ajson=>ty_node
is_node TYPE zif_abapgit_ajson_types=>ty_node
is_node_type TYPE ty_type_cache
i_container_ref TYPE REF TO data
RAISING
@ -662,7 +695,7 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
METHODS get_node_type
IMPORTING
is_node TYPE zif_abapgit_ajson=>ty_node OPTIONAL " Empty for root
is_node TYPE zif_abapgit_ajson_types=>ty_node OPTIONAL " Empty for root
is_parent_type TYPE ty_type_cache OPTIONAL
i_container_ref TYPE REF TO data OPTIONAL
RETURNING
@ -779,7 +812,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
DATA lx_root TYPE REF TO cx_root.
DATA lr_target_field TYPE REF TO data.
FIELD-SYMBOLS <n> TYPE zif_abapgit_ajson=>ty_node.
FIELD-SYMBOLS <n> TYPE zif_abapgit_ajson_types=>ty_node.
FIELD-SYMBOLS <parent_stdtab> TYPE STANDARD TABLE.
FIELD-SYMBOLS <parent_anytab> TYPE ANY TABLE.
FIELD-SYMBOLS <parent_struc> TYPE any.
@ -860,7 +893,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
" Process value assignment
CASE <n>-type.
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
IF ls_node_type-type_kind <> lif_kind=>struct_flat AND
ls_node_type-type_kind <> lif_kind=>struct_deep.
zcx_abapgit_ajson_error=>raise( 'Expected structure' ).
@ -870,7 +903,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
is_parent_type = ls_node_type
i_container_ref = lr_target_field ).
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
IF NOT ls_node_type-type_kind = lif_kind=>table.
zcx_abapgit_ajson_error=>raise( 'Expected table' ).
ENDIF.
@ -928,16 +961,16 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
ASSERT sy-subrc = 0.
CASE is_node-type.
WHEN zif_abapgit_ajson=>node_type-null.
WHEN zif_abapgit_ajson_types=>node_type-null.
" Do nothing
WHEN zif_abapgit_ajson=>node_type-boolean.
WHEN zif_abapgit_ajson_types=>node_type-boolean.
" TODO: check type ?
<container> = boolc( is_node-value = 'true' ).
WHEN zif_abapgit_ajson=>node_type-number.
WHEN zif_abapgit_ajson_types=>node_type-number.
" TODO: check type ?
<container> = is_node-value.
WHEN zif_abapgit_ajson=>node_type-string.
WHEN zif_abapgit_ajson_types=>node_type-string.
" TODO: check type ?
IF is_node_type-type_kind = lif_kind=>date AND is_node-value IS NOT INITIAL.
<container> = to_date( is_node-value ).
@ -1062,27 +1095,27 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
CLASS-METHODS convert
IMPORTING
iv_data TYPE any
is_prefix TYPE zif_abapgit_ajson=>ty_path_name OPTIONAL
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name OPTIONAL
iv_array_index TYPE i DEFAULT 0
ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
is_opts TYPE zif_abapgit_ajson=>ty_opts OPTIONAL
iv_item_order TYPE i DEFAULT 0
RETURNING
VALUE(rt_nodes) TYPE zif_abapgit_ajson=>ty_nodes_tt
VALUE(rt_nodes) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
CLASS-METHODS insert_with_type
IMPORTING
iv_data TYPE any
iv_type TYPE zif_abapgit_ajson=>ty_node_type
is_prefix TYPE zif_abapgit_ajson=>ty_path_name OPTIONAL
iv_type TYPE zif_abapgit_ajson_types=>ty_node_type
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name OPTIONAL
iv_array_index TYPE i DEFAULT 0
ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
is_opts TYPE zif_abapgit_ajson=>ty_opts OPTIONAL
iv_item_order TYPE i DEFAULT 0
RETURNING
VALUE(rt_nodes) TYPE zif_abapgit_ajson=>ty_nodes_tt
VALUE(rt_nodes) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
@ -1115,21 +1148,21 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
IMPORTING
iv_data TYPE any
io_type TYPE REF TO cl_abap_typedescr
is_prefix TYPE zif_abapgit_ajson=>ty_path_name
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
iv_index TYPE i DEFAULT 0
iv_item_order TYPE i DEFAULT 0
CHANGING
ct_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
METHODS convert_ajson
IMPORTING
io_json TYPE REF TO zif_abapgit_ajson
is_prefix TYPE zif_abapgit_ajson=>ty_path_name
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
iv_index TYPE i DEFAULT 0
CHANGING
ct_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
@ -1137,22 +1170,22 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
IMPORTING
iv_data TYPE any
io_type TYPE REF TO cl_abap_typedescr
is_prefix TYPE zif_abapgit_ajson=>ty_path_name
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
iv_index TYPE i DEFAULT 0
iv_item_order TYPE i DEFAULT 0
CHANGING
ct_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
METHODS convert_ref
IMPORTING
iv_data TYPE any
is_prefix TYPE zif_abapgit_ajson=>ty_path_name
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
iv_index TYPE i DEFAULT 0
iv_item_order TYPE i DEFAULT 0
CHANGING
ct_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
@ -1160,12 +1193,12 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
IMPORTING
iv_data TYPE any
io_type TYPE REF TO cl_abap_typedescr
is_prefix TYPE zif_abapgit_ajson=>ty_path_name
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
iv_index TYPE i DEFAULT 0
iv_item_order TYPE i DEFAULT 0
CHANGING
ct_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt
cs_root TYPE zif_abapgit_ajson=>ty_node OPTIONAL
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
cs_root TYPE zif_abapgit_ajson_types=>ty_node OPTIONAL
RAISING
zcx_abapgit_ajson_error.
@ -1173,24 +1206,24 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
IMPORTING
iv_data TYPE any
io_type TYPE REF TO cl_abap_typedescr
is_prefix TYPE zif_abapgit_ajson=>ty_path_name
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
iv_index TYPE i DEFAULT 0
iv_item_order TYPE i DEFAULT 0
CHANGING
ct_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
METHODS insert_value_with_type
IMPORTING
iv_data TYPE any
iv_type TYPE zif_abapgit_ajson=>ty_node_type
iv_type TYPE zif_abapgit_ajson_types=>ty_node_type
io_type TYPE REF TO cl_abap_typedescr
is_prefix TYPE zif_abapgit_ajson=>ty_path_name
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
iv_index TYPE i DEFAULT 0
iv_item_order TYPE i DEFAULT 0
CHANGING
ct_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
zcx_abapgit_ajson_error.
@ -1370,7 +1403,7 @@ CLASS lcl_abap_to_json IMPLEMENTATION.
OR io_type->absolute_name = '\TYPE=XSDBOOLEAN'
OR io_type->absolute_name = '\TYPE=FLAG'
OR io_type->absolute_name = '\TYPE=XFELD'.
ls_node-type = zif_abapgit_ajson=>node_type-boolean.
ls_node-type = zif_abapgit_ajson_types=>node_type-boolean.
IF iv_data IS NOT INITIAL.
ls_node-value = 'true'.
ELSE.
@ -1378,33 +1411,33 @@ CLASS lcl_abap_to_json IMPLEMENTATION.
ENDIF.
ELSEIF io_type->absolute_name = '\TYPE=TIMESTAMP'.
IF mv_format_datetime = abap_true.
ls_node-type = zif_abapgit_ajson=>node_type-string.
ls_node-type = zif_abapgit_ajson_types=>node_type-string.
ls_node-value = format_timestamp( iv_data ).
ELSE.
ls_node-type = zif_abapgit_ajson=>node_type-number.
ls_node-type = zif_abapgit_ajson_types=>node_type-number.
ls_node-value = |{ iv_data }|.
ENDIF.
ELSEIF io_type->type_kind CO lif_kind=>texts OR
io_type->type_kind CO lif_kind=>binary OR
io_type->type_kind CO lif_kind=>enum.
ls_node-type = zif_abapgit_ajson=>node_type-string.
ls_node-type = zif_abapgit_ajson_types=>node_type-string.
ls_node-value = |{ iv_data }|.
ELSEIF io_type->type_kind = lif_kind=>date.
ls_node-type = zif_abapgit_ajson=>node_type-string.
ls_node-type = zif_abapgit_ajson_types=>node_type-string.
IF mv_format_datetime = abap_true.
ls_node-value = format_date( iv_data ).
ELSE.
ls_node-value = |{ iv_data }|.
ENDIF.
ELSEIF io_type->type_kind = lif_kind=>time.
ls_node-type = zif_abapgit_ajson=>node_type-string.
ls_node-type = zif_abapgit_ajson_types=>node_type-string.
IF mv_format_datetime = abap_true.
ls_node-value = format_time( iv_data ).
ELSE.
ls_node-value = |{ iv_data }|.
ENDIF.
ELSEIF io_type->type_kind CO lif_kind=>numeric.
ls_node-type = zif_abapgit_ajson=>node_type-number.
ls_node-type = zif_abapgit_ajson_types=>node_type-number.
ls_node-value = |{ iv_data }|.
ELSE.
zcx_abapgit_ajson_error=>raise( |Unexpected elementary type [{
@ -1435,7 +1468,7 @@ CLASS lcl_abap_to_json IMPLEMENTATION.
ENDIF.
IF iv_data IS INITIAL.
ls_node-type = zif_abapgit_ajson=>node_type-null.
ls_node-type = zif_abapgit_ajson_types=>node_type-null.
ls_node-value = 'null'.
ELSE.
" TODO support data references
@ -1466,7 +1499,7 @@ CLASS lcl_abap_to_json IMPLEMENTATION.
ELSE. " First call
ls_root-path = is_prefix-path.
ls_root-name = is_prefix-name.
ls_root-type = zif_abapgit_ajson=>node_type-object.
ls_root-type = zif_abapgit_ajson_types=>node_type-object.
ls_root-index = iv_index.
IF mi_custom_mapping IS BOUND.
@ -1561,7 +1594,7 @@ CLASS lcl_abap_to_json IMPLEMENTATION.
ls_root-path = is_prefix-path.
ls_root-name = is_prefix-name.
ls_root-type = zif_abapgit_ajson=>node_type-array.
ls_root-type = zif_abapgit_ajson_types=>node_type-array.
ls_root-index = iv_index.
ls_root-order = iv_item_order.
@ -1638,18 +1671,18 @@ CLASS lcl_abap_to_json IMPLEMENTATION.
IF io_type->type_kind CO lif_kind=>texts OR
io_type->type_kind CO lif_kind=>date OR
io_type->type_kind CO lif_kind=>time.
IF iv_type = zif_abapgit_ajson=>node_type-boolean AND iv_data <> 'true' AND iv_data <> 'false'.
IF iv_type = zif_abapgit_ajson_types=>node_type-boolean AND iv_data <> 'true' AND iv_data <> 'false'.
zcx_abapgit_ajson_error=>raise( |Unexpected boolean value [{ iv_data }] @{ lv_prefix }| ).
ELSEIF iv_type = zif_abapgit_ajson=>node_type-null AND iv_data IS NOT INITIAL.
ELSEIF iv_type = zif_abapgit_ajson_types=>node_type-null AND iv_data IS NOT INITIAL.
zcx_abapgit_ajson_error=>raise( |Unexpected null value [{ iv_data }] @{ lv_prefix }| ).
ELSEIF iv_type = zif_abapgit_ajson=>node_type-number AND iv_data CN '0123456789. E+-'.
ELSEIF iv_type = zif_abapgit_ajson_types=>node_type-number AND iv_data CN '0123456789. E+-'.
zcx_abapgit_ajson_error=>raise( |Unexpected numeric value [{ iv_data }] @{ lv_prefix }| ).
ELSEIF iv_type <> zif_abapgit_ajson=>node_type-string AND iv_type <> zif_abapgit_ajson=>node_type-boolean
AND iv_type <> zif_abapgit_ajson=>node_type-null AND iv_type <> zif_abapgit_ajson=>node_type-number.
ELSEIF iv_type <> zif_abapgit_ajson_types=>node_type-string AND iv_type <> zif_abapgit_ajson_types=>node_type-boolean
AND iv_type <> zif_abapgit_ajson_types=>node_type-null AND iv_type <> zif_abapgit_ajson_types=>node_type-number.
zcx_abapgit_ajson_error=>raise( |Unexpected type for value [{ iv_type },{ iv_data }] @{ lv_prefix }| ).
ENDIF.
ELSEIF io_type->type_kind CO lif_kind=>numeric.
IF iv_type <> zif_abapgit_ajson=>node_type-number.
IF iv_type <> zif_abapgit_ajson_types=>node_type-number.
zcx_abapgit_ajson_error=>raise( |Unexpected value for numeric [{ iv_data }] @{ lv_prefix }| ).
ENDIF.
ELSE.
@ -1686,9 +1719,9 @@ ENDCLASS.
INTERFACE lif_mutator_runner.
METHODS run
IMPORTING
it_source_tree TYPE zif_abapgit_ajson=>ty_nodes_ts
it_source_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts
EXPORTING
et_dest_tree TYPE zif_abapgit_ajson=>ty_nodes_ts
et_dest_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts
RAISING
zcx_abapgit_ajson_error.
ENDINTERFACE.
@ -1711,14 +1744,14 @@ CLASS lcl_filter_runner DEFINITION FINAL.
PRIVATE SECTION.
DATA mi_filter TYPE REF TO zif_abapgit_ajson_filter.
DATA mr_source_tree TYPE REF TO zif_abapgit_ajson=>ty_nodes_ts.
DATA mr_dest_tree TYPE REF TO zif_abapgit_ajson=>ty_nodes_ts.
DATA mr_source_tree TYPE REF TO zif_abapgit_ajson_types=>ty_nodes_ts.
DATA mr_dest_tree TYPE REF TO zif_abapgit_ajson_types=>ty_nodes_ts.
METHODS walk
IMPORTING
iv_path TYPE string
CHANGING
cs_parent TYPE zif_abapgit_ajson=>ty_node OPTIONAL
cs_parent TYPE zif_abapgit_ajson_types=>ty_node OPTIONAL
RAISING
zcx_abapgit_ajson_error.
@ -1747,18 +1780,18 @@ CLASS lcl_filter_runner IMPLEMENTATION.
METHOD walk.
DATA ls_node TYPE zif_abapgit_ajson=>ty_node.
DATA ls_node TYPE zif_abapgit_ajson_types=>ty_node.
LOOP AT mr_source_tree->* INTO ls_node WHERE path = iv_path.
CASE ls_node-type.
WHEN zif_abapgit_ajson=>node_type-boolean OR zif_abapgit_ajson=>node_type-null
OR zif_abapgit_ajson=>node_type-number OR zif_abapgit_ajson=>node_type-string.
WHEN zif_abapgit_ajson_types=>node_type-boolean OR zif_abapgit_ajson_types=>node_type-null
OR zif_abapgit_ajson_types=>node_type-number OR zif_abapgit_ajson_types=>node_type-string.
IF mi_filter->keep_node( ls_node ) = abap_false.
CONTINUE.
ENDIF.
WHEN zif_abapgit_ajson=>node_type-array OR zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-array OR zif_abapgit_ajson_types=>node_type-object.
IF mi_filter->keep_node(
is_node = ls_node
@ -1787,7 +1820,7 @@ CLASS lcl_filter_runner IMPLEMENTATION.
IF cs_parent IS SUPPLIED.
cs_parent-children = cs_parent-children + 1.
IF cs_parent-type = zif_abapgit_ajson=>node_type-array.
IF cs_parent-type = zif_abapgit_ajson_types=>node_type-array.
ls_node-name = |{ cs_parent-children }|.
ls_node-index = cs_parent-children.
ENDIF.
@ -1818,14 +1851,14 @@ CLASS lcl_mapper_runner DEFINITION FINAL.
PRIVATE SECTION.
DATA mi_mapper TYPE REF TO zif_abapgit_ajson_mapping.
DATA mr_source_tree TYPE REF TO zif_abapgit_ajson=>ty_nodes_ts.
DATA mr_dest_tree TYPE REF TO zif_abapgit_ajson=>ty_nodes_ts.
DATA mr_source_tree TYPE REF TO zif_abapgit_ajson_types=>ty_nodes_ts.
DATA mr_dest_tree TYPE REF TO zif_abapgit_ajson_types=>ty_nodes_ts.
METHODS process_deep_node
IMPORTING
iv_path TYPE string
iv_renamed_path TYPE string
iv_node_type TYPE zif_abapgit_ajson=>ty_node-type
iv_node_type TYPE zif_abapgit_ajson_types=>ty_node-type
RAISING
zcx_abapgit_ajson_error.
@ -1847,7 +1880,8 @@ CLASS lcl_mapper_runner IMPLEMENTATION.
FIELD-SYMBOLS <root> LIKE LINE OF it_source_tree.
READ TABLE it_source_tree WITH KEY path = `` name = `` ASSIGNING <root>.
IF sy-subrc <> 0 OR NOT ( <root>-type = zif_abapgit_ajson=>node_type-array OR <root>-type = zif_abapgit_ajson=>node_type-object ).
IF sy-subrc <> 0
OR NOT ( <root>-type = zif_abapgit_ajson_types=>node_type-array OR <root>-type = zif_abapgit_ajson_types=>node_type-object ).
" empty or one-value-only tree
et_dest_tree = it_source_tree.
RETURN.
@ -1873,7 +1907,7 @@ CLASS lcl_mapper_runner IMPLEMENTATION.
LOOP AT mr_source_tree->* ASSIGNING <item> WHERE path = iv_path.
ls_renamed_node = <item>.
IF iv_node_type <> zif_abapgit_ajson=>node_type-array.
IF iv_node_type <> zif_abapgit_ajson_types=>node_type-array.
" don't rename array item names -> they are numeric index
mi_mapper->rename_node(
EXPORTING
@ -1897,7 +1931,7 @@ CLASS lcl_mapper_runner IMPLEMENTATION.
" maybe also catch CX_SY_ITAB_DUPLICATE_KEY but secondary keys are not changed here, so not for now
IF <item>-type = zif_abapgit_ajson=>node_type-array OR <item>-type = zif_abapgit_ajson=>node_type-object.
IF <item>-type = zif_abapgit_ajson_types=>node_type-array OR <item>-type = zif_abapgit_ajson_types=>node_type-object.
process_deep_node(
iv_path = iv_path && <item>-name && `/`
iv_renamed_path = iv_renamed_path && ls_renamed_node-name && `/`
@ -1950,7 +1984,7 @@ CLASS lcl_mutator_queue IMPLEMENTATION.
DATA lv_qsize TYPE i.
FIELD-SYMBOLS <from> LIKE it_source_tree.
FIELD-SYMBOLS <to> LIKE it_source_tree.
DATA lr_buf TYPE REF TO zif_abapgit_ajson=>ty_nodes_ts.
DATA lr_buf TYPE REF TO zif_abapgit_ajson_types=>ty_nodes_ts.
lv_qsize = lines( mt_queue ).

View File

@ -4,14 +4,14 @@
CLASS lcl_nodes_helper DEFINITION FINAL.
PUBLIC SECTION.
DATA mt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA mt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
METHODS add
IMPORTING
iv_str TYPE string.
METHODS clear.
METHODS sorted
RETURNING
VALUE(rt_nodes) TYPE zif_abapgit_ajson=>ty_nodes_ts.
VALUE(rt_nodes) TYPE zif_abapgit_ajson_types=>ty_nodes_ts.
ENDCLASS.
@ -98,7 +98,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
METHOD parse_bare_values.
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
mo_nodes->add( ' | |str |abc | |0' ).
lt_act = mo_cut->parse( '"abc"' ).
@ -138,7 +138,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
METHOD parse_error.
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lx_err TYPE REF TO zcx_abapgit_ajson_error.
TRY.
lt_act = mo_cut->parse( 'abc' ).
@ -173,7 +173,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |string |str |abc | |0' ).
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"string": "abc"}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -184,7 +184,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |number |num |123 | |0' ).
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"number": 123}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -195,7 +195,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |float |num |123.45 | |0' ).
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
CREATE OBJECT mo_cut.
lt_act = mo_cut->parse( '{"float": 123.45}' ).
cl_abap_unit_assert=>assert_equals(
@ -207,7 +207,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |boolean |bool |true | |0' ).
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"boolean": true}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -218,7 +218,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |false |bool |false | |0' ).
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"false": false}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -229,7 +229,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |null |null | | |0' ).
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"null": null}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -240,7 +240,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |date |str |2020-03-15 | |0' ).
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
lt_act = mo_cut->parse( '{"date": "2020-03-15"}' ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
@ -295,7 +295,7 @@ CLASS ltcl_parser_test IMPLEMENTATION.
METHOD parse.
DATA lo_cut TYPE REF TO lcl_json_parser.
DATA lt_act TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
CREATE OBJECT lo_nodes.
@ -395,7 +395,7 @@ CLASS ltcl_serializer_test DEFINITION FINAL
VALUE(rv_json) TYPE string.
CLASS-METHODS sample_nodes
RETURNING
VALUE(rt_nodes) TYPE zif_abapgit_ajson=>ty_nodes_ts.
VALUE(rt_nodes) TYPE zif_abapgit_ajson_types=>ty_nodes_ts.
PRIVATE SECTION.
@ -737,6 +737,7 @@ CLASS ltcl_utils_test DEFINITION FINAL
METHODS normalize_path FOR TESTING.
METHODS split_path FOR TESTING.
METHODS validate_array_index FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS string_to_xstring_utf8 FOR TESTING.
ENDCLASS.
@ -744,6 +745,14 @@ CLASS zcl_abapgit_ajson DEFINITION LOCAL FRIENDS ltcl_utils_test.
CLASS ltcl_utils_test IMPLEMENTATION.
METHOD string_to_xstring_utf8.
cl_abap_unit_assert=>assert_equals(
act = lcl_utils=>string_to_xstring_utf8( '123' )
exp = '313233' ).
ENDMETHOD.
METHOD validate_array_index.
cl_abap_unit_assert=>assert_equals(
@ -791,7 +800,7 @@ CLASS ltcl_utils_test IMPLEMENTATION.
METHOD split_path.
DATA ls_exp TYPE zif_abapgit_ajson=>ty_path_name.
DATA ls_exp TYPE zif_abapgit_ajson_types=>ty_path_name.
DATA lv_path TYPE string.
lv_path = ''. " alias to root
@ -1003,31 +1012,31 @@ CLASS ltcl_reader_test IMPLEMENTATION.
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/' )
exp = zif_abapgit_ajson=>node_type-object ).
exp = zif_abapgit_ajson_types=>node_type-object ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/string' )
exp = zif_abapgit_ajson=>node_type-string ).
exp = zif_abapgit_ajson_types=>node_type-string ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/number' )
exp = zif_abapgit_ajson=>node_type-number ).
exp = zif_abapgit_ajson_types=>node_type-number ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/float' )
exp = zif_abapgit_ajson=>node_type-number ).
exp = zif_abapgit_ajson_types=>node_type-number ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/boolean' )
exp = zif_abapgit_ajson=>node_type-boolean ).
exp = zif_abapgit_ajson_types=>node_type-boolean ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/false' )
exp = zif_abapgit_ajson=>node_type-boolean ).
exp = zif_abapgit_ajson_types=>node_type-boolean ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/null' )
exp = zif_abapgit_ajson=>node_type-null ).
exp = zif_abapgit_ajson_types=>node_type-null ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/date' )
exp = zif_abapgit_ajson=>node_type-string ).
exp = zif_abapgit_ajson_types=>node_type-string ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->get_node_type( '/issues' )
exp = zif_abapgit_ajson=>node_type-array ).
exp = zif_abapgit_ajson_types=>node_type-array ).
ENDMETHOD.
@ -2982,17 +2991,17 @@ CLASS ltcl_writer_test IMPLEMENTATION.
DATA lv_path TYPE string.
FIELD-SYMBOLS <node> TYPE zif_abapgit_ajson=>ty_node.
FIELD-SYMBOLS <node> LIKE LINE OF io_json_in->mt_json_tree.
LOOP AT io_json_in->mt_json_tree ASSIGNING <node> WHERE path = iv_path.
lv_path = <node>-path && <node>-name && '/'.
CASE <node>-type.
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
io_json_out->touch_array( lv_path ).
set_with_type_slice( io_json_in = io_json_in
io_json_out = io_json_out
iv_path = lv_path ).
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
set_with_type_slice( io_json_in = io_json_in
io_json_out = io_json_out
iv_path = lv_path ).
@ -3636,7 +3645,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
lo_nodes->add( '/a/b/ |c |object | ||0' ).
lo_src->mt_json_tree = lo_nodes->mt_nodes.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
lt_nodes = lcl_abap_to_json=>convert( iv_data = lo_src ).
cl_abap_unit_assert=>assert_equals(
@ -3648,7 +3657,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_value_number.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
" number
CREATE OBJECT lo_nodes_exp.
@ -3665,7 +3674,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_value_string.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
" string
CREATE OBJECT lo_nodes_exp.
@ -3682,7 +3691,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_value_true.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
" true
CREATE OBJECT lo_nodes_exp.
@ -3699,7 +3708,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_value_false.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
" false
CREATE OBJECT lo_nodes_exp.
@ -3716,7 +3725,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_value_xsdboolean.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lv_xsdboolean TYPE xsdboolean.
CREATE OBJECT lo_nodes_exp.
@ -3734,7 +3743,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_null.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lv_null_ref TYPE REF TO data.
" null
@ -3752,7 +3761,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_value_timestamp.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lv_timezone TYPE timezone VALUE ''.
DATA lv_timestamp TYPE timestamp.
@ -3772,7 +3781,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_value_timestamp_initial.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lv_timestamp TYPE timestamp.
CREATE OBJECT lo_nodes_exp.
@ -3790,8 +3799,8 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD prefix.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA ls_prefix TYPE zif_abapgit_ajson=>ty_path_name.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA ls_prefix TYPE zif_abapgit_ajson_types=>ty_path_name.
ls_prefix-path = '/a/'.
ls_prefix-name = 'b'.
@ -3812,7 +3821,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA ls_struc TYPE ty_struc.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
ls_struc-a = 'abc'.
ls_struc-b = 10.
@ -3838,7 +3847,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA ls_struc TYPE ty_struc_complex.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
FIELD-SYMBOLS <i> LIKE LINE OF ls_struc-tab.
ls_struc-a = 'abc'.
@ -3898,7 +3907,7 @@ CLASS ltcl_abap_to_json IMPLEMENTATION.
METHOD set_array.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA lt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt.
DATA lt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lt_tab TYPE TABLE OF ty_struc.
FIELD-SYMBOLS <s> LIKE LINE OF lt_tab.

View File

@ -85,6 +85,23 @@ CLASS zcl_abapgit_ajson_mapping IMPLEMENTATION.
ENDMETHOD.
METHOD create_compound_mapper.
DATA lt_queue TYPE zif_abapgit_ajson_mapping=>ty_table_of.
APPEND ii_mapper1 TO lt_queue.
APPEND ii_mapper2 TO lt_queue.
APPEND ii_mapper3 TO lt_queue.
APPEND LINES OF it_more TO lt_queue.
DELETE lt_queue WHERE table_line IS INITIAL.
CREATE OBJECT ri_mapping TYPE lcl_compound_mapper
EXPORTING
it_queue = lt_queue.
ENDMETHOD.
METHOD create_field_mapping.
CREATE OBJECT ri_mapping TYPE lcl_mapping_fields
@ -102,29 +119,6 @@ CLASS zcl_abapgit_ajson_mapping IMPLEMENTATION.
ENDMETHOD.
METHOD create_compound_mapper.
DATA lt_queue TYPE zif_abapgit_ajson_mapping=>ty_table_of.
APPEND ii_mapper1 TO lt_queue.
APPEND ii_mapper2 TO lt_queue.
APPEND ii_mapper3 TO lt_queue.
APPEND LINES OF it_more TO lt_queue.
DELETE lt_queue WHERE table_line IS INITIAL.
CREATE OBJECT ri_mapping TYPE lcl_compound_mapper
EXPORTING
it_queue = lt_queue.
ENDMETHOD.
METHOD create_upper_case.
CREATE OBJECT ri_mapping TYPE lcl_mapping_to_upper
EXPORTING
it_mapping_fields = it_mapping_fields.
ENDMETHOD.
METHOD create_rename.
@ -135,11 +129,6 @@ CLASS zcl_abapgit_ajson_mapping IMPLEMENTATION.
ENDMETHOD.
METHOD create_to_snake_case.
CREATE OBJECT ri_mapping TYPE lcl_to_snake.
ENDMETHOD.
METHOD create_to_camel_case.
@ -149,4 +138,19 @@ CLASS zcl_abapgit_ajson_mapping IMPLEMENTATION.
ENDMETHOD.
METHOD create_to_snake_case.
CREATE OBJECT ri_mapping TYPE lcl_to_snake.
ENDMETHOD.
METHOD create_upper_case.
CREATE OBJECT ri_mapping TYPE lcl_mapping_to_upper
EXPORTING
it_mapping_fields = it_mapping_fields.
ENDMETHOD.
ENDCLASS.

View File

@ -102,7 +102,7 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
IF iv_keep_empty_arrays = abap_false.
LOOP AT io_json->mt_json_tree INTO ls_json_tree
WHERE type = zif_abapgit_ajson=>node_type-array AND children = 0.
WHERE type = zif_abapgit_ajson_types=>node_type-array AND children = 0.
io_json->delete( ls_json_tree-path && ls_json_tree-name ).
@ -113,7 +113,7 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
ENDIF.
LOOP AT io_json->mt_json_tree INTO ls_json_tree
WHERE type = zif_abapgit_ajson=>node_type-object AND children = 0.
WHERE type = zif_abapgit_ajson_types=>node_type-object AND children = 0.
io_json->delete( ls_json_tree-path && ls_json_tree-name ).
@ -184,12 +184,12 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
IF <node_a>-type = <node_b>-type.
CASE <node_a>-type.
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
mo_insert->touch_array( lv_path_a ).
mo_change->touch_array( lv_path_a ).
mo_delete->touch_array( lv_path_a ).
diff_a_b( lv_path_a ).
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
diff_a_b( lv_path_a ).
WHEN OTHERS.
IF <node_a>-value <> <node_b>-value.
@ -203,10 +203,10 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
ELSE.
" save changed type as delete + insert
CASE <node_a>-type.
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
mo_delete->touch_array( lv_path_a ).
diff_a_b( lv_path_a ).
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
diff_a_b( lv_path_a ).
WHEN OTHERS.
mo_delete->set(
@ -215,10 +215,10 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
iv_node_type = <node_a>-type ).
ENDCASE.
CASE <node_b>-type.
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
mo_insert->touch_array( lv_path_b ).
diff_b_a( lv_path_b ).
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
diff_b_a( lv_path_b ).
WHEN OTHERS.
mo_insert->set(
@ -230,10 +230,10 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
ELSE.
" save as delete
CASE <node_a>-type.
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
mo_delete->touch_array( lv_path_a ).
diff_a_b( lv_path_a ).
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
diff_a_b( lv_path_a ).
WHEN OTHERS.
mo_delete->set(
@ -257,12 +257,12 @@ CLASS zcl_abapgit_ajson_utilities IMPLEMENTATION.
lv_path = <node_b>-path && <node_b>-name && '/'.
CASE <node_b>-type.
WHEN zif_abapgit_ajson=>node_type-array.
WHEN zif_abapgit_ajson_types=>node_type-array.
mo_insert->touch_array( lv_path ).
diff_b_a(
iv_path = lv_path
iv_array = abap_true ).
WHEN zif_abapgit_ajson=>node_type-object.
WHEN zif_abapgit_ajson_types=>node_type-object.
diff_b_a( lv_path ).
WHEN OTHERS.
IF iv_array = abap_false.

View File

@ -5,14 +5,14 @@
CLASS lcl_nodes_helper DEFINITION FINAL.
PUBLIC SECTION.
DATA mt_nodes TYPE zif_abapgit_ajson=>ty_nodes_tt READ-ONLY.
DATA mt_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt READ-ONLY.
METHODS add
IMPORTING
iv_str TYPE string.
METHODS sorted
RETURNING
VALUE(rt_nodes) TYPE zif_abapgit_ajson=>ty_nodes_ts.
VALUE(rt_nodes) TYPE zif_abapgit_ajson_types=>ty_nodes_ts.
ENDCLASS.

View File

@ -54,7 +54,7 @@ class ltcl_error implementation.
method raise_w_node.
data lx type ref to zcx_abapgit_ajson_error.
data ls_node type zif_abapgit_ajson=>ty_node.
data ls_node type zif_abapgit_ajson_types=>ty_node.
ls_node-path = '/x/'.
ls_node-name = 'y'.

View File

@ -5,41 +5,6 @@ INTERFACE zif_abapgit_ajson
CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT
CONSTANTS license TYPE string VALUE 'MIT'. "#EC NOTEXT
TYPES:
ty_node_type TYPE string.
CONSTANTS:
BEGIN OF node_type,
boolean TYPE ty_node_type VALUE 'bool',
string TYPE ty_node_type VALUE 'str',
number TYPE ty_node_type VALUE 'num',
null TYPE ty_node_type VALUE 'null',
array TYPE ty_node_type VALUE 'array',
object TYPE ty_node_type VALUE 'object',
END OF node_type.
TYPES:
BEGIN OF ty_node,
path TYPE string,
name TYPE string,
type TYPE ty_node_type,
value TYPE string,
index TYPE i,
order TYPE i,
children TYPE i,
END OF ty_node .
TYPES:
ty_nodes_tt TYPE STANDARD TABLE OF ty_node WITH KEY path name .
TYPES:
ty_nodes_ts TYPE SORTED TABLE OF ty_node
WITH UNIQUE KEY path name
WITH NON-UNIQUE SORTED KEY array_index COMPONENTS path index
WITH NON-UNIQUE SORTED KEY item_order COMPONENTS path order .
TYPES:
BEGIN OF ty_path_name,
path TYPE string,
name TYPE string,
END OF ty_path_name.
TYPES:
BEGIN OF ty_opts,
read_only TYPE abap_bool,
@ -49,9 +14,10 @@ INTERFACE zif_abapgit_ajson
" DATA
DATA mt_json_tree TYPE ty_nodes_ts READ-ONLY.
DATA mt_json_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts READ-ONLY.
" CLONING
METHODS clone
RETURNING
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
@ -115,7 +81,7 @@ INTERFACE zif_abapgit_ajson
IMPORTING
iv_path TYPE string
RETURNING
VALUE(rv_node_type) TYPE ty_node_type.
VALUE(rv_node_type) TYPE zif_abapgit_ajson_types=>ty_node_type.
METHODS get_boolean
IMPORTING
@ -184,7 +150,7 @@ INTERFACE zif_abapgit_ajson
iv_path TYPE string
iv_val TYPE any
iv_ignore_empty TYPE abap_bool DEFAULT abap_true
iv_node_type TYPE ty_node_type OPTIONAL
iv_node_type TYPE zif_abapgit_ajson_types=>ty_node_type OPTIONAL
RETURNING
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
RAISING

View File

@ -13,7 +13,7 @@ INTERFACE zif_abapgit_ajson_filter
METHODS keep_node
IMPORTING
is_node TYPE zif_abapgit_ajson=>ty_node
is_node TYPE zif_abapgit_ajson_types=>ty_node
iv_visit TYPE ty_visit_type DEFAULT visit_type-value
RETURNING
VALUE(rv_keep) TYPE abap_bool

View File

@ -37,8 +37,8 @@ INTERFACE zif_abapgit_ajson_mapping
METHODS rename_node
IMPORTING
!is_node TYPE zif_abapgit_ajson=>ty_node
!is_node TYPE zif_abapgit_ajson_types=>ty_node
CHANGING
!cv_name TYPE zif_abapgit_ajson=>ty_node-name.
!cv_name TYPE zif_abapgit_ajson_types=>ty_node-name.
ENDINTERFACE.

View File

@ -0,0 +1,41 @@
INTERFACE zif_abapgit_ajson_types
PUBLIC.
TYPES:
ty_node_type TYPE string.
CONSTANTS:
BEGIN OF node_type,
boolean TYPE ty_node_type VALUE 'bool',
string TYPE ty_node_type VALUE 'str',
number TYPE ty_node_type VALUE 'num',
null TYPE ty_node_type VALUE 'null',
array TYPE ty_node_type VALUE 'array',
object TYPE ty_node_type VALUE 'object',
END OF node_type.
TYPES:
BEGIN OF ty_node,
path TYPE string,
name TYPE string,
type TYPE ty_node_type,
value TYPE string,
index TYPE i,
order TYPE i,
children TYPE i,
END OF ty_node.
TYPES:
ty_nodes_tt TYPE STANDARD TABLE OF ty_node WITH KEY path name.
TYPES:
ty_nodes_ts TYPE SORTED TABLE OF ty_node
WITH UNIQUE KEY path name
WITH NON-UNIQUE SORTED KEY array_index COMPONENTS path index
WITH NON-UNIQUE SORTED KEY item_order COMPONENTS path order.
TYPES:
BEGIN OF ty_path_name,
path TYPE string,
name TYPE string,
END OF ty_path_name.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_AJSON_TYPES</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>AJSON common types</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>