folder support, close #5

objects will now serialize to the correct packages, which will be created automatically
This commit is contained in:
larshp 2016-05-31 11:49:16 +00:00
parent 5e87c81f6a
commit 80f03391c0

View File

@ -3,7 +3,7 @@ REPORT zabapgit.
* See http://www.abapgit.org
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.9.18'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.10.0'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)
@ -2651,6 +2651,13 @@ CLASS lcl_diff IMPLEMENTATION.
METHOD map_beacons.
DEFINE _add_regex.
CREATE OBJECT lo_regex
EXPORTING pattern = &1
ignore_case = abap_true.
APPEND lo_regex TO lt_regex_set.
END-OF-DEFINITION.
DATA: lv_beacon TYPE i,
lv_offs TYPE i,
lv_code_line TYPE string,
@ -2659,12 +2666,6 @@ CLASS lcl_diff IMPLEMENTATION.
FIELD-SYMBOLS: <ls_diff> LIKE LINE OF mt_diff.
DEFINE _add_regex.
CREATE OBJECT lo_regex
EXPORTING pattern = &1
ignore_case = abap_true.
APPEND lo_regex TO lt_regex_set.
END-OF-DEFINITION.
_add_regex '^\s*(CLASS|FORM|MODULE|REPORT)\s'.
_add_regex '^\s*START-OF-'.
@ -13144,6 +13145,13 @@ CLASS lcl_objects DEFINITION FINAL.
IMPORTING it_results TYPE lcl_file_status=>ty_results_tt
RETURNING VALUE(rt_results) TYPE lcl_file_status=>ty_results_tt.
CLASS-METHODS
path_to_package
IMPORTING iv_top TYPE devclass
iv_path TYPE string
RETURNING VALUE(rv_package) TYPE devclass
RAISING lcx_exception.
CLASS-METHODS class_name
IMPORTING is_item TYPE ty_item
RETURNING VALUE(rv_class_name) TYPE string.
@ -13314,18 +13322,30 @@ ENDCLASS. "lcl_tadir IMPLEMENTATION
CLASS lcl_sap_package DEFINITION FINAL.
PUBLIC SECTION.
TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY.
CLASS-METHODS:
check
IMPORTING io_log TYPE REF TO lcl_log
it_results TYPE lcl_file_status=>ty_results_tt
iv_start TYPE string
iv_top TYPE devclass,
list_subpackages IMPORTING iv_package TYPE devclass
RETURNING VALUE(rt_list) TYPE ty_devclass_tt,
create_local
IMPORTING iv_package TYPE devclass
RAISING lcx_exception,
create
IMPORTING is_package TYPE scompkdtln
RAISING lcx_exception.
RETURNING VALUE(ri_package) TYPE REF TO if_package
RAISING lcx_exception,
create_child
IMPORTING iv_parent TYPE devclass
iv_child TYPE devclass
RAISING lcx_exception,
exists
IMPORTING iv_package TYPE devclass
RETURNING VALUE(rv_bool) TYPE abap_bool.
PRIVATE SECTION.
CLASS-METHODS:
@ -13599,11 +13619,57 @@ CLASS lcl_sap_package IMPLEMENTATION.
ENDMETHOD. "check
METHOD exists.
cl_package_factory=>load_package(
EXPORTING
i_package_name = iv_package
EXCEPTIONS
object_not_existing = 1
unexpected_error = 2
intern_err = 3
no_access = 4
object_locked_and_modified = 5 ).
rv_bool = boolc( sy-subrc <> 1 ).
ENDMETHOD.
METHOD create_child.
DATA: li_parent TYPE REF TO if_package,
ls_child TYPE scompkdtln.
cl_package_factory=>load_package(
EXPORTING
i_package_name = iv_parent
IMPORTING
e_package = li_parent
EXCEPTIONS
object_not_existing = 1
unexpected_error = 2
intern_err = 3
no_access = 4
object_locked_and_modified = 5 ).
IF sy-subrc <> 0.
_raise 'error reading parent package'.
ENDIF.
ls_child-devclass = iv_child.
ls_child-ctext = iv_child.
ls_child-parentcl = iv_parent.
ls_child-component = li_parent->transport_layer.
ls_child-as4user = sy-uname.
create( ls_child ).
ENDMETHOD.
METHOD create.
DATA: lv_err TYPE string,
ls_package LIKE is_package,
li_package TYPE REF TO if_package.
li_super TYPE REF TO if_package,
ls_package LIKE is_package.
ASSERT NOT is_package-devclass IS INITIAL.
@ -13628,7 +13694,7 @@ CLASS lcl_sap_package IMPLEMENTATION.
i_reuse_deleted_object = abap_true
* i_suppress_dialog = abap_true " does not exist in 730
IMPORTING
e_package = li_package
e_package = ri_package
CHANGING
c_package_data = ls_package
EXCEPTIONS
@ -13659,7 +13725,26 @@ CLASS lcl_sap_package IMPLEMENTATION.
_raise lv_err.
ENDIF.
li_package->save(
* IF NOT ls_package-pdevclass IS INITIAL.
* cl_package_factory=>load_package(
* EXPORTING
* i_package_name = is_package-pdevclass
* IMPORTING
* e_package = li_super
* EXCEPTIONS
* object_not_existing = 1
* unexpected_error = 2
* intern_err = 3
* no_access = 4
* object_locked_and_modified = 5 ).
* IF sy-subrc <> 0.
* _raise 'error reading super package'.
* ENDIF.
* ri_package->set_super_package_name( PARENTCL ).
* ENDIF.
ri_package->save(
* EXPORTING
* i_suppress_dialog = abap_true " Controls whether popups can be transmitted
EXCEPTIONS
@ -13676,6 +13761,25 @@ CLASS lcl_sap_package IMPLEMENTATION.
_raise lv_err.
ENDIF.
ri_package->set_changeable( abap_false ).
ENDMETHOD.
METHOD list_subpackages.
DATA: lt_list LIKE rt_list,
lv_devclass LIKE LINE OF rt_list.
SELECT devclass INTO TABLE rt_list
FROM tdevc WHERE parentcl = iv_package.
* note the recursion, since packages are added to the list
LOOP AT rt_list INTO lv_devclass.
lt_list = list_subpackages( lv_devclass ).
APPEND LINES OF lt_list TO rt_list.
ENDLOOP.
ENDMETHOD.
METHOD create_local.
@ -13685,7 +13789,7 @@ CLASS lcl_sap_package IMPLEMENTATION.
ls_package-devclass = iv_package.
ls_package-ctext = iv_package.
ls_package-pdevclass = '$TMP'.
ls_package-parentcl = '$TMP'.
ls_package-component = 'LOCAL'.
ls_package-as4user = sy-uname.
@ -13807,16 +13911,23 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD update_package_tree.
DATA: lv_tree TYPE dirtree-tname.
DATA: lt_packages TYPE lcl_sap_package=>ty_devclass_tt,
lv_package LIKE LINE OF lt_packages,
lv_tree TYPE dirtree-tname.
lt_packages = lcl_sap_package=>list_subpackages( iv_package ).
APPEND iv_package TO lt_packages.
LOOP AT lt_packages INTO lv_package.
* update package tree for SE80
lv_tree = 'EU_' && iv_package.
lv_tree = 'EU_' && lv_package.
CALL FUNCTION 'WB_TREE_ACTUALIZE'
EXPORTING
tree_name = lv_tree
without_crossreference = abap_true
with_tcode_index = abap_true.
ENDLOOP.
ENDMETHOD. "update_package_tree
@ -13928,6 +14039,28 @@ CLASS lcl_objects IMPLEMENTATION.
ENDMETHOD. "exists
METHOD path_to_package.
DATA: lv_length TYPE i.
CONCATENATE iv_top iv_path INTO rv_package.
TRANSLATE rv_package USING '/_'.
lv_length = strlen( rv_package ) - 1.
rv_package = rv_package(lv_length).
TRANSLATE rv_package TO UPPER CASE.
IF lcl_sap_package=>exists( rv_package ) = abap_false.
lcl_sap_package=>create_child( iv_parent = iv_top
iv_child = rv_package ).
ENDIF.
ENDMETHOD.
METHOD class_name.
CONCATENATE 'LCL_OBJECT_' is_item-obj_type INTO rv_class_name. "#EC NOTEXT
@ -14190,12 +14323,14 @@ CLASS lcl_objects IMPLEMENTATION.
TYPES: BEGIN OF ty_late,
obj TYPE REF TO lif_object,
xml TYPE REF TO lcl_xml_input,
package TYPE devclass,
END OF ty_late.
DATA: ls_item TYPE ty_item,
lv_cancel TYPE abap_bool,
li_obj TYPE REF TO lif_object,
lt_remote TYPE ty_files_tt,
lv_package TYPE devclass,
lo_files TYPE REF TO lcl_objects_files,
lo_xml TYPE REF TO lcl_xml_input,
lt_results TYPE lcl_file_status=>ty_results_tt,
@ -14251,14 +14386,18 @@ CLASS lcl_objects IMPLEMENTATION.
li_obj->mo_files = lo_files.
lv_package = path_to_package( iv_top = io_repo->get_package( )
iv_path = <ls_result>-path ).
IF li_obj->get_metadata( )-late_deser = abap_true.
APPEND INITIAL LINE TO lt_late ASSIGNING <ls_late>.
<ls_late>-obj = li_obj.
<ls_late>-xml = lo_xml.
<ls_late>-package = lv_package.
CONTINUE.
ENDIF.
li_obj->deserialize( iv_package = io_repo->get_package( )
li_obj->deserialize( iv_package = lv_package
io_xml = lo_xml ).
ENDLOOP.
@ -14266,7 +14405,7 @@ CLASS lcl_objects IMPLEMENTATION.
lcl_objects_activation=>activate( ).
LOOP AT lt_late ASSIGNING <ls_late>.
<ls_late>-obj->deserialize( iv_package = io_repo->get_package( )
<ls_late>-obj->deserialize( iv_package = <ls_late>-package
io_xml = <ls_late>-xml ).
ENDLOOP.
@ -20053,7 +20192,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
lx_error TYPE REF TO lcx_exception,
lo_log TYPE REF TO lcl_log.
FIELD-SYMBOLS <item> TYPE ty_repo_item.
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
CREATE OBJECT ro_html.
@ -20074,8 +20214,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
&& '<center>Empty package</center>'
&& '</td></tr>' ) ##NO_TEXT.
ELSE.
LOOP AT lt_repo_items ASSIGNING <item>.
ro_html->add( render_repo_item( io_repo = io_repo is_item = <item> ) ).
LOOP AT lt_repo_items ASSIGNING <ls_item>.
ro_html->add( render_repo_item( io_repo = io_repo is_item = <ls_item> ) ).
ENDLOOP.
ENDIF.
@ -20359,7 +20499,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
ENDIF.
IF iv_target_package IS NOT INITIAL AND iv_target_package <> lv_package.
lv_err = |Installation to package { lv_package } detected. Cancelling installation|.
lv_err = |Installation to package { lv_package
} detected. Cancelling installation|.
_raise lv_err.
ENDIF.