mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
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:
parent
14d0982fa9
commit
b7eab01b6b
|
@ -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.
|
||||
|
||||
|
|
|
@ -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 ).
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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'.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
41
src/json/zif_abapgit_ajson_types.intf.abap
Normal file
41
src/json/zif_abapgit_ajson_types.intf.abap
Normal 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.
|
15
src/json/zif_abapgit_ajson_types.intf.xml
Normal file
15
src/json/zif_abapgit_ajson_types.intf.xml
Normal 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>
|
Loading…
Reference in New Issue
Block a user