mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
data: use ajson for serialization (#4363)
* data: use ajson for serialization * config to_json * implement from_json * fix * move method build_table_itab to new class * start deserialize * update * scaffolding * add page * upd * fix warning * update * rename variable * upd * update * reorder
This commit is contained in:
parent
2b7a60daeb
commit
1d1d046d39
|
@ -11,8 +11,17 @@ CLASS zcl_abapgit_data_config DEFINITION
|
|||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
CONSTANTS c_extension TYPE string VALUE '.config.json'.
|
||||
DATA mv_path TYPE string .
|
||||
DATA mt_config TYPE zif_abapgit_data_config=>ty_config_tt .
|
||||
|
||||
METHODS dump
|
||||
IMPORTING
|
||||
!is_config TYPE zif_abapgit_data_config=>ty_config
|
||||
RETURNING
|
||||
VALUE(rv_json) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -27,10 +36,31 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD dump.
|
||||
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lv_string TYPE string.
|
||||
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
||||
|
||||
|
||||
TRY.
|
||||
lo_ajson = zcl_abapgit_ajson=>create_empty( ).
|
||||
lo_ajson->zif_abapgit_ajson_writer~set(
|
||||
iv_path = '/'
|
||||
iv_val = is_config ).
|
||||
rv_json = zcl_abapgit_convert=>string_to_xstring_utf8( lo_ajson->stringify( 2 ) ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_data_config~add_config.
|
||||
|
||||
ASSERT NOT is_config-type IS INITIAL.
|
||||
ASSERT NOT is_config-name IS INITIAL.
|
||||
ASSERT is_config-name = to_upper( is_config-name ).
|
||||
|
||||
INSERT is_config INTO TABLE mt_config.
|
||||
IF sy-subrc <> 0.
|
||||
|
@ -41,8 +71,24 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD zif_abapgit_data_config~from_json.
|
||||
* todo
|
||||
ASSERT 0 = 1.
|
||||
|
||||
DATA ls_file LIKE LINE OF it_files.
|
||||
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
||||
|
||||
CLEAR mt_config.
|
||||
LOOP AT it_files INTO ls_file WHERE path = mv_path AND filename CP |*{ c_extension }|.
|
||||
TRY.
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( zcl_abapgit_convert=>xstring_to_string_utf8( ls_file-data ) ).
|
||||
lo_ajson->zif_abapgit_ajson_reader~to_abap( IMPORTING ev_container = ls_config ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
|
||||
ENDTRY.
|
||||
|
||||
zif_abapgit_data_config~add_config( ls_config ).
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -60,7 +106,9 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_data_config~remove_config.
|
||||
|
||||
* todo, give exception if it does not exist
|
||||
ASSERT NOT is_config-type IS INITIAL.
|
||||
ASSERT NOT is_config-name IS INITIAL.
|
||||
ASSERT is_config-name = to_upper( is_config-name ).
|
||||
|
||||
DELETE mt_config WHERE name = is_config-name AND type = is_config-type.
|
||||
IF sy-subrc <> 0.
|
||||
|
@ -80,8 +128,19 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD zif_abapgit_data_config~to_json.
|
||||
* todo
|
||||
ASSERT 0 = 1.
|
||||
|
||||
DATA ls_config LIKE LINE OF mt_config.
|
||||
DATA ls_file LIKE LINE OF rt_files.
|
||||
|
||||
ls_file-path = mv_path.
|
||||
|
||||
LOOP AT mt_config INTO ls_config.
|
||||
ls_file-filename = to_lower( |{ ls_config-name }{ c_extension }| ).
|
||||
ls_file-data = dump( ls_config ).
|
||||
ls_file-sha1 = zcl_abapgit_hash=>sha1_blob( ls_file-data ).
|
||||
APPEND ls_file TO rt_files.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
80
src/data/zcl_abapgit_data_config.clas.testclasses.abap
Normal file
80
src/data/zcl_abapgit_data_config.clas.testclasses.abap
Normal file
|
@ -0,0 +1,80 @@
|
|||
CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mv_json TYPE string.
|
||||
DATA ms_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
|
||||
METHODS setup.
|
||||
METHODS to_json FOR TESTING RAISING cx_static_check.
|
||||
METHODS from_json
|
||||
IMPORTING it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
||||
RAISING cx_static_check.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltcl_test IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
mv_json = |\{\n| &&
|
||||
| "name": "DUMMY",\n| &&
|
||||
| "type": "TABU",\n| &&
|
||||
| "where": [\n| &&
|
||||
| "DUMMY"\n| &&
|
||||
| ]\n| &&
|
||||
|\}|.
|
||||
|
||||
ms_config-type = zif_abapgit_data_config=>c_data_type-tabu.
|
||||
ms_config-name = 'DUMMY'.
|
||||
APPEND 'DUMMY' TO ms_config-where.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_json.
|
||||
|
||||
DATA li_config TYPE REF TO zif_abapgit_data_config.
|
||||
DATA lt_files TYPE zif_abapgit_definitions=>ty_files_tt.
|
||||
DATA ls_file LIKE LINE OF lt_files.
|
||||
DATA lv_json TYPE string.
|
||||
|
||||
|
||||
CREATE OBJECT li_config TYPE zcl_abapgit_data_config.
|
||||
li_config->add_config( ms_config ).
|
||||
|
||||
lt_files = li_config->to_json( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lines( lt_files )
|
||||
exp = 1 ).
|
||||
|
||||
READ TABLE lt_files INDEX 1 INTO ls_file.
|
||||
cl_abap_unit_assert=>assert_subrc( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_not_initial( ls_file-data ).
|
||||
|
||||
lv_json = zcl_abapgit_convert=>xstring_to_string_utf8( ls_file-data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_json
|
||||
exp = mv_json ).
|
||||
|
||||
from_json( lt_files ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD from_json.
|
||||
|
||||
DATA li_config TYPE REF TO zif_abapgit_data_config.
|
||||
|
||||
CREATE OBJECT li_config TYPE zcl_abapgit_data_config.
|
||||
|
||||
li_config->from_json( it_files ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lines( li_config->get_configs( ) )
|
||||
exp = 1 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
|
@ -10,6 +10,7 @@
|
|||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
|
|
|
@ -8,6 +8,13 @@ CLASS zcl_abapgit_data_deserializer DEFINITION
|
|||
INTERFACES zif_abapgit_data_deserializer .
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS read_json
|
||||
IMPORTING
|
||||
!is_file TYPE zif_abapgit_definitions=>ty_file
|
||||
!ir_data TYPE REF TO data
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -15,8 +22,61 @@ ENDCLASS.
|
|||
CLASS ZCL_ABAPGIT_DATA_DESERIALIZER IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD read_json.
|
||||
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
||||
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
|
||||
|
||||
|
||||
ASSIGN ir_data->* TO <lg_tab>.
|
||||
|
||||
TRY.
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( zcl_abapgit_convert=>xstring_to_string_utf8( is_file-data ) ).
|
||||
lo_ajson->zif_abapgit_ajson_reader~to_abap( IMPORTING ev_container = <lg_tab> ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_data_deserializer~actualize.
|
||||
|
||||
* todo, this method will update the database
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_data_deserializer~deserialize.
|
||||
|
||||
* this method does not persist any changes to the database
|
||||
|
||||
DATA lt_configs TYPE zif_abapgit_data_config=>ty_config_tt.
|
||||
DATA ls_config LIKE LINE OF lt_configs.
|
||||
DATA lr_data TYPE REF TO data.
|
||||
DATA ls_file LIKE LINE OF it_files.
|
||||
|
||||
|
||||
lt_configs = ii_config->get_configs( ).
|
||||
|
||||
LOOP AT lt_configs INTO ls_config.
|
||||
|
||||
lr_data = zcl_abapgit_data_utils=>build_table_itab( ls_config-name ).
|
||||
|
||||
READ TABLE it_files INTO ls_file WITH KEY
|
||||
path = ii_config->get_path( )
|
||||
filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
|
||||
IF sy-subrc = 0.
|
||||
read_json(
|
||||
ir_data = lr_data
|
||||
is_file = ls_file ).
|
||||
ENDIF.
|
||||
|
||||
* todo
|
||||
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
32
src/data/zcl_abapgit_data_deserializer.clas.testclasses.abap
Normal file
32
src/data/zcl_abapgit_data_deserializer.clas.testclasses.abap
Normal file
|
@ -0,0 +1,32 @@
|
|||
CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS test1 FOR TESTING RAISING cx_static_check.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltcl_test IMPLEMENTATION.
|
||||
|
||||
METHOD test1.
|
||||
|
||||
DATA li_cut TYPE REF TO zif_abapgit_data_deserializer.
|
||||
DATA li_config TYPE REF TO zif_abapgit_data_config.
|
||||
DATA lt_files TYPE zif_abapgit_definitions=>ty_files_tt.
|
||||
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
|
||||
CREATE OBJECT li_cut TYPE zcl_abapgit_data_deserializer.
|
||||
CREATE OBJECT li_config TYPE zcl_abapgit_data_config.
|
||||
|
||||
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
|
||||
ls_config-name = 'SFLIGHT'.
|
||||
|
||||
li_config->add_config( ls_config ).
|
||||
|
||||
li_cut->deserialize(
|
||||
ii_config = li_config
|
||||
it_files = lt_files ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
|
@ -5,11 +5,12 @@
|
|||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_DATA_DESERIALIZER</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Data deserializer</DESCRIPT>
|
||||
<DESCRIPT>abapGit - Data Deserializer</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_DATA_FACTORY</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Data factory</DESCRIPT>
|
||||
<DESCRIPT>abapGit - Data Factory</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_DATA_INJECTOR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Data injector</DESCRIPT>
|
||||
<DESCRIPT>abapGit - Data Injector</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
|
|
|
@ -12,12 +12,9 @@ CLASS zcl_abapgit_data_serializer DEFINITION
|
|||
IMPORTING
|
||||
!ir_data TYPE REF TO data
|
||||
RETURNING
|
||||
VALUE(rv_data) TYPE xstring .
|
||||
METHODS build_table_itab
|
||||
IMPORTING
|
||||
!iv_name TYPE tadir-obj_name
|
||||
RETURNING
|
||||
VALUE(rr_data) TYPE REF TO data .
|
||||
VALUE(rv_data) TYPE xstring
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS read_database_table
|
||||
IMPORTING
|
||||
!iv_name TYPE tadir-obj_name
|
||||
|
@ -32,41 +29,27 @@ ENDCLASS.
|
|||
CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD build_table_itab.
|
||||
|
||||
DATA lo_structure TYPE REF TO cl_abap_structdescr.
|
||||
DATA lo_table TYPE REF TO cl_abap_tabledescr.
|
||||
|
||||
lo_structure ?= cl_abap_structdescr=>describe_by_name( iv_name ).
|
||||
* todo, also add unique key corresponding to the db table, so duplicates cannot be returned
|
||||
lo_table = cl_abap_tabledescr=>create( lo_structure ).
|
||||
CREATE DATA rr_data TYPE HANDLE lo_table.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD dump_itab.
|
||||
|
||||
* quick and dirty, will be json instead
|
||||
|
||||
DATA lt_data TYPE string_table.
|
||||
DATA lv_str TYPE string.
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lv_string TYPE string.
|
||||
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
||||
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
|
||||
FIELD-SYMBOLS <ls_row> TYPE any.
|
||||
|
||||
|
||||
ASSIGN ir_data->* TO <lg_tab>.
|
||||
LOOP AT <lg_tab> ASSIGNING <ls_row>.
|
||||
cl_abap_container_utilities=>fill_container_c(
|
||||
EXPORTING
|
||||
im_value = <ls_row>
|
||||
IMPORTING
|
||||
ex_container = lv_str ).
|
||||
APPEND lv_str TO lt_data.
|
||||
ENDLOOP.
|
||||
|
||||
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( concat_lines_of( table = lt_data
|
||||
sep = |\n| ) ).
|
||||
TRY.
|
||||
lo_ajson = zcl_abapgit_ajson=>create_empty( ).
|
||||
lo_ajson->zif_abapgit_ajson_writer~set(
|
||||
iv_path = '/'
|
||||
iv_val = <lg_tab> ).
|
||||
lv_string = lo_ajson->stringify( 2 ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
|
||||
ENDTRY.
|
||||
|
||||
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -76,7 +59,7 @@ CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
|
|||
DATA lv_where LIKE LINE OF it_where.
|
||||
FIELD-SYMBOLS: <lg_tab> TYPE ANY TABLE.
|
||||
|
||||
rr_data = build_table_itab( iv_name ).
|
||||
rr_data = zcl_abapgit_data_utils=>build_table_itab( iv_name ).
|
||||
ASSIGN rr_data->* TO <lg_tab>.
|
||||
|
||||
LOOP AT it_where INTO lv_where.
|
||||
|
@ -108,7 +91,7 @@ CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
|
|||
iv_name = ls_config-name
|
||||
it_where = ls_config-where ).
|
||||
|
||||
ls_file-filename = to_lower( |{ ls_config-name }.{ ls_config-type }.todo| ).
|
||||
ls_file-filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
|
||||
ls_file-data = dump_itab( lr_data ).
|
||||
ls_file-sha1 = zcl_abapgit_hash=>sha1_blob( ls_file-data ).
|
||||
APPEND ls_file TO rt_files.
|
||||
|
|
45
src/data/zcl_abapgit_data_utils.clas.abap
Normal file
45
src/data/zcl_abapgit_data_utils.clas.abap
Normal file
|
@ -0,0 +1,45 @@
|
|||
CLASS zcl_abapgit_data_utils DEFINITION
|
||||
PUBLIC
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS build_table_itab
|
||||
IMPORTING
|
||||
!iv_name TYPE tadir-obj_name
|
||||
RETURNING
|
||||
VALUE(rr_data) TYPE REF TO data .
|
||||
|
||||
CLASS-METHODS build_filename
|
||||
IMPORTING
|
||||
is_config TYPE zif_abapgit_data_config=>ty_config
|
||||
RETURNING
|
||||
VALUE(rv_filename) TYPE string.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD build_filename.
|
||||
|
||||
rv_filename = to_lower( |{ is_config-name }.{ is_config-type }.json| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD build_table_itab.
|
||||
|
||||
DATA lo_structure TYPE REF TO cl_abap_structdescr.
|
||||
DATA lo_table TYPE REF TO cl_abap_tabledescr.
|
||||
|
||||
lo_structure ?= cl_abap_structdescr=>describe_by_name( iv_name ).
|
||||
* todo, also add unique key corresponding to the db table, so duplicates cannot be returned
|
||||
lo_table = cl_abap_tabledescr=>create( lo_structure ).
|
||||
CREATE DATA rr_data TYPE HANDLE lo_table.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
16
src/data/zcl_abapgit_data_utils.clas.xml
Normal file
16
src/data/zcl_abapgit_data_utils.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_DATA_UTILS</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Data Utils</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -11,7 +11,7 @@ INTERFACE zif_abapgit_data_config
|
|||
where TYPE string_table,
|
||||
END OF ty_config .
|
||||
TYPES:
|
||||
ty_config_tt TYPE SORTED TABLE OF ty_config WITH UNIQUE KEY type name.
|
||||
ty_config_tt TYPE SORTED TABLE OF ty_config WITH UNIQUE KEY type name .
|
||||
|
||||
CONSTANTS c_default_path TYPE string VALUE '/data/' ##NO_TEXT.
|
||||
CONSTANTS:
|
||||
|
@ -37,7 +37,9 @@ INTERFACE zif_abapgit_data_config
|
|||
zcx_abapgit_exception .
|
||||
METHODS to_json
|
||||
RETURNING
|
||||
VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_tt .
|
||||
VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS add_config
|
||||
IMPORTING
|
||||
!is_config TYPE ty_config
|
||||
|
|
|
@ -1,9 +1,26 @@
|
|||
INTERFACE zif_abapgit_data_deserializer
|
||||
PUBLIC .
|
||||
|
||||
TYPES: BEGIN OF ty_result,
|
||||
table TYPE tadir-obj_name,
|
||||
deletes TYPE REF TO data,
|
||||
updates TYPE REF TO data,
|
||||
inserts TYPE REF TO data,
|
||||
END OF ty_result.
|
||||
|
||||
METHODS deserialize
|
||||
IMPORTING
|
||||
ii_config TYPE REF TO zif_abapgit_data_config
|
||||
it_files TYPE zif_abapgit_definitions=>ty_files_tt.
|
||||
!ii_config TYPE REF TO zif_abapgit_data_config
|
||||
!it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
||||
RETURNING
|
||||
VALUE(rs_result) TYPE ty_result
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
METHODS actualize
|
||||
IMPORTING
|
||||
is_result TYPE ty_result
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
225
src/ui/zcl_abapgit_gui_page_data.clas.abap
Normal file
225
src/ui/zcl_abapgit_gui_page_data.clas.abap
Normal file
|
@ -0,0 +1,225 @@
|
|||
CLASS zcl_abapgit_gui_page_data DEFINITION
|
||||
PUBLIC
|
||||
INHERITING FROM zcl_abapgit_gui_page
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
METHODS constructor
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
METHODS zif_abapgit_gui_event_handler~on_event
|
||||
REDEFINITION .
|
||||
PROTECTED SECTION.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_event,
|
||||
add TYPE string VALUE 'add',
|
||||
update TYPE string VALUE 'update',
|
||||
remove TYPE string VALUE 'remove',
|
||||
END OF c_event .
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_id,
|
||||
table TYPE string VALUE 'table',
|
||||
where TYPE string VALUE 'where',
|
||||
END OF c_id .
|
||||
|
||||
DATA mi_config TYPE REF TO zif_abapgit_data_config .
|
||||
|
||||
METHODS render_content
|
||||
REDEFINITION .
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS render_add
|
||||
RETURNING
|
||||
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
|
||||
METHODS render_existing
|
||||
RETURNING
|
||||
VALUE(ri_html) TYPE REF TO zif_abapgit_html
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS event_add
|
||||
IMPORTING
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS event_remove
|
||||
IMPORTING
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS event_update
|
||||
IMPORTING
|
||||
!ii_event TYPE REF TO zif_abapgit_gui_event
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
super->constructor( ).
|
||||
|
||||
ms_control-page_title = 'Data'.
|
||||
|
||||
CREATE OBJECT mi_config TYPE zcl_abapgit_data_config.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD event_add.
|
||||
|
||||
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
|
||||
lo_map = ii_event->form_data( ).
|
||||
|
||||
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
|
||||
ls_config-name = to_upper( lo_map->get( c_id-table ) ).
|
||||
SPLIT lo_map->get( c_id-where ) AT |\n| INTO TABLE ls_config-where.
|
||||
|
||||
mi_config->add_config( ls_config ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD event_remove.
|
||||
|
||||
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
|
||||
lo_map = ii_event->form_data( ).
|
||||
|
||||
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
|
||||
ls_config-name = to_upper( lo_map->get( c_id-table ) ).
|
||||
|
||||
mi_config->remove_config( ls_config ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD event_update.
|
||||
|
||||
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
|
||||
lo_map = ii_event->form_data( ).
|
||||
|
||||
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
|
||||
ls_config-name = to_upper( lo_map->get( c_id-table ) ).
|
||||
SPLIT lo_map->get( c_id-where ) AT |\n| INTO TABLE ls_config-where.
|
||||
|
||||
mi_config->update_config( ls_config ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD render_add.
|
||||
|
||||
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||
CREATE OBJECT lo_form_data.
|
||||
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
lo_form->text(
|
||||
iv_label = 'Table'
|
||||
iv_name = c_id-table
|
||||
iv_required = abap_true ).
|
||||
lo_form->textarea(
|
||||
iv_label = 'Where'
|
||||
iv_placeholder = 'Conditions separated by newline'
|
||||
iv_name = c_id-where ).
|
||||
lo_form->command(
|
||||
iv_label = 'Add'
|
||||
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
|
||||
iv_action = c_event-add ).
|
||||
ri_html->add( lo_form->render(
|
||||
iv_form_class = 'dialog w600px m-em5-sides margin-v1'
|
||||
io_values = lo_form_data ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD render_content.
|
||||
|
||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||
|
||||
ri_html->add( render_add( ) ).
|
||||
ri_html->add( render_existing( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD render_existing.
|
||||
|
||||
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lt_configs TYPE zif_abapgit_data_config=>ty_config_tt.
|
||||
DATA ls_config LIKE LINE OF lt_configs.
|
||||
|
||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||
CREATE OBJECT lo_form_data.
|
||||
|
||||
lt_configs = mi_config->get_configs( ).
|
||||
|
||||
LOOP AT lt_configs INTO ls_config.
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
CREATE OBJECT lo_form_data.
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = c_id-table
|
||||
iv_val = |{ ls_config-name }| ).
|
||||
lo_form->text(
|
||||
iv_label = 'Table'
|
||||
iv_name = c_id-table
|
||||
iv_readonly = abap_true ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = c_id-where
|
||||
iv_val = concat_lines_of( table = ls_config-where sep = |\n| ) ).
|
||||
lo_form->textarea(
|
||||
iv_label = 'Where'
|
||||
iv_placeholder = 'Conditions separated by newline'
|
||||
iv_name = c_id-where ).
|
||||
|
||||
lo_form->command(
|
||||
iv_label = 'Update'
|
||||
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
|
||||
iv_action = c_event-update ).
|
||||
lo_form->command(
|
||||
iv_label = 'Remove'
|
||||
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
|
||||
iv_action = c_event-remove ).
|
||||
ri_html->add( lo_form->render(
|
||||
iv_form_class = 'dialog w600px m-em5-sides margin-v1'
|
||||
io_values = lo_form_data ) ).
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_event_handler~on_event.
|
||||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_event-add.
|
||||
event_add( ii_event ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
WHEN c_event-update.
|
||||
event_update( ii_event ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
WHEN c_event-remove.
|
||||
event_remove( ii_event ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
16
src/ui/zcl_abapgit_gui_page_data.clas.xml
Normal file
16
src/ui/zcl_abapgit_gui_page_data.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_GUI_PAGE_DATA</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>GUI - Data</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -19,6 +19,7 @@ CLASS zcl_abapgit_gui_page_repo_view DEFINITION
|
|||
display_more TYPE string VALUE 'display_more' ##NO_TEXT,
|
||||
repo_switch_origin_to_pr TYPE string VALUE 'repo_switch_origin_to_pr',
|
||||
repo_reset_origin TYPE string VALUE 'repo_reset_origin',
|
||||
go_data TYPE string VALUE 'go_data',
|
||||
END OF c_actions .
|
||||
|
||||
METHODS constructor
|
||||
|
@ -192,7 +193,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
||||
CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_VIEW IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD apply_order_by.
|
||||
|
@ -308,6 +309,10 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh_checksums }?key={ mv_key }|
|
||||
iv_opt = lv_crossout ).
|
||||
|
||||
ro_advanced_dropdown->add( iv_txt = 'Beta - Data'
|
||||
iv_act = |{ c_actions-go_data }?key={ mv_key }|
|
||||
iv_opt = lv_crossout ).
|
||||
|
||||
IF is_repo_lang_logon_lang( ) = abap_false AND get_abapgit_tcode( ) IS NOT INITIAL.
|
||||
ro_advanced_dropdown->add(
|
||||
iv_txt = 'Open in Main Language'
|
||||
|
@ -637,6 +642,22 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_abapgit_tcode.
|
||||
CONSTANTS: lc_report_tcode_hex TYPE x VALUE '80'.
|
||||
DATA: lt_tcodes TYPE STANDARD TABLE OF tcode.
|
||||
|
||||
SELECT tcode
|
||||
FROM tstc
|
||||
INTO TABLE lt_tcodes
|
||||
WHERE pgmna = sy-cprog
|
||||
AND cinfo = lc_report_tcode_hex.
|
||||
|
||||
IF lines( lt_tcodes ) = 1.
|
||||
READ TABLE lt_tcodes INDEX 1 INTO rv_tcode.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_item_class.
|
||||
|
||||
DATA lt_class TYPE TABLE OF string.
|
||||
|
@ -683,6 +704,11 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD is_repo_lang_logon_lang.
|
||||
rv_repo_lang_is_logon_lang = boolc( mo_repo->get_dot_abapgit( )->get_master_language( ) = sy-langu ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD open_in_master_language.
|
||||
|
||||
DATA:
|
||||
|
@ -1196,6 +1222,10 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
iv_key = |{ ii_event->query( )->get( 'KEY' ) }|.
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_replacing.
|
||||
|
||||
WHEN c_actions-go_data.
|
||||
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_data.
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_replacing.
|
||||
|
||||
WHEN c_actions-toggle_hide_files. " Toggle file diplay
|
||||
mv_hide_files = zcl_abapgit_persistence_user=>get_instance( )->toggle_hide_files( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
@ -1318,23 +1348,4 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_repo_lang_logon_lang.
|
||||
rv_repo_lang_is_logon_lang = boolc( mo_repo->get_dot_abapgit( )->get_master_language( ) = sy-langu ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_abapgit_tcode.
|
||||
CONSTANTS: lc_report_tcode_hex TYPE x VALUE '80'.
|
||||
DATA: lt_tcodes TYPE STANDARD TABLE OF tcode.
|
||||
|
||||
SELECT tcode
|
||||
FROM tstc
|
||||
INTO TABLE lt_tcodes
|
||||
WHERE pgmna = sy-cprog
|
||||
AND cinfo = lc_report_tcode_hex.
|
||||
|
||||
IF lines( lt_tcodes ) = 1.
|
||||
READ TABLE lt_tcodes INDEX 1 INTO rv_tcode.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
Loading…
Reference in New Issue
Block a user