mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 21:08:01 +08:00
71 lines
2.2 KiB
ABAP
71 lines
2.2 KiB
ABAP
CLASS lcl_aff_filter DEFINITION FINAL.
|
|
PUBLIC SECTION.
|
|
INTERFACES zif_abapgit_ajson_filter.
|
|
TYPES:
|
|
BEGIN OF ty_path_value_pair,
|
|
path TYPE string,
|
|
value TYPE string,
|
|
END OF ty_path_value_pair,
|
|
ty_skip_paths TYPE STANDARD TABLE OF ty_path_value_pair WITH KEY path.
|
|
|
|
METHODS constructor
|
|
IMPORTING iv_skip_paths TYPE ty_skip_paths OPTIONAL
|
|
RAISING zcx_abapgit_ajson_error.
|
|
PRIVATE SECTION.
|
|
DATA mt_skip_paths TYPE ty_skip_paths.
|
|
ENDCLASS.
|
|
|
|
CLASS lcl_aff_filter IMPLEMENTATION.
|
|
|
|
METHOD zif_abapgit_ajson_filter~keep_node.
|
|
|
|
DATA lv_path TYPE string.
|
|
|
|
lv_path = is_node-path && is_node-name.
|
|
|
|
READ TABLE mt_skip_paths WITH KEY path = lv_path value = is_node-value TRANSPORTING NO FIELDS.
|
|
IF boolc( sy-subrc = 0 ) = abap_true
|
|
AND iv_visit = zif_abapgit_ajson_filter=>visit_type-value.
|
|
rv_keep = abap_false.
|
|
RETURN.
|
|
ELSE.
|
|
READ TABLE mt_skip_paths WITH KEY path = lv_path TRANSPORTING NO FIELDS.
|
|
IF boolc( sy-subrc = 0 ) = abap_true
|
|
AND iv_visit = zif_abapgit_ajson_filter=>visit_type-value.
|
|
rv_keep = abap_true.
|
|
RETURN.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
IF is_node-type = 'bool' AND is_node-value = 'false' AND iv_visit = zif_abapgit_ajson_filter=>visit_type-value.
|
|
rv_keep = abap_false.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
" AFF: if INTEGER type is initial (0) then is will be skipped
|
|
" However, if type is $required, it should be serialized.
|
|
IF NOT ( ( iv_visit = zif_abapgit_ajson_filter=>visit_type-value AND is_node-value IS NOT INITIAL ) OR
|
|
( iv_visit <> zif_abapgit_ajson_filter=>visit_type-value AND is_node-children > 0 ) ).
|
|
rv_keep = abap_false.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
rv_keep = abap_true.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD constructor.
|
|
" extract annotations and build table for values to be skipped ( path/name | value )
|
|
DATA lo_abap_language_pair TYPE ty_path_value_pair.
|
|
lo_abap_language_pair-path = `/header/abapLanguageVersion`.
|
|
lo_abap_language_pair-value = 'standard'.
|
|
|
|
APPEND lo_abap_language_pair TO mt_skip_paths.
|
|
|
|
IF iv_skip_paths IS NOT INITIAL.
|
|
APPEND LINES OF iv_skip_paths TO mt_skip_paths.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS.
|