diff --git a/src/data/zcl_abapgit_data_config.clas.abap b/src/data/zcl_abapgit_data_config.clas.abap
index fab721525..e77f1793f 100644
--- a/src/data/zcl_abapgit_data_config.clas.abap
+++ b/src/data/zcl_abapgit_data_config.clas.abap
@@ -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.
diff --git a/src/data/zcl_abapgit_data_config.clas.testclasses.abap b/src/data/zcl_abapgit_data_config.clas.testclasses.abap
new file mode 100644
index 000000000..ef356e564
--- /dev/null
+++ b/src/data/zcl_abapgit_data_config.clas.testclasses.abap
@@ -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.
diff --git a/src/data/zcl_abapgit_data_config.clas.xml b/src/data/zcl_abapgit_data_config.clas.xml
index 845ce09c4..2c37e7fb5 100644
--- a/src/data/zcl_abapgit_data_config.clas.xml
+++ b/src/data/zcl_abapgit_data_config.clas.xml
@@ -10,6 +10,7 @@
X
X
X
+ X
diff --git a/src/data/zcl_abapgit_data_deserializer.clas.abap b/src/data/zcl_abapgit_data_deserializer.clas.abap
index 54096542b..7b756f4eb 100644
--- a/src/data/zcl_abapgit_data_deserializer.clas.abap
+++ b/src/data/zcl_abapgit_data_deserializer.clas.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 TYPE ANY TABLE.
+
+
+ ASSIGN ir_data->* TO .
+
+ 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 = ).
+ 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.
diff --git a/src/data/zcl_abapgit_data_deserializer.clas.testclasses.abap b/src/data/zcl_abapgit_data_deserializer.clas.testclasses.abap
new file mode 100644
index 000000000..695d46a14
--- /dev/null
+++ b/src/data/zcl_abapgit_data_deserializer.clas.testclasses.abap
@@ -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.
diff --git a/src/data/zcl_abapgit_data_deserializer.clas.xml b/src/data/zcl_abapgit_data_deserializer.clas.xml
index 457196f85..2b0e2bf1a 100644
--- a/src/data/zcl_abapgit_data_deserializer.clas.xml
+++ b/src/data/zcl_abapgit_data_deserializer.clas.xml
@@ -5,11 +5,12 @@
ZCL_ABAPGIT_DATA_DESERIALIZER
E
- abapGit - Data deserializer
+ abapGit - Data Deserializer
1
X
X
X
+ X
diff --git a/src/data/zcl_abapgit_data_factory.clas.xml b/src/data/zcl_abapgit_data_factory.clas.xml
index 44ef2ade2..5fc175a79 100644
--- a/src/data/zcl_abapgit_data_factory.clas.xml
+++ b/src/data/zcl_abapgit_data_factory.clas.xml
@@ -5,7 +5,7 @@
ZCL_ABAPGIT_DATA_FACTORY
E
- abapGit - Data factory
+ abapGit - Data Factory
1
X
X
diff --git a/src/data/zcl_abapgit_data_injector.clas.xml b/src/data/zcl_abapgit_data_injector.clas.xml
index fb600490f..4a26f50c6 100644
--- a/src/data/zcl_abapgit_data_injector.clas.xml
+++ b/src/data/zcl_abapgit_data_injector.clas.xml
@@ -5,7 +5,7 @@
ZCL_ABAPGIT_DATA_INJECTOR
E
- abapGit - Data injector
+ abapGit - Data Injector
1
X
X
diff --git a/src/data/zcl_abapgit_data_serializer.clas.abap b/src/data/zcl_abapgit_data_serializer.clas.abap
index 0d68b1b82..f11d85a77 100644
--- a/src/data/zcl_abapgit_data_serializer.clas.abap
+++ b/src/data/zcl_abapgit_data_serializer.clas.abap
@@ -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 TYPE ANY TABLE.
- FIELD-SYMBOLS TYPE any.
ASSIGN ir_data->* TO .
- LOOP AT ASSIGNING .
- cl_abap_container_utilities=>fill_container_c(
- EXPORTING
- im_value =
- 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 = ).
+ 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: 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 .
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.
diff --git a/src/data/zcl_abapgit_data_utils.clas.abap b/src/data/zcl_abapgit_data_utils.clas.abap
new file mode 100644
index 000000000..77defd8e3
--- /dev/null
+++ b/src/data/zcl_abapgit_data_utils.clas.abap
@@ -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.
diff --git a/src/data/zcl_abapgit_data_utils.clas.xml b/src/data/zcl_abapgit_data_utils.clas.xml
new file mode 100644
index 000000000..46a8a851e
--- /dev/null
+++ b/src/data/zcl_abapgit_data_utils.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ ZCL_ABAPGIT_DATA_UTILS
+ E
+ abapGit - Data Utils
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/data/zif_abapgit_data_config.intf.abap b/src/data/zif_abapgit_data_config.intf.abap
index fbc6d9f4c..0e09248a6 100644
--- a/src/data/zif_abapgit_data_config.intf.abap
+++ b/src/data/zif_abapgit_data_config.intf.abap
@@ -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
diff --git a/src/data/zif_abapgit_data_deserializer.intf.abap b/src/data/zif_abapgit_data_deserializer.intf.abap
index 8ca8a949c..17de4579d 100644
--- a/src/data/zif_abapgit_data_deserializer.intf.abap
+++ b/src/data/zif_abapgit_data_deserializer.intf.abap
@@ -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.
diff --git a/src/ui/zcl_abapgit_gui_page_data.clas.abap b/src/ui/zcl_abapgit_gui_page_data.clas.abap
new file mode 100644
index 000000000..4a1910c41
--- /dev/null
+++ b/src/ui/zcl_abapgit_gui_page_data.clas.abap
@@ -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.
diff --git a/src/ui/zcl_abapgit_gui_page_data.clas.xml b/src/ui/zcl_abapgit_gui_page_data.clas.xml
new file mode 100644
index 000000000..76072f3ad
--- /dev/null
+++ b/src/ui/zcl_abapgit_gui_page_data.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ ZCL_ABAPGIT_GUI_PAGE_DATA
+ E
+ GUI - Data
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/ui/zcl_abapgit_gui_page_repo_view.clas.abap b/src/ui/zcl_abapgit_gui_page_repo_view.clas.abap
index f1e7105a6..0d2b1f9b9 100644
--- a/src/ui/zcl_abapgit_gui_page_repo_view.clas.abap
+++ b/src/ui/zcl_abapgit_gui_page_repo_view.clas.abap
@@ -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.