abapGit/src/objects/zcl_abapgit_object_wdya.clas.abap
Lars Hvam f14ac831ba
Objects to global (#1187)
* add global classes for objects

* fix metadata

* comment old code

fix serializer class
move missing interfaces

* keep objects and bridge as local

* fix syntax errors

and remove SICF -> tadir dependency, instead tadir -> SICF

* remove dependency TABL -> lcl_popups

* fix indentation

* remove old includes

* fix parser errors

* fix deserializing
2018-02-11 09:16:16 +01:00

229 lines
6.5 KiB
ABAP

CLASS zcl_abapgit_object_wdya DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
ALIASES mo_files FOR zif_abapgit_object~mo_files.
PRIVATE SECTION.
METHODS read
EXPORTING es_app TYPE wdy_application
et_properties TYPE wdy_app_property_table
RAISING zcx_abapgit_exception.
METHODS save
IMPORTING is_app TYPE wdy_application
it_properties TYPE wdy_app_property_table
iv_package TYPE devclass
RAISING zcx_abapgit_exception.
ENDCLASS.
CLASS zcl_abapgit_object_wdya IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~changed_by.
DATA: li_app TYPE REF TO if_wdy_md_application,
ls_app TYPE wdy_application,
lv_name TYPE wdy_application_name.
lv_name = ms_item-obj_name.
TRY.
li_app = cl_wdy_md_application=>get_object_by_key(
name = lv_name
version = 'A' ).
li_app->if_wdy_md_object~get_definition( IMPORTING definition = ls_app ).
IF ls_app-changedby IS INITIAL.
rv_user = ls_app-author.
ELSE.
rv_user = ls_app-changedby.
ENDIF.
CATCH cx_root.
rv_user = c_user_unknown.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~exists.
DATA: lv_name TYPE wdy_application_name.
lv_name = ms_item-obj_name.
TRY.
cl_wdy_md_application=>get_object_by_key(
name = lv_name
version = 'A' ).
rv_bool = abap_true.
CATCH cx_wdy_md_not_existing.
rv_bool = abap_false.
CATCH cx_wdy_md_permission_failure.
zcx_abapgit_exception=>raise( 'WDYA, permission failure' ).
ENDTRY.
ENDMETHOD. "zif_abapgit_object~exists
METHOD read.
DATA: li_app TYPE REF TO if_wdy_md_application,
li_map TYPE REF TO if_object_map,
lo_prop TYPE REF TO cl_wdy_md_application_property,
ls_prop LIKE LINE OF et_properties,
lv_name TYPE wdy_application_name.
CLEAR es_app.
CLEAR et_properties.
lv_name = ms_item-obj_name.
TRY.
li_app = cl_wdy_md_application=>get_object_by_key(
name = lv_name
version = 'A' ).
CATCH cx_wdy_md_not_existing.
RETURN.
CATCH cx_wdy_md_permission_failure.
zcx_abapgit_exception=>raise( 'WDYA, permission failure' ).
ENDTRY.
li_app->if_wdy_md_object~get_definition( IMPORTING definition = es_app ).
CLEAR: es_app-author,
es_app-createdon,
es_app-changedby,
es_app-changedon.
li_map = li_app->get_properties( ).
DO li_map->size( ) TIMES.
lo_prop ?= li_map->get_by_position( sy-index ).
lo_prop->get_definition( IMPORTING definition = ls_prop ).
APPEND ls_prop TO et_properties.
ENDDO.
ENDMETHOD. "read
METHOD zif_abapgit_object~serialize.
DATA: ls_app TYPE wdy_application,
lt_properties TYPE wdy_app_property_table.
read( IMPORTING es_app = ls_app
et_properties = lt_properties ).
io_xml->add( iv_name = 'APP'
ig_data = ls_app ).
io_xml->add( iv_name = 'PROPERTIES'
ig_data = lt_properties ).
ENDMETHOD. "serialize
METHOD save.
DATA: li_prop TYPE REF TO if_wdy_md_application_property,
lo_app TYPE REF TO cl_wdy_md_application.
FIELD-SYMBOLS: <ls_property> LIKE LINE OF it_properties.
TRY.
CREATE OBJECT lo_app
EXPORTING
name = is_app-application_name
definition = is_app
devclass = iv_package.
LOOP AT it_properties ASSIGNING <ls_property>.
li_prop = lo_app->if_wdy_md_application~create_property( <ls_property>-name ).
li_prop->set_value( <ls_property>-value ).
ENDLOOP.
tadir_insert( iv_package ).
lo_app->if_wdy_md_lockable_object~save_to_database( ).
CATCH cx_wdy_md_exception.
zcx_abapgit_exception=>raise( 'error saving WDYA' ).
ENDTRY.
ENDMETHOD. "save
METHOD zif_abapgit_object~deserialize.
DATA: ls_app TYPE wdy_application,
lt_properties TYPE wdy_app_property_table.
io_xml->read( EXPORTING iv_name = 'APP'
CHANGING cg_data = ls_app ).
io_xml->read( EXPORTING iv_name = 'PROPERTIES'
CHANGING cg_data = lt_properties ).
save( is_app = ls_app
it_properties = lt_properties
iv_package = iv_package ).
ENDMETHOD. "deserialize
METHOD zif_abapgit_object~delete.
DATA: li_app TYPE REF TO if_wdy_md_application,
lv_objkey TYPE wdy_wb_appl_name,
lv_type TYPE seu_type,
lv_name TYPE wdy_application_name.
lv_name = ms_item-obj_name.
TRY.
li_app = cl_wdy_md_application=>get_object_by_key(
name = lv_name
version = 'A' ).
li_app->if_wdy_md_object~delete( ).
li_app->if_wdy_md_lockable_object~save_to_database( ).
* method save_to_database calls function module TR_TADIR_INTERFACE
* with test mode = X, so it does not delete the TADIR entry.
* Instead the standard code uses RS_TREE_OBJECT_PLACEMENT to delete
* the TADIR entry
lv_objkey = ms_item-obj_name.
CONCATENATE 'O' swbm_c_type_wdy_application INTO lv_type.
CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT'
EXPORTING
object = lv_objkey
type = lv_type
operation = 'DELETE'.
CATCH cx_wdy_md_not_existing.
RETURN.
CATCH cx_wdy_md_exception.
zcx_abapgit_exception=>raise( 'WDYA, error deleting' ).
ENDTRY.
ENDMETHOD. "delete
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = ms_item-obj_type
in_new_window = abap_true.
ENDMETHOD. "jump
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_wdya IMPLEMENTATION