mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
ajson, Automatic Update (#4708)
* [create-pull-request] automated change * Update ajson_mirror.yaml Co-authored-by: larshp <larshp@users.noreply.github.com> Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
b23c0dc1b8
commit
f264f33b7e
2
.github/workflows/ajson_mirror.yaml
vendored
2
.github/workflows/ajson_mirror.yaml
vendored
|
@ -29,3 +29,5 @@ jobs:
|
|||
body: |
|
||||
Automatic update from mirror
|
||||
https://github.com/abapGit/ajson_mirror
|
||||
|
||||
Manually close and reopen the pull request to trigger CI
|
||||
|
|
|
@ -16,6 +16,7 @@ CLASS zcl_abapgit_ajson DEFINITION
|
|||
get_integer FOR zif_abapgit_ajson_reader~get_integer,
|
||||
get_number FOR zif_abapgit_ajson_reader~get_number,
|
||||
get_date FOR zif_abapgit_ajson_reader~get_date,
|
||||
get_timestamp FOR zif_abapgit_ajson_reader~get_timestamp,
|
||||
get_string FOR zif_abapgit_ajson_reader~get_string,
|
||||
slice FOR zif_abapgit_ajson_reader~slice,
|
||||
to_abap FOR zif_abapgit_ajson_reader~to_abap,
|
||||
|
@ -356,6 +357,28 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_ajson_reader~get_timestamp.
|
||||
|
||||
DATA lo_to_abap TYPE REF TO lcl_json_to_abap.
|
||||
DATA lr_item TYPE REF TO zif_abapgit_ajson=>ty_node.
|
||||
|
||||
lr_item = get_item( iv_path ).
|
||||
|
||||
IF lr_item IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT lo_to_abap.
|
||||
|
||||
TRY.
|
||||
rv_value = lo_to_abap->to_timestamp( is_path = lr_item->* ).
|
||||
CATCH zcx_abapgit_ajson_error.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_ajson_reader~members.
|
||||
|
||||
DATA lv_normalized_path TYPE string.
|
||||
|
|
|
@ -516,6 +516,14 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
|
|||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS to_timestamp
|
||||
IMPORTING
|
||||
is_path TYPE zif_abapgit_ajson=>ty_node
|
||||
RETURNING
|
||||
VALUE(rv_result) TYPE timestamp
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mr_obj TYPE REF TO data.
|
||||
DATA mi_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping.
|
||||
|
@ -570,6 +578,8 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
|
|||
iv_location = <n>-path && <n>-name ).
|
||||
ENDIF.
|
||||
CONCATENATE lv_y lv_m lv_d INTO <value>.
|
||||
ELSEIF lv_type = 'P' AND <n>-value IS NOT INITIAL.
|
||||
<value> = to_timestamp( is_path = <n> ).
|
||||
ELSE.
|
||||
<value> = <n>-value.
|
||||
ENDIF.
|
||||
|
@ -686,6 +696,82 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_timestamp.
|
||||
|
||||
CONSTANTS lc_tzone_utc TYPE tznzone VALUE `UTC`.
|
||||
CONSTANTS lc_regex_ts_with_hour TYPE string
|
||||
VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(\+)(\d{2}):(\d{2})`.
|
||||
CONSTANTS lc_regex_ts_utc TYPE string
|
||||
VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(Z|$)`.
|
||||
|
||||
DATA:
|
||||
BEGIN OF ls_timestamp,
|
||||
year TYPE c LENGTH 4,
|
||||
month TYPE c LENGTH 2,
|
||||
day TYPE c LENGTH 2,
|
||||
t TYPE c LENGTH 1,
|
||||
hour TYPE c LENGTH 2,
|
||||
minute TYPE c LENGTH 2,
|
||||
second TYPE c LENGTH 2,
|
||||
local_sign TYPE c LENGTH 1,
|
||||
local_hour TYPE c LENGTH 2,
|
||||
local_minute TYPE c LENGTH 2,
|
||||
END OF ls_timestamp.
|
||||
|
||||
DATA lv_date TYPE d.
|
||||
DATA lv_time TYPE t.
|
||||
DATA lv_seconds_conv TYPE i.
|
||||
DATA lv_timestamp TYPE timestamp.
|
||||
|
||||
FIND FIRST OCCURRENCE OF REGEX lc_regex_ts_with_hour
|
||||
IN is_path-value SUBMATCHES ls_timestamp-year ls_timestamp-month ls_timestamp-day ls_timestamp-t
|
||||
ls_timestamp-hour ls_timestamp-minute ls_timestamp-second
|
||||
ls_timestamp-local_sign ls_timestamp-local_hour ls_timestamp-local_minute.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
|
||||
lv_seconds_conv = ( ls_timestamp-local_hour * 3600 ) + ( ls_timestamp-local_minute * 60 ).
|
||||
|
||||
ELSE.
|
||||
|
||||
FIND FIRST OCCURRENCE OF REGEX lc_regex_ts_utc
|
||||
IN is_path-value SUBMATCHES ls_timestamp-year ls_timestamp-month ls_timestamp-day ls_timestamp-t
|
||||
ls_timestamp-hour ls_timestamp-minute ls_timestamp-second.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_ajson_error=>raise(
|
||||
iv_msg = 'Unexpected timestamp format'
|
||||
iv_location = is_path-path && is_path-name ).
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
CONCATENATE ls_timestamp-year ls_timestamp-month ls_timestamp-day INTO lv_date.
|
||||
CONCATENATE ls_timestamp-hour ls_timestamp-minute ls_timestamp-second INTO lv_time.
|
||||
|
||||
CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_timestamp TIME ZONE lc_tzone_utc.
|
||||
|
||||
TRY.
|
||||
|
||||
CASE ls_timestamp-local_sign.
|
||||
WHEN '-'.
|
||||
lv_timestamp = cl_abap_tstmp=>add( tstmp = lv_timestamp
|
||||
secs = lv_seconds_conv ).
|
||||
WHEN '+'.
|
||||
lv_timestamp = cl_abap_tstmp=>subtractsecs( tstmp = lv_timestamp
|
||||
secs = lv_seconds_conv ).
|
||||
ENDCASE.
|
||||
|
||||
CATCH cx_parameter_invalid_range cx_parameter_invalid_type.
|
||||
zcx_abapgit_ajson_error=>raise(
|
||||
iv_msg = 'Unexpected error calculating timestamp'
|
||||
iv_location = is_path-path && is_path-name ).
|
||||
ENDTRY.
|
||||
|
||||
rv_result = lv_timestamp.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
**********************************************************************
|
||||
|
|
|
@ -766,6 +766,7 @@ CLASS ltcl_reader_test DEFINITION FINAL
|
|||
METHODS slice FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS array_to_string_table FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS get_date FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS get_timestamp FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -958,6 +959,25 @@ CLASS ltcl_reader_test IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_timestamp.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
|
||||
DATA lv_exp TYPE timestamp VALUE `20200728000000`.
|
||||
|
||||
CREATE OBJECT lo_cut.
|
||||
|
||||
CREATE OBJECT lo_nodes.
|
||||
lo_nodes->add( ' | |object | | |1' ).
|
||||
lo_nodes->add( '/ |timestamp|str |2020-07-28T00:00:00Z | |0' ).
|
||||
lo_cut->mt_json_tree = lo_nodes->mt_nodes.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->zif_abapgit_ajson_reader~get_timestamp( '/timestamp' )
|
||||
exp = lv_exp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD exists.
|
||||
|
||||
DATA lo_cut TYPE REF TO zif_abapgit_ajson_reader.
|
||||
|
@ -1201,6 +1221,9 @@ CLASS ltcl_json_to_abap DEFINITION
|
|||
oref TYPE REF TO object,
|
||||
date1 TYPE d,
|
||||
date2 TYPE d,
|
||||
timestamp1 TYPE timestamp,
|
||||
timestamp2 TYPE timestamp,
|
||||
timestamp3 TYPE timestamp,
|
||||
END OF ty_complex.
|
||||
|
||||
METHODS find_loc FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
|
@ -1420,6 +1443,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
|
|||
DATA lo_cut TYPE REF TO lcl_json_to_abap.
|
||||
DATA ls_mock TYPE ty_complex.
|
||||
DATA lv_exp_date TYPE d VALUE '20200728'.
|
||||
DATA lv_exp_timestamp TYPE timestamp VALUE '20200728000000'.
|
||||
lcl_json_to_abap=>bind(
|
||||
CHANGING
|
||||
c_obj = ls_mock
|
||||
|
@ -1427,20 +1451,23 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
|
|||
|
||||
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
|
||||
CREATE OBJECT lo_nodes.
|
||||
lo_nodes->add( '/ | |object | | ' ).
|
||||
lo_nodes->add( '/ |str |str |hello | ' ).
|
||||
lo_nodes->add( '/ |int |num |5 | ' ).
|
||||
lo_nodes->add( '/ |float |num |5.5 | ' ).
|
||||
lo_nodes->add( '/ |bool |bool |true | ' ).
|
||||
lo_nodes->add( '/ |obj |object | | ' ).
|
||||
lo_nodes->add( '/obj |a |str |world | ' ).
|
||||
lo_nodes->add( '/ |tab |array | | ' ).
|
||||
lo_nodes->add( '/tab |1 |object | |1' ).
|
||||
lo_nodes->add( '/tab/1 |a |str | One | ' ).
|
||||
lo_nodes->add( '/tab |2 |object | |2' ).
|
||||
lo_nodes->add( '/tab/2 |a |str | Two | ' ).
|
||||
lo_nodes->add( '/ |date1 |str |2020-07-28 | ' ).
|
||||
lo_nodes->add( '/ |date2 |str |2020-07-28T00:00:00Z | ' ).
|
||||
lo_nodes->add( '/ | |object | | ' ).
|
||||
lo_nodes->add( '/ |str |str |hello | ' ).
|
||||
lo_nodes->add( '/ |int |num |5 | ' ).
|
||||
lo_nodes->add( '/ |float |num |5.5 | ' ).
|
||||
lo_nodes->add( '/ |bool |bool |true | ' ).
|
||||
lo_nodes->add( '/ |obj |object | | ' ).
|
||||
lo_nodes->add( '/obj |a |str |world | ' ).
|
||||
lo_nodes->add( '/ |tab |array | | ' ).
|
||||
lo_nodes->add( '/tab |1 |object | |1' ).
|
||||
lo_nodes->add( '/tab/1 |a |str | One | ' ).
|
||||
lo_nodes->add( '/tab |2 |object | |2' ).
|
||||
lo_nodes->add( '/tab/2 |a |str | Two | ' ).
|
||||
lo_nodes->add( '/ |date1 |str |2020-07-28 | ' ).
|
||||
lo_nodes->add( '/ |date2 |str |2020-07-28T00:00:00Z | ' ).
|
||||
lo_nodes->add( '/ |timestamp1 |str |2020-07-28T00:00:00 | ' ).
|
||||
lo_nodes->add( '/ |timestamp2 |str |2020-07-28T00:00:00Z | ' ).
|
||||
lo_nodes->add( '/ |timestamp3 |str |2020-07-28T01:00:00+01:00 | ' ).
|
||||
|
||||
lo_cut->to_abap( lo_nodes->sorted( ) ).
|
||||
|
||||
|
@ -1465,6 +1492,15 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
|
|||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ls_mock-date2
|
||||
exp = lv_exp_date ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ls_mock-timestamp1
|
||||
exp = lv_exp_timestamp ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ls_mock-timestamp2
|
||||
exp = lv_exp_timestamp ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ls_mock-timestamp3
|
||||
exp = lv_exp_timestamp ).
|
||||
|
||||
DATA ls_elem LIKE LINE OF ls_mock-tab.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
|
|
@ -41,6 +41,11 @@ INTERFACE zif_abapgit_ajson_reader
|
|||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE d.
|
||||
METHODS get_timestamp
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE timestamp.
|
||||
METHODS get_string
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
|
|
Loading…
Reference in New Issue
Block a user